{
  "contractName": "IERC20Permit_MVOStaking",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/MVOStaking.sol\":\"IERC20Permit_MVOStaking\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/MVOStaking.sol\":{\"keccak256\":\"0x31daad17c94ba367cebf9554d0ed55e13b550c6286a0dc46e36ed22ab23db2fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d6081bd209a4688cc269f643f4d47993d2245b5263ec7255e7aaee5b9abce5\",\"dweb:/ipfs/Qmf3BAmFawPPivdRn534VGrhejVQbyVJhP3bbGnKfTn3SK\"]},\"project:/contracts/ReentrancyGuard.sol\":{\"keccak256\":\"0x6a42732aa0a681892f66e5f7b3b3075444378bf937c8e93661df5e7443c5c3dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://778a2ee1360d2ace549ac0f283ccf3f7279bdff8876fdc037c4bcad012652717\",\"dweb:/ipfs/QmTrnghLT57Y3jD9yNR3fycronEc9nVuYEjzxnYtJpjX1F\"]},\"project:/contracts/SafeTransferLib.sol\":{\"keccak256\":\"0xb0500234799f59758b44c78ed63166f2b64a5d8c0c19024fd85208508656164f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f66a271b4ebee7032c91876874f54773a35955249b912621c7321502a365d417\",\"dweb:/ipfs/QmVkYb24oB8BKCebkrQG6eNubX55eUDsyFF7vNTepFjLPi\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.18;\r\n\r\n// This file is strictly provided as-is\r\n// without any express or implied guarantees, representations, or warranties\r\n// as to this file or any deployments hereof.\r\n\r\n// Any users of these files are doing so at their own risk.\r\n\r\n/// @notice contains all of the MVO staking storage and logic\r\n/// @dev address(this) must be passed to updateMinterStatus() in the $ENSHROUD token contract by a minter\r\n\r\n// Solbase ReentrancyGuard (https://github.com/Sol-DAO/solbase/blob/main/src/utils/ReentrancyGuard.sol)\r\nimport {ReentrancyGuard} from \"./ReentrancyGuard.sol\";\r\n\r\n// Solbase SafeTransferLib (https://github.com/Sol-DAO/solbase/blob/main/src/utils/SafeTransferLib.sol)\r\nimport {SafeTransferLib} from \"./SafeTransferLib.sol\";\r\n\r\n// used for Enshroud Token\r\ninterface IERC20Permit_MVOStaking {\r\n    function mint(address _to, uint256 _value) external;\r\n\r\n    function permit(\r\n        address owner,\r\n        address spender,\r\n        uint256 value,\r\n        uint256 deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external;\r\n}\r\n\r\ninterface IEnshroudProtocol_MVOStaking {\r\n    // getter for public 'adminStatus[]' mapping\r\n    function adminStatus(address addr) external view returns (bool);\r\n}\r\n\r\ncontract MVOStaking is ReentrancyGuard {\r\n    using SafeTransferLib for address;\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                        TYPES AND STATE VARIABLES\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    /// @notice 'listenURI' represents the web2 URI at which dApp users can contact this MVO (note this is typically an http proxy endpoint)\r\n    /// @notice 'stakingAddress' is the EOA from which the MVO's owner stakes tokens in this contract, and receives mints when claiming rewards\r\n\t/// @notice 'signingAddress' corresponds to the privkey with which this MVO signs OperationsBlocks, allowing sig verification by peers and dApps\r\n\t/// @notice 'encrPubkey' is the public key used to faciliate ECIES encryption between dApp users and the MVO\r\n\t/// @notice 'stakingQuantum' is the amount staked by stakingAddress in this contract\r\n\t/// @notice 'memberPoolId' is updated when the MVO joins or creates a pool\r\n\t/// @notice 'rating' is initially unused in this contract, but may be used for purposes such as slashing in conjunction with 'reducePoints()', offchain reputation trackers, etc.\r\n\t/// @notice 'active' is an administrative enable/shutoff switch\r\n\t/// @notice except for stakingQuantum and memberPoolId, all of these values can be configured only by admins\r\n    struct MVO {\r\n        string listenURI;\r\n        address payable stakingAddress;\r\n        address signingAddress;\r\n        string encrPubkey;\r\n        uint256 stakingQuantum;\r\n        uint120 memberPoolId;\r\n        uint120 rating;\r\n        bool active;\r\n    }\r\n\r\n\t/// @notice the 'poolAddress' will match the stakingAddress of the creator\r\n    struct MVOPool {\r\n        address payable poolAddress;\r\n        uint96 dues;\r\n    }\r\n\r\n\t/// types to distinguish Requests\r\n\tenum ApprovalTypes { MinStake, Protocol, PointsBot }\r\n\r\n    /// @notice to track admin update requests; addresses truncated to bytes8 for size/gas considerations\r\n    struct Requests {\r\n        bytes8 requester1;\r\n        bytes8 requester2;\r\n\t\tApprovalTypes requestType;\r\n    }\r\n\r\n\t/// @notice mirrors Timelock{} in TimelockManager and DAOPool contracts\r\n    struct Timelock {\r\n        uint256 totalAmount;\r\n        uint256 remainingAmount;\r\n        uint128 releaseStart;\r\n        uint128 releaseEnd;\r\n    }\r\n\r\n    /// @notice constant variable for ETH mainnet: approximated via 7150 blocks/day, 365 days per year\r\n    /// @dev this must be altered for deployments on other chains\r\n    uint256 internal constant BLOCKS_PER_YEAR = 2609750;\r\n    /// @dev 18 decimal token calculations\r\n    uint256 internal constant DECIMALS = 1e18;\r\n\r\n    /// @notice $ENSHROUD token contract address, immutable\r\n    address public immutable enshroudToken;\r\n    /// @notice block starting point for epoch calculations\r\n    uint256 public immutable genesisBlock;\r\n    /// @notice immutable interface for 'enshroudToken'\r\n    IERC20Permit_MVOStaking internal immutable iEnshroudToken;\r\n    /// @notice TimelockManager contract address\r\n    address public immutable timelockManager;\r\n\r\n    /// @notice Enshroud protocol addresses (to support V1, V2, etc.)\r\n    address[] public enshroudProtocols;\r\n\t/// @notice counter for enshroudProtocols array, set to index of latest deployed Enshroud protocol\r\n\tuint256 public protoIndex;\r\n\r\n    /// @notice hash of off-chain codebase (i.e. MVO/Auditor node) location, or codebase in its entirety, for user verification. Provided by admin.\r\n    bytes32 public codeHash;\r\n\r\n    /// @notice minimum amount of stake required for an active MVO\r\n    uint256 public minStake;\r\n    /// @notice counter for 'mvoIds' array index via 'mvoIdsIndex' mapping\r\n    uint256 public mvoIndex;\r\n    /// @notice total amount of staked tokens, used to calculate relative staking amount for a given MVO in selection mechanism\r\n    uint256 public totalStake;\r\n    /// @notice total amount of awarded points outstanding, used to calculate relative pointsBalance for a given MVO when claiming reward mint\r\n    uint256 public totalPoints;\r\n\t/// @notice address used by bot that imports points awarded on other chains\r\n\taddress internal pointsBot;\r\n    /// @notice for the MVO selection algorithm\r\n    string[] public mvoIds;\r\n\t/// @notice used for tracking state of update*() invocations\r\n    mapping(address => Requests) internal updateRequested;\r\n    /// @notice MVO staking address mapped to current points balance\r\n    mapping(address => uint256) public pointsBalance;\r\n    /// @notice maps an mvoId to its index number ('mvoIndex') in the 'mvoIds' array\r\n    mapping(string => uint256) public mvoIdsIndex;\r\n    /// @notice maps an MVO's mvoId to corresponding MVO struct\r\n    mapping(string => MVO) public idToMVO;\r\n    /// @notice maps year to the amount of MVO incentive tokens remaining for reward mint in such year\r\n    mapping(uint256 => uint256) public yearToTokensRemaining;\r\n    /// @notice maps an MVOPoolId to its corresponding MVOPool struct\r\n    mapping(uint256 => MVOPool) public idToMVOPool;\r\n    /// @notice maps a timelock beneficiary address to their Timelock struct\r\n    mapping(address => Timelock) public timelocks;\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            EVENTS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    event CodeHashChanged(bytes32 newCodeHash);\r\n\r\n    event MinimumStakeUpdated(uint256 newMinStake);\r\n\r\n    event MVOPoolCreated(uint256 poolId, uint256 dues, string creatorMvoID);\r\n\r\n    event MVOPoolDeleted(uint256 poolId, string creatorMvoID);\r\n\r\n    event MVOStakeUpdated(string mvoID, uint256 stakingQuantum);\r\n\r\n    event MVOStaking_ProtocolUpdated(address newProtocol);\r\n\r\n    event MVOStaking_Staked(\r\n        address indexed sender,\r\n        uint256 amount,\r\n        uint256 blockNumber\r\n    );\r\n\r\n    event MVOStaking_Unstaked(\r\n        address indexed sender,\r\n        uint256 amount,\r\n        uint256 blockNumber\r\n    );\r\n\r\n    event MVOStatusChanged(string mvoID, MVO updatedMVO, uint256 chainId);\r\n\r\n    event PointsAwarded(address indexed mvoAddress, uint256 points, uint256 chainId);\r\n\r\n\tevent PointsBotUpdated(address botAddress);\r\n\r\n    event PointsReduced(address indexed mvoAddress, uint256 points);\r\n\r\n    event PoolMembershipUpdated(\r\n        uint256 indexed newPoolId,\r\n        uint256 oldPoolId,\r\n        string memberMvoID\r\n    );\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            MODIFIERS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n\t/// @notice guarantees caller is an admin in the last-deployed EnshroudProtocol\r\n    modifier onlyAdmin() {\r\n\t\tif (\r\n\t\t\t!IEnshroudProtocol_MVOStaking(enshroudProtocols[protoIndex-1])\r\n\t\t\t\t.adminStatus(msg.sender)\r\n\t\t) revert NotAdmin();\r\n        _;\r\n    }\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            ERRORS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    error AmountLargerThanBalance();\r\n    error AmountLargerThanStake();\r\n    error AmountLargerThanWithdrawable();\r\n    error DuesTooLarge();\r\n    error IDAlreadyInUse();\r\n    error IDAndMsgSenderMismatch();\r\n    error IncorrectSigLength();\r\n    error InvalidChainId();\r\n    error InvalidSignature();\r\n    error LengthMismatch();\r\n    error MintPeriodExpired();\r\n    error NotActiveMVO();\r\n    error NotAdmin();\r\n    error OnlyPointsRobot();\r\n    error OnlyProtocolContract();\r\n    error OnlyTimelockManager();\r\n    error PoolDoesNotExist();\r\n    error UnclaimedPoints();\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            FUNCTIONS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    /// @param _enshroudProtocol: Enshroud Protocol contract address\r\n    /// @param _enshroudToken: $ENSHROUD token contract address. Immutable.\r\n    /// @param _timelockManager: contract address for $ENSHROUD token timelock manager. Immutable.\r\n    /// @param _minStake: initial minimum staked amount of enshroudToken required for a signing MVO\r\n    constructor(\r\n        address _enshroudProtocol,\r\n        address _enshroudToken,\r\n        address _timelockManager,\r\n        uint256 _minStake\r\n    ) payable {\r\n        enshroudProtocols.push(_enshroudProtocol);\r\n\t\tprotoIndex = 1;\r\n        enshroudToken = _enshroudToken;\r\n        timelockManager = _timelockManager;\r\n        iEnshroudToken = IERC20Permit_MVOStaking(_enshroudToken);\r\n        minStake = _minStake;\r\n\r\n        // stored to calculate mint amounts according to incentive schedule\r\n        genesisBlock = block.number;\r\n\r\n        // 5 million token reward incentive for year 1, 4 million for year 2, 3 million for year 3, 2 million for year 4, 1 million for year 5\r\n        yearToTokensRemaining[1] = 5000000 * DECIMALS;\r\n        yearToTokensRemaining[2] = 4000000 * DECIMALS;\r\n        yearToTokensRemaining[3] = 3000000 * DECIMALS;\r\n        yearToTokensRemaining[4] = 2000000 * DECIMALS;\r\n        yearToTokensRemaining[5] = 1000000 * DECIMALS;\r\n    }\r\n\r\n    /// @notice award a lead MVO (3 points) and committee MVOs (1 point each) for each processed transaction, only callable by the protocol contract\r\n    /// @dev uses idToMVO mapping to determine the committee MVO staking addresses; sigs not currently checked since only enshroudProtocol can call this method, and every invocation is preceeded by a call to checkMVOSig(); Reentrant-protected by each function in EnshroudProtocol which is able to call this function\r\n    /// @param _mvoIDs: IDs of MVOs for the transaction\r\n    function awardPoints(\r\n        string[] calldata _mvoIDs\r\n    ) external {\r\n\t\t/// @dev guarantee caller is in the array of deployed enshroudProtocols\r\n\t\tbool notProtocol = true;\r\n\t\t// @dev loop runs backwards to advantage latest protocol re gas usage\r\n\t\tfor (uint256 pIdx = enshroudProtocols.length; pIdx > 0; pIdx--) {\r\n\t\t\tif (msg.sender == enshroudProtocols[pIdx-1]) {\r\n\t\t\t\tnotProtocol = false;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n        if (notProtocol) revert OnlyProtocolContract();\r\n\r\n        MVO storage _leadMVO = idToMVO[_mvoIDs[0]];\r\n        unchecked {\r\n            pointsBalance[_leadMVO.stakingAddress] += 3;\r\n            totalPoints += 3;\r\n        }\r\n\r\n        /// @dev MVO will be able to claim tokens with their 'pointsBalance' via their 'stakingAddress', but note operations block sigs are made with 'signingAddress'.\r\n        /// Start at [1] as [0] (lead MVO) was already handled above. Array length limited in protocol contract.\r\n        for (uint256 i = 1; i < _mvoIDs.length; ) {\r\n            address _stakeAddr = idToMVO[_mvoIDs[i]].stakingAddress;\r\n            unchecked {\r\n                ++pointsBalance[_stakeAddr];\r\n                ++totalPoints;\r\n                ++i;\r\n            }\r\n            emit PointsAwarded(_stakeAddr, 1, block.chainid);\r\n        }\r\n        emit PointsAwarded(_leadMVO.stakingAddress, 3, block.chainid);\r\n    }\r\n\r\n\t/// @notice this method is only relevant on Eth mainnet, callable by bot\r\n\t/// @dev used to migrate points earned by MVOs on other chains to mainnet where staking and point claims actually take place\r\n\t/// @param _chainId: the chain the bot is importing the points from\r\n\t/// @param _mvoIDs: IDs of MVOs for which points are being imported\r\n\t/// @param _points: number of points for each listed MVO\r\n\tfunction importPoints(\r\n\t\tuint256 _chainId,\r\n\t\tstring[] calldata _mvoIDs,\r\n\t\tuint256[] calldata _points\r\n\t) external nonReentrant {\r\n\t\t/// @dev guarantee caller is the duly authorized point import bot\r\n\t\tif (msg.sender != pointsBot) revert OnlyPointsRobot();\r\n\t\tif (_chainId == block.chainid || _chainId == 0) revert InvalidChainId();\r\n\t\tif (_mvoIDs.length == 0 || _mvoIDs.length != _points.length) {\r\n\t\t\trevert LengthMismatch();\r\n\t\t}\r\n\t\t// add points to all provided MVOs if they are valid\r\n\t\tfor (uint256 i = 0; i < _mvoIDs.length; ) {\r\n        \tMVO storage _mvo = idToMVO[_mvoIDs[i]];\r\n\t\t\taddress _stakeAddr = _mvo.stakingAddress;\r\n\t\t\t/// @dev we do not check _mvo.active to allow import of points accrued elsewhere prior to deactivation\r\n\t\t\tif (_stakeAddr == address(0)) revert NotActiveMVO();\r\n\t\t\tunchecked {\r\n\t\t\t\t// points are small values and are cleared periodically, therefore won't overflow on human timelines\r\n\t\t\t\tpointsBalance[_stakeAddr] += _points[i];\r\n\t\t\t\ttotalPoints += _points[i];\r\n\t\t\t\temit PointsAwarded(_stakeAddr, _points[i], _chainId);\r\n\t\t\t\t++i;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n    /// @notice an admin can slash points from an MVO for impropriety; also may be used for points redemption mechanisms for MVO reward schemes beyond the 5 year hardcoded rewards\r\n    /* @dev this method does not affect the MVO's struct; for alterations to an MVO's struct information, 'updateMvoStatus()' should be used;\r\n     * single admin used here (1) for ease and reversibility of any malicious or mistaken update, and (2) so a single contract address may affect points balances in future,\r\n     * such as a custom points slashing or redemption contract implementation */\r\n    /// @param _mvoID: ID of MVO whose points are being reduced\r\n    /// @param _points: amount of points being subtracted from the relevant MVO's 'pointsBalance'\r\n    function reducePoints(\r\n        string calldata _mvoID,\r\n        uint256 _points\r\n    ) external onlyAdmin {\r\n        address _stakingAddr = idToMVO[_mvoID].stakingAddress;\r\n        if (pointsBalance[_stakingAddr] < _points)\r\n            revert AmountLargerThanBalance();\r\n        // will not revert due to preceding 'pointsBalance[]' condition check and the fact that no amount subtracted from 'totalPoints' can be larger than a single address's pointsBalance (see 'claim()')\r\n        unchecked {\r\n            pointsBalance[_stakingAddr] -= _points;\r\n            totalPoints -= _points;\r\n        }\r\n\r\n        emit PointsReduced(_stakingAddr, _points);\r\n    }\r\n\r\n    /// @notice for an MVO to claim their mint reward. Amount of reward is based on the ratio of msg.sender's 'pointsBalance[]' compared to 'totalPoints' at the time of claim, minus any pool dues\r\n    /// @dev entire 'pointsBalance' of msg.sender is redeemed - claiming a partial balance is not supported for efficiency as it is generally more advantageous to claim as soon as possible\r\n    /// @dev claimable mint amount updates linearly by block.number within each applicable year\r\n    /// @param _mvoID: MVO ID of msg.sender\r\n    function claim(string calldata _mvoID) external nonReentrant {\r\n        if (msg.sender != idToMVO[_mvoID].stakingAddress)\r\n            revert IDAndMsgSenderMismatch();\r\n        // '_poolId' == 0 if msg.sender is not in a pool\r\n        uint256 _poolId = idToMVO[_mvoID].memberPoolId;\r\n        uint256 _pointsAccrued = pointsBalance[msg.sender];\r\n        uint256 _index;\r\n        uint256 _blockDiff = block.number - genesisBlock;\r\n\r\n        // when five year incentive period is over, no tokens to claim\r\n        if (_blockDiff > BLOCKS_PER_YEAR * 5) revert MintPeriodExpired();\r\n        else if (_blockDiff <= BLOCKS_PER_YEAR) _index = 1;\r\n        else if (\r\n            _blockDiff > BLOCKS_PER_YEAR && _blockDiff <= BLOCKS_PER_YEAR * 2\r\n        ) _index = 2;\r\n        else if (\r\n            _blockDiff > BLOCKS_PER_YEAR * 2 &&\r\n            _blockDiff <= BLOCKS_PER_YEAR * 3\r\n        ) _index = 3;\r\n        else if (\r\n            _blockDiff > BLOCKS_PER_YEAR * 3 &&\r\n            _blockDiff <= BLOCKS_PER_YEAR * 4\r\n        ) _index = 4;\r\n        else if (\r\n            _blockDiff > BLOCKS_PER_YEAR * 4 &&\r\n            _blockDiff <= BLOCKS_PER_YEAR * 5\r\n        ) _index = 5;\r\n\r\n        // available mint amount = (tokens remaining to mint in applicable incentive year) * (blocks since start of year) / (blocks per year); equation below accounts for the year '_index'\r\n        // available mint pot therefore updates every block but incentivises early claiming (as per-block amount is constant, assuming number of MVOs grows and points are more broadly distributed as the year progresses)\r\n        // denominator will never be zero, as BLOCKS_PER_YEAR is constant and '_index' will revert above if == 0\r\n        uint256 _availableToMint = (yearToTokensRemaining[_index] *\r\n            _blockDiff) / (BLOCKS_PER_YEAR * _index);\r\n\r\n        // tokens earned by msg.sender is calculated by (at the time of 'claim()' call) the ratio of points accrued:total points times the total available mint\r\n        uint256 _earnedTokens = (_pointsAccrued * _availableToMint) /\r\n            totalPoints;\r\n\r\n        // subtract redeemed points from 'totalPoints' and reset 'pointsBalance[]' mapping for this msg.sender as all '_pointsAccrued' are redeemed\r\n        totalPoints -= _pointsAccrued;\r\n        delete pointsBalance[msg.sender];\r\n\r\n        // subtract minted tokens from amount reserved as MVO incentive for applicable year; will not underflow as the '_earnedTokens' calculation must result in <= 'yearToTokensRemaining[_index]'\r\n        yearToTokensRemaining[_index] -= _earnedTokens;\r\n\r\n        // '_dues' == 0 if msg.sender is not in a pool, as _poolId == 0 and idToMVOPool[0].dues is intentionally not initialized to keep default value of 0\r\n        uint256 _dues = (_earnedTokens * uint256(idToMVOPool[_poolId].dues)) /\r\n            DECIMALS;\r\n\r\n        // mint rewards\r\n        iEnshroudToken.mint(msg.sender, _earnedTokens - _dues);\r\n        if (_dues != 0)\r\n            iEnshroudToken.mint(idToMVOPool[_poolId].poolAddress, _dues);\r\n\r\n        emit PointsReduced(msg.sender, _pointsAccrued);\r\n    }\r\n\r\n    /// @notice for an MVO to stake their tokens; must first approve address(this) for '_amount'\r\n    /// @dev updates 'totalStake' and 'stakingQuantum' MVO struct member for msg.sender\r\n    /// @param _mvoID: MVO ID of msg.sender\r\n    /// @param _amount: amount to be staked\r\n    function stake(\r\n        string calldata _mvoID,\r\n        uint256 _amount\r\n    ) external nonReentrant {\r\n        if (msg.sender != idToMVO[_mvoID].stakingAddress)\r\n            revert IDAndMsgSenderMismatch();\r\n\r\n        totalStake += _amount;\r\n        idToMVO[_mvoID].stakingQuantum += _amount;\r\n\r\n        enshroudToken.safeTransferFrom(msg.sender, address(this), _amount);\r\n\r\n        emit MVOStaking_Staked(msg.sender, _amount, block.number);\r\n        emit MVOStakeUpdated(_mvoID, idToMVO[_mvoID].stakingQuantum);\r\n    }\r\n\r\n    /// @notice for an MVO to stake their tokens in this address using permit()\r\n    /// @dev updates 'totalStake' and 'stakingQuantum' MVO struct member for msg.sender\r\n    /// @param _mvoID: MVO ID of msg.sender\r\n    /// @param _amount: amount to be staked\r\n\t/// @param _deadline: block limit by which permit must be used\r\n    /// @param v - ECDSA sig param\r\n    /// @param r - ECDSA sig param\r\n    /// @param s - ECDSA sig param\r\n    function stakeWithPermit(\r\n        string calldata _mvoID,\r\n        uint256 _amount,\r\n\t\tuint256 _deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external nonReentrant {\r\n        if (msg.sender != idToMVO[_mvoID].stakingAddress)\r\n            revert IDAndMsgSenderMismatch();\r\n\r\n        totalStake += _amount;\r\n        idToMVO[_mvoID].stakingQuantum += _amount;\r\n\r\n        iEnshroudToken.permit(\r\n            msg.sender,\r\n            address(this),\r\n            _amount,\r\n            _deadline,\r\n            v,\r\n            r,\r\n            s\r\n        );\r\n\r\n        enshroudToken.safeTransferFrom(msg.sender, address(this), _amount);\r\n\r\n        emit MVOStaking_Staked(msg.sender, _amount, block.number);\r\n        emit MVOStakeUpdated(_mvoID, idToMVO[_mvoID].stakingQuantum);\r\n    }\r\n\r\n    /// @notice for the 'timelockManager' (by user calling 'withdrawTimelockToMVOStaking()' in TimelockManager contract) to stake $ENSHROUD tokens in this address on behalf of the timelock beneficiary ('_staker'), who is an MVO operator.\r\n    /// @dev updates 'totalStake' and 'stakingQuantum' MVO struct member for '_staker'\r\n\t/// @dev one timelock per '_staker' at a time, though a further amount may be added to 'timelocks[_staker]' if the MVO owner consolidates multiple timelocks.\r\n    /// nonReentrant modifier unnecessary here as it is already present in 'withdrawTimelockToMVOStaking()' in TimelockManager contract, which is the only permitted caller of this function\r\n    /// @param _mvoID: MVO ID of '_staker'\r\n    /// @param _amount: amount to be staked\r\n    /// @param _staker: address of timelock beneficiary corresponding to '_mvoID' that will call the initiating function in 'timelockManager'\r\n    /// @param _releaseStart: starting block number of timelock\r\n    /// @param _releaseEnd: ending block number of timelock\r\n    function stakeTimelock(\r\n        string calldata _mvoID,\r\n        uint256 _amount,\r\n        address _staker,\r\n        uint128 _releaseStart,\r\n        uint128 _releaseEnd\r\n    ) external {\r\n        if (msg.sender != timelockManager) revert OnlyTimelockManager();\r\n        if (_staker != idToMVO[_mvoID].stakingAddress)\r\n            revert IDAndMsgSenderMismatch();\r\n\r\n        totalStake += _amount;\r\n        idToMVO[_mvoID].stakingQuantum += _amount;\r\n\r\n\t\t// check for existing Timelock for MVO's stakingAddress\r\n\t\tif (timelocks[_staker].remainingAmount != 0) {\r\n\t\t\t// increment existing Timelock, leaving start/end blocks the same\r\n\t\t\ttimelocks[_staker].totalAmount += _amount;\r\n\t\t\ttimelocks[_staker].remainingAmount += _amount;\r\n        } else {\r\n\t\t\t// create new Timelock\r\n\t\t\ttimelocks[_staker] = Timelock({\r\n\t\t\t\ttotalAmount: _amount,\r\n\t\t\t\tremainingAmount: _amount,\r\n\t\t\t\treleaseStart: _releaseStart,\r\n\t\t\t\treleaseEnd: _releaseEnd\r\n\t\t\t});\r\n\t\t}\r\n\r\n        enshroudToken.safeTransferFrom(msg.sender, address(this), _amount);\r\n\r\n        emit MVOStaking_Staked(_staker, _amount, block.number);\r\n        emit MVOStakeUpdated(_mvoID, idToMVO[_mvoID].stakingQuantum);\r\n    }\r\n\r\n    /// @notice for an MVO to withdraw its staked $ENSHROUD tokens\r\n    /// @dev updates 'totalStake' and 'stakingQuantum' MVO struct member for msg.sender\r\n    /// @dev stake can only be withdrawn if msg.sender's '_mvoID' is correct; if msg.sender's MVO struct is maliciously altered by an admin, will need to be corrected\r\n    /// @param _mvoID: MVO ID of msg.sender\r\n    /// @param _amount: amount to be withdrawn\r\n    function withdraw(\r\n        string calldata _mvoID,\r\n        uint256 _amount\r\n    ) external nonReentrant {\r\n        if (msg.sender != idToMVO[_mvoID].stakingAddress)\r\n            revert IDAndMsgSenderMismatch();\r\n        if (idToMVO[_mvoID].stakingQuantum < _amount)\r\n            revert AmountLargerThanStake();\r\n\r\n        uint256 _remaining = timelocks[msg.sender].remainingAmount;\r\n\t\tif (_remaining != 0) {\r\n        \t// _unlockedAndWithdrawable = unlocked - withdrawn, which cannot be negative; will return 0 if no timelock\r\n\t\t\tuint256 _unlockedAndWithdrawable = _getUnlocked(msg.sender) -\r\n\t\t\t\t(timelocks[msg.sender].totalAmount - _remaining);\r\n\t\t\t// in addition to withdrawable from timelock, user can withdraw any\r\n\t\t\t// tokens which were added via stake() or stakeWithPermit()\r\n\t\t\tuint256 _neverLocked = idToMVO[_mvoID].stakingQuantum - _remaining;\r\n\r\n\t\t\t// if msg.sender has active timelock, revert if _amount is greater than the unlocked & not yet withdrawn amount + any separately staked unlocked\r\n\t\t\tif (_amount > _unlockedAndWithdrawable + _neverLocked)\r\n\t\t\t\trevert AmountLargerThanWithdrawable();\r\n\r\n\t\t\t// subtract _amount first from the struct's remainingAmount\r\n\t\t\tif (_unlockedAndWithdrawable >= _amount)\r\n\t\t\t\ttimelocks[msg.sender].remainingAmount -= _amount;\r\n\t\t\telse\r\n\t\t\t\ttimelocks[msg.sender].remainingAmount -= _unlockedAndWithdrawable;\r\n\t\t\t\t// (the rest will come from separately-staked unlocked tokens)\r\n\t\t}\r\n\r\n        unchecked {\r\n            // cannot underflow due to earlier condition check\r\n            idToMVO[_mvoID].stakingQuantum -= _amount;\r\n            // cannot underflow as 'idToMVO[_mvoID].stakingQuantum' cannot be greater than 'totalStake', and this is the only decrement of 'totalStake'\r\n            totalStake -= _amount;\r\n        }\r\n\r\n        enshroudToken.safeTransfer(msg.sender, _amount);\r\n\r\n        emit MVOStaking_Unstaked(msg.sender, _amount, block.number);\r\n        emit MVOStakeUpdated(_mvoID, idToMVO[_mvoID].stakingQuantum);\r\n    }\r\n\r\n    /// @notice for an MVO to create an MVO pool -- msg.sender will be 'poolAddress'. Cannot be altered after creation; only option is to delete pool and start another with a new 'miningPoolId'\r\n    /// @param _miningPoolId: unique ID of prospective MVO pool. Cannot be 0 -- this is the default value and indicates an MVO is not in a pool in its MVO struct\r\n    /// @param _dues: amount of dues required to be a pool member, in 18 decimals (which also corresponds to wei). Must be < 5e17 (< 50%). 5e16 corresponds to 5%.\r\n    /// @param _mvoID: MVO ID of msg.sender\r\n\t/// @dev to prevent dues dodging, user must claim any points first\r\n    function createMVOPool(\r\n        uint256 _miningPoolId,\r\n        uint256 _dues,\r\n        string calldata _mvoID\r\n    ) external {\r\n        if (\r\n            _miningPoolId == 0 ||\r\n            idToMVOPool[_miningPoolId].poolAddress != address(0)\r\n        ) revert IDAlreadyInUse();\r\n        // cannot have 50% or greater dues, this also prevents '_dues' from being larger than the max uint96 value\r\n        if (_dues >= 5e17) revert DuesTooLarge();\r\n        if (msg.sender != idToMVO[_mvoID].stakingAddress)\r\n            revert IDAndMsgSenderMismatch();\r\n\r\n        // ensure msg.sender is an active MVO with at least 'minStake' staked\r\n        checkMVO(_mvoID);\r\n\t\t// ensure owner doesn't have any unclaimed points\r\n        if (pointsBalance[msg.sender] > 0) revert UnclaimedPoints();\r\n\r\n        // write new pool struct to stored mapping\r\n        idToMVOPool[_miningPoolId] = MVOPool({\r\n            poolAddress: payable(msg.sender),\r\n            dues: uint96(_dues)\r\n        });\r\n\r\n        // update pool ID struct member for the pool creator\r\n        idToMVO[_mvoID].memberPoolId = uint120(_miningPoolId);\r\n\r\n        emit MVOPoolCreated(_miningPoolId, _dues, _mvoID);\r\n    }\r\n\r\n    /// @notice for an MVO pool creator to delete their pool\r\n    /// @param _miningPoolId: msg.sender's MVO pool ID\r\n    /// @param _mvoID: MVO ID of msg.sender\r\n    function deleteMVOPool(\r\n        uint256 _miningPoolId,\r\n        string calldata _mvoID\r\n    ) external {\r\n        // ensure correct '_mvoID' is supplied and msg.sender is the poolAddress for '_miningPoolId'\r\n        if (\r\n            msg.sender != idToMVO[_mvoID].stakingAddress ||\r\n            idToMVOPool[_miningPoolId].poolAddress != payable(msg.sender)\r\n        ) revert IDAndMsgSenderMismatch();\r\n        delete idToMVOPool[_miningPoolId];\r\n        emit MVOPoolDeleted(_miningPoolId, _mvoID);\r\n    }\r\n\r\n    /// @notice for an MVO to join an existing MVO mining pool, change pool membership, or leave a pool\r\n    /// @param _newMiningPoolId: pool ID which msg.sender desires to join; pass 0 to leave a pool without a replacement\r\n\t/// @dev to prevent dues dodging, user must claim any points first\r\n    /// @param _mvoID: MVO ID of msg.sender\r\n    function updateMVOPoolMembership(\r\n        uint256 _newMiningPoolId,\r\n        string calldata _mvoID\r\n    ) external {\r\n        if (msg.sender != idToMVO[_mvoID].stakingAddress)\r\n            revert IDAndMsgSenderMismatch();\r\n\t\t// ensure owner doesn't have any unclaimed points\r\n        if (pointsBalance[msg.sender] > 0) revert UnclaimedPoints();\r\n\r\n\t\t// ensure pool exists\r\n        if (\r\n            _newMiningPoolId != 0 &&\r\n            idToMVOPool[_newMiningPoolId].poolAddress == address(0)\r\n        ) revert PoolDoesNotExist();\r\n\r\n        // ensure msg.sender is an active MVO with at least 'minStake' staked\r\n        checkMVO(_mvoID);\r\n\r\n        // store current poolId for event emission\r\n        uint256 _currentPoolId = idToMVO[_mvoID].memberPoolId;\r\n\r\n        // update msg.sender's MVO struct (via mapping from their MVO Id) with new mining pool id\r\n        idToMVO[_mvoID].memberPoolId = uint120(_newMiningPoolId);\r\n\r\n        emit PoolMembershipUpdated(_newMiningPoolId, _currentPoolId, _mvoID);\r\n    }\r\n\r\n    /// @notice update 'codeHash', designating a new hash of the off-chain codebase storage location reference or entire codebase, for user verification\r\n    /// @dev admin should apprise users of how to verify the 'codeHash' -- the 'codeHash' is publicly accessible via getter as a public storage variable\r\n    /// @param _newCodeHash: new bytes32 hash of the off-chain codebase or location\r\n    function updateCodeHash(bytes32 _newCodeHash) external onlyAdmin {\r\n        codeHash = _newCodeHash;\r\n        emit CodeHashChanged(_newCodeHash);\r\n    }\r\n\r\n    /// @notice for a single admin to designate, update, or revoke an MVO's config struct using its ID\r\n    /// @dev single admin used here for ease and reversibility of any malicious or mistaken update\r\n    /// @param _mvoID: string ID for a given MVO\r\n    /// @param _mvo: new or replacement MVO struct for the given ID\r\n    function updateMvoStatus(\r\n        string calldata _mvoID,\r\n        MVO calldata _mvo\r\n    ) external onlyAdmin {\r\n        // if the pre-updated MVO struct corresponding to '_mvoID' has the default zero address as its 'stakingAddress', assume '_mvoID' is not yet stored in 'mvoIds' array and add it\r\n        if (idToMVO[_mvoID].stakingAddress == address(0)) {\r\n\t\t\tmvoIds.push(_mvoID);\r\n\t\t\t// update mapping to store the index number in the 'mvoIds' array corresponding to this '_mvoID', then increment the 'mvoIndex' counter\r\n\t\t\tmvoIdsIndex[_mvoID] = mvoIndex;\r\n\t\t\tunchecked {\r\n\t\t\t\t++mvoIndex; // will not overflow on human timelines\r\n\t\t\t}\r\n\t\t}\r\n        idToMVO[_mvoID] = _mvo;\r\n        emit MVOStatusChanged(_mvoID, _mvo, block.chainid);\r\n    }\r\n\r\n    /// @notice update 'minStake', designating a new minimum stake amount of $ENSHROUD tokens for MVOs, after three admins have called\r\n    /// @param _newMinStake: new minimum amount of $ENSHROUD tokens required for a MVO to stake\r\n    function updateMinStake(uint256 _newMinStake) external onlyAdmin {\r\n        bytes8 _caller = bytes8(uint64(uint160(msg.sender)));\r\n        /// @dev we use 'address(uint160(_newMinStake))' as the key for the 'updateRequested' mapping to force every admin to set the same value\r\n\t\t/// @notice for the possible values of _newMinStake, the discarded highest 12 bytes will be 0\r\n\t\taddress _minStakeKey = address(uint160(_newMinStake));\r\n        if (_isRequestApproved(_minStakeKey, _caller, ApprovalTypes.MinStake)) {\r\n            // only update 'minStake' address if three admins have requested, to thwart a single malicious admin\r\n            minStake = _newMinStake;\r\n\r\n            // reset after variable update\r\n            delete updateRequested[_minStakeKey];\r\n            emit MinimumStakeUpdated(_newMinStake);\r\n        }\r\n    }\r\n\r\n    /// @notice update 'enshroudProtocol' a new protocol address, such as for a v2 upgrade, after three admins have called\r\n    /// @param _newProtocol: new Enshroud Protocol contract address, changing 'enshroudProtocol'; must correctly implement public 'adminStatus[]' mapping\r\n    function updateProtocol(address _newProtocol) external onlyAdmin {\r\n        bytes8 _caller = bytes8(uint64(uint160(msg.sender)));\r\n        if (_isRequestApproved(_newProtocol, _caller, ApprovalTypes.Protocol)) {\r\n            // only add 'enshroudProtocols' address if three admins have requested, to thwart a single malicious admin\r\n        \tenshroudProtocols.push(_newProtocol);\r\n\t\t\tunchecked {\r\n\t\t\t\t++protoIndex; // will not overflow on human timelines\r\n\t\t\t}\r\n\r\n            // reset after variable update\r\n            delete updateRequested[_newProtocol];\r\n            emit MVOStaking_ProtocolUpdated(_newProtocol);\r\n        }\r\n    }\r\n\r\n\t/// @notice set or update 'pointsBot' a new bot address authorized to import MVO points awarded on other chains (relevant only on mainnet contract deployment)\r\n\t/// @param _newBot: new bot authorized to import points from other chains\r\n\tfunction updatePointsBot(address _newBot) external onlyAdmin {\r\n\t\tbytes8 _caller = bytes8(uint64(uint160(msg.sender)));\r\n\t\tif (_isRequestApproved(_newBot, _caller, ApprovalTypes.PointsBot)) {\r\n\t\t\t// only set 'pointsBot' address if three admins have requested, to thwart a single malicious admin\r\n\t\t\tpointsBot = _newBot;\r\n\r\n\t\t\t// reset after variable update\r\n\t\t\tdelete updateRequested[_newBot];\r\n\t\t\temit PointsBotUpdated(_newBot);\r\n\t\t}\r\n\t}\r\n\r\n    /// @notice check an MVO's signature against its ID and verify signature - will revert if not\r\n    /// @param _mvoID: ID of MVO to access relevant struct containing MVO information\r\n    /// @param _mvoSig: signature of MVO to check against its ID using the idToMVO mapping\r\n    /// @param _obHash: keccak256 hash of the Operations Block\r\n    function checkMVOSig(\r\n        string calldata _mvoID,\r\n        bytes calldata _mvoSig,\r\n        bytes32 _obHash\r\n    ) external view {\r\n        (uint8 v, bytes32 r, bytes32 s) = _splitSignature(_mvoSig);\r\n        address _signAddr = ecrecover(_obHash, v, r, s);\r\n        if (idToMVO[_mvoID].signingAddress != _signAddr)\r\n            revert InvalidSignature();\r\n    }\r\n\r\n    /// @notice check an MVO's struct and ensure it has at least 'minStake' tokens and is active\r\n    /// @param _mvoID: ID of MVO to access relevant struct containing MVO information\r\n    function checkMVO(string calldata _mvoID) public view {\r\n        if (\r\n            !idToMVO[_mvoID].active || idToMVO[_mvoID].stakingQuantum < minStake\r\n        ) {\r\n            revert NotActiveMVO();\r\n        }\r\n    }\r\n\r\n    /// @notice for variable updates that require update requests from three unique admins\r\n\t/// @param _reqAddr: index to data being updated\r\n\t/// @param _caller: truncation of the admin address making the call\r\n\t/// @param _reqType: disambiguation for type of update call\r\n    function _isRequestApproved(\r\n        address _reqAddr,\r\n        bytes8 _caller,\r\n\t\tApprovalTypes _reqType\r\n    ) internal returns (bool) {\r\n        bytes8 _default;\r\n\r\n        if (updateRequested[_reqAddr].requester1 == _default) {\r\n            updateRequested[_reqAddr].requester1 = _caller;\r\n\t\t\tupdateRequested[_reqAddr].requestType = _reqType;\r\n\t\t} else if (\r\n            updateRequested[_reqAddr].requester1 != _default &&\r\n            updateRequested[_reqAddr].requester2 == _default &&\r\n            _caller != updateRequested[_reqAddr].requester1 &&\r\n\t\t\t_reqType == updateRequested[_reqAddr].requestType\r\n        ) updateRequested[_reqAddr].requester2 = _caller;\r\n        else if (\r\n            updateRequested[_reqAddr].requester1 != _default &&\r\n            updateRequested[_reqAddr].requester2 != _default &&\r\n            _caller != updateRequested[_reqAddr].requester1 &&\r\n            _caller != updateRequested[_reqAddr].requester2 &&\r\n\t\t\t_reqType == updateRequested[_reqAddr].requestType\r\n        ) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    /// @notice split signature for ecrecover function, see https://docs.soliditylang.org/en/latest/solidity-by-example.html#recovering-the-message-signer-in-solidity\r\n\t/// @param _sig: the standard signature to be split\r\n    function _splitSignature(\r\n        bytes memory _sig\r\n    ) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\r\n        if (_sig.length != 65) revert IncorrectSigLength();\r\n\r\n        assembly {\r\n            // first 32 bytes, after the length prefix.\r\n            r := mload(add(_sig, 32))\r\n            // second 32 bytes.\r\n            s := mload(add(_sig, 64))\r\n            // final byte (first byte of the next 32 bytes).\r\n            v := byte(0, mload(add(_sig, 96)))\r\n        }\r\n\r\n        return (v, r, s);\r\n    }\r\n\r\n    /// @notice returns 'unlocked', the amount of tokens that was unlocked for the recipient to date. Includes both withdrawn and non-withdrawn tokens.\r\n    /// @dev same function as in Timelock.sol\r\n    /// @param _recipient: address of the timelock recipient\r\n\t/// @return unlocked the quantity of tokens in a Timelock which are now unlockable\r\n    function _getUnlocked(\r\n        address _recipient\r\n    ) private view returns (uint256 unlocked) {\r\n        Timelock storage timelock = timelocks[_recipient];\r\n        uint256 _releaseStart = uint256(timelock.releaseStart);\r\n        uint256 _releaseEnd = uint256(timelock.releaseEnd);\r\n        if (block.number <= _releaseStart) {\r\n            unlocked = 0;\r\n        } else if (block.number >= _releaseEnd) {\r\n            unlocked = timelock.totalAmount;\r\n        } else {\r\n            // unlocked = (total amount * passed time since start) / total time of timelock\r\n            // denominator will not be 0 due to checks in TimelockManager contract\r\n            unlocked = (timelock.totalAmount * (block.number - _releaseStart)) /\r\n                (_releaseEnd - _releaseStart);\r\n        }\r\n    }\r\n}\r\n",
  "sourcePath": "/home/ensh/dapp/truffle/contracts/MVOStaking.sol",
  "ast": {
    "absolutePath": "project:/contracts/MVOStaking.sol",
    "exportedSymbols": {
      "IERC20Permit_MVOStaking": [
        30
      ],
      "IEnshroudProtocol_MVOStaking": [
        38
      ],
      "MVOStaking": [
        1967
      ],
      "ReentrancyGuard": [
        1995
      ],
      "SafeTransferLib": [
        2059
      ]
    },
    "id": 1968,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".18"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:24:0"
      },
      {
        "absolutePath": "project:/contracts/ReentrancyGuard.sol",
        "file": "./ReentrancyGuard.sol",
        "id": 3,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1968,
        "sourceUnit": 1996,
        "src": "569:54:0",
        "symbolAliases": [
          {
            "foreign": {
              "id": 2,
              "name": "ReentrancyGuard",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 1995,
              "src": "577:15:0",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/SafeTransferLib.sol",
        "file": "./SafeTransferLib.sol",
        "id": 5,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1968,
        "sourceUnit": 2060,
        "src": "732:54:0",
        "symbolAliases": [
          {
            "foreign": {
              "id": 4,
              "name": "SafeTransferLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 2059,
              "src": "740:15:0",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IERC20Permit_MVOStaking",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 30,
        "linearizedBaseContracts": [
          30
        ],
        "name": "IERC20Permit_MVOStaking",
        "nameLocation": "828:23:0",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "functionSelector": "40c10f19",
            "id": 12,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nameLocation": "868:4:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "881:3:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 12,
                  "src": "873:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "873:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9,
                  "mutability": "mutable",
                  "name": "_value",
                  "nameLocation": "894:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 12,
                  "src": "886:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "886:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "872:29:0"
            },
            "returnParameters": {
              "id": 11,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "910:0:0"
            },
            "scope": 30,
            "src": "859:52:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "d505accf",
            "id": 29,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "permit",
            "nameLocation": "928:6:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "953:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 29,
                  "src": "945:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "945:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "977:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 29,
                  "src": "969:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "969:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "1003:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 29,
                  "src": "995:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "995:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nameLocation": "1027:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 29,
                  "src": "1019:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1019:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22,
                  "mutability": "mutable",
                  "name": "v",
                  "nameLocation": "1052:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 29,
                  "src": "1046:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 21,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1046:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "1072:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 29,
                  "src": "1064:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 23,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1064:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26,
                  "mutability": "mutable",
                  "name": "s",
                  "nameLocation": "1092:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 29,
                  "src": "1084:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1084:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "934:166:0"
            },
            "returnParameters": {
              "id": 28,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1109:0:0"
            },
            "scope": 30,
            "src": "919:191:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 1968,
        "src": "818:295:0",
        "usedErrors": [],
        "usedEvents": []
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IEnshroudProtocol_MVOStaking",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 38,
        "linearizedBaseContracts": [
          38
        ],
        "name": "IEnshroudProtocol_MVOStaking",
        "nameLocation": "1127:28:0",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "functionSelector": "3e4a89d1",
            "id": 37,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "adminStatus",
            "nameLocation": "1222:11:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 33,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32,
                  "mutability": "mutable",
                  "name": "addr",
                  "nameLocation": "1242:4:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 37,
                  "src": "1234:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1234:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1233:14:0"
            },
            "returnParameters": {
              "id": 36,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 37,
                  "src": "1271:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 34,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1271:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1270:6:0"
            },
            "scope": 38,
            "src": "1213:64:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 1968,
        "src": "1117:163:0",
        "usedErrors": [],
        "usedEvents": []
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 39,
              "name": "ReentrancyGuard",
              "nameLocations": [
                "1307:15:0"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1995,
              "src": "1307:15:0"
            },
            "id": 40,
            "nodeType": "InheritanceSpecifier",
            "src": "1307:15:0"
          }
        ],
        "canonicalName": "MVOStaking",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 1967,
        "linearizedBaseContracts": [
          1967,
          1995
        ],
        "name": "MVOStaking",
        "nameLocation": "1293:10:0",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "global": false,
            "id": 43,
            "libraryName": {
              "id": 41,
              "name": "SafeTransferLib",
              "nameLocations": [
                "1336:15:0"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2059,
              "src": "1336:15:0"
            },
            "nodeType": "UsingForDirective",
            "src": "1330:34:0",
            "typeName": {
              "id": 42,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1356:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "canonicalName": "MVOStaking.MVO",
            "documentation": {
              "id": 44,
              "nodeType": "StructuredDocumentation",
              "src": "1566:1060:0",
              "text": "@notice 'listenURI' represents the web2 URI at which dApp users can contact this MVO (note this is typically an http proxy endpoint)\n @notice 'stakingAddress' is the EOA from which the MVO's owner stakes tokens in this contract, and receives mints when claiming rewards\n @notice 'signingAddress' corresponds to the privkey with which this MVO signs OperationsBlocks, allowing sig verification by peers and dApps\n @notice 'encrPubkey' is the public key used to faciliate ECIES encryption between dApp users and the MVO\n @notice 'stakingQuantum' is the amount staked by stakingAddress in this contract\n @notice 'memberPoolId' is updated when the MVO joins or creates a pool\n @notice 'rating' is initially unused in this contract, but may be used for purposes such as slashing in conjunction with 'reducePoints()', offchain reputation trackers, etc.\n @notice 'active' is an administrative enable/shutoff switch\n @notice except for stakingQuantum and memberPoolId, all of these values can be configured only by admins"
            },
            "id": 61,
            "members": [
              {
                "constant": false,
                "id": 46,
                "mutability": "mutable",
                "name": "listenURI",
                "nameLocation": "2661:9:0",
                "nodeType": "VariableDeclaration",
                "scope": 61,
                "src": "2654:16:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                },
                "typeName": {
                  "id": 45,
                  "name": "string",
                  "nodeType": "ElementaryTypeName",
                  "src": "2654:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage_ptr",
                    "typeString": "string"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 48,
                "mutability": "mutable",
                "name": "stakingAddress",
                "nameLocation": "2697:14:0",
                "nodeType": "VariableDeclaration",
                "scope": 61,
                "src": "2681:30:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address_payable",
                  "typeString": "address payable"
                },
                "typeName": {
                  "id": 47,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2681:15:0",
                  "stateMutability": "payable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 50,
                "mutability": "mutable",
                "name": "signingAddress",
                "nameLocation": "2730:14:0",
                "nodeType": "VariableDeclaration",
                "scope": 61,
                "src": "2722:22:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 49,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2722:7:0",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 52,
                "mutability": "mutable",
                "name": "encrPubkey",
                "nameLocation": "2762:10:0",
                "nodeType": "VariableDeclaration",
                "scope": 61,
                "src": "2755:17:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                },
                "typeName": {
                  "id": 51,
                  "name": "string",
                  "nodeType": "ElementaryTypeName",
                  "src": "2755:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage_ptr",
                    "typeString": "string"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 54,
                "mutability": "mutable",
                "name": "stakingQuantum",
                "nameLocation": "2791:14:0",
                "nodeType": "VariableDeclaration",
                "scope": 61,
                "src": "2783:22:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 53,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2783:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 56,
                "mutability": "mutable",
                "name": "memberPoolId",
                "nameLocation": "2824:12:0",
                "nodeType": "VariableDeclaration",
                "scope": 61,
                "src": "2816:20:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint120",
                  "typeString": "uint120"
                },
                "typeName": {
                  "id": 55,
                  "name": "uint120",
                  "nodeType": "ElementaryTypeName",
                  "src": "2816:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint120",
                    "typeString": "uint120"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 58,
                "mutability": "mutable",
                "name": "rating",
                "nameLocation": "2855:6:0",
                "nodeType": "VariableDeclaration",
                "scope": 61,
                "src": "2847:14:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint120",
                  "typeString": "uint120"
                },
                "typeName": {
                  "id": 57,
                  "name": "uint120",
                  "nodeType": "ElementaryTypeName",
                  "src": "2847:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint120",
                    "typeString": "uint120"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 60,
                "mutability": "mutable",
                "name": "active",
                "nameLocation": "2877:6:0",
                "nodeType": "VariableDeclaration",
                "scope": 61,
                "src": "2872:11:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 59,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2872:4:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "MVO",
            "nameLocation": "2639:3:0",
            "nodeType": "StructDefinition",
            "scope": 1967,
            "src": "2632:259:0",
            "visibility": "public"
          },
          {
            "canonicalName": "MVOStaking.MVOPool",
            "documentation": {
              "id": 62,
              "nodeType": "StructuredDocumentation",
              "src": "2896:74:0",
              "text": "@notice the 'poolAddress' will match the stakingAddress of the creator"
            },
            "id": 67,
            "members": [
              {
                "constant": false,
                "id": 64,
                "mutability": "mutable",
                "name": "poolAddress",
                "nameLocation": "3018:11:0",
                "nodeType": "VariableDeclaration",
                "scope": 67,
                "src": "3002:27:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address_payable",
                  "typeString": "address payable"
                },
                "typeName": {
                  "id": 63,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3002:15:0",
                  "stateMutability": "payable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 66,
                "mutability": "mutable",
                "name": "dues",
                "nameLocation": "3047:4:0",
                "nodeType": "VariableDeclaration",
                "scope": 67,
                "src": "3040:11:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "typeName": {
                  "id": 65,
                  "name": "uint96",
                  "nodeType": "ElementaryTypeName",
                  "src": "3040:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "MVOPool",
            "nameLocation": "2983:7:0",
            "nodeType": "StructDefinition",
            "scope": 1967,
            "src": "2976:83:0",
            "visibility": "public"
          },
          {
            "canonicalName": "MVOStaking.ApprovalTypes",
            "documentation": {
              "id": 68,
              "nodeType": "StructuredDocumentation",
              "src": "3064:33:0",
              "text": "types to distinguish Requests"
            },
            "id": 72,
            "members": [
              {
                "id": 69,
                "name": "MinStake",
                "nameLocation": "3121:8:0",
                "nodeType": "EnumValue",
                "src": "3121:8:0"
              },
              {
                "id": 70,
                "name": "Protocol",
                "nameLocation": "3131:8:0",
                "nodeType": "EnumValue",
                "src": "3131:8:0"
              },
              {
                "id": 71,
                "name": "PointsBot",
                "nameLocation": "3141:9:0",
                "nodeType": "EnumValue",
                "src": "3141:9:0"
              }
            ],
            "name": "ApprovalTypes",
            "nameLocation": "3105:13:0",
            "nodeType": "EnumDefinition",
            "src": "3100:52:0"
          },
          {
            "canonicalName": "MVOStaking.Requests",
            "documentation": {
              "id": 73,
              "nodeType": "StructuredDocumentation",
              "src": "3160:101:0",
              "text": "@notice to track admin update requests; addresses truncated to bytes8 for size/gas considerations"
            },
            "id": 81,
            "members": [
              {
                "constant": false,
                "id": 75,
                "mutability": "mutable",
                "name": "requester1",
                "nameLocation": "3301:10:0",
                "nodeType": "VariableDeclaration",
                "scope": 81,
                "src": "3294:17:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes8",
                  "typeString": "bytes8"
                },
                "typeName": {
                  "id": 74,
                  "name": "bytes8",
                  "nodeType": "ElementaryTypeName",
                  "src": "3294:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 77,
                "mutability": "mutable",
                "name": "requester2",
                "nameLocation": "3329:10:0",
                "nodeType": "VariableDeclaration",
                "scope": 81,
                "src": "3322:17:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes8",
                  "typeString": "bytes8"
                },
                "typeName": {
                  "id": 76,
                  "name": "bytes8",
                  "nodeType": "ElementaryTypeName",
                  "src": "3322:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 80,
                "mutability": "mutable",
                "name": "requestType",
                "nameLocation": "3358:11:0",
                "nodeType": "VariableDeclaration",
                "scope": 81,
                "src": "3344:25:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                  "typeString": "enum MVOStaking.ApprovalTypes"
                },
                "typeName": {
                  "id": 79,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 78,
                    "name": "ApprovalTypes",
                    "nameLocations": [
                      "3344:13:0"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 72,
                    "src": "3344:13:0"
                  },
                  "referencedDeclaration": 72,
                  "src": "3344:13:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                    "typeString": "enum MVOStaking.ApprovalTypes"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Requests",
            "nameLocation": "3274:8:0",
            "nodeType": "StructDefinition",
            "scope": 1967,
            "src": "3267:110:0",
            "visibility": "public"
          },
          {
            "canonicalName": "MVOStaking.Timelock",
            "documentation": {
              "id": 82,
              "nodeType": "StructuredDocumentation",
              "src": "3382:71:0",
              "text": "@notice mirrors Timelock{} in TimelockManager and DAOPool contracts"
            },
            "id": 91,
            "members": [
              {
                "constant": false,
                "id": 84,
                "mutability": "mutable",
                "name": "totalAmount",
                "nameLocation": "3494:11:0",
                "nodeType": "VariableDeclaration",
                "scope": 91,
                "src": "3486:19:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 83,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3486:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 86,
                "mutability": "mutable",
                "name": "remainingAmount",
                "nameLocation": "3524:15:0",
                "nodeType": "VariableDeclaration",
                "scope": 91,
                "src": "3516:23:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 85,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3516:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 88,
                "mutability": "mutable",
                "name": "releaseStart",
                "nameLocation": "3558:12:0",
                "nodeType": "VariableDeclaration",
                "scope": 91,
                "src": "3550:20:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 87,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3550:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 90,
                "mutability": "mutable",
                "name": "releaseEnd",
                "nameLocation": "3589:10:0",
                "nodeType": "VariableDeclaration",
                "scope": 91,
                "src": "3581:18:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 89,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3581:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Timelock",
            "nameLocation": "3466:8:0",
            "nodeType": "StructDefinition",
            "scope": 1967,
            "src": "3459:148:0",
            "visibility": "public"
          },
          {
            "constant": true,
            "documentation": {
              "id": 92,
              "nodeType": "StructuredDocumentation",
              "src": "3615:165:0",
              "text": "@notice constant variable for ETH mainnet: approximated via 7150 blocks/day, 365 days per year\n @dev this must be altered for deployments on other chains"
            },
            "id": 95,
            "mutability": "constant",
            "name": "BLOCKS_PER_YEAR",
            "nameLocation": "3812:15:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "3786:51:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 93,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3786:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "32363039373530",
              "id": 94,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3830:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2609750_by_1",
                "typeString": "int_const 2609750"
              },
              "value": "2609750"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "documentation": {
              "id": 96,
              "nodeType": "StructuredDocumentation",
              "src": "3844:38:0",
              "text": "@dev 18 decimal token calculations"
            },
            "id": 99,
            "mutability": "constant",
            "name": "DECIMALS",
            "nameLocation": "3914:8:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "3888:41:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 97,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3888:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "31653138",
              "id": 98,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3925:4:0",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "documentation": {
              "id": 100,
              "nodeType": "StructuredDocumentation",
              "src": "3938:55:0",
              "text": "@notice $ENSHROUD token contract address, immutable"
            },
            "functionSelector": "acf2040c",
            "id": 102,
            "mutability": "immutable",
            "name": "enshroudToken",
            "nameLocation": "4024:13:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "3999:38:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 101,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "3999:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 103,
              "nodeType": "StructuredDocumentation",
              "src": "4044:55:0",
              "text": "@notice block starting point for epoch calculations"
            },
            "functionSelector": "4cdc9c63",
            "id": 105,
            "mutability": "immutable",
            "name": "genesisBlock",
            "nameLocation": "4130:12:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "4105:37:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 104,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4105:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 106,
              "nodeType": "StructuredDocumentation",
              "src": "4149:51:0",
              "text": "@notice immutable interface for 'enshroudToken'"
            },
            "id": 109,
            "mutability": "immutable",
            "name": "iEnshroudToken",
            "nameLocation": "4249:14:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "4206:57:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IERC20Permit_MVOStaking_$30",
              "typeString": "contract IERC20Permit_MVOStaking"
            },
            "typeName": {
              "id": 108,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 107,
                "name": "IERC20Permit_MVOStaking",
                "nameLocations": [
                  "4206:23:0"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 30,
                "src": "4206:23:0"
              },
              "referencedDeclaration": 30,
              "src": "4206:23:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20Permit_MVOStaking_$30",
                "typeString": "contract IERC20Permit_MVOStaking"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "documentation": {
              "id": 110,
              "nodeType": "StructuredDocumentation",
              "src": "4270:44:0",
              "text": "@notice TimelockManager contract address"
            },
            "functionSelector": "bf5669bd",
            "id": 112,
            "mutability": "immutable",
            "name": "timelockManager",
            "nameLocation": "4345:15:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "4320:40:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 111,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "4320:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 113,
              "nodeType": "StructuredDocumentation",
              "src": "4369:65:0",
              "text": "@notice Enshroud protocol addresses (to support V1, V2, etc.)"
            },
            "functionSelector": "b4601259",
            "id": 116,
            "mutability": "mutable",
            "name": "enshroudProtocols",
            "nameLocation": "4457:17:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "4440:34:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_$dyn_storage",
              "typeString": "address[]"
            },
            "typeName": {
              "baseType": {
                "id": 114,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "4440:7:0",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "id": 115,
              "nodeType": "ArrayTypeName",
              "src": "4440:9:0",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                "typeString": "address[]"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 117,
              "nodeType": "StructuredDocumentation",
              "src": "4478:98:0",
              "text": "@notice counter for enshroudProtocols array, set to index of latest deployed Enshroud protocol"
            },
            "functionSelector": "aa7b43e1",
            "id": 119,
            "mutability": "mutable",
            "name": "protoIndex",
            "nameLocation": "4594:10:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "4579:25:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 118,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4579:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 120,
              "nodeType": "StructuredDocumentation",
              "src": "4613:143:0",
              "text": "@notice hash of off-chain codebase (i.e. MVO/Auditor node) location, or codebase in its entirety, for user verification. Provided by admin."
            },
            "functionSelector": "18edaaf2",
            "id": 122,
            "mutability": "mutable",
            "name": "codeHash",
            "nameLocation": "4777:8:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "4762:23:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 121,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "4762:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 123,
              "nodeType": "StructuredDocumentation",
              "src": "4794:62:0",
              "text": "@notice minimum amount of stake required for an active MVO"
            },
            "functionSelector": "375b3c0a",
            "id": 125,
            "mutability": "mutable",
            "name": "minStake",
            "nameLocation": "4877:8:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "4862:23:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 124,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4862:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 126,
              "nodeType": "StructuredDocumentation",
              "src": "4892:70:0",
              "text": "@notice counter for 'mvoIds' array index via 'mvoIdsIndex' mapping"
            },
            "functionSelector": "c0fd4e02",
            "id": 128,
            "mutability": "mutable",
            "name": "mvoIndex",
            "nameLocation": "4983:8:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "4968:23:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 127,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4968:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 129,
              "nodeType": "StructuredDocumentation",
              "src": "4998:123:0",
              "text": "@notice total amount of staked tokens, used to calculate relative staking amount for a given MVO in selection mechanism"
            },
            "functionSelector": "8b0e9f3f",
            "id": 131,
            "mutability": "mutable",
            "name": "totalStake",
            "nameLocation": "5142:10:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "5127:25:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 130,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "5127:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 132,
              "nodeType": "StructuredDocumentation",
              "src": "5159:138:0",
              "text": "@notice total amount of awarded points outstanding, used to calculate relative pointsBalance for a given MVO when claiming reward mint"
            },
            "functionSelector": "567142be",
            "id": 134,
            "mutability": "mutable",
            "name": "totalPoints",
            "nameLocation": "5318:11:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "5303:26:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 133,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "5303:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 135,
              "nodeType": "StructuredDocumentation",
              "src": "5333:75:0",
              "text": "@notice address used by bot that imports points awarded on other chains"
            },
            "id": 137,
            "mutability": "mutable",
            "name": "pointsBot",
            "nameLocation": "5428:9:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "5411:26:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 136,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "5411:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "documentation": {
              "id": 138,
              "nodeType": "StructuredDocumentation",
              "src": "5444:43:0",
              "text": "@notice for the MVO selection algorithm"
            },
            "functionSelector": "ab50ba41",
            "id": 141,
            "mutability": "mutable",
            "name": "mvoIds",
            "nameLocation": "5509:6:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "5493:22:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
              "typeString": "string[]"
            },
            "typeName": {
              "baseType": {
                "id": 139,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "5493:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "id": 140,
              "nodeType": "ArrayTypeName",
              "src": "5493:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                "typeString": "string[]"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 142,
              "nodeType": "StructuredDocumentation",
              "src": "5519:60:0",
              "text": "@notice used for tracking state of update*() invocations"
            },
            "id": 147,
            "mutability": "mutable",
            "name": "updateRequested",
            "nameLocation": "5623:15:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "5585:53:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
              "typeString": "mapping(address => struct MVOStaking.Requests)"
            },
            "typeName": {
              "id": 146,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 143,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "5593:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "5585:28:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                "typeString": "mapping(address => struct MVOStaking.Requests)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 145,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 144,
                  "name": "Requests",
                  "nameLocations": [
                    "5604:8:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 81,
                  "src": "5604:8:0"
                },
                "referencedDeclaration": 81,
                "src": "5604:8:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Requests_$81_storage_ptr",
                  "typeString": "struct MVOStaking.Requests"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "documentation": {
              "id": 148,
              "nodeType": "StructuredDocumentation",
              "src": "5645:64:0",
              "text": "@notice MVO staking address mapped to current points balance"
            },
            "functionSelector": "25ca4cff",
            "id": 152,
            "mutability": "mutable",
            "name": "pointsBalance",
            "nameLocation": "5750:13:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "5715:48:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 151,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 149,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "5723:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "5715:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 150,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "5734:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 153,
              "nodeType": "StructuredDocumentation",
              "src": "5770:80:0",
              "text": "@notice maps an mvoId to its index number ('mvoIndex') in the 'mvoIds' array"
            },
            "functionSelector": "32954365",
            "id": 157,
            "mutability": "mutable",
            "name": "mvoIdsIndex",
            "nameLocation": "5890:11:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "5856:45:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_uint256_$",
              "typeString": "mapping(string => uint256)"
            },
            "typeName": {
              "id": 156,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 154,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "5864:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "5856:26:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_uint256_$",
                "typeString": "mapping(string => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 155,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "5874:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 158,
              "nodeType": "StructuredDocumentation",
              "src": "5908:59:0",
              "text": "@notice maps an MVO's mvoId to corresponding MVO struct"
            },
            "functionSelector": "8accb951",
            "id": 163,
            "mutability": "mutable",
            "name": "idToMVO",
            "nameLocation": "6003:7:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "5973:37:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
              "typeString": "mapping(string => struct MVOStaking.MVO)"
            },
            "typeName": {
              "id": 162,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 159,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "5981:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "5973:22:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                "typeString": "mapping(string => struct MVOStaking.MVO)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 161,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 160,
                  "name": "MVO",
                  "nameLocations": [
                    "5991:3:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 61,
                  "src": "5991:3:0"
                },
                "referencedDeclaration": 61,
                "src": "5991:3:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_MVO_$61_storage_ptr",
                  "typeString": "struct MVOStaking.MVO"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 164,
              "nodeType": "StructuredDocumentation",
              "src": "6017:98:0",
              "text": "@notice maps year to the amount of MVO incentive tokens remaining for reward mint in such year"
            },
            "functionSelector": "43991977",
            "id": 168,
            "mutability": "mutable",
            "name": "yearToTokensRemaining",
            "nameLocation": "6156:21:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "6121:56:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 167,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 165,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "6129:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "6121:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 166,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "6140:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 169,
              "nodeType": "StructuredDocumentation",
              "src": "6184:65:0",
              "text": "@notice maps an MVOPoolId to its corresponding MVOPool struct"
            },
            "functionSelector": "beaf95f3",
            "id": 174,
            "mutability": "mutable",
            "name": "idToMVOPool",
            "nameLocation": "6290:11:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "6255:46:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_MVOPool_$67_storage_$",
              "typeString": "mapping(uint256 => struct MVOStaking.MVOPool)"
            },
            "typeName": {
              "id": 173,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 170,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "6263:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "6255:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_MVOPool_$67_storage_$",
                "typeString": "mapping(uint256 => struct MVOStaking.MVOPool)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 172,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 171,
                  "name": "MVOPool",
                  "nameLocations": [
                    "6274:7:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 67,
                  "src": "6274:7:0"
                },
                "referencedDeclaration": 67,
                "src": "6274:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_MVOPool_$67_storage_ptr",
                  "typeString": "struct MVOStaking.MVOPool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 175,
              "nodeType": "StructuredDocumentation",
              "src": "6308:72:0",
              "text": "@notice maps a timelock beneficiary address to their Timelock struct"
            },
            "functionSelector": "1369a927",
            "id": 180,
            "mutability": "mutable",
            "name": "timelocks",
            "nameLocation": "6422:9:0",
            "nodeType": "VariableDeclaration",
            "scope": 1967,
            "src": "6386:45:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
              "typeString": "mapping(address => struct MVOStaking.Timelock)"
            },
            "typeName": {
              "id": 179,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 176,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "6394:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "6386:28:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
                "typeString": "mapping(address => struct MVOStaking.Timelock)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 178,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 177,
                  "name": "Timelock",
                  "nameLocations": [
                    "6405:8:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 91,
                  "src": "6405:8:0"
                },
                "referencedDeclaration": 91,
                "src": "6405:8:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Timelock_$91_storage_ptr",
                  "typeString": "struct MVOStaking.Timelock"
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "eventSelector": "e64e12d565716cb1d472831954a8aa6b8f660bd3d1ac40f26d0484b74061ee9b",
            "id": 184,
            "name": "CodeHashChanged",
            "nameLocation": "6625:15:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 183,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 182,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newCodeHash",
                  "nameLocation": "6649:11:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 184,
                  "src": "6641:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 181,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6641:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6640:21:0"
            },
            "src": "6619:43:0"
          },
          {
            "anonymous": false,
            "eventSelector": "f4045d7dd317de89564c3f12c35961242ed2a4dce3ae4e7a75847ffa04bb0834",
            "id": 188,
            "name": "MinimumStakeUpdated",
            "nameLocation": "6676:19:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 187,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 186,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newMinStake",
                  "nameLocation": "6704:11:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 188,
                  "src": "6696:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 185,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6696:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6695:21:0"
            },
            "src": "6670:47:0"
          },
          {
            "anonymous": false,
            "eventSelector": "588475b865c1e30d6d4caa2e0da2b4009157a04d3f2ab7d0d3b3aa08f985ef83",
            "id": 196,
            "name": "MVOPoolCreated",
            "nameLocation": "6731:14:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 195,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 190,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "poolId",
                  "nameLocation": "6754:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 196,
                  "src": "6746:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 189,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6746:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 192,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "dues",
                  "nameLocation": "6770:4:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 196,
                  "src": "6762:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 191,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6762:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 194,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "creatorMvoID",
                  "nameLocation": "6783:12:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 196,
                  "src": "6776:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 193,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6776:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6745:51:0"
            },
            "src": "6725:72:0"
          },
          {
            "anonymous": false,
            "eventSelector": "ed2863a3907531988ef6702ca5ff5df0d5e70ab1434c2751d510fdd8059a1a9a",
            "id": 202,
            "name": "MVOPoolDeleted",
            "nameLocation": "6811:14:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 198,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "poolId",
                  "nameLocation": "6834:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 202,
                  "src": "6826:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 197,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6826:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 200,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "creatorMvoID",
                  "nameLocation": "6849:12:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 202,
                  "src": "6842:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 199,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6842:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6825:37:0"
            },
            "src": "6805:58:0"
          },
          {
            "anonymous": false,
            "eventSelector": "a505781a5116eef5a80d5b66d75962b0569fae3a78ad4bbb9f70a67da73b61c9",
            "id": 208,
            "name": "MVOStakeUpdated",
            "nameLocation": "6877:15:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 207,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 204,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "mvoID",
                  "nameLocation": "6900:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 208,
                  "src": "6893:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 203,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6893:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 206,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "stakingQuantum",
                  "nameLocation": "6915:14:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 208,
                  "src": "6907:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 205,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6907:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6892:38:0"
            },
            "src": "6871:60:0"
          },
          {
            "anonymous": false,
            "eventSelector": "5d7ee3a2caa09465a672230cd161ff80d4c30aa4f31bd8f3e03249d859d24a2c",
            "id": 212,
            "name": "MVOStaking_ProtocolUpdated",
            "nameLocation": "6945:26:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 210,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newProtocol",
                  "nameLocation": "6980:11:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 212,
                  "src": "6972:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 209,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6972:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6971:21:0"
            },
            "src": "6939:54:0"
          },
          {
            "anonymous": false,
            "eventSelector": "95c2d1682da1c94cf72722155675f023c7e909538f90354357762bd45925ea70",
            "id": 220,
            "name": "MVOStaking_Staked",
            "nameLocation": "7007:17:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 219,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 214,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "7051:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 220,
                  "src": "7035:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 213,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7035:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 216,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7076:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 220,
                  "src": "7068:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 215,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7068:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 218,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "blockNumber",
                  "nameLocation": "7101:11:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 220,
                  "src": "7093:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 217,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7093:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7024:95:0"
            },
            "src": "7001:119:0"
          },
          {
            "anonymous": false,
            "eventSelector": "54e8265d924142b11826bd303e79a36db5df2ce53901fd41c19e40008818a35a",
            "id": 228,
            "name": "MVOStaking_Unstaked",
            "nameLocation": "7134:19:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 222,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "7180:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 228,
                  "src": "7164:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 221,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7164:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 224,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7205:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 228,
                  "src": "7197:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 223,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7197:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 226,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "blockNumber",
                  "nameLocation": "7230:11:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 228,
                  "src": "7222:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 225,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7222:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7153:95:0"
            },
            "src": "7128:121:0"
          },
          {
            "anonymous": false,
            "eventSelector": "cf33f5de1ef67e6e5ec8006d8cff0400a249c994a029dea6b1926a58c8024546",
            "id": 237,
            "name": "MVOStatusChanged",
            "nameLocation": "7263:16:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 236,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 230,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "mvoID",
                  "nameLocation": "7287:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 237,
                  "src": "7280:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 229,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7280:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 233,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "updatedMVO",
                  "nameLocation": "7298:10:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 237,
                  "src": "7294:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MVO_$61_memory_ptr",
                    "typeString": "struct MVOStaking.MVO"
                  },
                  "typeName": {
                    "id": 232,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 231,
                      "name": "MVO",
                      "nameLocations": [
                        "7294:3:0"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61,
                      "src": "7294:3:0"
                    },
                    "referencedDeclaration": 61,
                    "src": "7294:3:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MVO_$61_storage_ptr",
                      "typeString": "struct MVOStaking.MVO"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 235,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "chainId",
                  "nameLocation": "7318:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 237,
                  "src": "7310:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 234,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7310:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7279:47:0"
            },
            "src": "7257:70:0"
          },
          {
            "anonymous": false,
            "eventSelector": "2292e1cf0767804f0c9d4e1f6a5c721c2e11d13a76402bc549936f0f5a27af6a",
            "id": 245,
            "name": "PointsAwarded",
            "nameLocation": "7341:13:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 239,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "mvoAddress",
                  "nameLocation": "7371:10:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "7355:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 238,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7355:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 241,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "points",
                  "nameLocation": "7391:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "7383:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7383:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 243,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "chainId",
                  "nameLocation": "7407:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "7399:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 242,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7399:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7354:61:0"
            },
            "src": "7335:81:0"
          },
          {
            "anonymous": false,
            "eventSelector": "727ff814ae487612c4f2a334a45b1ffd2142f287950070c6d0eb667beaecf979",
            "id": 249,
            "name": "PointsBotUpdated",
            "nameLocation": "7427:16:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 247,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "botAddress",
                  "nameLocation": "7452:10:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 249,
                  "src": "7444:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 246,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7444:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7443:20:0"
            },
            "src": "7421:43:0"
          },
          {
            "anonymous": false,
            "eventSelector": "c3b6eea41a8033c9dffd641ba61665d9b9d5d33a3e2db4bb87952eff9d02d88d",
            "id": 255,
            "name": "PointsReduced",
            "nameLocation": "7478:13:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 254,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 251,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "mvoAddress",
                  "nameLocation": "7508:10:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 255,
                  "src": "7492:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 250,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7492:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 253,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "points",
                  "nameLocation": "7528:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 255,
                  "src": "7520:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 252,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7520:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7491:44:0"
            },
            "src": "7472:64:0"
          },
          {
            "anonymous": false,
            "eventSelector": "9969f40ab26a744c07f08a9a272e0e8e5a8485a11a4b0e524453a08ed4f90a7f",
            "id": 263,
            "name": "PoolMembershipUpdated",
            "nameLocation": "7550:21:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 262,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 257,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newPoolId",
                  "nameLocation": "7598:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 263,
                  "src": "7582:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 256,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7582:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 259,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "oldPoolId",
                  "nameLocation": "7626:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 263,
                  "src": "7618:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 258,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7618:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 261,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "memberMvoID",
                  "nameLocation": "7653:11:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 263,
                  "src": "7646:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 260,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7646:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7571:100:0"
            },
            "src": "7544:128:0"
          },
          {
            "body": {
              "id": 283,
              "nodeType": "Block",
              "src": "7965:149:0",
              "statements": [
                {
                  "condition": {
                    "id": 277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7979:92:0",
                    "subExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 274,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "8060:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8064:6:0",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "8060:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 267,
                                "name": "enshroudProtocols",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 116,
                                "src": "8009:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                  "typeString": "address[] storage ref"
                                }
                              },
                              "id": 271,
                              "indexExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 270,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 268,
                                  "name": "protoIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 119,
                                  "src": "8027:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 269,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8038:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "8027:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8009:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 266,
                            "name": "IEnshroudProtocol_MVOStaking",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38,
                            "src": "7980:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IEnshroudProtocol_MVOStaking_$38_$",
                              "typeString": "type(contract IEnshroudProtocol_MVOStaking)"
                            }
                          },
                          "id": 272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7980:61:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IEnshroudProtocol_MVOStaking_$38",
                            "typeString": "contract IEnshroudProtocol_MVOStaking"
                          }
                        },
                        "id": 273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8048:11:0",
                        "memberName": "adminStatus",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 37,
                        "src": "7980:79:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view external returns (bool)"
                        }
                      },
                      "id": 276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7980:91:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 281,
                  "nodeType": "IfStatement",
                  "src": "7970:124:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 278,
                        "name": "NotAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 310,
                        "src": "8084:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8084:10:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 280,
                    "nodeType": "RevertStatement",
                    "src": "8077:17:0"
                  }
                },
                {
                  "id": 282,
                  "nodeType": "PlaceholderStatement",
                  "src": "8105:1:0"
                }
              ]
            },
            "documentation": {
              "id": 264,
              "nodeType": "StructuredDocumentation",
              "src": "7859:79:0",
              "text": "@notice guarantees caller is an admin in the last-deployed EnshroudProtocol"
            },
            "id": 284,
            "name": "onlyAdmin",
            "nameLocation": "7953:9:0",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 265,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7962:2:0"
            },
            "src": "7944:170:0",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "errorSelector": "97b7798b",
            "id": 286,
            "name": "AmountLargerThanBalance",
            "nameLocation": "8307:23:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 285,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8330:2:0"
            },
            "src": "8301:32:0"
          },
          {
            "errorSelector": "8f201a73",
            "id": 288,
            "name": "AmountLargerThanStake",
            "nameLocation": "8345:21:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8366:2:0"
            },
            "src": "8339:30:0"
          },
          {
            "errorSelector": "a2d2891f",
            "id": 290,
            "name": "AmountLargerThanWithdrawable",
            "nameLocation": "8381:28:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 289,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8409:2:0"
            },
            "src": "8375:37:0"
          },
          {
            "errorSelector": "baefcc6c",
            "id": 292,
            "name": "DuesTooLarge",
            "nameLocation": "8424:12:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 291,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8436:2:0"
            },
            "src": "8418:21:0"
          },
          {
            "errorSelector": "ee15045d",
            "id": 294,
            "name": "IDAlreadyInUse",
            "nameLocation": "8451:14:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8465:2:0"
            },
            "src": "8445:23:0"
          },
          {
            "errorSelector": "b147cb75",
            "id": 296,
            "name": "IDAndMsgSenderMismatch",
            "nameLocation": "8480:22:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 295,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8502:2:0"
            },
            "src": "8474:31:0"
          },
          {
            "errorSelector": "cbaa79dd",
            "id": 298,
            "name": "IncorrectSigLength",
            "nameLocation": "8517:18:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 297,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8535:2:0"
            },
            "src": "8511:27:0"
          },
          {
            "errorSelector": "7a47c9a2",
            "id": 300,
            "name": "InvalidChainId",
            "nameLocation": "8550:14:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 299,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8564:2:0"
            },
            "src": "8544:23:0"
          },
          {
            "errorSelector": "8baa579f",
            "id": 302,
            "name": "InvalidSignature",
            "nameLocation": "8579:16:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8595:2:0"
            },
            "src": "8573:25:0"
          },
          {
            "errorSelector": "ff633a38",
            "id": 304,
            "name": "LengthMismatch",
            "nameLocation": "8610:14:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 303,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8624:2:0"
            },
            "src": "8604:23:0"
          },
          {
            "errorSelector": "74c4d3e0",
            "id": 306,
            "name": "MintPeriodExpired",
            "nameLocation": "8639:17:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 305,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8656:2:0"
            },
            "src": "8633:26:0"
          },
          {
            "errorSelector": "c668fa8d",
            "id": 308,
            "name": "NotActiveMVO",
            "nameLocation": "8671:12:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 307,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8683:2:0"
            },
            "src": "8665:21:0"
          },
          {
            "errorSelector": "7bfa4b9f",
            "id": 310,
            "name": "NotAdmin",
            "nameLocation": "8698:8:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 309,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8706:2:0"
            },
            "src": "8692:17:0"
          },
          {
            "errorSelector": "8d722fb0",
            "id": 312,
            "name": "OnlyPointsRobot",
            "nameLocation": "8721:15:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 311,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8736:2:0"
            },
            "src": "8715:24:0"
          },
          {
            "errorSelector": "dc68e0d0",
            "id": 314,
            "name": "OnlyProtocolContract",
            "nameLocation": "8751:20:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 313,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8771:2:0"
            },
            "src": "8745:29:0"
          },
          {
            "errorSelector": "82de3804",
            "id": 316,
            "name": "OnlyTimelockManager",
            "nameLocation": "8786:19:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 315,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8805:2:0"
            },
            "src": "8780:28:0"
          },
          {
            "errorSelector": "9c8787c0",
            "id": 318,
            "name": "PoolDoesNotExist",
            "nameLocation": "8820:16:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 317,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8836:2:0"
            },
            "src": "8814:25:0"
          },
          {
            "errorSelector": "755f2fa2",
            "id": 320,
            "name": "UnclaimedPoints",
            "nameLocation": "8851:15:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 319,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8866:2:0"
            },
            "src": "8845:24:0"
          },
          {
            "body": {
              "id": 405,
              "nodeType": "Block",
              "src": "9566:806:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 335,
                        "name": "_enshroudProtocol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 323,
                        "src": "9600:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 332,
                        "name": "enshroudProtocols",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 116,
                        "src": "9577:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 334,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9595:4:0",
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "src": "9577:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$",
                        "typeString": "function (address[] storage pointer,address)"
                      }
                    },
                    "id": 336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9577:41:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 337,
                  "nodeType": "ExpressionStatement",
                  "src": "9577:41:0"
                },
                {
                  "expression": {
                    "id": 340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 338,
                      "name": "protoIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 119,
                      "src": "9623:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "31",
                      "id": 339,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9636:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "9623:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 341,
                  "nodeType": "ExpressionStatement",
                  "src": "9623:14:0"
                },
                {
                  "expression": {
                    "id": 344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 342,
                      "name": "enshroudToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 102,
                      "src": "9648:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 343,
                      "name": "_enshroudToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 325,
                      "src": "9664:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9648:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 345,
                  "nodeType": "ExpressionStatement",
                  "src": "9648:30:0"
                },
                {
                  "expression": {
                    "id": 348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 346,
                      "name": "timelockManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 112,
                      "src": "9689:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 347,
                      "name": "_timelockManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 327,
                      "src": "9707:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9689:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 349,
                  "nodeType": "ExpressionStatement",
                  "src": "9689:34:0"
                },
                {
                  "expression": {
                    "id": 354,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 350,
                      "name": "iEnshroudToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 109,
                      "src": "9734:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Permit_MVOStaking_$30",
                        "typeString": "contract IERC20Permit_MVOStaking"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 352,
                          "name": "_enshroudToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 325,
                          "src": "9775:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 351,
                        "name": "IERC20Permit_MVOStaking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30,
                        "src": "9751:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IERC20Permit_MVOStaking_$30_$",
                          "typeString": "type(contract IERC20Permit_MVOStaking)"
                        }
                      },
                      "id": 353,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9751:39:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Permit_MVOStaking_$30",
                        "typeString": "contract IERC20Permit_MVOStaking"
                      }
                    },
                    "src": "9734:56:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Permit_MVOStaking_$30",
                      "typeString": "contract IERC20Permit_MVOStaking"
                    }
                  },
                  "id": 355,
                  "nodeType": "ExpressionStatement",
                  "src": "9734:56:0"
                },
                {
                  "expression": {
                    "id": 358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 356,
                      "name": "minStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 125,
                      "src": "9801:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 357,
                      "name": "_minStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 329,
                      "src": "9812:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9801:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 359,
                  "nodeType": "ExpressionStatement",
                  "src": "9801:20:0"
                },
                {
                  "expression": {
                    "id": 363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 360,
                      "name": "genesisBlock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 105,
                      "src": "9911:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 361,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "9926:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 362,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9932:6:0",
                      "memberName": "number",
                      "nodeType": "MemberAccess",
                      "src": "9926:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9911:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 364,
                  "nodeType": "ExpressionStatement",
                  "src": "9911:27:0"
                },
                {
                  "expression": {
                    "id": 371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 365,
                        "name": "yearToTokensRemaining",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 168,
                        "src": "10095:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 367,
                      "indexExpression": {
                        "hexValue": "31",
                        "id": 366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10117:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10095:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "35303030303030",
                        "id": 368,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10122:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_5000000_by_1",
                          "typeString": "int_const 5000000"
                        },
                        "value": "5000000"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "id": 369,
                        "name": "DECIMALS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 99,
                        "src": "10132:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "10122:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10095:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 372,
                  "nodeType": "ExpressionStatement",
                  "src": "10095:45:0"
                },
                {
                  "expression": {
                    "id": 379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 373,
                        "name": "yearToTokensRemaining",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 168,
                        "src": "10151:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 375,
                      "indexExpression": {
                        "hexValue": "32",
                        "id": 374,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10173:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10151:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 378,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "34303030303030",
                        "id": 376,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10178:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4000000_by_1",
                          "typeString": "int_const 4000000"
                        },
                        "value": "4000000"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "id": 377,
                        "name": "DECIMALS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 99,
                        "src": "10188:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "10178:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10151:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 380,
                  "nodeType": "ExpressionStatement",
                  "src": "10151:45:0"
                },
                {
                  "expression": {
                    "id": 387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 381,
                        "name": "yearToTokensRemaining",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 168,
                        "src": "10207:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 383,
                      "indexExpression": {
                        "hexValue": "33",
                        "id": 382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10229:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10207:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 386,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "33303030303030",
                        "id": 384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10234:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3000000_by_1",
                          "typeString": "int_const 3000000"
                        },
                        "value": "3000000"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "id": 385,
                        "name": "DECIMALS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 99,
                        "src": "10244:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "10234:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10207:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 388,
                  "nodeType": "ExpressionStatement",
                  "src": "10207:45:0"
                },
                {
                  "expression": {
                    "id": 395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 389,
                        "name": "yearToTokensRemaining",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 168,
                        "src": "10263:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 391,
                      "indexExpression": {
                        "hexValue": "34",
                        "id": 390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10285:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        "value": "4"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10263:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "32303030303030",
                        "id": 392,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10290:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2000000_by_1",
                          "typeString": "int_const 2000000"
                        },
                        "value": "2000000"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "id": 393,
                        "name": "DECIMALS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 99,
                        "src": "10300:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "10290:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10263:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 396,
                  "nodeType": "ExpressionStatement",
                  "src": "10263:45:0"
                },
                {
                  "expression": {
                    "id": 403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 397,
                        "name": "yearToTokensRemaining",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 168,
                        "src": "10319:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 399,
                      "indexExpression": {
                        "hexValue": "35",
                        "id": 398,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10341:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_5_by_1",
                          "typeString": "int_const 5"
                        },
                        "value": "5"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10319:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 402,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "31303030303030",
                        "id": 400,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10346:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000_by_1",
                          "typeString": "int_const 1000000"
                        },
                        "value": "1000000"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "id": 401,
                        "name": "DECIMALS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 99,
                        "src": "10356:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "10346:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10319:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 404,
                  "nodeType": "ExpressionStatement",
                  "src": "10319:45:0"
                }
              ]
            },
            "documentation": {
              "id": 321,
              "nodeType": "StructuredDocumentation",
              "src": "9059:342:0",
              "text": "@param _enshroudProtocol: Enshroud Protocol contract address\n @param _enshroudToken: $ENSHROUD token contract address. Immutable.\n @param _timelockManager: contract address for $ENSHROUD token timelock manager. Immutable.\n @param _minStake: initial minimum staked amount of enshroudToken required for a signing MVO"
            },
            "id": 406,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 323,
                  "mutability": "mutable",
                  "name": "_enshroudProtocol",
                  "nameLocation": "9437:17:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 406,
                  "src": "9429:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 322,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9429:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 325,
                  "mutability": "mutable",
                  "name": "_enshroudToken",
                  "nameLocation": "9473:14:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 406,
                  "src": "9465:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 324,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9465:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 327,
                  "mutability": "mutable",
                  "name": "_timelockManager",
                  "nameLocation": "9506:16:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 406,
                  "src": "9498:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 326,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9498:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 329,
                  "mutability": "mutable",
                  "name": "_minStake",
                  "nameLocation": "9541:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 406,
                  "src": "9533:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 328,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9533:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9418:139:0"
            },
            "returnParameters": {
              "id": 331,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9566:0:0"
            },
            "scope": 1967,
            "src": "9407:965:0",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 518,
              "nodeType": "Block",
              "src": "10977:1280:0",
              "statements": [
                {
                  "assignments": [
                    415
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 415,
                      "mutability": "mutable",
                      "name": "notProtocol",
                      "nameLocation": "11062:11:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 518,
                      "src": "11057:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 414,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "11057:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "documentation": "@dev guarantee caller is in the array of deployed enshroudProtocols",
                  "id": 417,
                  "initialValue": {
                    "hexValue": "74727565",
                    "id": 416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11076:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11057:23:0"
                },
                {
                  "body": {
                    "id": 444,
                    "nodeType": "Block",
                    "src": "11222:101:0",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 429,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "11232:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11236:6:0",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "11232:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 431,
                              "name": "enshroudProtocols",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 116,
                              "src": "11246:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 435,
                            "indexExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 434,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 432,
                                "name": "pIdx",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 419,
                                "src": "11264:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 433,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11269:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "11264:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11246:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "11232:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 443,
                        "nodeType": "IfStatement",
                        "src": "11228:90:0",
                        "trueBody": {
                          "id": 442,
                          "nodeType": "Block",
                          "src": "11273:45:0",
                          "statements": [
                            {
                              "expression": {
                                "id": 439,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 437,
                                  "name": "notProtocol",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 415,
                                  "src": "11280:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "66616c7365",
                                  "id": 438,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11294:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                "src": "11280:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 440,
                              "nodeType": "ExpressionStatement",
                              "src": "11280:19:0"
                            },
                            {
                              "id": 441,
                              "nodeType": "Break",
                              "src": "11306:5:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 423,
                      "name": "pIdx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 419,
                      "src": "11204:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 424,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11211:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11204:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 445,
                  "initializationExpression": {
                    "assignments": [
                      419
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 419,
                        "mutability": "mutable",
                        "name": "pIdx",
                        "nameLocation": "11171:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 445,
                        "src": "11163:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 418,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11163:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 422,
                    "initialValue": {
                      "expression": {
                        "id": 420,
                        "name": "enshroudProtocols",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 116,
                        "src": "11178:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 421,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11196:6:0",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "11178:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "11163:39:0"
                  },
                  "isSimpleCounterLoop": false,
                  "loopExpression": {
                    "expression": {
                      "id": 427,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "11214:6:0",
                      "subExpression": {
                        "id": 426,
                        "name": "pIdx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 419,
                        "src": "11214:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 428,
                    "nodeType": "ExpressionStatement",
                    "src": "11214:6:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "11158:165:0"
                },
                {
                  "condition": {
                    "id": 446,
                    "name": "notProtocol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 415,
                    "src": "11337:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 450,
                  "nodeType": "IfStatement",
                  "src": "11333:46:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 447,
                        "name": "OnlyProtocolContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 314,
                        "src": "11357:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11357:22:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 449,
                    "nodeType": "RevertStatement",
                    "src": "11350:29:0"
                  }
                },
                {
                  "assignments": [
                    453
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 453,
                      "mutability": "mutable",
                      "name": "_leadMVO",
                      "nameLocation": "11404:8:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 518,
                      "src": "11392:20:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MVO_$61_storage_ptr",
                        "typeString": "struct MVOStaking.MVO"
                      },
                      "typeName": {
                        "id": 452,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 451,
                          "name": "MVO",
                          "nameLocations": [
                            "11392:3:0"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61,
                          "src": "11392:3:0"
                        },
                        "referencedDeclaration": 61,
                        "src": "11392:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage_ptr",
                          "typeString": "struct MVOStaking.MVO"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 459,
                  "initialValue": {
                    "baseExpression": {
                      "id": 454,
                      "name": "idToMVO",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 163,
                      "src": "11415:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                        "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                      }
                    },
                    "id": 458,
                    "indexExpression": {
                      "baseExpression": {
                        "id": 455,
                        "name": "_mvoIDs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 410,
                        "src": "11423:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "string calldata[] calldata"
                        }
                      },
                      "id": 457,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 456,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11431:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11423:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11415:19:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MVO_$61_storage",
                      "typeString": "struct MVOStaking.MVO storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11392:42:0"
                },
                {
                  "id": 471,
                  "nodeType": "UncheckedBlock",
                  "src": "11445:111:0",
                  "statements": [
                    {
                      "expression": {
                        "id": 465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 460,
                            "name": "pointsBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 152,
                            "src": "11470:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 463,
                          "indexExpression": {
                            "expression": {
                              "id": 461,
                              "name": "_leadMVO",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 453,
                              "src": "11484:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MVO_$61_storage_ptr",
                                "typeString": "struct MVOStaking.MVO storage pointer"
                              }
                            },
                            "id": 462,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11493:14:0",
                            "memberName": "stakingAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48,
                            "src": "11484:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "11470:38:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "hexValue": "33",
                          "id": 464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11512:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_3_by_1",
                            "typeString": "int_const 3"
                          },
                          "value": "3"
                        },
                        "src": "11470:43:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 466,
                      "nodeType": "ExpressionStatement",
                      "src": "11470:43:0"
                    },
                    {
                      "expression": {
                        "id": 469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 467,
                          "name": "totalPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 134,
                          "src": "11528:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "hexValue": "33",
                          "id": 468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11543:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_3_by_1",
                            "typeString": "int_const 3"
                          },
                          "value": "3"
                        },
                        "src": "11528:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 470,
                      "nodeType": "ExpressionStatement",
                      "src": "11528:16:0"
                    }
                  ]
                },
                {
                  "body": {
                    "id": 508,
                    "nodeType": "Block",
                    "src": "11893:285:0",
                    "statements": [
                      {
                        "assignments": [
                          481
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 481,
                            "mutability": "mutable",
                            "name": "_stakeAddr",
                            "nameLocation": "11916:10:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 508,
                            "src": "11908:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 480,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "11908:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 488,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 482,
                              "name": "idToMVO",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 163,
                              "src": "11929:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                                "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                              }
                            },
                            "id": 486,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 483,
                                "name": "_mvoIDs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 410,
                                "src": "11937:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "string calldata[] calldata"
                                }
                              },
                              "id": 485,
                              "indexExpression": {
                                "id": 484,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 473,
                                "src": "11945:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "11937:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11929:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MVO_$61_storage",
                              "typeString": "struct MVOStaking.MVO storage ref"
                            }
                          },
                          "id": 487,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "11949:14:0",
                          "memberName": "stakingAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 48,
                          "src": "11929:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "11908:55:0"
                      },
                      {
                        "id": 500,
                        "nodeType": "UncheckedBlock",
                        "src": "11978:126:0",
                        "statements": [
                          {
                            "expression": {
                              "id": 492,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "12007:27:0",
                              "subExpression": {
                                "baseExpression": {
                                  "id": 489,
                                  "name": "pointsBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 152,
                                  "src": "12009:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 491,
                                "indexExpression": {
                                  "id": 490,
                                  "name": "_stakeAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 481,
                                  "src": "12023:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "12009:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 493,
                            "nodeType": "ExpressionStatement",
                            "src": "12007:27:0"
                          },
                          {
                            "expression": {
                              "id": 495,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "12053:13:0",
                              "subExpression": {
                                "id": 494,
                                "name": "totalPoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 134,
                                "src": "12055:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 496,
                            "nodeType": "ExpressionStatement",
                            "src": "12053:13:0"
                          },
                          {
                            "expression": {
                              "id": 498,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "12085:3:0",
                              "subExpression": {
                                "id": 497,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 473,
                                "src": "12087:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 499,
                            "nodeType": "ExpressionStatement",
                            "src": "12085:3:0"
                          }
                        ]
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 502,
                              "name": "_stakeAddr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 481,
                              "src": "12137:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 503,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12149:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            {
                              "expression": {
                                "id": 504,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "12152:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 505,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "12158:7:0",
                              "memberName": "chainid",
                              "nodeType": "MemberAccess",
                              "src": "12152:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 501,
                            "name": "PointsAwarded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 245,
                            "src": "12123:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12123:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 507,
                        "nodeType": "EmitStatement",
                        "src": "12118:48:0"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 476,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 473,
                      "src": "11871:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 477,
                        "name": "_mvoIDs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 410,
                        "src": "11875:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "string calldata[] calldata"
                        }
                      },
                      "id": 478,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11883:6:0",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "11875:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11871:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "documentation": "@dev MVO will be able to claim tokens with their 'pointsBalance' via their 'stakingAddress', but note operations block sigs are made with 'signingAddress'.\n Start at [1] as [0] (lead MVO) was already handled above. Array length limited in protocol contract.",
                  "id": 509,
                  "initializationExpression": {
                    "assignments": [
                      473
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 473,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "11864:1:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 509,
                        "src": "11856:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 472,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11856:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 475,
                    "initialValue": {
                      "hexValue": "31",
                      "id": 474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11868:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "11856:13:0"
                  },
                  "isSimpleCounterLoop": false,
                  "nodeType": "ForStatement",
                  "src": "11851:327:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 511,
                          "name": "_leadMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 453,
                          "src": "12207:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVO_$61_storage_ptr",
                            "typeString": "struct MVOStaking.MVO storage pointer"
                          }
                        },
                        "id": 512,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12216:14:0",
                        "memberName": "stakingAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 48,
                        "src": "12207:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "hexValue": "33",
                        "id": 513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12232:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      },
                      {
                        "expression": {
                          "id": 514,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "12235:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 515,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12241:7:0",
                        "memberName": "chainid",
                        "nodeType": "MemberAccess",
                        "src": "12235:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 510,
                      "name": "PointsAwarded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 245,
                      "src": "12193:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12193:56:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 517,
                  "nodeType": "EmitStatement",
                  "src": "12188:61:0"
                }
              ]
            },
            "documentation": {
              "id": 407,
              "nodeType": "StructuredDocumentation",
              "src": "10380:518:0",
              "text": "@notice award a lead MVO (3 points) and committee MVOs (1 point each) for each processed transaction, only callable by the protocol contract\n @dev uses idToMVO mapping to determine the committee MVO staking addresses; sigs not currently checked since only enshroudProtocol can call this method, and every invocation is preceeded by a call to checkMVOSig(); Reentrant-protected by each function in EnshroudProtocol which is able to call this function\n @param _mvoIDs: IDs of MVOs for the transaction"
            },
            "functionSelector": "c38b84a1",
            "id": 519,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "awardPoints",
            "nameLocation": "10913:11:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 411,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 410,
                  "mutability": "mutable",
                  "name": "_mvoIDs",
                  "nameLocation": "10953:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 519,
                  "src": "10935:25:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "string[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 408,
                      "name": "string",
                      "nodeType": "ElementaryTypeName",
                      "src": "10935:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      }
                    },
                    "id": 409,
                    "nodeType": "ArrayTypeName",
                    "src": "10935:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                      "typeString": "string[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10924:43:0"
            },
            "returnParameters": {
              "id": 412,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10977:0:0"
            },
            "scope": 1967,
            "src": "10904:1353:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 628,
              "nodeType": "Block",
              "src": "12793:951:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 533,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "12871:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 534,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12875:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "12871:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 535,
                      "name": "pointsBot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 137,
                      "src": "12885:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12871:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "documentation": "@dev guarantee caller is the duly authorized point import bot",
                  "id": 540,
                  "nodeType": "IfStatement",
                  "src": "12867:53:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 537,
                        "name": "OnlyPointsRobot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 312,
                        "src": "12903:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 538,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12903:17:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 539,
                    "nodeType": "RevertStatement",
                    "src": "12896:24:0"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 544,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 541,
                        "name": "_chainId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 522,
                        "src": "12929:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "id": 542,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "12941:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "12947:7:0",
                        "memberName": "chainid",
                        "nodeType": "MemberAccess",
                        "src": "12941:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "12929:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 547,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 545,
                        "name": "_chainId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 522,
                        "src": "12958:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12970:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "12958:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12929:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 552,
                  "nodeType": "IfStatement",
                  "src": "12925:71:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 549,
                        "name": "InvalidChainId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 300,
                        "src": "12980:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12980:16:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 551,
                    "nodeType": "RevertStatement",
                    "src": "12973:23:0"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 556,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 553,
                          "name": "_mvoIDs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 525,
                          "src": "13005:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "string calldata[] calldata"
                          }
                        },
                        "id": 554,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "13013:6:0",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "13005:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13023:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "13005:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 561,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 557,
                          "name": "_mvoIDs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 525,
                          "src": "13028:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "string calldata[] calldata"
                          }
                        },
                        "id": 558,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "13036:6:0",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "13028:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "expression": {
                          "id": 559,
                          "name": "_points",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 528,
                          "src": "13046:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                            "typeString": "uint256[] calldata"
                          }
                        },
                        "id": 560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "13054:6:0",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "13046:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "13028:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13005:55:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 567,
                  "nodeType": "IfStatement",
                  "src": "13001:96:0",
                  "trueBody": {
                    "id": 566,
                    "nodeType": "Block",
                    "src": "13062:35:0",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 563,
                            "name": "LengthMismatch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 304,
                            "src": "13075:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                              "typeString": "function () pure returns (error)"
                            }
                          },
                          "id": 564,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13075:16:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_error",
                            "typeString": "error"
                          }
                        },
                        "id": 565,
                        "nodeType": "RevertStatement",
                        "src": "13068:23:0"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 626,
                    "nodeType": "Block",
                    "src": "13199:541:0",
                    "statements": [
                      {
                        "assignments": [
                          578
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 578,
                            "mutability": "mutable",
                            "name": "_mvo",
                            "nameLocation": "13223:4:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 626,
                            "src": "13211:16:0",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MVO_$61_storage_ptr",
                              "typeString": "struct MVOStaking.MVO"
                            },
                            "typeName": {
                              "id": 577,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 576,
                                "name": "MVO",
                                "nameLocations": [
                                  "13211:3:0"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 61,
                                "src": "13211:3:0"
                              },
                              "referencedDeclaration": 61,
                              "src": "13211:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MVO_$61_storage_ptr",
                                "typeString": "struct MVOStaking.MVO"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 584,
                        "initialValue": {
                          "baseExpression": {
                            "id": 579,
                            "name": "idToMVO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 163,
                            "src": "13230:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                              "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                            }
                          },
                          "id": 583,
                          "indexExpression": {
                            "baseExpression": {
                              "id": 580,
                              "name": "_mvoIDs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 525,
                              "src": "13238:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "string calldata[] calldata"
                              }
                            },
                            "id": 582,
                            "indexExpression": {
                              "id": 581,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 569,
                              "src": "13246:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "13238:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "13230:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVO_$61_storage",
                            "typeString": "struct MVOStaking.MVO storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13211:38:0"
                      },
                      {
                        "assignments": [
                          586
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 586,
                            "mutability": "mutable",
                            "name": "_stakeAddr",
                            "nameLocation": "13263:10:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 626,
                            "src": "13255:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 585,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "13255:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 589,
                        "initialValue": {
                          "expression": {
                            "id": 587,
                            "name": "_mvo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 578,
                            "src": "13276:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MVO_$61_storage_ptr",
                              "typeString": "struct MVOStaking.MVO storage pointer"
                            }
                          },
                          "id": 588,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13281:14:0",
                          "memberName": "stakingAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 48,
                          "src": "13276:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13255:40:0"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 590,
                            "name": "_stakeAddr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 586,
                            "src": "13412:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 593,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13434:1:0",
                                "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": 592,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "13426:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 591,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "13426:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 594,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13426:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13412:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "documentation": "@dev we do not check _mvo.active to allow import of points accrued elsewhere prior to deactivation",
                        "id": 599,
                        "nodeType": "IfStatement",
                        "src": "13408:51:0",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 596,
                              "name": "NotActiveMVO",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 308,
                              "src": "13445:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 597,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13445:14:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 598,
                          "nodeType": "RevertStatement",
                          "src": "13438:21:0"
                        }
                      },
                      {
                        "id": 625,
                        "nodeType": "UncheckedBlock",
                        "src": "13465:270:0",
                        "statements": [
                          {
                            "expression": {
                              "id": 606,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 600,
                                  "name": "pointsBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 152,
                                  "src": "13588:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 602,
                                "indexExpression": {
                                  "id": 601,
                                  "name": "_stakeAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 586,
                                  "src": "13602:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "13588:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "baseExpression": {
                                  "id": 603,
                                  "name": "_points",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 528,
                                  "src": "13617:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                    "typeString": "uint256[] calldata"
                                  }
                                },
                                "id": 605,
                                "indexExpression": {
                                  "id": 604,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 569,
                                  "src": "13625:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13617:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "13588:39:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 607,
                            "nodeType": "ExpressionStatement",
                            "src": "13588:39:0"
                          },
                          {
                            "expression": {
                              "id": 612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 608,
                                "name": "totalPoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 134,
                                "src": "13634:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "baseExpression": {
                                  "id": 609,
                                  "name": "_points",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 528,
                                  "src": "13649:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                    "typeString": "uint256[] calldata"
                                  }
                                },
                                "id": 611,
                                "indexExpression": {
                                  "id": 610,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 569,
                                  "src": "13657:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13649:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "13634:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 613,
                            "nodeType": "ExpressionStatement",
                            "src": "13634:25:0"
                          },
                          {
                            "eventCall": {
                              "arguments": [
                                {
                                  "id": 615,
                                  "name": "_stakeAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 586,
                                  "src": "13685:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "baseExpression": {
                                    "id": 616,
                                    "name": "_points",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 528,
                                    "src": "13697:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                      "typeString": "uint256[] calldata"
                                    }
                                  },
                                  "id": 618,
                                  "indexExpression": {
                                    "id": 617,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 569,
                                    "src": "13705:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "13697:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 619,
                                  "name": "_chainId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 522,
                                  "src": "13709:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 614,
                                "name": "PointsAwarded",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 245,
                                "src": "13671:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,uint256,uint256)"
                                }
                              },
                              "id": 620,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13671:47:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 621,
                            "nodeType": "EmitStatement",
                            "src": "13666:52:0"
                          },
                          {
                            "expression": {
                              "id": 623,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "13725:3:0",
                              "subExpression": {
                                "id": 622,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 569,
                                "src": "13727:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 624,
                            "nodeType": "ExpressionStatement",
                            "src": "13725:3:0"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 572,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 569,
                      "src": "13177:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 573,
                        "name": "_mvoIDs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 525,
                        "src": "13181:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "string calldata[] calldata"
                        }
                      },
                      "id": 574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13189:6:0",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13181:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13177:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 627,
                  "initializationExpression": {
                    "assignments": [
                      569
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 569,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "13170:1:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 627,
                        "src": "13162:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 568,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13162:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 571,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13174:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "13162:13:0"
                  },
                  "isSimpleCounterLoop": false,
                  "nodeType": "ForStatement",
                  "src": "13157:583:0"
                }
              ]
            },
            "documentation": {
              "id": 520,
              "nodeType": "StructuredDocumentation",
              "src": "12262:398:0",
              "text": "@notice this method is only relevant on Eth mainnet, callable by bot\n @dev used to migrate points earned by MVOs on other chains to mainnet where staking and point claims actually take place\n @param _chainId: the chain the bot is importing the points from\n @param _mvoIDs: IDs of MVOs for which points are being imported\n @param _points: number of points for each listed MVO"
            },
            "functionSelector": "52cc854a",
            "id": 629,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 531,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 530,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "12780:12:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1994,
                  "src": "12780:12:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "12780:12:0"
              }
            ],
            "name": "importPoints",
            "nameLocation": "12672:12:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 529,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 522,
                  "mutability": "mutable",
                  "name": "_chainId",
                  "nameLocation": "12697:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 629,
                  "src": "12689:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 521,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12689:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 525,
                  "mutability": "mutable",
                  "name": "_mvoIDs",
                  "nameLocation": "12728:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 629,
                  "src": "12710:25:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "string[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 523,
                      "name": "string",
                      "nodeType": "ElementaryTypeName",
                      "src": "12710:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      }
                    },
                    "id": 524,
                    "nodeType": "ArrayTypeName",
                    "src": "12710:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                      "typeString": "string[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 528,
                  "mutability": "mutable",
                  "name": "_points",
                  "nameLocation": "12759:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 629,
                  "src": "12740:26:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 526,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12740:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 527,
                    "nodeType": "ArrayTypeName",
                    "src": "12740:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12684:86:0"
            },
            "returnParameters": {
              "id": 532,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12793:0:0"
            },
            "scope": 1967,
            "src": "12663:1081:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 671,
              "nodeType": "Block",
              "src": "14603:552:0",
              "statements": [
                {
                  "assignments": [
                    640
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 640,
                      "mutability": "mutable",
                      "name": "_stakingAddr",
                      "nameLocation": "14622:12:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 671,
                      "src": "14614:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 639,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "14614:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 645,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 641,
                        "name": "idToMVO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 163,
                        "src": "14637:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                          "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                        }
                      },
                      "id": 643,
                      "indexExpression": {
                        "id": 642,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 632,
                        "src": "14645:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14637:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MVO_$61_storage",
                        "typeString": "struct MVOStaking.MVO storage ref"
                      }
                    },
                    "id": 644,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "14653:14:0",
                    "memberName": "stakingAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 48,
                    "src": "14637:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14614:53:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 646,
                        "name": "pointsBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 152,
                        "src": "14682:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 648,
                      "indexExpression": {
                        "id": 647,
                        "name": "_stakingAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 640,
                        "src": "14696:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14682:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 649,
                      "name": "_points",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 634,
                      "src": "14712:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14682:37:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 654,
                  "nodeType": "IfStatement",
                  "src": "14678:88:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 651,
                        "name": "AmountLargerThanBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 286,
                        "src": "14741:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14741:25:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 653,
                    "nodeType": "RevertStatement",
                    "src": "14734:32:0"
                  }
                },
                {
                  "id": 665,
                  "nodeType": "UncheckedBlock",
                  "src": "14982:112:0",
                  "statements": [
                    {
                      "expression": {
                        "id": 659,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 655,
                            "name": "pointsBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 152,
                            "src": "15007:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 657,
                          "indexExpression": {
                            "id": 656,
                            "name": "_stakingAddr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 640,
                            "src": "15021:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "15007:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "id": 658,
                          "name": "_points",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 634,
                          "src": "15038:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15007:38:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 660,
                      "nodeType": "ExpressionStatement",
                      "src": "15007:38:0"
                    },
                    {
                      "expression": {
                        "id": 663,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 661,
                          "name": "totalPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 134,
                          "src": "15060:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "id": 662,
                          "name": "_points",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 634,
                          "src": "15075:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15060:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 664,
                      "nodeType": "ExpressionStatement",
                      "src": "15060:22:0"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 667,
                        "name": "_stakingAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 640,
                        "src": "15125:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 668,
                        "name": "_points",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 634,
                        "src": "15139:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 666,
                      "name": "PointsReduced",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 255,
                      "src": "15111:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15111:36:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 670,
                  "nodeType": "EmitStatement",
                  "src": "15106:41:0"
                }
              ]
            },
            "documentation": {
              "id": 630,
              "nodeType": "StructuredDocumentation",
              "src": "14332:158:0",
              "text": "@param _mvoID: ID of MVO whose points are being reduced\n @param _points: amount of points being subtracted from the relevant MVO's 'pointsBalance'"
            },
            "functionSelector": "45ed3db1",
            "id": 672,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 637,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 636,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "14593:9:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 284,
                  "src": "14593:9:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "14593:9:0"
              }
            ],
            "name": "reducePoints",
            "nameLocation": "14505:12:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 635,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 632,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "14544:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 672,
                  "src": "14528:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 631,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "14528:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 634,
                  "mutability": "mutable",
                  "name": "_points",
                  "nameLocation": "14569:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 672,
                  "src": "14561:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 633,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14561:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14517:66:0"
            },
            "returnParameters": {
              "id": 638,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14603:0:0"
            },
            "scope": 1967,
            "src": "14496:659:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 878,
              "nodeType": "Block",
              "src": "15753:3033:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 680,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "15768:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 681,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15772:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "15768:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 682,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "15782:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 684,
                        "indexExpression": {
                          "id": 683,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 675,
                          "src": "15790:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "15782:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 685,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15798:14:0",
                      "memberName": "stakingAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48,
                      "src": "15782:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "15768:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 690,
                  "nodeType": "IfStatement",
                  "src": "15764:94:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 687,
                        "name": "IDAndMsgSenderMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 296,
                        "src": "15834:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 688,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15834:24:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 689,
                    "nodeType": "RevertStatement",
                    "src": "15827:31:0"
                  }
                },
                {
                  "assignments": [
                    692
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 692,
                      "mutability": "mutable",
                      "name": "_poolId",
                      "nameLocation": "15935:7:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "15927:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 691,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15927:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 697,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 693,
                        "name": "idToMVO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 163,
                        "src": "15945:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                          "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                        }
                      },
                      "id": 695,
                      "indexExpression": {
                        "id": 694,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 675,
                        "src": "15953:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "15945:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MVO_$61_storage",
                        "typeString": "struct MVOStaking.MVO storage ref"
                      }
                    },
                    "id": 696,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "15961:12:0",
                    "memberName": "memberPoolId",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 56,
                    "src": "15945:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint120",
                      "typeString": "uint120"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15927:46:0"
                },
                {
                  "assignments": [
                    699
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 699,
                      "mutability": "mutable",
                      "name": "_pointsAccrued",
                      "nameLocation": "15992:14:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "15984:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 698,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15984:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 704,
                  "initialValue": {
                    "baseExpression": {
                      "id": 700,
                      "name": "pointsBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 152,
                      "src": "16009:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 703,
                    "indexExpression": {
                      "expression": {
                        "id": 701,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "16023:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16027:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "16023:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16009:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15984:50:0"
                },
                {
                  "assignments": [
                    706
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 706,
                      "mutability": "mutable",
                      "name": "_index",
                      "nameLocation": "16053:6:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "16045:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 705,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16045:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 707,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16045:14:0"
                },
                {
                  "assignments": [
                    709
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 709,
                      "mutability": "mutable",
                      "name": "_blockDiff",
                      "nameLocation": "16078:10:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "16070:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 708,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16070:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 714,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 710,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "16091:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 711,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16097:6:0",
                      "memberName": "number",
                      "nodeType": "MemberAccess",
                      "src": "16091:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 712,
                      "name": "genesisBlock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 105,
                      "src": "16106:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16091:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16070:48:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 715,
                      "name": "_blockDiff",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 709,
                      "src": "16207:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 718,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 716,
                        "name": "BLOCKS_PER_YEAR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 95,
                        "src": "16220:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "hexValue": "35",
                        "id": 717,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16238:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_5_by_1",
                          "typeString": "int_const 5"
                        },
                        "value": "5"
                      },
                      "src": "16220:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16207:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 725,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 723,
                        "name": "_blockDiff",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 709,
                        "src": "16287:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "id": 724,
                        "name": "BLOCKS_PER_YEAR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 95,
                        "src": "16301:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "16287:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 738,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 730,
                            "name": "_blockDiff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 709,
                            "src": "16362:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 731,
                            "name": "BLOCKS_PER_YEAR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 95,
                            "src": "16375:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16362:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 733,
                            "name": "_blockDiff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 709,
                            "src": "16394:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 736,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 734,
                              "name": "BLOCKS_PER_YEAR",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 95,
                              "src": "16408:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 735,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16426:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "16408:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16394:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "16362:65:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 743,
                              "name": "_blockDiff",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 709,
                              "src": "16483:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 746,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 744,
                                "name": "BLOCKS_PER_YEAR",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 95,
                                "src": "16496:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 745,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16514:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "16496:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "16483:32:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 748,
                              "name": "_blockDiff",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 709,
                              "src": "16532:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 751,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 749,
                                "name": "BLOCKS_PER_YEAR",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 95,
                                "src": "16546:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "hexValue": "33",
                                "id": 750,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16564:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "16546:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "16532:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "16483:82:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 768,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 762,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 758,
                                "name": "_blockDiff",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 709,
                                "src": "16621:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 761,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 759,
                                  "name": "BLOCKS_PER_YEAR",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 95,
                                  "src": "16634:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "hexValue": "33",
                                  "id": 760,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16652:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                },
                                "src": "16634:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16621:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 767,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 763,
                                "name": "_blockDiff",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 709,
                                "src": "16670:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 764,
                                  "name": "BLOCKS_PER_YEAR",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 95,
                                  "src": "16684:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "hexValue": "34",
                                  "id": 765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16702:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "16684:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16670:33:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "16621:82:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 783,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 777,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 773,
                                  "name": "_blockDiff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 709,
                                  "src": "16759:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 776,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 774,
                                    "name": "BLOCKS_PER_YEAR",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 95,
                                    "src": "16772:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "hexValue": "34",
                                    "id": 775,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16790:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_4_by_1",
                                      "typeString": "int_const 4"
                                    },
                                    "value": "4"
                                  },
                                  "src": "16772:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16759:32:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 782,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 778,
                                  "name": "_blockDiff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 709,
                                  "src": "16808:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 781,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 779,
                                    "name": "BLOCKS_PER_YEAR",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 95,
                                    "src": "16822:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "hexValue": "35",
                                    "id": 780,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16840:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_5_by_1",
                                      "typeString": "int_const 5"
                                    },
                                    "value": "5"
                                  },
                                  "src": "16822:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16808:33:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "16759:82:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 788,
                            "nodeType": "IfStatement",
                            "src": "16741:122:0",
                            "trueBody": {
                              "expression": {
                                "id": 786,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 784,
                                  "name": "_index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 706,
                                  "src": "16853:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "35",
                                  "id": 785,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16862:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_5_by_1",
                                    "typeString": "int_const 5"
                                  },
                                  "value": "5"
                                },
                                "src": "16853:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 787,
                              "nodeType": "ExpressionStatement",
                              "src": "16853:10:0"
                            }
                          },
                          "id": 789,
                          "nodeType": "IfStatement",
                          "src": "16603:260:0",
                          "trueBody": {
                            "expression": {
                              "id": 771,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 769,
                                "name": "_index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 706,
                                "src": "16715:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "34",
                                "id": 770,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16724:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "16715:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 772,
                            "nodeType": "ExpressionStatement",
                            "src": "16715:10:0"
                          }
                        },
                        "id": 790,
                        "nodeType": "IfStatement",
                        "src": "16465:398:0",
                        "trueBody": {
                          "expression": {
                            "id": 756,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 754,
                              "name": "_index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 706,
                              "src": "16577:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "33",
                              "id": 755,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16586:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_3_by_1",
                                "typeString": "int_const 3"
                              },
                              "value": "3"
                            },
                            "src": "16577:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 757,
                          "nodeType": "ExpressionStatement",
                          "src": "16577:10:0"
                        }
                      },
                      "id": 791,
                      "nodeType": "IfStatement",
                      "src": "16344:519:0",
                      "trueBody": {
                        "expression": {
                          "id": 741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 739,
                            "name": "_index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 706,
                            "src": "16439:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "32",
                            "id": 740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "16448:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "16439:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 742,
                        "nodeType": "ExpressionStatement",
                        "src": "16439:10:0"
                      }
                    },
                    "id": 792,
                    "nodeType": "IfStatement",
                    "src": "16283:580:0",
                    "trueBody": {
                      "expression": {
                        "id": 728,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 726,
                          "name": "_index",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 706,
                          "src": "16318:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "hexValue": "31",
                          "id": 727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16327:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "16318:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 729,
                      "nodeType": "ExpressionStatement",
                      "src": "16318:10:0"
                    }
                  },
                  "id": 793,
                  "nodeType": "IfStatement",
                  "src": "16203:660:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 720,
                        "name": "MintPeriodExpired",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 306,
                        "src": "16248:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 721,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16248:19:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 722,
                    "nodeType": "RevertStatement",
                    "src": "16241:26:0"
                  }
                },
                {
                  "assignments": [
                    795
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 795,
                      "mutability": "mutable",
                      "name": "_availableToMint",
                      "nameLocation": "17409:16:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "17401:24:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 794,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17401:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 807,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 800,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 796,
                              "name": "yearToTokensRemaining",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 168,
                              "src": "17429:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 798,
                            "indexExpression": {
                              "id": 797,
                              "name": "_index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 706,
                              "src": "17451:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "17429:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 799,
                            "name": "_blockDiff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 709,
                            "src": "17474:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17429:55:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 801,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "17428:57:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 804,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 802,
                            "name": "BLOCKS_PER_YEAR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 95,
                            "src": "17489:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 803,
                            "name": "_index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 706,
                            "src": "17507:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17489:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 805,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "17488:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17428:86:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17401:113:0"
                },
                {
                  "assignments": [
                    809
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 809,
                      "mutability": "mutable",
                      "name": "_earnedTokens",
                      "nameLocation": "17696:13:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "17688:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 808,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17688:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 816,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 810,
                            "name": "_pointsAccrued",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 699,
                            "src": "17713:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 811,
                            "name": "_availableToMint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 795,
                            "src": "17730:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17713:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 813,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "17712:35:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "id": 814,
                      "name": "totalPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 134,
                      "src": "17763:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17712:62:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17688:86:0"
                },
                {
                  "expression": {
                    "id": 819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 817,
                      "name": "totalPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 134,
                      "src": "17936:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 818,
                      "name": "_pointsAccrued",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 699,
                      "src": "17951:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17936:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 820,
                  "nodeType": "ExpressionStatement",
                  "src": "17936:29:0"
                },
                {
                  "expression": {
                    "id": 825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "17976:32:0",
                    "subExpression": {
                      "baseExpression": {
                        "id": 821,
                        "name": "pointsBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 152,
                        "src": "17983:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 824,
                      "indexExpression": {
                        "expression": {
                          "id": 822,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "17997:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 823,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18001:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "17997:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17983:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 826,
                  "nodeType": "ExpressionStatement",
                  "src": "17976:32:0"
                },
                {
                  "expression": {
                    "id": 831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 827,
                        "name": "yearToTokensRemaining",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 168,
                        "src": "18219:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 829,
                      "indexExpression": {
                        "id": 828,
                        "name": "_index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 706,
                        "src": "18241:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "18219:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 830,
                      "name": "_earnedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 809,
                      "src": "18252:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18219:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 832,
                  "nodeType": "ExpressionStatement",
                  "src": "18219:46:0"
                },
                {
                  "assignments": [
                    834
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 834,
                      "mutability": "mutable",
                      "name": "_dues",
                      "nameLocation": "18443:5:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 878,
                      "src": "18435:13:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 833,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18435:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 847,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 843,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 835,
                            "name": "_earnedTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 809,
                            "src": "18452:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 838,
                                    "name": "idToMVOPool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 174,
                                    "src": "18476:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_MVOPool_$67_storage_$",
                                      "typeString": "mapping(uint256 => struct MVOStaking.MVOPool storage ref)"
                                    }
                                  },
                                  "id": 840,
                                  "indexExpression": {
                                    "id": 839,
                                    "name": "_poolId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 692,
                                    "src": "18488:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "18476:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MVOPool_$67_storage",
                                    "typeString": "struct MVOStaking.MVOPool storage ref"
                                  }
                                },
                                "id": 841,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "18497:4:0",
                                "memberName": "dues",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 66,
                                "src": "18476:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              ],
                              "id": 837,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18468:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 836,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "18468:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 842,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18468:34:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18452:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 844,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "18451:52:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "id": 845,
                      "name": "DECIMALS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 99,
                      "src": "18519:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18451:76:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18435:92:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 851,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "18585:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 852,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18589:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "18585:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 853,
                          "name": "_earnedTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 809,
                          "src": "18597:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "id": 854,
                          "name": "_dues",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 834,
                          "src": "18613:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "18597:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 848,
                        "name": "iEnshroudToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 109,
                        "src": "18565:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Permit_MVOStaking_$30",
                          "typeString": "contract IERC20Permit_MVOStaking"
                        }
                      },
                      "id": 850,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "18580:4:0",
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12,
                      "src": "18565:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18565:54:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 857,
                  "nodeType": "ExpressionStatement",
                  "src": "18565:54:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 858,
                      "name": "_dues",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 834,
                      "src": "18634:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18643:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "18634:10:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 871,
                  "nodeType": "IfStatement",
                  "src": "18630:89:0",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 864,
                              "name": "idToMVOPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 174,
                              "src": "18679:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_MVOPool_$67_storage_$",
                                "typeString": "mapping(uint256 => struct MVOStaking.MVOPool storage ref)"
                              }
                            },
                            "id": 866,
                            "indexExpression": {
                              "id": 865,
                              "name": "_poolId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 692,
                              "src": "18691:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "18679:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MVOPool_$67_storage",
                              "typeString": "struct MVOStaking.MVOPool storage ref"
                            }
                          },
                          "id": 867,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "18700:11:0",
                          "memberName": "poolAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 64,
                          "src": "18679:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "id": 868,
                          "name": "_dues",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 834,
                          "src": "18713:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 861,
                          "name": "iEnshroudToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 109,
                          "src": "18659:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Permit_MVOStaking_$30",
                            "typeString": "contract IERC20Permit_MVOStaking"
                          }
                        },
                        "id": 863,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18674:4:0",
                        "memberName": "mint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12,
                        "src": "18659:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256) external"
                        }
                      },
                      "id": 869,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18659:60:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 870,
                    "nodeType": "ExpressionStatement",
                    "src": "18659:60:0"
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 873,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "18751:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18755:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "18751:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 875,
                        "name": "_pointsAccrued",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 699,
                        "src": "18763:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 872,
                      "name": "PointsReduced",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 255,
                      "src": "18737:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18737:41:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 877,
                  "nodeType": "EmitStatement",
                  "src": "18732:46:0"
                }
              ]
            },
            "documentation": {
              "id": 673,
              "nodeType": "StructuredDocumentation",
              "src": "15163:523:0",
              "text": "@notice for an MVO to claim their mint reward. Amount of reward is based on the ratio of msg.sender's 'pointsBalance[]' compared to 'totalPoints' at the time of claim, minus any pool dues\n @dev entire 'pointsBalance' of msg.sender is redeemed - claiming a partial balance is not supported for efficiency as it is generally more advantageous to claim as soon as possible\n @dev claimable mint amount updates linearly by block.number within each applicable year\n @param _mvoID: MVO ID of msg.sender"
            },
            "functionSelector": "f3fe12c9",
            "id": 879,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 678,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 677,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "15740:12:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1994,
                  "src": "15740:12:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "15740:12:0"
              }
            ],
            "name": "claim",
            "nameLocation": "15701:5:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 676,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 675,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "15723:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 879,
                  "src": "15707:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 674,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "15707:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15706:24:0"
            },
            "returnParameters": {
              "id": 679,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15753:0:0"
            },
            "scope": 1967,
            "src": "15692:3094:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 939,
              "nodeType": "Block",
              "src": "19174:419:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 889,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "19189:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 890,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "19193:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "19189:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 891,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "19203:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 893,
                        "indexExpression": {
                          "id": 892,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 882,
                          "src": "19211:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19203:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 894,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "19219:14:0",
                      "memberName": "stakingAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48,
                      "src": "19203:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "19189:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 899,
                  "nodeType": "IfStatement",
                  "src": "19185:94:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 896,
                        "name": "IDAndMsgSenderMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 296,
                        "src": "19255:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 897,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19255:24:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 898,
                    "nodeType": "RevertStatement",
                    "src": "19248:31:0"
                  }
                },
                {
                  "expression": {
                    "id": 902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 900,
                      "name": "totalStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 131,
                      "src": "19292:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 901,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 884,
                      "src": "19306:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19292:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 903,
                  "nodeType": "ExpressionStatement",
                  "src": "19292:21:0"
                },
                {
                  "expression": {
                    "id": 909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 904,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "19324:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 906,
                        "indexExpression": {
                          "id": 905,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 882,
                          "src": "19332:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19324:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 907,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "19340:14:0",
                      "memberName": "stakingQuantum",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 54,
                      "src": "19324:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 908,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 884,
                      "src": "19358:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19324:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 910,
                  "nodeType": "ExpressionStatement",
                  "src": "19324:41:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 914,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "19409:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19413:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "19409:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 918,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "19429:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MVOStaking_$1967",
                              "typeString": "contract MVOStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MVOStaking_$1967",
                              "typeString": "contract MVOStaking"
                            }
                          ],
                          "id": 917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "19421:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 916,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "19421:7:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 919,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19421:13:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 920,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 884,
                        "src": "19436:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 911,
                        "name": "enshroudToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 102,
                        "src": "19378:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 913,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "19392:16:0",
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "19378:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19378:66:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 922,
                  "nodeType": "ExpressionStatement",
                  "src": "19378:66:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 924,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "19480:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19484:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "19480:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 926,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 884,
                        "src": "19492:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 927,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "19501:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 928,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19507:6:0",
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "src": "19501:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 923,
                      "name": "MVOStaking_Staked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 220,
                      "src": "19462:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19462:52:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 930,
                  "nodeType": "EmitStatement",
                  "src": "19457:57:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 932,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 882,
                        "src": "19546:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 933,
                            "name": "idToMVO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 163,
                            "src": "19554:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                              "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                            }
                          },
                          "id": 935,
                          "indexExpression": {
                            "id": 934,
                            "name": "_mvoID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 882,
                            "src": "19562:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19554:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVO_$61_storage",
                            "typeString": "struct MVOStaking.MVO storage ref"
                          }
                        },
                        "id": 936,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19570:14:0",
                        "memberName": "stakingQuantum",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 54,
                        "src": "19554:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 931,
                      "name": "MVOStakeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 208,
                      "src": "19530:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,uint256)"
                      }
                    },
                    "id": 937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19530:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 938,
                  "nodeType": "EmitStatement",
                  "src": "19525:60:0"
                }
              ]
            },
            "documentation": {
              "id": 880,
              "nodeType": "StructuredDocumentation",
              "src": "18794:271:0",
              "text": "@notice for an MVO to stake their tokens; must first approve address(this) for '_amount'\n @dev updates 'totalStake' and 'stakingQuantum' MVO struct member for msg.sender\n @param _mvoID: MVO ID of msg.sender\n @param _amount: amount to be staked"
            },
            "functionSelector": "9494c8ae",
            "id": 940,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 887,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 886,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "19161:12:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1994,
                  "src": "19161:12:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "19161:12:0"
              }
            ],
            "name": "stake",
            "nameLocation": "19080:5:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 885,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 882,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "19112:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 940,
                  "src": "19096:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 881,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "19096:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 884,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "19137:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 940,
                  "src": "19129:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 883,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19129:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19085:66:0"
            },
            "returnParameters": {
              "id": 888,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19174:0:0"
            },
            "scope": 1967,
            "src": "19071:522:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1024,
              "nodeType": "Block",
              "src": "20227:611:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 958,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "20242:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 959,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "20246:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "20242:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 960,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "20256:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 962,
                        "indexExpression": {
                          "id": 961,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 943,
                          "src": "20264:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20256:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 963,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "20272:14:0",
                      "memberName": "stakingAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48,
                      "src": "20256:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "20242:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 968,
                  "nodeType": "IfStatement",
                  "src": "20238:94:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 965,
                        "name": "IDAndMsgSenderMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 296,
                        "src": "20308:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 966,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20308:24:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 967,
                    "nodeType": "RevertStatement",
                    "src": "20301:31:0"
                  }
                },
                {
                  "expression": {
                    "id": 971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 969,
                      "name": "totalStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 131,
                      "src": "20345:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 970,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 945,
                      "src": "20359:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20345:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 972,
                  "nodeType": "ExpressionStatement",
                  "src": "20345:21:0"
                },
                {
                  "expression": {
                    "id": 978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 973,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "20377:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 975,
                        "indexExpression": {
                          "id": 974,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 943,
                          "src": "20385:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20377:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 976,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "20393:14:0",
                      "memberName": "stakingQuantum",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 54,
                      "src": "20377:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 977,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 945,
                      "src": "20411:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20377:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 979,
                  "nodeType": "ExpressionStatement",
                  "src": "20377:41:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 983,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "20467:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 984,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20471:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "20467:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 987,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "20500:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MVOStaking_$1967",
                              "typeString": "contract MVOStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MVOStaking_$1967",
                              "typeString": "contract MVOStaking"
                            }
                          ],
                          "id": 986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "20492:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 985,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "20492:7:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 988,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20492:13:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 989,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 945,
                        "src": "20520:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 990,
                        "name": "_deadline",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 947,
                        "src": "20542:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 991,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 949,
                        "src": "20566:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 992,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 951,
                        "src": "20582:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 993,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 953,
                        "src": "20598:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 980,
                        "name": "iEnshroudToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 109,
                        "src": "20431:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Permit_MVOStaking_$30",
                          "typeString": "contract IERC20Permit_MVOStaking"
                        }
                      },
                      "id": 982,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "20446:6:0",
                      "memberName": "permit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29,
                      "src": "20431:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"
                      }
                    },
                    "id": 994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20431:179:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 995,
                  "nodeType": "ExpressionStatement",
                  "src": "20431:179:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 999,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "20654:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1000,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20658:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "20654:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 1003,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "20674:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MVOStaking_$1967",
                              "typeString": "contract MVOStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MVOStaking_$1967",
                              "typeString": "contract MVOStaking"
                            }
                          ],
                          "id": 1002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "20666:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1001,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "20666:7:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20666:13:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1005,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 945,
                        "src": "20681:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 996,
                        "name": "enshroudToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 102,
                        "src": "20623:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 998,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "20637:16:0",
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "20623:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 1006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20623:66:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1007,
                  "nodeType": "ExpressionStatement",
                  "src": "20623:66:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1009,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "20725:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20729:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "20725:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1011,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 945,
                        "src": "20737:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1012,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "20746:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1013,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20752:6:0",
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "src": "20746:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1008,
                      "name": "MVOStaking_Staked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 220,
                      "src": "20707:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 1014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20707:52:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1015,
                  "nodeType": "EmitStatement",
                  "src": "20702:57:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1017,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 943,
                        "src": "20791:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1018,
                            "name": "idToMVO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 163,
                            "src": "20799:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                              "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                            }
                          },
                          "id": 1020,
                          "indexExpression": {
                            "id": 1019,
                            "name": "_mvoID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 943,
                            "src": "20807:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20799:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVO_$61_storage",
                            "typeString": "struct MVOStaking.MVO storage ref"
                          }
                        },
                        "id": 1021,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20815:14:0",
                        "memberName": "stakingQuantum",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 54,
                        "src": "20799:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1016,
                      "name": "MVOStakeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 208,
                      "src": "20775:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,uint256)"
                      }
                    },
                    "id": 1022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20775:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1023,
                  "nodeType": "EmitStatement",
                  "src": "20770:60:0"
                }
              ]
            },
            "documentation": {
              "id": 941,
              "nodeType": "StructuredDocumentation",
              "src": "19601:427:0",
              "text": "@notice for an MVO to stake their tokens in this address using permit()\n @dev updates 'totalStake' and 'stakingQuantum' MVO struct member for msg.sender\n @param _mvoID: MVO ID of msg.sender\n @param _amount: amount to be staked\n @param _deadline: block limit by which permit must be used\n @param v - ECDSA sig param\n @param r - ECDSA sig param\n @param s - ECDSA sig param"
            },
            "functionSelector": "18aed3c7",
            "id": 1025,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 956,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 955,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "20214:12:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1994,
                  "src": "20214:12:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "20214:12:0"
              }
            ],
            "name": "stakeWithPermit",
            "nameLocation": "20043:15:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 954,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 943,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "20085:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "20069:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 942,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "20069:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 945,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "20110:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "20102:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 944,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20102:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 947,
                  "mutability": "mutable",
                  "name": "_deadline",
                  "nameLocation": "20130:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "20122:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 946,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20122:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 949,
                  "mutability": "mutable",
                  "name": "v",
                  "nameLocation": "20156:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "20150:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 948,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "20150:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 951,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "20176:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "20168:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 950,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "20168:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 953,
                  "mutability": "mutable",
                  "name": "s",
                  "nameLocation": "20196:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "20188:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 952,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "20188:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20058:146:0"
            },
            "returnParameters": {
              "id": 957,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20227:0:0"
            },
            "scope": 1967,
            "src": "20034:804:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1129,
              "nodeType": "Block",
              "src": "22067:981:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1039,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "22082:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1040,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22086:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "22082:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 1041,
                      "name": "timelockManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 112,
                      "src": "22096:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "22082:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1046,
                  "nodeType": "IfStatement",
                  "src": "22078:63:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1043,
                        "name": "OnlyTimelockManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 316,
                        "src": "22120:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1044,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22120:21:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1045,
                    "nodeType": "RevertStatement",
                    "src": "22113:28:0"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1047,
                      "name": "_staker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1032,
                      "src": "22156:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1048,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "22167:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 1050,
                        "indexExpression": {
                          "id": 1049,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1028,
                          "src": "22175:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22167:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 1051,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22183:14:0",
                      "memberName": "stakingAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48,
                      "src": "22167:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "22156:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1056,
                  "nodeType": "IfStatement",
                  "src": "22152:91:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1053,
                        "name": "IDAndMsgSenderMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 296,
                        "src": "22219:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1054,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22219:24:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1055,
                    "nodeType": "RevertStatement",
                    "src": "22212:31:0"
                  }
                },
                {
                  "expression": {
                    "id": 1059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1057,
                      "name": "totalStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 131,
                      "src": "22256:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1058,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1030,
                      "src": "22270:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22256:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1060,
                  "nodeType": "ExpressionStatement",
                  "src": "22256:21:0"
                },
                {
                  "expression": {
                    "id": 1066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 1061,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "22288:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 1063,
                        "indexExpression": {
                          "id": 1062,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1028,
                          "src": "22296:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22288:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 1064,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "22304:14:0",
                      "memberName": "stakingQuantum",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 54,
                      "src": "22288:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1065,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1030,
                      "src": "22322:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22288:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1067,
                  "nodeType": "ExpressionStatement",
                  "src": "22288:41:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1073,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1068,
                          "name": "timelocks",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 180,
                          "src": "22399:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
                            "typeString": "mapping(address => struct MVOStaking.Timelock storage ref)"
                          }
                        },
                        "id": 1070,
                        "indexExpression": {
                          "id": 1069,
                          "name": "_staker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1032,
                          "src": "22409:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22399:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Timelock_$91_storage",
                          "typeString": "struct MVOStaking.Timelock storage ref"
                        }
                      },
                      "id": 1071,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22418:15:0",
                      "memberName": "remainingAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 86,
                      "src": "22399:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22437:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22399:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1100,
                    "nodeType": "Block",
                    "src": "22626:198:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 1098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1089,
                              "name": "timelocks",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 180,
                              "src": "22659:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
                                "typeString": "mapping(address => struct MVOStaking.Timelock storage ref)"
                              }
                            },
                            "id": 1091,
                            "indexExpression": {
                              "id": 1090,
                              "name": "_staker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1032,
                              "src": "22669:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "22659:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Timelock_$91_storage",
                              "typeString": "struct MVOStaking.Timelock storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 1093,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1030,
                                "src": "22709:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 1094,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1030,
                                "src": "22740:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 1095,
                                "name": "_releaseStart",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1034,
                                "src": "22768:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "id": 1096,
                                "name": "_releaseEnd",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1036,
                                "src": "22800:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "id": 1092,
                              "name": "Timelock",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 91,
                              "src": "22680:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Timelock_$91_storage_ptr_$",
                                "typeString": "type(struct MVOStaking.Timelock storage pointer)"
                              }
                            },
                            "id": 1097,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "nameLocations": [
                              "22696:11:0",
                              "22723:15:0",
                              "22754:12:0",
                              "22788:10:0"
                            ],
                            "names": [
                              "totalAmount",
                              "remainingAmount",
                              "releaseStart",
                              "releaseEnd"
                            ],
                            "nodeType": "FunctionCall",
                            "src": "22680:138:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Timelock_$91_memory_ptr",
                              "typeString": "struct MVOStaking.Timelock memory"
                            }
                          },
                          "src": "22659:159:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Timelock_$91_storage",
                            "typeString": "struct MVOStaking.Timelock storage ref"
                          }
                        },
                        "id": 1099,
                        "nodeType": "ExpressionStatement",
                        "src": "22659:159:0"
                      }
                    ]
                  },
                  "id": 1101,
                  "nodeType": "IfStatement",
                  "src": "22395:429:0",
                  "trueBody": {
                    "id": 1088,
                    "nodeType": "Block",
                    "src": "22440:180:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 1079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1074,
                                "name": "timelocks",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 180,
                                "src": "22516:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
                                  "typeString": "mapping(address => struct MVOStaking.Timelock storage ref)"
                                }
                              },
                              "id": 1076,
                              "indexExpression": {
                                "id": 1075,
                                "name": "_staker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1032,
                                "src": "22526:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "22516:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Timelock_$91_storage",
                                "typeString": "struct MVOStaking.Timelock storage ref"
                              }
                            },
                            "id": 1077,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "22535:11:0",
                            "memberName": "totalAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 84,
                            "src": "22516:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 1078,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1030,
                            "src": "22550:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "22516:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1080,
                        "nodeType": "ExpressionStatement",
                        "src": "22516:41:0"
                      },
                      {
                        "expression": {
                          "id": 1086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1081,
                                "name": "timelocks",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 180,
                                "src": "22563:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
                                  "typeString": "mapping(address => struct MVOStaking.Timelock storage ref)"
                                }
                              },
                              "id": 1083,
                              "indexExpression": {
                                "id": 1082,
                                "name": "_staker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1032,
                                "src": "22573:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "22563:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Timelock_$91_storage",
                                "typeString": "struct MVOStaking.Timelock storage ref"
                              }
                            },
                            "id": 1084,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "22582:15:0",
                            "memberName": "remainingAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 86,
                            "src": "22563:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 1085,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1030,
                            "src": "22601:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "22563:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1087,
                        "nodeType": "ExpressionStatement",
                        "src": "22563:45:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1105,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "22867:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1106,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22871:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "22867:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 1109,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "22887:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MVOStaking_$1967",
                              "typeString": "contract MVOStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MVOStaking_$1967",
                              "typeString": "contract MVOStaking"
                            }
                          ],
                          "id": 1108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "22879:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1107,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "22879:7:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1110,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "22879:13:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1111,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1030,
                        "src": "22894:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 1102,
                        "name": "enshroudToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 102,
                        "src": "22836:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1104,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22850:16:0",
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "22836:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 1112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22836:66:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1113,
                  "nodeType": "ExpressionStatement",
                  "src": "22836:66:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1115,
                        "name": "_staker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1032,
                        "src": "22938:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1116,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1030,
                        "src": "22947:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1117,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "22956:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22962:6:0",
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "src": "22956:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1114,
                      "name": "MVOStaking_Staked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 220,
                      "src": "22920:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 1119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22920:49:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1120,
                  "nodeType": "EmitStatement",
                  "src": "22915:54:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1122,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1028,
                        "src": "23001:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1123,
                            "name": "idToMVO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 163,
                            "src": "23009:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                              "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                            }
                          },
                          "id": 1125,
                          "indexExpression": {
                            "id": 1124,
                            "name": "_mvoID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1028,
                            "src": "23017:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "23009:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVO_$61_storage",
                            "typeString": "struct MVOStaking.MVO storage ref"
                          }
                        },
                        "id": 1126,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "23025:14:0",
                        "memberName": "stakingQuantum",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 54,
                        "src": "23009:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1121,
                      "name": "MVOStakeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 208,
                      "src": "22985:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,uint256)"
                      }
                    },
                    "id": 1127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22985:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1128,
                  "nodeType": "EmitStatement",
                  "src": "22980:60:0"
                }
              ]
            },
            "documentation": {
              "id": 1026,
              "nodeType": "StructuredDocumentation",
              "src": "20846:1029:0",
              "text": "@notice for the 'timelockManager' (by user calling 'withdrawTimelockToMVOStaking()' in TimelockManager contract) to stake $ENSHROUD tokens in this address on behalf of the timelock beneficiary ('_staker'), who is an MVO operator.\n @dev updates 'totalStake' and 'stakingQuantum' MVO struct member for '_staker'\n @dev one timelock per '_staker' at a time, though a further amount may be added to 'timelocks[_staker]' if the MVO owner consolidates multiple timelocks.\n nonReentrant modifier unnecessary here as it is already present in 'withdrawTimelockToMVOStaking()' in TimelockManager contract, which is the only permitted caller of this function\n @param _mvoID: MVO ID of '_staker'\n @param _amount: amount to be staked\n @param _staker: address of timelock beneficiary corresponding to '_mvoID' that will call the initiating function in 'timelockManager'\n @param _releaseStart: starting block number of timelock\n @param _releaseEnd: ending block number of timelock"
            },
            "functionSelector": "cb85180c",
            "id": 1130,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stakeTimelock",
            "nameLocation": "21890:13:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1037,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1028,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "21930:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1130,
                  "src": "21914:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1027,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "21914:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1030,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "21955:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1130,
                  "src": "21947:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1029,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21947:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1032,
                  "mutability": "mutable",
                  "name": "_staker",
                  "nameLocation": "21981:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1130,
                  "src": "21973:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1031,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21973:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1034,
                  "mutability": "mutable",
                  "name": "_releaseStart",
                  "nameLocation": "22007:13:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1130,
                  "src": "21999:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1033,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "21999:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1036,
                  "mutability": "mutable",
                  "name": "_releaseEnd",
                  "nameLocation": "22039:11:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1130,
                  "src": "22031:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1035,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "22031:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21903:154:0"
            },
            "returnParameters": {
              "id": 1038,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22067:0:0"
            },
            "scope": 1967,
            "src": "21881:1167:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1264,
              "nodeType": "Block",
              "src": "23580:1876:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1140,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "23595:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23599:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "23595:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1142,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "23609:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 1144,
                        "indexExpression": {
                          "id": 1143,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1133,
                          "src": "23617:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23609:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 1145,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23625:14:0",
                      "memberName": "stakingAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48,
                      "src": "23609:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "23595:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1150,
                  "nodeType": "IfStatement",
                  "src": "23591:94:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1147,
                        "name": "IDAndMsgSenderMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 296,
                        "src": "23661:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23661:24:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1149,
                    "nodeType": "RevertStatement",
                    "src": "23654:31:0"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1151,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "23700:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 1153,
                        "indexExpression": {
                          "id": 1152,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1133,
                          "src": "23708:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23700:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 1154,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23716:14:0",
                      "memberName": "stakingQuantum",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 54,
                      "src": "23700:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 1155,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1135,
                      "src": "23733:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23700:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1160,
                  "nodeType": "IfStatement",
                  "src": "23696:89:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1157,
                        "name": "AmountLargerThanStake",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 288,
                        "src": "23762:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1158,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23762:23:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1159,
                    "nodeType": "RevertStatement",
                    "src": "23755:30:0"
                  }
                },
                {
                  "assignments": [
                    1162
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1162,
                      "mutability": "mutable",
                      "name": "_remaining",
                      "nameLocation": "23806:10:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1264,
                      "src": "23798:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1161,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23798:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1168,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 1163,
                        "name": "timelocks",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 180,
                        "src": "23819:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
                          "typeString": "mapping(address => struct MVOStaking.Timelock storage ref)"
                        }
                      },
                      "id": 1166,
                      "indexExpression": {
                        "expression": {
                          "id": 1164,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "23829:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1165,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "23833:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "23829:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "23819:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Timelock_$91_storage",
                        "typeString": "struct MVOStaking.Timelock storage ref"
                      }
                    },
                    "id": 1167,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "23841:15:0",
                    "memberName": "remainingAmount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 86,
                    "src": "23819:37:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23798:58:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1169,
                      "name": "_remaining",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1162,
                      "src": "23865:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1170,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23879:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "23865:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1227,
                  "nodeType": "IfStatement",
                  "src": "23861:1042:0",
                  "trueBody": {
                    "id": 1226,
                    "nodeType": "Block",
                    "src": "23882:1021:0",
                    "statements": [
                      {
                        "assignments": [
                          1173
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1173,
                            "mutability": "mutable",
                            "name": "_unlockedAndWithdrawable",
                            "nameLocation": "24013:24:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 1226,
                            "src": "24005:32:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1172,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "24005:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1187,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 1175,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "24053:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1176,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "24057:6:0",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "24053:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1174,
                              "name": "_getUnlocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1966,
                              "src": "24040:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 1177,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24040:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1184,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 1178,
                                      "name": "timelocks",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 180,
                                      "src": "24073:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
                                        "typeString": "mapping(address => struct MVOStaking.Timelock storage ref)"
                                      }
                                    },
                                    "id": 1181,
                                    "indexExpression": {
                                      "expression": {
                                        "id": 1179,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "24083:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 1180,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "24087:6:0",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "24083:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24073:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Timelock_$91_storage",
                                      "typeString": "struct MVOStaking.Timelock storage ref"
                                    }
                                  },
                                  "id": 1182,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "24095:11:0",
                                  "memberName": "totalAmount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 84,
                                  "src": "24073:33:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 1183,
                                  "name": "_remaining",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1162,
                                  "src": "24109:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "24073:46:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 1185,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "24072:48:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24040:80:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "24005:115:0"
                      },
                      {
                        "assignments": [
                          1189
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1189,
                            "mutability": "mutable",
                            "name": "_neverLocked",
                            "nameLocation": "24270:12:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 1226,
                            "src": "24262:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1188,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "24262:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1196,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 1190,
                                "name": "idToMVO",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 163,
                                "src": "24285:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                                  "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                                }
                              },
                              "id": 1192,
                              "indexExpression": {
                                "id": 1191,
                                "name": "_mvoID",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1133,
                                "src": "24293:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24285:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MVO_$61_storage",
                                "typeString": "struct MVOStaking.MVO storage ref"
                              }
                            },
                            "id": 1193,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "24301:14:0",
                            "memberName": "stakingQuantum",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 54,
                            "src": "24285:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 1194,
                            "name": "_remaining",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1162,
                            "src": "24318:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24285:43:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "24262:66:0"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1197,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1135,
                            "src": "24489:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1200,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1198,
                              "name": "_unlockedAndWithdrawable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1173,
                              "src": "24499:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 1199,
                              "name": "_neverLocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1189,
                              "src": "24526:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "24499:39:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24489:49:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1205,
                        "nodeType": "IfStatement",
                        "src": "24485:97:0",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1202,
                              "name": "AmountLargerThanWithdrawable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 290,
                              "src": "24552:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 1203,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24552:30:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 1204,
                          "nodeType": "RevertStatement",
                          "src": "24545:37:0"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1206,
                            "name": "_unlockedAndWithdrawable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1173,
                            "src": "24658:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "id": 1207,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1135,
                            "src": "24686:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24658:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "expression": {
                            "id": 1223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "expression": {
                                "baseExpression": {
                                  "id": 1217,
                                  "name": "timelocks",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 180,
                                  "src": "24764:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
                                    "typeString": "mapping(address => struct MVOStaking.Timelock storage ref)"
                                  }
                                },
                                "id": 1220,
                                "indexExpression": {
                                  "expression": {
                                    "id": 1218,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "24774:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 1219,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "24778:6:0",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "24774:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24764:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Timelock_$91_storage",
                                  "typeString": "struct MVOStaking.Timelock storage ref"
                                }
                              },
                              "id": 1221,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberLocation": "24786:15:0",
                              "memberName": "remainingAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 86,
                              "src": "24764:37:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "-=",
                            "rightHandSide": {
                              "id": 1222,
                              "name": "_unlockedAndWithdrawable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1173,
                              "src": "24805:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "24764:65:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1224,
                          "nodeType": "ExpressionStatement",
                          "src": "24764:65:0"
                        },
                        "id": 1225,
                        "nodeType": "IfStatement",
                        "src": "24654:175:0",
                        "trueBody": {
                          "expression": {
                            "id": 1215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "expression": {
                                "baseExpression": {
                                  "id": 1209,
                                  "name": "timelocks",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 180,
                                  "src": "24700:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
                                    "typeString": "mapping(address => struct MVOStaking.Timelock storage ref)"
                                  }
                                },
                                "id": 1212,
                                "indexExpression": {
                                  "expression": {
                                    "id": 1210,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "24710:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 1211,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "24714:6:0",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "24710:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24700:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Timelock_$91_storage",
                                  "typeString": "struct MVOStaking.Timelock storage ref"
                                }
                              },
                              "id": 1213,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberLocation": "24722:15:0",
                              "memberName": "remainingAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 86,
                              "src": "24700:37:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "-=",
                            "rightHandSide": {
                              "id": 1214,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1135,
                              "src": "24741:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "24700:48:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1216,
                          "nodeType": "ExpressionStatement",
                          "src": "24700:48:0"
                        }
                      }
                    ]
                  }
                },
                {
                  "id": 1239,
                  "nodeType": "UncheckedBlock",
                  "src": "24915:331:0",
                  "statements": [
                    {
                      "expression": {
                        "id": 1233,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "expression": {
                            "baseExpression": {
                              "id": 1228,
                              "name": "idToMVO",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 163,
                              "src": "25004:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                                "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                              }
                            },
                            "id": 1230,
                            "indexExpression": {
                              "id": 1229,
                              "name": "_mvoID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1133,
                              "src": "25012:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "25004:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MVO_$61_storage",
                              "typeString": "struct MVOStaking.MVO storage ref"
                            }
                          },
                          "id": 1231,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberLocation": "25020:14:0",
                          "memberName": "stakingQuantum",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 54,
                          "src": "25004:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "id": 1232,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1135,
                          "src": "25038:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "25004:41:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1234,
                      "nodeType": "ExpressionStatement",
                      "src": "25004:41:0"
                    },
                    {
                      "expression": {
                        "id": 1237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 1235,
                          "name": "totalStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 131,
                          "src": "25213:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "id": 1236,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1135,
                          "src": "25227:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "25213:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1238,
                      "nodeType": "ExpressionStatement",
                      "src": "25213:21:0"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1243,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "25285:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1244,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "25289:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "25285:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1245,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1135,
                        "src": "25297:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 1240,
                        "name": "enshroudToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 102,
                        "src": "25258:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1242,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "25272:12:0",
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2044,
                      "src": "25258:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25258:47:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1247,
                  "nodeType": "ExpressionStatement",
                  "src": "25258:47:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1249,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "25343:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "25347:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "25343:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1251,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1135,
                        "src": "25355:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1252,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "25364:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "25370:6:0",
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "src": "25364:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1248,
                      "name": "MVOStaking_Unstaked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 228,
                      "src": "25323:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 1254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25323:54:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1255,
                  "nodeType": "EmitStatement",
                  "src": "25318:59:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1257,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1133,
                        "src": "25409:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1258,
                            "name": "idToMVO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 163,
                            "src": "25417:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                              "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                            }
                          },
                          "id": 1260,
                          "indexExpression": {
                            "id": 1259,
                            "name": "_mvoID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1133,
                            "src": "25425:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "25417:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVO_$61_storage",
                            "typeString": "struct MVOStaking.MVO storage ref"
                          }
                        },
                        "id": 1261,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "25433:14:0",
                        "memberName": "stakingQuantum",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 54,
                        "src": "25417:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1256,
                      "name": "MVOStakeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 208,
                      "src": "25393:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,uint256)"
                      }
                    },
                    "id": 1262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25393:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1263,
                  "nodeType": "EmitStatement",
                  "src": "25388:60:0"
                }
              ]
            },
            "documentation": {
              "id": 1131,
              "nodeType": "StructuredDocumentation",
              "src": "23056:412:0",
              "text": "@notice for an MVO to withdraw its staked $ENSHROUD tokens\n @dev updates 'totalStake' and 'stakingQuantum' MVO struct member for msg.sender\n @dev stake can only be withdrawn if msg.sender's '_mvoID' is correct; if msg.sender's MVO struct is maliciously altered by an admin, will need to be corrected\n @param _mvoID: MVO ID of msg.sender\n @param _amount: amount to be withdrawn"
            },
            "functionSelector": "30b39a62",
            "id": 1265,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1138,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 1137,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "23567:12:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1994,
                  "src": "23567:12:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "23567:12:0"
              }
            ],
            "name": "withdraw",
            "nameLocation": "23483:8:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1133,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "23518:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1265,
                  "src": "23502:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1132,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23502:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1135,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "23543:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1265,
                  "src": "23535:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1134,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23535:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23491:66:0"
            },
            "returnParameters": {
              "id": 1139,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23580:0:0"
            },
            "scope": 1967,
            "src": "23474:1982:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1356,
              "nodeType": "Block",
              "src": "26228:1047:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 1275,
                        "name": "_miningPoolId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1268,
                        "src": "26257:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 1276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26274:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "26257:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1286,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 1278,
                            "name": "idToMVOPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 174,
                            "src": "26292:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_MVOPool_$67_storage_$",
                              "typeString": "mapping(uint256 => struct MVOStaking.MVOPool storage ref)"
                            }
                          },
                          "id": 1280,
                          "indexExpression": {
                            "id": 1279,
                            "name": "_miningPoolId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1268,
                            "src": "26304:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "26292:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVOPool_$67_storage",
                            "typeString": "struct MVOStaking.MVOPool storage ref"
                          }
                        },
                        "id": 1281,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "26319:11:0",
                        "memberName": "poolAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 64,
                        "src": "26292:38:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1284,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "26342:1:0",
                            "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": 1283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "26334:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1282,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "26334:7:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "26334:10:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "26292:52:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "26257:87:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1291,
                  "nodeType": "IfStatement",
                  "src": "26239:140:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1288,
                        "name": "IDAlreadyInUse",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 294,
                        "src": "26363:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1289,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26363:16:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1290,
                    "nodeType": "RevertStatement",
                    "src": "26356:23:0"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1294,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1292,
                      "name": "_dues",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1270,
                      "src": "26510:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "hexValue": "35653137",
                      "id": 1293,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26519:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_500000000000000000_by_1",
                        "typeString": "int_const 500000000000000000"
                      },
                      "value": "5e17"
                    },
                    "src": "26510:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1298,
                  "nodeType": "IfStatement",
                  "src": "26506:40:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1295,
                        "name": "DuesTooLarge",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 292,
                        "src": "26532:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26532:14:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1297,
                    "nodeType": "RevertStatement",
                    "src": "26525:21:0"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1299,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "26561:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "26565:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "26561:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1301,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "26575:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 1303,
                        "indexExpression": {
                          "id": 1302,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1272,
                          "src": "26583:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26575:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 1304,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "26591:14:0",
                      "memberName": "stakingAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48,
                      "src": "26575:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "26561:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1309,
                  "nodeType": "IfStatement",
                  "src": "26557:94:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1306,
                        "name": "IDAndMsgSenderMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 296,
                        "src": "26627:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1307,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26627:24:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1308,
                    "nodeType": "RevertStatement",
                    "src": "26620:31:0"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1311,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1272,
                        "src": "26752:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "id": 1310,
                      "name": "checkMVO",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1754,
                      "src": "26743:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_calldata_ptr_$returns$__$",
                        "typeString": "function (string calldata) view"
                      }
                    },
                    "id": 1312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26743:16:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1313,
                  "nodeType": "ExpressionStatement",
                  "src": "26743:16:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 1314,
                        "name": "pointsBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 152,
                        "src": "26827:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1317,
                      "indexExpression": {
                        "expression": {
                          "id": 1315,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "26841:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "26845:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "26841:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "26827:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1318,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26855:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "26827:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1323,
                  "nodeType": "IfStatement",
                  "src": "26823:59:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1320,
                        "name": "UnclaimedPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 320,
                        "src": "26865:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1321,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26865:17:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1322,
                    "nodeType": "RevertStatement",
                    "src": "26858:24:0"
                  }
                },
                {
                  "expression": {
                    "id": 1338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1324,
                        "name": "idToMVOPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 174,
                        "src": "26947:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_MVOPool_$67_storage_$",
                          "typeString": "mapping(uint256 => struct MVOStaking.MVOPool storage ref)"
                        }
                      },
                      "id": 1326,
                      "indexExpression": {
                        "id": 1325,
                        "name": "_miningPoolId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1268,
                        "src": "26959:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "26947:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MVOPool_$67_storage",
                        "typeString": "struct MVOStaking.MVOPool storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1330,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "27020:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "27024:6:0",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "27020:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1329,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "27012:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_payable_$",
                              "typeString": "type(address payable)"
                            },
                            "typeName": {
                              "id": 1328,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "27012:8:0",
                              "stateMutability": "payable",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27012:19:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "id": 1335,
                              "name": "_dues",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1270,
                              "src": "27059:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "27052:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint96_$",
                              "typeString": "type(uint96)"
                            },
                            "typeName": {
                              "id": 1333,
                              "name": "uint96",
                              "nodeType": "ElementaryTypeName",
                              "src": "27052:6:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27052:13:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 1327,
                        "name": "MVOPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67,
                        "src": "26976:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_MVOPool_$67_storage_ptr_$",
                          "typeString": "type(struct MVOStaking.MVOPool storage pointer)"
                        }
                      },
                      "id": 1337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "nameLocations": [
                        "26999:11:0",
                        "27046:4:0"
                      ],
                      "names": [
                        "poolAddress",
                        "dues"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "26976:101:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MVOPool_$67_memory_ptr",
                        "typeString": "struct MVOStaking.MVOPool memory"
                      }
                    },
                    "src": "26947:130:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MVOPool_$67_storage",
                      "typeString": "struct MVOStaking.MVOPool storage ref"
                    }
                  },
                  "id": 1339,
                  "nodeType": "ExpressionStatement",
                  "src": "26947:130:0"
                },
                {
                  "expression": {
                    "id": 1348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 1340,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "27152:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 1342,
                        "indexExpression": {
                          "id": 1341,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1272,
                          "src": "27160:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27152:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 1343,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "27168:12:0",
                      "memberName": "memberPoolId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 56,
                      "src": "27152:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint120",
                        "typeString": "uint120"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1346,
                          "name": "_miningPoolId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1268,
                          "src": "27191:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1345,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "27183:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint120_$",
                          "typeString": "type(uint120)"
                        },
                        "typeName": {
                          "id": 1344,
                          "name": "uint120",
                          "nodeType": "ElementaryTypeName",
                          "src": "27183:7:0",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27183:22:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint120",
                        "typeString": "uint120"
                      }
                    },
                    "src": "27152:53:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint120",
                      "typeString": "uint120"
                    }
                  },
                  "id": 1349,
                  "nodeType": "ExpressionStatement",
                  "src": "27152:53:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1351,
                        "name": "_miningPoolId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1268,
                        "src": "27238:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1352,
                        "name": "_dues",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1270,
                        "src": "27253:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1353,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1272,
                        "src": "27260:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "id": 1350,
                      "name": "MVOPoolCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 196,
                      "src": "27223:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,uint256,string memory)"
                      }
                    },
                    "id": 1354,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27223:44:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1355,
                  "nodeType": "EmitStatement",
                  "src": "27218:49:0"
                }
              ]
            },
            "documentation": {
              "id": 1266,
              "nodeType": "StructuredDocumentation",
              "src": "25464:630:0",
              "text": "@notice for an MVO to create an MVO pool -- msg.sender will be 'poolAddress'. Cannot be altered after creation; only option is to delete pool and start another with a new 'miningPoolId'\n @param _miningPoolId: unique ID of prospective MVO pool. Cannot be 0 -- this is the default value and indicates an MVO is not in a pool in its MVO struct\n @param _dues: amount of dues required to be a pool member, in 18 decimals (which also corresponds to wei). Must be < 5e17 (< 50%). 5e16 corresponds to 5%.\n @param _mvoID: MVO ID of msg.sender\n @dev to prevent dues dodging, user must claim any points first"
            },
            "functionSelector": "475ebbf2",
            "id": 1357,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createMVOPool",
            "nameLocation": "26109:13:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1273,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1268,
                  "mutability": "mutable",
                  "name": "_miningPoolId",
                  "nameLocation": "26141:13:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1357,
                  "src": "26133:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1267,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26133:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1270,
                  "mutability": "mutable",
                  "name": "_dues",
                  "nameLocation": "26173:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1357,
                  "src": "26165:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1269,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26165:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1272,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "26205:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1357,
                  "src": "26189:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1271,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "26189:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26122:96:0"
            },
            "returnParameters": {
              "id": 1274,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26228:0:0"
            },
            "scope": 1967,
            "src": "26100:1175:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1397,
              "nodeType": "Block",
              "src": "27550:401:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1382,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1371,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 1365,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "27681:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "27685:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "27681:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 1367,
                            "name": "idToMVO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 163,
                            "src": "27695:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                              "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                            }
                          },
                          "id": 1369,
                          "indexExpression": {
                            "id": 1368,
                            "name": "_mvoID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1362,
                            "src": "27703:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "27695:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVO_$61_storage",
                            "typeString": "struct MVOStaking.MVO storage ref"
                          }
                        },
                        "id": 1370,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "27711:14:0",
                        "memberName": "stakingAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 48,
                        "src": "27695:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "27681:44:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "id": 1381,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 1372,
                            "name": "idToMVOPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 174,
                            "src": "27742:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_MVOPool_$67_storage_$",
                              "typeString": "mapping(uint256 => struct MVOStaking.MVOPool storage ref)"
                            }
                          },
                          "id": 1374,
                          "indexExpression": {
                            "id": 1373,
                            "name": "_miningPoolId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1360,
                            "src": "27754:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "27742:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVOPool_$67_storage",
                            "typeString": "struct MVOStaking.MVOPool storage ref"
                          }
                        },
                        "id": 1375,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "27769:11:0",
                        "memberName": "poolAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 64,
                        "src": "27742:38:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 1378,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "27792:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 1379,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "27796:6:0",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "27792:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "27784:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 1376,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "27784:8:0",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1380,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27784:19:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "27742:61:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "27681:122:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1386,
                  "nodeType": "IfStatement",
                  "src": "27663:183:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1383,
                        "name": "IDAndMsgSenderMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 296,
                        "src": "27822:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27822:24:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1385,
                    "nodeType": "RevertStatement",
                    "src": "27815:31:0"
                  }
                },
                {
                  "expression": {
                    "id": 1390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "27857:33:0",
                    "subExpression": {
                      "baseExpression": {
                        "id": 1387,
                        "name": "idToMVOPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 174,
                        "src": "27864:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_MVOPool_$67_storage_$",
                          "typeString": "mapping(uint256 => struct MVOStaking.MVOPool storage ref)"
                        }
                      },
                      "id": 1389,
                      "indexExpression": {
                        "id": 1388,
                        "name": "_miningPoolId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1360,
                        "src": "27876:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "27864:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MVOPool_$67_storage",
                        "typeString": "struct MVOStaking.MVOPool storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1391,
                  "nodeType": "ExpressionStatement",
                  "src": "27857:33:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1393,
                        "name": "_miningPoolId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1360,
                        "src": "27921:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1394,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1362,
                        "src": "27936:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "id": 1392,
                      "name": "MVOPoolDeleted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 202,
                      "src": "27906:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,string memory)"
                      }
                    },
                    "id": 1395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27906:37:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1396,
                  "nodeType": "EmitStatement",
                  "src": "27901:42:0"
                }
              ]
            },
            "documentation": {
              "id": 1358,
              "nodeType": "StructuredDocumentation",
              "src": "27283:157:0",
              "text": "@notice for an MVO pool creator to delete their pool\n @param _miningPoolId: msg.sender's MVO pool ID\n @param _mvoID: MVO ID of msg.sender"
            },
            "functionSelector": "bbeb3955",
            "id": 1398,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deleteMVOPool",
            "nameLocation": "27455:13:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1360,
                  "mutability": "mutable",
                  "name": "_miningPoolId",
                  "nameLocation": "27487:13:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1398,
                  "src": "27479:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1359,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27479:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1362,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "27527:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1398,
                  "src": "27511:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1361,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "27511:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27468:72:0"
            },
            "returnParameters": {
              "id": 1364,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27550:0:0"
            },
            "scope": 1967,
            "src": "27446:505:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1471,
              "nodeType": "Block",
              "src": "28416:897:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1406,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "28431:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "28435:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "28431:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1408,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "28445:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 1410,
                        "indexExpression": {
                          "id": 1409,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1403,
                          "src": "28453:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "28445:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 1411,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "28461:14:0",
                      "memberName": "stakingAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48,
                      "src": "28445:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "28431:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1416,
                  "nodeType": "IfStatement",
                  "src": "28427:94:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1413,
                        "name": "IDAndMsgSenderMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 296,
                        "src": "28497:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1414,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "28497:24:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1415,
                    "nodeType": "RevertStatement",
                    "src": "28490:31:0"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 1417,
                        "name": "pointsBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 152,
                        "src": "28589:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1420,
                      "indexExpression": {
                        "expression": {
                          "id": 1418,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "28603:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1419,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "28607:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "28603:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "28589:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1421,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28617:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "28589:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1426,
                  "nodeType": "IfStatement",
                  "src": "28585:59:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1423,
                        "name": "UnclaimedPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 320,
                        "src": "28627:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1424,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "28627:17:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1425,
                    "nodeType": "RevertStatement",
                    "src": "28620:24:0"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 1427,
                        "name": "_newMiningPoolId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1401,
                        "src": "28700:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 1428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "28720:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "28700:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1438,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 1430,
                            "name": "idToMVOPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 174,
                            "src": "28738:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_MVOPool_$67_storage_$",
                              "typeString": "mapping(uint256 => struct MVOStaking.MVOPool storage ref)"
                            }
                          },
                          "id": 1432,
                          "indexExpression": {
                            "id": 1431,
                            "name": "_newMiningPoolId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1401,
                            "src": "28750:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "28738:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVOPool_$67_storage",
                            "typeString": "struct MVOStaking.MVOPool storage ref"
                          }
                        },
                        "id": 1433,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "28768:11:0",
                        "memberName": "poolAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 64,
                        "src": "28738:41:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1436,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "28791:1:0",
                            "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": 1435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "28783:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1434,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "28783:7:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "28783:10:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "28738:55:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "28700:93:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1443,
                  "nodeType": "IfStatement",
                  "src": "28682:148:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1440,
                        "name": "PoolDoesNotExist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 318,
                        "src": "28812:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1441,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "28812:18:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1442,
                    "nodeType": "RevertStatement",
                    "src": "28805:25:0"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1445,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1403,
                        "src": "28931:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "id": 1444,
                      "name": "checkMVO",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1754,
                      "src": "28922:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_calldata_ptr_$returns$__$",
                        "typeString": "function (string calldata) view"
                      }
                    },
                    "id": 1446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28922:16:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1447,
                  "nodeType": "ExpressionStatement",
                  "src": "28922:16:0"
                },
                {
                  "assignments": [
                    1449
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1449,
                      "mutability": "mutable",
                      "name": "_currentPoolId",
                      "nameLocation": "29011:14:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1471,
                      "src": "29003:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1448,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29003:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1454,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 1450,
                        "name": "idToMVO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 163,
                        "src": "29028:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                          "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                        }
                      },
                      "id": 1452,
                      "indexExpression": {
                        "id": 1451,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1403,
                        "src": "29036:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "29028:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MVO_$61_storage",
                        "typeString": "struct MVOStaking.MVO storage ref"
                      }
                    },
                    "id": 1453,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "29044:12:0",
                    "memberName": "memberPoolId",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 56,
                    "src": "29028:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint120",
                      "typeString": "uint120"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29003:53:0"
                },
                {
                  "expression": {
                    "id": 1463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 1455,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "29168:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 1457,
                        "indexExpression": {
                          "id": 1456,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1403,
                          "src": "29176:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "29168:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 1458,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "29184:12:0",
                      "memberName": "memberPoolId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 56,
                      "src": "29168:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint120",
                        "typeString": "uint120"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1461,
                          "name": "_newMiningPoolId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1401,
                          "src": "29207:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1460,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "29199:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint120_$",
                          "typeString": "type(uint120)"
                        },
                        "typeName": {
                          "id": 1459,
                          "name": "uint120",
                          "nodeType": "ElementaryTypeName",
                          "src": "29199:7:0",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1462,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29199:25:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint120",
                        "typeString": "uint120"
                      }
                    },
                    "src": "29168:56:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint120",
                      "typeString": "uint120"
                    }
                  },
                  "id": 1464,
                  "nodeType": "ExpressionStatement",
                  "src": "29168:56:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1466,
                        "name": "_newMiningPoolId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1401,
                        "src": "29264:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1467,
                        "name": "_currentPoolId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1449,
                        "src": "29282:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1468,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1403,
                        "src": "29298:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "id": 1465,
                      "name": "PoolMembershipUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 263,
                      "src": "29242:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,uint256,string memory)"
                      }
                    },
                    "id": 1469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29242:63:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1470,
                  "nodeType": "EmitStatement",
                  "src": "29237:68:0"
                }
              ]
            },
            "documentation": {
              "id": 1399,
              "nodeType": "StructuredDocumentation",
              "src": "27959:334:0",
              "text": "@notice for an MVO to join an existing MVO mining pool, change pool membership, or leave a pool\n @param _newMiningPoolId: pool ID which msg.sender desires to join; pass 0 to leave a pool without a replacement\n @dev to prevent dues dodging, user must claim any points first\n @param _mvoID: MVO ID of msg.sender"
            },
            "functionSelector": "fc68a230",
            "id": 1472,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateMVOPoolMembership",
            "nameLocation": "28308:23:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1401,
                  "mutability": "mutable",
                  "name": "_newMiningPoolId",
                  "nameLocation": "28350:16:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1472,
                  "src": "28342:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1400,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28342:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1403,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "28393:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1472,
                  "src": "28377:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1402,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "28377:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28331:75:0"
            },
            "returnParameters": {
              "id": 1405,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28416:0:0"
            },
            "scope": 1967,
            "src": "28299:1014:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1488,
              "nodeType": "Block",
              "src": "29779:87:0",
              "statements": [
                {
                  "expression": {
                    "id": 1482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1480,
                      "name": "codeHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 122,
                      "src": "29790:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1481,
                      "name": "_newCodeHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1475,
                      "src": "29801:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "29790:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1483,
                  "nodeType": "ExpressionStatement",
                  "src": "29790:23:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1485,
                        "name": "_newCodeHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1475,
                        "src": "29845:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 1484,
                      "name": "CodeHashChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 184,
                      "src": "29829:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 1486,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29829:29:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1487,
                  "nodeType": "EmitStatement",
                  "src": "29824:34:0"
                }
              ]
            },
            "documentation": {
              "id": 1473,
              "nodeType": "StructuredDocumentation",
              "src": "29321:387:0",
              "text": "@notice update 'codeHash', designating a new hash of the off-chain codebase storage location reference or entire codebase, for user verification\n @dev admin should apprise users of how to verify the 'codeHash' -- the 'codeHash' is publicly accessible via getter as a public storage variable\n @param _newCodeHash: new bytes32 hash of the off-chain codebase or location"
            },
            "functionSelector": "7c1c485d",
            "id": 1489,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1478,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 1477,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "29769:9:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 284,
                  "src": "29769:9:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "29769:9:0"
              }
            ],
            "name": "updateCodeHash",
            "nameLocation": "29723:14:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1475,
                  "mutability": "mutable",
                  "name": "_newCodeHash",
                  "nameLocation": "29746:12:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1489,
                  "src": "29738:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1474,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "29738:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29737:22:0"
            },
            "returnParameters": {
              "id": 1479,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29779:0:0"
            },
            "scope": 1967,
            "src": "29714:152:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1540,
              "nodeType": "Block",
              "src": "30309:633:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1500,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "30509:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 1502,
                        "indexExpression": {
                          "id": 1501,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1492,
                          "src": "30517:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "30509:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 1503,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "30525:14:0",
                      "memberName": "stakingAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48,
                      "src": "30509:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "30551:1:0",
                          "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": 1505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "30543:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1504,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "30543:7:0",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1507,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30543:10:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "30509:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1526,
                  "nodeType": "IfStatement",
                  "src": "30505:336:0",
                  "trueBody": {
                    "id": 1525,
                    "nodeType": "Block",
                    "src": "30555:286:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1512,
                              "name": "_mvoID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1492,
                              "src": "30573:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            ],
                            "expression": {
                              "id": 1509,
                              "name": "mvoIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 141,
                              "src": "30561:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                "typeString": "string storage ref[] storage ref"
                              }
                            },
                            "id": 1511,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "30568:4:0",
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "30561:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_string_storage_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$",
                              "typeString": "function (string storage ref[] storage pointer,string storage ref)"
                            }
                          },
                          "id": 1513,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30561:19:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1514,
                        "nodeType": "ExpressionStatement",
                        "src": "30561:19:0"
                      },
                      {
                        "expression": {
                          "id": 1519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1515,
                              "name": "mvoIdsIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 157,
                              "src": "30726:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_uint256_$",
                                "typeString": "mapping(string memory => uint256)"
                              }
                            },
                            "id": 1517,
                            "indexExpression": {
                              "id": 1516,
                              "name": "_mvoID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1492,
                              "src": "30738:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "30726:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1518,
                            "name": "mvoIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 128,
                            "src": "30748:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30726:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1520,
                        "nodeType": "ExpressionStatement",
                        "src": "30726:30:0"
                      },
                      {
                        "id": 1524,
                        "nodeType": "UncheckedBlock",
                        "src": "30762:74:0",
                        "statements": [
                          {
                            "expression": {
                              "id": 1522,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "30779:10:0",
                              "subExpression": {
                                "id": 1521,
                                "name": "mvoIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 128,
                                "src": "30781:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1523,
                            "nodeType": "ExpressionStatement",
                            "src": "30779:10:0"
                          }
                        ]
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 1531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1527,
                        "name": "idToMVO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 163,
                        "src": "30851:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                          "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                        }
                      },
                      "id": 1529,
                      "indexExpression": {
                        "id": 1528,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1492,
                        "src": "30859:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "30851:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MVO_$61_storage",
                        "typeString": "struct MVOStaking.MVO storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1530,
                      "name": "_mvo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1495,
                      "src": "30869:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MVO_$61_calldata_ptr",
                        "typeString": "struct MVOStaking.MVO calldata"
                      }
                    },
                    "src": "30851:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MVO_$61_storage",
                      "typeString": "struct MVOStaking.MVO storage ref"
                    }
                  },
                  "id": 1532,
                  "nodeType": "ExpressionStatement",
                  "src": "30851:22:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1534,
                        "name": "_mvoID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1492,
                        "src": "30906:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "id": 1535,
                        "name": "_mvo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1495,
                        "src": "30914:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_calldata_ptr",
                          "typeString": "struct MVOStaking.MVO calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 1536,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "30920:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1537,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "30926:7:0",
                        "memberName": "chainid",
                        "nodeType": "MemberAccess",
                        "src": "30920:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_MVO_$61_calldata_ptr",
                          "typeString": "struct MVOStaking.MVO calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1533,
                      "name": "MVOStatusChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 237,
                      "src": "30889:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_struct$_MVO_$61_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,struct MVOStaking.MVO memory,uint256)"
                      }
                    },
                    "id": 1538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30889:45:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1539,
                  "nodeType": "EmitStatement",
                  "src": "30884:50:0"
                }
              ]
            },
            "documentation": {
              "id": 1490,
              "nodeType": "StructuredDocumentation",
              "src": "29874:317:0",
              "text": "@notice for a single admin to designate, update, or revoke an MVO's config struct using its ID\n @dev single admin used here for ease and reversibility of any malicious or mistaken update\n @param _mvoID: string ID for a given MVO\n @param _mvo: new or replacement MVO struct for the given ID"
            },
            "functionSelector": "8db44153",
            "id": 1541,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1498,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 1497,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "30299:9:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 284,
                  "src": "30299:9:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "30299:9:0"
              }
            ],
            "name": "updateMvoStatus",
            "nameLocation": "30206:15:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1496,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1492,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "30248:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1541,
                  "src": "30232:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1491,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "30232:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1495,
                  "mutability": "mutable",
                  "name": "_mvo",
                  "nameLocation": "30278:4:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1541,
                  "src": "30265:17:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MVO_$61_calldata_ptr",
                    "typeString": "struct MVOStaking.MVO"
                  },
                  "typeName": {
                    "id": 1494,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 1493,
                      "name": "MVO",
                      "nameLocations": [
                        "30265:3:0"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61,
                      "src": "30265:3:0"
                    },
                    "referencedDeclaration": 61,
                    "src": "30265:3:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MVO_$61_storage_ptr",
                      "typeString": "struct MVOStaking.MVO"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30221:68:0"
            },
            "returnParameters": {
              "id": 1499,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30309:0:0"
            },
            "scope": 1967,
            "src": "30197:745:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1595,
              "nodeType": "Block",
              "src": "31248:767:0",
              "statements": [
                {
                  "assignments": [
                    1550
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1550,
                      "mutability": "mutable",
                      "name": "_caller",
                      "nameLocation": "31266:7:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1595,
                      "src": "31259:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 1549,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "31259:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1562,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 1557,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "31298:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1558,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "31302:6:0",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "31298:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1556,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "31290:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 1555,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "31290:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1559,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31290:19:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 1554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "31283:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint64_$",
                            "typeString": "type(uint64)"
                          },
                          "typeName": {
                            "id": 1553,
                            "name": "uint64",
                            "nodeType": "ElementaryTypeName",
                            "src": "31283:6:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31283:27:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1552,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "31276:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes8_$",
                        "typeString": "type(bytes8)"
                      },
                      "typeName": {
                        "id": 1551,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "31276:6:0",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31276:35:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31259:52:0"
                },
                {
                  "assignments": [
                    1565
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1565,
                      "mutability": "mutable",
                      "name": "_minStakeKey",
                      "nameLocation": "31567:12:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1595,
                      "src": "31559:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1564,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "31559:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "documentation": "@dev we use 'address(uint160(_newMinStake))' as the key for the 'updateRequested' mapping to force every admin to set the same value\n @notice for the possible values of _newMinStake, the discarded highest 12 bytes will be 0",
                  "id": 1573,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1570,
                            "name": "_newMinStake",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1544,
                            "src": "31598:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "31590:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint160_$",
                            "typeString": "type(uint160)"
                          },
                          "typeName": {
                            "id": 1568,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "31590:7:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31590:21:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 1567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "31582:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 1566,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "31582:7:0",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31582:30:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31559:53:0"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 1575,
                        "name": "_minStakeKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1565,
                        "src": "31646:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1576,
                        "name": "_caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1550,
                        "src": "31660:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "expression": {
                          "id": 1577,
                          "name": "ApprovalTypes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 72,
                          "src": "31669:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$72_$",
                            "typeString": "type(enum MVOStaking.ApprovalTypes)"
                          }
                        },
                        "id": 1578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "31683:8:0",
                        "memberName": "MinStake",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 69,
                        "src": "31669:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                          "typeString": "enum MVOStaking.ApprovalTypes"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                          "typeString": "enum MVOStaking.ApprovalTypes"
                        }
                      ],
                      "id": 1574,
                      "name": "_isRequestApproved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1868,
                      "src": "31627:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes8_$_t_enum$_ApprovalTypes_$72_$returns$_t_bool_$",
                        "typeString": "function (address,bytes8,enum MVOStaking.ApprovalTypes) returns (bool)"
                      }
                    },
                    "id": 1579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31627:65:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1594,
                  "nodeType": "IfStatement",
                  "src": "31623:385:0",
                  "trueBody": {
                    "id": 1593,
                    "nodeType": "Block",
                    "src": "31694:314:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 1582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1580,
                            "name": "minStake",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 125,
                            "src": "31823:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1581,
                            "name": "_newMinStake",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1544,
                            "src": "31834:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31823:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1583,
                        "nodeType": "ExpressionStatement",
                        "src": "31823:23:0"
                      },
                      {
                        "expression": {
                          "id": 1587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "31907:36:0",
                          "subExpression": {
                            "baseExpression": {
                              "id": 1584,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 147,
                              "src": "31914:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                              }
                            },
                            "id": 1586,
                            "indexExpression": {
                              "id": 1585,
                              "name": "_minStakeKey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1565,
                              "src": "31930:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "31914:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$81_storage",
                              "typeString": "struct MVOStaking.Requests storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1588,
                        "nodeType": "ExpressionStatement",
                        "src": "31907:36:0"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1590,
                              "name": "_newMinStake",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1544,
                              "src": "31983:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1589,
                            "name": "MinimumStakeUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 188,
                            "src": "31963:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31963:33:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1592,
                        "nodeType": "EmitStatement",
                        "src": "31958:38:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 1542,
              "nodeType": "StructuredDocumentation",
              "src": "30950:227:0",
              "text": "@notice update 'minStake', designating a new minimum stake amount of $ENSHROUD tokens for MVOs, after three admins have called\n @param _newMinStake: new minimum amount of $ENSHROUD tokens required for a MVO to stake"
            },
            "functionSelector": "8cdb442f",
            "id": 1596,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1547,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 1546,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "31238:9:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 284,
                  "src": "31238:9:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "31238:9:0"
              }
            ],
            "name": "updateMinStake",
            "nameLocation": "31192:14:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1544,
                  "mutability": "mutable",
                  "name": "_newMinStake",
                  "nameLocation": "31215:12:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1596,
                  "src": "31207:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31207:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31206:22:0"
            },
            "returnParameters": {
              "id": 1548,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31248:0:0"
            },
            "scope": 1967,
            "src": "31183:832:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1645,
              "nodeType": "Block",
              "src": "32367:570:0",
              "statements": [
                {
                  "assignments": [
                    1605
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1605,
                      "mutability": "mutable",
                      "name": "_caller",
                      "nameLocation": "32385:7:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1645,
                      "src": "32378:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 1604,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "32378:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1617,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 1612,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "32417:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1613,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "32421:6:0",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "32417:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "32409:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 1610,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "32409:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32409:19:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 1609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "32402:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint64_$",
                            "typeString": "type(uint64)"
                          },
                          "typeName": {
                            "id": 1608,
                            "name": "uint64",
                            "nodeType": "ElementaryTypeName",
                            "src": "32402:6:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1615,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32402:27:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1607,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "32395:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes8_$",
                        "typeString": "type(bytes8)"
                      },
                      "typeName": {
                        "id": 1606,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "32395:6:0",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32395:35:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32378:52:0"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 1619,
                        "name": "_newProtocol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1599,
                        "src": "32464:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1620,
                        "name": "_caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1605,
                        "src": "32478:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "expression": {
                          "id": 1621,
                          "name": "ApprovalTypes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 72,
                          "src": "32487:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$72_$",
                            "typeString": "type(enum MVOStaking.ApprovalTypes)"
                          }
                        },
                        "id": 1622,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "32501:8:0",
                        "memberName": "Protocol",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70,
                        "src": "32487:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                          "typeString": "enum MVOStaking.ApprovalTypes"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                          "typeString": "enum MVOStaking.ApprovalTypes"
                        }
                      ],
                      "id": 1618,
                      "name": "_isRequestApproved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1868,
                      "src": "32445:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes8_$_t_enum$_ApprovalTypes_$72_$returns$_t_bool_$",
                        "typeString": "function (address,bytes8,enum MVOStaking.ApprovalTypes) returns (bool)"
                      }
                    },
                    "id": 1623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32445:65:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1644,
                  "nodeType": "IfStatement",
                  "src": "32441:489:0",
                  "trueBody": {
                    "id": 1643,
                    "nodeType": "Block",
                    "src": "32512:418:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1627,
                              "name": "_newProtocol",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1599,
                              "src": "32667:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 1624,
                              "name": "enshroudProtocols",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 116,
                              "src": "32644:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 1626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "32662:4:0",
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "32644:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$",
                              "typeString": "function (address[] storage pointer,address)"
                            }
                          },
                          "id": 1628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32644:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1629,
                        "nodeType": "ExpressionStatement",
                        "src": "32644:36:0"
                      },
                      {
                        "id": 1633,
                        "nodeType": "UncheckedBlock",
                        "src": "32686:76:0",
                        "statements": [
                          {
                            "expression": {
                              "id": 1631,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "32703:12:0",
                              "subExpression": {
                                "id": 1630,
                                "name": "protoIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 119,
                                "src": "32705:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1632,
                            "nodeType": "ExpressionStatement",
                            "src": "32703:12:0"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 1637,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "32822:36:0",
                          "subExpression": {
                            "baseExpression": {
                              "id": 1634,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 147,
                              "src": "32829:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                              }
                            },
                            "id": 1636,
                            "indexExpression": {
                              "id": 1635,
                              "name": "_newProtocol",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1599,
                              "src": "32845:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "32829:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$81_storage",
                              "typeString": "struct MVOStaking.Requests storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1638,
                        "nodeType": "ExpressionStatement",
                        "src": "32822:36:0"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1640,
                              "name": "_newProtocol",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1599,
                              "src": "32905:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1639,
                            "name": "MVOStaking_ProtocolUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 212,
                            "src": "32878:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 1641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32878:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1642,
                        "nodeType": "EmitStatement",
                        "src": "32873:45:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 1597,
              "nodeType": "StructuredDocumentation",
              "src": "32023:273:0",
              "text": "@notice update 'enshroudProtocol' a new protocol address, such as for a v2 upgrade, after three admins have called\n @param _newProtocol: new Enshroud Protocol contract address, changing 'enshroudProtocol'; must correctly implement public 'adminStatus[]' mapping"
            },
            "functionSelector": "727a573c",
            "id": 1646,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1602,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 1601,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "32357:9:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 284,
                  "src": "32357:9:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "32357:9:0"
              }
            ],
            "name": "updateProtocol",
            "nameLocation": "32311:14:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1600,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1599,
                  "mutability": "mutable",
                  "name": "_newProtocol",
                  "nameLocation": "32334:12:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1646,
                  "src": "32326:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1598,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "32326:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "32325:22:0"
            },
            "returnParameters": {
              "id": 1603,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32367:0:0"
            },
            "scope": 1967,
            "src": "32302:635:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1689,
              "nodeType": "Block",
              "src": "33240:377:0",
              "statements": [
                {
                  "assignments": [
                    1655
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1655,
                      "mutability": "mutable",
                      "name": "_caller",
                      "nameLocation": "33252:7:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1689,
                      "src": "33245:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 1654,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "33245:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1667,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 1662,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "33284:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1663,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "33288:6:0",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "33284:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "33276:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 1660,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "33276:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33276:19:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 1659,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "33269:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint64_$",
                            "typeString": "type(uint64)"
                          },
                          "typeName": {
                            "id": 1658,
                            "name": "uint64",
                            "nodeType": "ElementaryTypeName",
                            "src": "33269:6:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33269:27:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1657,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "33262:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes8_$",
                        "typeString": "type(bytes8)"
                      },
                      "typeName": {
                        "id": 1656,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "33262:6:0",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33262:35:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33245:52:0"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 1669,
                        "name": "_newBot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1649,
                        "src": "33325:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1670,
                        "name": "_caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1655,
                        "src": "33334:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "expression": {
                          "id": 1671,
                          "name": "ApprovalTypes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 72,
                          "src": "33343:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$72_$",
                            "typeString": "type(enum MVOStaking.ApprovalTypes)"
                          }
                        },
                        "id": 1672,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "33357:9:0",
                        "memberName": "PointsBot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 71,
                        "src": "33343:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                          "typeString": "enum MVOStaking.ApprovalTypes"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                          "typeString": "enum MVOStaking.ApprovalTypes"
                        }
                      ],
                      "id": 1668,
                      "name": "_isRequestApproved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1868,
                      "src": "33306:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes8_$_t_enum$_ApprovalTypes_$72_$returns$_t_bool_$",
                        "typeString": "function (address,bytes8,enum MVOStaking.ApprovalTypes) returns (bool)"
                      }
                    },
                    "id": 1673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33306:61:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1688,
                  "nodeType": "IfStatement",
                  "src": "33302:311:0",
                  "trueBody": {
                    "id": 1687,
                    "nodeType": "Block",
                    "src": "33369:244:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 1676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1674,
                            "name": "pointsBot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 137,
                            "src": "33478:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1675,
                            "name": "_newBot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1649,
                            "src": "33490:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "33478:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1677,
                        "nodeType": "ExpressionStatement",
                        "src": "33478:19:0"
                      },
                      {
                        "expression": {
                          "id": 1681,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "33540:31:0",
                          "subExpression": {
                            "baseExpression": {
                              "id": 1678,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 147,
                              "src": "33547:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                              }
                            },
                            "id": 1680,
                            "indexExpression": {
                              "id": 1679,
                              "name": "_newBot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1649,
                              "src": "33563:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "33547:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$81_storage",
                              "typeString": "struct MVOStaking.Requests storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1682,
                        "nodeType": "ExpressionStatement",
                        "src": "33540:31:0"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1684,
                              "name": "_newBot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1649,
                              "src": "33599:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1683,
                            "name": "PointsBotUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 249,
                            "src": "33582:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 1685,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33582:25:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1686,
                        "nodeType": "EmitStatement",
                        "src": "33577:30:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 1647,
              "nodeType": "StructuredDocumentation",
              "src": "32942:234:0",
              "text": "@notice set or update 'pointsBot' a new bot address authorized to import MVO points awarded on other chains (relevant only on mainnet contract deployment)\n @param _newBot: new bot authorized to import points from other chains"
            },
            "functionSelector": "7ef76c3c",
            "id": 1690,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1652,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 1651,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "33230:9:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 284,
                  "src": "33230:9:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "33230:9:0"
              }
            ],
            "name": "updatePointsBot",
            "nameLocation": "33188:15:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1650,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1649,
                  "mutability": "mutable",
                  "name": "_newBot",
                  "nameLocation": "33212:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1690,
                  "src": "33204:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1648,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "33204:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "33203:17:0"
            },
            "returnParameters": {
              "id": 1653,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "33240:0:0"
            },
            "scope": 1967,
            "src": "33179:438:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1729,
              "nodeType": "Block",
              "src": "34101:233:0",
              "statements": [
                {
                  "assignments": [
                    1701,
                    1703,
                    1705
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1701,
                      "mutability": "mutable",
                      "name": "v",
                      "nameLocation": "34119:1:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1729,
                      "src": "34113:7:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 1700,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "34113:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1703,
                      "mutability": "mutable",
                      "name": "r",
                      "nameLocation": "34130:1:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1729,
                      "src": "34122:9:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1702,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "34122:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1705,
                      "mutability": "mutable",
                      "name": "s",
                      "nameLocation": "34141:1:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1729,
                      "src": "34133:9:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1704,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "34133:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1709,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1707,
                        "name": "_mvoSig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1695,
                        "src": "34162:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 1706,
                      "name": "_splitSignature",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1895,
                      "src": "34146:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint8_$_t_bytes32_$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (uint8,bytes32,bytes32)"
                      }
                    },
                    "id": 1708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "34146:24:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$",
                      "typeString": "tuple(uint8,bytes32,bytes32)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34112:58:0"
                },
                {
                  "assignments": [
                    1711
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1711,
                      "mutability": "mutable",
                      "name": "_signAddr",
                      "nameLocation": "34189:9:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1729,
                      "src": "34181:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1710,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "34181:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1718,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1713,
                        "name": "_obHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1697,
                        "src": "34211:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 1714,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1701,
                        "src": "34220:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 1715,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1703,
                        "src": "34223:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 1716,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1705,
                        "src": "34226:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 1712,
                      "name": "ecrecover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -6,
                      "src": "34201:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 1717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "34201:27:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34181:47:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1724,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1719,
                          "name": "idToMVO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 163,
                          "src": "34243:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                            "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                          }
                        },
                        "id": 1721,
                        "indexExpression": {
                          "id": 1720,
                          "name": "_mvoID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1693,
                          "src": "34251:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "34243:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVO_$61_storage",
                          "typeString": "struct MVOStaking.MVO storage ref"
                        }
                      },
                      "id": 1722,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "34259:14:0",
                      "memberName": "signingAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 50,
                      "src": "34243:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 1723,
                      "name": "_signAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1711,
                      "src": "34277:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "34243:43:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1728,
                  "nodeType": "IfStatement",
                  "src": "34239:87:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1725,
                        "name": "InvalidSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 302,
                        "src": "34308:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "34308:18:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1727,
                    "nodeType": "RevertStatement",
                    "src": "34301:25:0"
                  }
                }
              ]
            },
            "documentation": {
              "id": 1691,
              "nodeType": "StructuredDocumentation",
              "src": "33625:336:0",
              "text": "@notice check an MVO's signature against its ID and verify signature - will revert if not\n @param _mvoID: ID of MVO to access relevant struct containing MVO information\n @param _mvoSig: signature of MVO to check against its ID using the idToMVO mapping\n @param _obHash: keccak256 hash of the Operations Block"
            },
            "functionSelector": "c4df873f",
            "id": 1730,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkMVOSig",
            "nameLocation": "33976:11:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1698,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1693,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "34014:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1730,
                  "src": "33998:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1692,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "33998:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1695,
                  "mutability": "mutable",
                  "name": "_mvoSig",
                  "nameLocation": "34046:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1730,
                  "src": "34031:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1694,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "34031:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1697,
                  "mutability": "mutable",
                  "name": "_obHash",
                  "nameLocation": "34072:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1730,
                  "src": "34064:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1696,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "34064:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "33987:99:0"
            },
            "returnParameters": {
              "id": 1699,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "34101:0:0"
            },
            "scope": 1967,
            "src": "33967:367:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1753,
              "nodeType": "Block",
              "src": "34581:164:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1740,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "34610:23:0",
                      "subExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 1736,
                            "name": "idToMVO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 163,
                            "src": "34611:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                              "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                            }
                          },
                          "id": 1738,
                          "indexExpression": {
                            "id": 1737,
                            "name": "_mvoID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1733,
                            "src": "34619:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "34611:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVO_$61_storage",
                            "typeString": "struct MVOStaking.MVO storage ref"
                          }
                        },
                        "id": 1739,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "34627:6:0",
                        "memberName": "active",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60,
                        "src": "34611:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1746,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 1741,
                            "name": "idToMVO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 163,
                            "src": "34637:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_MVO_$61_storage_$",
                              "typeString": "mapping(string memory => struct MVOStaking.MVO storage ref)"
                            }
                          },
                          "id": 1743,
                          "indexExpression": {
                            "id": 1742,
                            "name": "_mvoID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1733,
                            "src": "34645:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "34637:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVO_$61_storage",
                            "typeString": "struct MVOStaking.MVO storage ref"
                          }
                        },
                        "id": 1744,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "34653:14:0",
                        "memberName": "stakingQuantum",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 54,
                        "src": "34637:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "id": 1745,
                        "name": "minStake",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 125,
                        "src": "34670:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "34637:41:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "34610:68:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1752,
                  "nodeType": "IfStatement",
                  "src": "34592:146:0",
                  "trueBody": {
                    "id": 1751,
                    "nodeType": "Block",
                    "src": "34690:48:0",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1748,
                            "name": "NotActiveMVO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 308,
                            "src": "34712:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                              "typeString": "function () pure returns (error)"
                            }
                          },
                          "id": 1749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34712:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_error",
                            "typeString": "error"
                          }
                        },
                        "id": 1750,
                        "nodeType": "RevertStatement",
                        "src": "34705:21:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 1731,
              "nodeType": "StructuredDocumentation",
              "src": "34342:179:0",
              "text": "@notice check an MVO's struct and ensure it has at least 'minStake' tokens and is active\n @param _mvoID: ID of MVO to access relevant struct containing MVO information"
            },
            "functionSelector": "bb21aa52",
            "id": 1754,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkMVO",
            "nameLocation": "34536:8:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1734,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1733,
                  "mutability": "mutable",
                  "name": "_mvoID",
                  "nameLocation": "34561:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1754,
                  "src": "34545:22:0",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1732,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "34545:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "34544:24:0"
            },
            "returnParameters": {
              "id": 1735,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "34581:0:0"
            },
            "scope": 1967,
            "src": "34527:218:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1867,
              "nodeType": "Block",
              "src": "35166:942:0",
              "statements": [
                {
                  "assignments": [
                    1768
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1768,
                      "mutability": "mutable",
                      "name": "_default",
                      "nameLocation": "35184:8:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1867,
                      "src": "35177:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 1767,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "35177:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1769,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "35177:15:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    },
                    "id": 1775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1770,
                          "name": "updateRequested",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 147,
                          "src": "35209:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                            "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                          }
                        },
                        "id": 1772,
                        "indexExpression": {
                          "id": 1771,
                          "name": "_reqAddr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1757,
                          "src": "35225:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "35209:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Requests_$81_storage",
                          "typeString": "struct MVOStaking.Requests storage ref"
                        }
                      },
                      "id": 1773,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "35235:10:0",
                      "memberName": "requester1",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 75,
                      "src": "35209:36:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 1774,
                      "name": "_default",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1768,
                      "src": "35249:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      }
                    },
                    "src": "35209:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 1817,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1810,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1803,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            },
                            "id": 1796,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 1791,
                                  "name": "updateRequested",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 147,
                                  "src": "35404:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                    "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                                  }
                                },
                                "id": 1793,
                                "indexExpression": {
                                  "id": 1792,
                                  "name": "_reqAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1757,
                                  "src": "35420:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "35404:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Requests_$81_storage",
                                  "typeString": "struct MVOStaking.Requests storage ref"
                                }
                              },
                              "id": 1794,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "35430:10:0",
                              "memberName": "requester1",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 75,
                              "src": "35404:36:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 1795,
                              "name": "_default",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1768,
                              "src": "35444:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              }
                            },
                            "src": "35404:48:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            },
                            "id": 1802,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 1797,
                                  "name": "updateRequested",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 147,
                                  "src": "35469:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                    "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                                  }
                                },
                                "id": 1799,
                                "indexExpression": {
                                  "id": 1798,
                                  "name": "_reqAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1757,
                                  "src": "35485:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "35469:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Requests_$81_storage",
                                  "typeString": "struct MVOStaking.Requests storage ref"
                                }
                              },
                              "id": 1800,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "35495:10:0",
                              "memberName": "requester2",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 77,
                              "src": "35469:36:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 1801,
                              "name": "_default",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1768,
                              "src": "35509:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              }
                            },
                            "src": "35469:48:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "35404:113:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes8",
                            "typeString": "bytes8"
                          },
                          "id": 1809,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1804,
                            "name": "_caller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1759,
                            "src": "35534:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 1805,
                                "name": "updateRequested",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 147,
                                "src": "35545:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                  "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                                }
                              },
                              "id": 1807,
                              "indexExpression": {
                                "id": 1806,
                                "name": "_reqAddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1757,
                                "src": "35561:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "35545:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Requests_$81_storage",
                                "typeString": "struct MVOStaking.Requests storage ref"
                              }
                            },
                            "id": 1808,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "35571:10:0",
                            "memberName": "requester1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 75,
                            "src": "35545:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            }
                          },
                          "src": "35534:47:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "35404:177:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                          "typeString": "enum MVOStaking.ApprovalTypes"
                        },
                        "id": 1816,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1811,
                          "name": "_reqType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1762,
                          "src": "35589:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                            "typeString": "enum MVOStaking.ApprovalTypes"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 1812,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 147,
                              "src": "35601:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                              }
                            },
                            "id": 1814,
                            "indexExpression": {
                              "id": 1813,
                              "name": "_reqAddr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1757,
                              "src": "35617:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "35601:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$81_storage",
                              "typeString": "struct MVOStaking.Requests storage ref"
                            }
                          },
                          "id": 1815,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "35627:11:0",
                          "memberName": "requestType",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 80,
                          "src": "35601:37:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                            "typeString": "enum MVOStaking.ApprovalTypes"
                          }
                        },
                        "src": "35589:49:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "35404:234:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1851,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 1844,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1837,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                "id": 1830,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 1825,
                                      "name": "updateRequested",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 147,
                                      "src": "35730:15:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                        "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                                      }
                                    },
                                    "id": 1827,
                                    "indexExpression": {
                                      "id": 1826,
                                      "name": "_reqAddr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1757,
                                      "src": "35746:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "35730:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Requests_$81_storage",
                                      "typeString": "struct MVOStaking.Requests storage ref"
                                    }
                                  },
                                  "id": 1828,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "35756:10:0",
                                  "memberName": "requester1",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 75,
                                  "src": "35730:36:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes8",
                                    "typeString": "bytes8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 1829,
                                  "name": "_default",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1768,
                                  "src": "35770:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes8",
                                    "typeString": "bytes8"
                                  }
                                },
                                "src": "35730:48:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                "id": 1836,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 1831,
                                      "name": "updateRequested",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 147,
                                      "src": "35795:15:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                        "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                                      }
                                    },
                                    "id": 1833,
                                    "indexExpression": {
                                      "id": 1832,
                                      "name": "_reqAddr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1757,
                                      "src": "35811:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "35795:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Requests_$81_storage",
                                      "typeString": "struct MVOStaking.Requests storage ref"
                                    }
                                  },
                                  "id": 1834,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "35821:10:0",
                                  "memberName": "requester2",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 77,
                                  "src": "35795:36:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes8",
                                    "typeString": "bytes8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 1835,
                                  "name": "_default",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1768,
                                  "src": "35835:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes8",
                                    "typeString": "bytes8"
                                  }
                                },
                                "src": "35795:48:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "35730:113:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              },
                              "id": 1843,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1838,
                                "name": "_caller",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1759,
                                "src": "35860:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 1839,
                                    "name": "updateRequested",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 147,
                                    "src": "35871:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                      "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                                    }
                                  },
                                  "id": 1841,
                                  "indexExpression": {
                                    "id": 1840,
                                    "name": "_reqAddr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1757,
                                    "src": "35887:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "35871:25:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Requests_$81_storage",
                                    "typeString": "struct MVOStaking.Requests storage ref"
                                  }
                                },
                                "id": 1842,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "35897:10:0",
                                "memberName": "requester1",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 75,
                                "src": "35871:36:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              },
                              "src": "35860:47:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "35730:177:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            },
                            "id": 1850,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1845,
                              "name": "_caller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1759,
                              "src": "35924:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 1846,
                                  "name": "updateRequested",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 147,
                                  "src": "35935:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                    "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                                  }
                                },
                                "id": 1848,
                                "indexExpression": {
                                  "id": 1847,
                                  "name": "_reqAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1757,
                                  "src": "35951:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "35935:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Requests_$81_storage",
                                  "typeString": "struct MVOStaking.Requests storage ref"
                                }
                              },
                              "id": 1849,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "35961:10:0",
                              "memberName": "requester2",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 77,
                              "src": "35935:36:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              }
                            },
                            "src": "35924:47:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "35730:241:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                            "typeString": "enum MVOStaking.ApprovalTypes"
                          },
                          "id": 1857,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1852,
                            "name": "_reqType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1762,
                            "src": "35979:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                              "typeString": "enum MVOStaking.ApprovalTypes"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 1853,
                                "name": "updateRequested",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 147,
                                "src": "35991:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                  "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                                }
                              },
                              "id": 1855,
                              "indexExpression": {
                                "id": 1854,
                                "name": "_reqAddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1757,
                                "src": "36007:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "35991:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Requests_$81_storage",
                                "typeString": "struct MVOStaking.Requests storage ref"
                              }
                            },
                            "id": 1856,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "36017:11:0",
                            "memberName": "requestType",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 80,
                            "src": "35991:37:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                              "typeString": "enum MVOStaking.ApprovalTypes"
                            }
                          },
                          "src": "35979:49:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "35730:298:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 1862,
                      "nodeType": "IfStatement",
                      "src": "35712:366:0",
                      "trueBody": {
                        "id": 1861,
                        "nodeType": "Block",
                        "src": "36040:38:0",
                        "statements": [
                          {
                            "expression": {
                              "hexValue": "74727565",
                              "id": 1859,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "36062:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "functionReturnParameters": 1766,
                            "id": 1860,
                            "nodeType": "Return",
                            "src": "36055:11:0"
                          }
                        ]
                      }
                    },
                    "id": 1863,
                    "nodeType": "IfStatement",
                    "src": "35386:692:0",
                    "trueBody": {
                      "expression": {
                        "id": 1823,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "expression": {
                            "baseExpression": {
                              "id": 1818,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 147,
                              "src": "35650:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                              }
                            },
                            "id": 1820,
                            "indexExpression": {
                              "id": 1819,
                              "name": "_reqAddr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1757,
                              "src": "35666:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "35650:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$81_storage",
                              "typeString": "struct MVOStaking.Requests storage ref"
                            }
                          },
                          "id": 1821,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberLocation": "35676:10:0",
                          "memberName": "requester2",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 77,
                          "src": "35650:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes8",
                            "typeString": "bytes8"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "id": 1822,
                          "name": "_caller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1759,
                          "src": "35689:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes8",
                            "typeString": "bytes8"
                          }
                        },
                        "src": "35650:46:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "id": 1824,
                      "nodeType": "ExpressionStatement",
                      "src": "35650:46:0"
                    }
                  },
                  "id": 1864,
                  "nodeType": "IfStatement",
                  "src": "35205:873:0",
                  "trueBody": {
                    "id": 1790,
                    "nodeType": "Block",
                    "src": "35259:121:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 1781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1776,
                                "name": "updateRequested",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 147,
                                "src": "35274:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                  "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                                }
                              },
                              "id": 1778,
                              "indexExpression": {
                                "id": 1777,
                                "name": "_reqAddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1757,
                                "src": "35290:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "35274:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Requests_$81_storage",
                                "typeString": "struct MVOStaking.Requests storage ref"
                              }
                            },
                            "id": 1779,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "35300:10:0",
                            "memberName": "requester1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 75,
                            "src": "35274:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1780,
                            "name": "_caller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1759,
                            "src": "35313:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            }
                          },
                          "src": "35274:46:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes8",
                            "typeString": "bytes8"
                          }
                        },
                        "id": 1782,
                        "nodeType": "ExpressionStatement",
                        "src": "35274:46:0"
                      },
                      {
                        "expression": {
                          "id": 1788,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1783,
                                "name": "updateRequested",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 147,
                                "src": "35326:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$81_storage_$",
                                  "typeString": "mapping(address => struct MVOStaking.Requests storage ref)"
                                }
                              },
                              "id": 1785,
                              "indexExpression": {
                                "id": 1784,
                                "name": "_reqAddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1757,
                                "src": "35342:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "35326:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Requests_$81_storage",
                                "typeString": "struct MVOStaking.Requests storage ref"
                              }
                            },
                            "id": 1786,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "35352:11:0",
                            "memberName": "requestType",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 80,
                            "src": "35326:37:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                              "typeString": "enum MVOStaking.ApprovalTypes"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1787,
                            "name": "_reqType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1762,
                            "src": "35366:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                              "typeString": "enum MVOStaking.ApprovalTypes"
                            }
                          },
                          "src": "35326:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                            "typeString": "enum MVOStaking.ApprovalTypes"
                          }
                        },
                        "id": 1789,
                        "nodeType": "ExpressionStatement",
                        "src": "35326:48:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 1865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "36095:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 1766,
                  "id": 1866,
                  "nodeType": "Return",
                  "src": "36088:12:0"
                }
              ]
            },
            "documentation": {
              "id": 1755,
              "nodeType": "StructuredDocumentation",
              "src": "34753:269:0",
              "text": "@notice for variable updates that require update requests from three unique admins\n @param _reqAddr: index to data being updated\n @param _caller: truncation of the admin address making the call\n @param _reqType: disambiguation for type of update call"
            },
            "id": 1868,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isRequestApproved",
            "nameLocation": "35037:18:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1763,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1757,
                  "mutability": "mutable",
                  "name": "_reqAddr",
                  "nameLocation": "35074:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1868,
                  "src": "35066:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1756,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "35066:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1759,
                  "mutability": "mutable",
                  "name": "_caller",
                  "nameLocation": "35100:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1868,
                  "src": "35093:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 1758,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "35093:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1762,
                  "mutability": "mutable",
                  "name": "_reqType",
                  "nameLocation": "35126:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1868,
                  "src": "35112:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                    "typeString": "enum MVOStaking.ApprovalTypes"
                  },
                  "typeName": {
                    "id": 1761,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 1760,
                      "name": "ApprovalTypes",
                      "nameLocations": [
                        "35112:13:0"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 72,
                      "src": "35112:13:0"
                    },
                    "referencedDeclaration": 72,
                    "src": "35112:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ApprovalTypes_$72",
                      "typeString": "enum MVOStaking.ApprovalTypes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "35055:86:0"
            },
            "returnParameters": {
              "id": 1766,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1765,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1868,
                  "src": "35160:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1764,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "35160:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "35159:6:0"
            },
            "scope": 1967,
            "src": "35028:1080:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1894,
              "nodeType": "Block",
              "src": "36452:409:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1880,
                        "name": "_sig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1871,
                        "src": "36467:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1881,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "36472:6:0",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "36467:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "3635",
                      "id": 1882,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "36482:2:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65_by_1",
                        "typeString": "int_const 65"
                      },
                      "value": "65"
                    },
                    "src": "36467:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1887,
                  "nodeType": "IfStatement",
                  "src": "36463:50:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1884,
                        "name": "IncorrectSigLength",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 298,
                        "src": "36493:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 1885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "36493:20:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 1886,
                    "nodeType": "RevertStatement",
                    "src": "36486:27:0"
                  }
                },
                {
                  "AST": {
                    "nativeSrc": "36535:290:0",
                    "nodeType": "YulBlock",
                    "src": "36535:290:0",
                    "statements": [
                      {
                        "nativeSrc": "36607:25:0",
                        "nodeType": "YulAssignment",
                        "src": "36607:25:0",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_sig",
                                  "nativeSrc": "36622:4:0",
                                  "nodeType": "YulIdentifier",
                                  "src": "36622:4:0"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "36628:2:0",
                                  "nodeType": "YulLiteral",
                                  "src": "36628:2:0",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "36618:3:0",
                                "nodeType": "YulIdentifier",
                                "src": "36618:3:0"
                              },
                              "nativeSrc": "36618:13:0",
                              "nodeType": "YulFunctionCall",
                              "src": "36618:13:0"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "36612:5:0",
                            "nodeType": "YulIdentifier",
                            "src": "36612:5:0"
                          },
                          "nativeSrc": "36612:20:0",
                          "nodeType": "YulFunctionCall",
                          "src": "36612:20:0"
                        },
                        "variableNames": [
                          {
                            "name": "r",
                            "nativeSrc": "36607:1:0",
                            "nodeType": "YulIdentifier",
                            "src": "36607:1:0"
                          }
                        ]
                      },
                      {
                        "nativeSrc": "36679:25:0",
                        "nodeType": "YulAssignment",
                        "src": "36679:25:0",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_sig",
                                  "nativeSrc": "36694:4:0",
                                  "nodeType": "YulIdentifier",
                                  "src": "36694:4:0"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "36700:2:0",
                                  "nodeType": "YulLiteral",
                                  "src": "36700:2:0",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "36690:3:0",
                                "nodeType": "YulIdentifier",
                                "src": "36690:3:0"
                              },
                              "nativeSrc": "36690:13:0",
                              "nodeType": "YulFunctionCall",
                              "src": "36690:13:0"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "36684:5:0",
                            "nodeType": "YulIdentifier",
                            "src": "36684:5:0"
                          },
                          "nativeSrc": "36684:20:0",
                          "nodeType": "YulFunctionCall",
                          "src": "36684:20:0"
                        },
                        "variableNames": [
                          {
                            "name": "s",
                            "nativeSrc": "36679:1:0",
                            "nodeType": "YulIdentifier",
                            "src": "36679:1:0"
                          }
                        ]
                      },
                      {
                        "nativeSrc": "36780:34:0",
                        "nodeType": "YulAssignment",
                        "src": "36780:34:0",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "36790:1:0",
                              "nodeType": "YulLiteral",
                              "src": "36790:1:0",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "_sig",
                                      "nativeSrc": "36803:4:0",
                                      "nodeType": "YulIdentifier",
                                      "src": "36803:4:0"
                                    },
                                    {
                                      "kind": "number",
                                      "nativeSrc": "36809:2:0",
                                      "nodeType": "YulLiteral",
                                      "src": "36809:2:0",
                                      "type": "",
                                      "value": "96"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "36799:3:0",
                                    "nodeType": "YulIdentifier",
                                    "src": "36799:3:0"
                                  },
                                  "nativeSrc": "36799:13:0",
                                  "nodeType": "YulFunctionCall",
                                  "src": "36799:13:0"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "36793:5:0",
                                "nodeType": "YulIdentifier",
                                "src": "36793:5:0"
                              },
                              "nativeSrc": "36793:20:0",
                              "nodeType": "YulFunctionCall",
                              "src": "36793:20:0"
                            }
                          ],
                          "functionName": {
                            "name": "byte",
                            "nativeSrc": "36785:4:0",
                            "nodeType": "YulIdentifier",
                            "src": "36785:4:0"
                          },
                          "nativeSrc": "36785:29:0",
                          "nodeType": "YulFunctionCall",
                          "src": "36785:29:0"
                        },
                        "variableNames": [
                          {
                            "name": "v",
                            "nativeSrc": "36780:1:0",
                            "nodeType": "YulIdentifier",
                            "src": "36780:1:0"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "shanghai",
                  "externalReferences": [
                    {
                      "declaration": 1871,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "36622:4:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1871,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "36694:4:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1871,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "36803:4:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1876,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "36607:1:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1878,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "36679:1:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1874,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "36780:1:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 1888,
                  "nodeType": "InlineAssembly",
                  "src": "36526:299:0"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 1889,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1874,
                        "src": "36845:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 1890,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1876,
                        "src": "36848:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 1891,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1878,
                        "src": "36851:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "id": 1892,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "36844:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$",
                      "typeString": "tuple(uint8,bytes32,bytes32)"
                    }
                  },
                  "functionReturnParameters": 1879,
                  "id": 1893,
                  "nodeType": "Return",
                  "src": "36837:16:0"
                }
              ]
            },
            "documentation": {
              "id": 1869,
              "nodeType": "StructuredDocumentation",
              "src": "36116:216:0",
              "text": "@notice split signature for ecrecover function, see https://docs.soliditylang.org/en/latest/solidity-by-example.html#recovering-the-message-signer-in-solidity\n @param _sig: the standard signature to be split"
            },
            "id": 1895,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_splitSignature",
            "nameLocation": "36347:15:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1872,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1871,
                  "mutability": "mutable",
                  "name": "_sig",
                  "nameLocation": "36386:4:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1895,
                  "src": "36373:17:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1870,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "36373:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "36362:35:0"
            },
            "returnParameters": {
              "id": 1879,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1874,
                  "mutability": "mutable",
                  "name": "v",
                  "nameLocation": "36427:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1895,
                  "src": "36421:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1873,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "36421:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1876,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "36438:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1895,
                  "src": "36430:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1875,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "36430:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1878,
                  "mutability": "mutable",
                  "name": "s",
                  "nameLocation": "36449:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1895,
                  "src": "36441:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1877,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "36441:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "36420:31:0"
            },
            "scope": 1967,
            "src": "36338:523:0",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1965,
              "nodeType": "Block",
              "src": "37314:700:0",
              "statements": [
                {
                  "assignments": [
                    1905
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1905,
                      "mutability": "mutable",
                      "name": "timelock",
                      "nameLocation": "37342:8:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1965,
                      "src": "37325:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Timelock_$91_storage_ptr",
                        "typeString": "struct MVOStaking.Timelock"
                      },
                      "typeName": {
                        "id": 1904,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 1903,
                          "name": "Timelock",
                          "nameLocations": [
                            "37325:8:0"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 91,
                          "src": "37325:8:0"
                        },
                        "referencedDeclaration": 91,
                        "src": "37325:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Timelock_$91_storage_ptr",
                          "typeString": "struct MVOStaking.Timelock"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1909,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1906,
                      "name": "timelocks",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 180,
                      "src": "37353:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Timelock_$91_storage_$",
                        "typeString": "mapping(address => struct MVOStaking.Timelock storage ref)"
                      }
                    },
                    "id": 1908,
                    "indexExpression": {
                      "id": 1907,
                      "name": "_recipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1898,
                      "src": "37363:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "37353:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Timelock_$91_storage",
                      "typeString": "struct MVOStaking.Timelock storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "37325:49:0"
                },
                {
                  "assignments": [
                    1911
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1911,
                      "mutability": "mutable",
                      "name": "_releaseStart",
                      "nameLocation": "37393:13:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1965,
                      "src": "37385:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1910,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "37385:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1917,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1914,
                          "name": "timelock",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1905,
                          "src": "37417:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Timelock_$91_storage_ptr",
                            "typeString": "struct MVOStaking.Timelock storage pointer"
                          }
                        },
                        "id": 1915,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "37426:12:0",
                        "memberName": "releaseStart",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 88,
                        "src": "37417:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 1913,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "37409:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 1912,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "37409:7:0",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37409:30:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "37385:54:0"
                },
                {
                  "assignments": [
                    1919
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1919,
                      "mutability": "mutable",
                      "name": "_releaseEnd",
                      "nameLocation": "37458:11:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1965,
                      "src": "37450:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1918,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "37450:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1925,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1922,
                          "name": "timelock",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1905,
                          "src": "37480:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Timelock_$91_storage_ptr",
                            "typeString": "struct MVOStaking.Timelock storage pointer"
                          }
                        },
                        "id": 1923,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "37489:10:0",
                        "memberName": "releaseEnd",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 90,
                        "src": "37480:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 1921,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "37472:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 1920,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "37472:7:0",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1924,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37472:28:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "37450:50:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1926,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "37515:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1927,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "37521:6:0",
                      "memberName": "number",
                      "nodeType": "MemberAccess",
                      "src": "37515:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 1928,
                      "name": "_releaseStart",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1911,
                      "src": "37531:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37515:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1938,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 1935,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "37595:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "37601:6:0",
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "src": "37595:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 1937,
                        "name": "_releaseEnd",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1919,
                        "src": "37611:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "37595:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 1962,
                      "nodeType": "Block",
                      "src": "37688:319:0",
                      "statements": [
                        {
                          "expression": {
                            "id": 1960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1945,
                              "name": "unlocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1901,
                              "src": "37880:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1959,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1953,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 1946,
                                        "name": "timelock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1905,
                                        "src": "37892:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Timelock_$91_storage_ptr",
                                          "typeString": "struct MVOStaking.Timelock storage pointer"
                                        }
                                      },
                                      "id": 1947,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "37901:11:0",
                                      "memberName": "totalAmount",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 84,
                                      "src": "37892:20:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 1951,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 1948,
                                              "name": "block",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -4,
                                              "src": "37916:5:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_block",
                                                "typeString": "block"
                                              }
                                            },
                                            "id": 1949,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "37922:6:0",
                                            "memberName": "number",
                                            "nodeType": "MemberAccess",
                                            "src": "37916:12:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "id": 1950,
                                            "name": "_releaseStart",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1911,
                                            "src": "37931:13:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "37916:28:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 1952,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "37915:30:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "37892:53:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1954,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "37891:55:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1957,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1955,
                                      "name": "_releaseEnd",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1919,
                                      "src": "37967:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 1956,
                                      "name": "_releaseStart",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1911,
                                      "src": "37981:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "37967:27:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1958,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "37966:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "37891:104:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "37880:115:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1961,
                          "nodeType": "ExpressionStatement",
                          "src": "37880:115:0"
                        }
                      ]
                    },
                    "id": 1963,
                    "nodeType": "IfStatement",
                    "src": "37591:416:0",
                    "trueBody": {
                      "id": 1944,
                      "nodeType": "Block",
                      "src": "37624:58:0",
                      "statements": [
                        {
                          "expression": {
                            "id": 1942,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1939,
                              "name": "unlocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1901,
                              "src": "37639:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "id": 1940,
                                "name": "timelock",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1905,
                                "src": "37650:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Timelock_$91_storage_ptr",
                                  "typeString": "struct MVOStaking.Timelock storage pointer"
                                }
                              },
                              "id": 1941,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "37659:11:0",
                              "memberName": "totalAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 84,
                              "src": "37650:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "37639:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1943,
                          "nodeType": "ExpressionStatement",
                          "src": "37639:31:0"
                        }
                      ]
                    }
                  },
                  "id": 1964,
                  "nodeType": "IfStatement",
                  "src": "37511:496:0",
                  "trueBody": {
                    "id": 1934,
                    "nodeType": "Block",
                    "src": "37546:39:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 1932,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1930,
                            "name": "unlocked",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1901,
                            "src": "37561:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 1931,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "37572:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "37561:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1933,
                        "nodeType": "ExpressionStatement",
                        "src": "37561:12:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 1896,
              "nodeType": "StructuredDocumentation",
              "src": "36869:341:0",
              "text": "@notice returns 'unlocked', the amount of tokens that was unlocked for the recipient to date. Includes both withdrawn and non-withdrawn tokens.\n @dev same function as in Timelock.sol\n @param _recipient: address of the timelock recipient\n @return unlocked the quantity of tokens in a Timelock which are now unlockable"
            },
            "id": 1966,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getUnlocked",
            "nameLocation": "37225:12:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1898,
                  "mutability": "mutable",
                  "name": "_recipient",
                  "nameLocation": "37256:10:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1966,
                  "src": "37248:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1897,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "37248:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37237:36:0"
            },
            "returnParameters": {
              "id": 1902,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1901,
                  "mutability": "mutable",
                  "name": "unlocked",
                  "nameLocation": "37304:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 1966,
                  "src": "37296:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1900,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "37296:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37295:18:0"
            },
            "scope": 1967,
            "src": "37216:798:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "scope": 1968,
        "src": "1284:36733:0",
        "usedErrors": [
          286,
          288,
          290,
          292,
          294,
          296,
          298,
          300,
          302,
          304,
          306,
          308,
          310,
          312,
          314,
          316,
          318,
          320,
          1972
        ],
        "usedEvents": [
          184,
          188,
          196,
          202,
          208,
          212,
          220,
          228,
          237,
          245,
          249,
          255,
          263
        ]
      }
    ],
    "src": "33:37986:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.28+commit.7893614a.Linux.g++"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-05-06T23:51:17.866Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}