ETH Price: $3,468.10 (+2.75%)
Gas: 8.81 Gwei

Contract

0x7fd75dd31c691193F6B9De2d0043e3FED7f87aFA
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim143418612022-03-07 20:30:221019 days ago1646685022IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0355725699.93670177
Claim142620142022-02-23 11:17:061031 days ago1645615026IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0117067432.41149715
Claim141117042022-01-31 5:20:091054 days ago1643606409IN
0x7fd75dd3...ED7f87aFA
0 ETH0.03761827102.66129146
Claim141062102022-01-30 9:02:101055 days ago1643533330IN
0x7fd75dd3...ED7f87aFA
0 ETH0.00265137102.39723804
Claim141062102022-01-30 9:02:101055 days ago1643533330IN
0x7fd75dd3...ED7f87aFA
0 ETH0.03805808102.39723804
Claim140871522022-01-27 10:26:591058 days ago1643279219IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0315081279.96763818
Claim140349762022-01-19 8:45:231066 days ago1642581923IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0328173182.19719689
Claim140104822022-01-15 14:13:391070 days ago1642256019IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0356993992.15339193
Claim139899222022-01-12 9:30:231073 days ago1641979823IN
0x7fd75dd3...ED7f87aFA
0 ETH0.05808663141.76774099
Claim139507482022-01-06 8:16:371079 days ago1641456997IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0315989979.42021183
Claim139169612022-01-01 2:54:151084 days ago1641005655IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0017573267.86879394
Claim139169602022-01-01 2:54:001084 days ago1641005640IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0267966766.47466874
Claim138863572021-12-27 9:02:521089 days ago1640595772IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0156561538.33994699
Claim138800292021-12-26 9:35:271090 days ago1640511327IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0155666237.63773416
Claim138409522021-12-20 8:24:151096 days ago1639988655IN
0x7fd75dd3...ED7f87aFA
0 ETH0.015560637.15247181
Claim138333652021-12-19 4:17:461097 days ago1639887466IN
0x7fd75dd3...ED7f87aFA
0 ETH0.018413541.73780396
Claim138333632021-12-19 4:17:181097 days ago1639887438IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0182447840.86991613
Claim138039792021-12-14 15:00:281102 days ago1639494028IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0016462863.58013448
Claim138039792021-12-14 15:00:281102 days ago1639494028IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0287160363.58013448
Claim137960562021-12-13 9:40:591103 days ago1639388459IN
0x7fd75dd3...ED7f87aFA
0 ETH0.020753447.18925464
Claim137904762021-12-12 13:02:171104 days ago1639314137IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0198050642.74127807
Claim137903722021-12-12 12:42:061104 days ago1639312926IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0196175943.4487532
Claim137900752021-12-12 11:40:131104 days ago1639309213IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0189933840.0830219
Claim137899652021-12-12 11:18:211104 days ago1639307901IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0189913339.64034713
Claim137846522021-12-11 15:25:401105 days ago1639236340IN
0x7fd75dd3...ED7f87aFA
0 ETH0.0271942356.14803078
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
131828202021-09-08 4:04:591199 days ago1631073899  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x0D722222...e8059f022
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Staking

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-08
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

contract Staking {
    
    using SafeMath for uint256;
    ManagerRole public manager;

    struct StakeHolder {
        bool isClaimed;                 // Current Staking status
        uint256 amount;                 // Current active stake
        uint256 stakedBlock;            // Last staked block (if any)
        uint256 releaseBlock;           // Last claimed block (if any)
        uint256 claimedOn;              // Last time claimed
        uint256 rewards;                // Rewards
    }
    mapping (address => StakeHolder) public StakeHolders;
    
    // List of stake holders
    address[] private allStakeHolders;
    
    // Stake & Reward Token
    address public stakeToken;

    // To check if the staking is paused
    bool public isStakingPaused;

    // To check if the pool is Active
    bool public isPoolActive;
    
    // No.of Staking Pool Tokens 
    uint256 public stakingPool;

    // No.of Staking Pool Rewards
    uint256 public stakingPoolRewards;

    // Staking Duration in Days
    uint256 public stakingDuration;

    // Staking Opening Time for users to stake
    uint256 public stakingOpenTime;

    // Staking reward start block
    uint256 public stakingStartBlock;

    // Staking rewards ending block
    uint256 public stakingEndBlock;

    // No.of Staking Blocks
    uint256 public noOfStakingBlocks;

    // No.of users staked
    uint256 public noOfStakes;
    
    // 6440 is the avg no.of Ethereum Blocks per day, Applicable only for Ethereum network 
    uint256 public avgETHBlocksPerDay = 6440;

    // To calculate the no.of Currently staked tokens
    uint256 public currentPool;

    // To check if the users are fully calimed
    bool public isPoolFullyClaimed;

    // no.of Days in a Year
    uint256 private daysInAYear = 365;

    /* EVENTS */
    event Staked(address _address, uint256 _stakedTokens);
    event Claimed(address _address, uint256 _stakedTokens, uint256 _claimedTokens);
    event Paused(bool _status, uint256 _timestamp, uint256 _blockNumber);
    event Withdraw(address _stakeToken, address _hotwallet, uint256 _noOfTokens, uint256 _timestamp, uint256 _blockNumber);
    event SafeWithdraw(address _stakeToken, address _hotwallet, uint256 _noOfTokens, uint256 _timestamp, uint256 _blockNumber);
    event EmergencyWithdraw(address _stakeToken, address _hotwallet, uint256 _noOfTokens, uint256 _timestamp, uint256 _blockNumber);

    /**
     * @param _stakingToken address of the Token which user stakes
     * @param _stakingPool is the total no.of tokens to meet the requirement to start the staking
     * @param _stakingPoolRewards is the total no.of rewards for the _rewardCapital
     * @param _stakingOpenTime is the pool opening time (like count down) epoch
     * @param _stakingDuration is the statking duration of staking ex: 30 days, 60 days, 90 days... in days
     * @param _manager is to manage the managers of the contracts
     */
    constructor(address _stakingToken, uint256 _stakingPool, uint256 _stakingPoolRewards, uint256 _stakingOpenTime, uint256 _stakingDuration, ManagerRole _manager) {
        stakeToken= _stakingToken;
        stakingPool = _stakingPool;
        stakingPoolRewards = _stakingPoolRewards;
        stakingOpenTime = _stakingOpenTime;
        stakingDuration = _stakingDuration;
        stakingStartBlock = _currentBlockNumber();
        manager = _manager;
        isStakingPaused = false;
        isPoolActive = false;
        noOfStakes = 0;
    }

    function hotWallet() internal view returns(address) {
        return manager.getHotWallet();
    }

    function getAPY() external view returns(uint256) {
        uint256 apy = stakingPoolRewards.mul(daysInAYear).mul(100).div(stakingPool.mul(stakingDuration));
        return apy;
    }
    
    /* MODIFIERS */
    modifier onlyManager {
        require(manager.isManager(msg.sender), "Manager:: Unauthorized Access");
        _;
    }

    /**
     * @notice This is the endpoint for staking
     * @param _noOfTokens is the no.of Tokens user want to stake into the pool in WEI
     */
    function stake(uint256 _noOfTokens) external {
        require(isStakingPaused == false, "Stake:: Staking is paused");
        require(_noOfTokens > 0, "Stake:: Can not stake Zero Tokens");
        require(_currentBlockTimestamp() > stakingOpenTime, "Stake:: Staking have not started for this pool");
        require(stakingPool > currentPool, "Stake:: Staking Pool is Full");
        require(_noOfTokens <= stakingPool.sub(currentPool), "Stake: Can not stake more than pool size");
        _stake(_noOfTokens);
    }

    /**
     * @notice This is the internal staking function which can be called by stake
     * @param _noOfTokens is the no.of Tokens user want to stake into the pool in WEI
     */
    function _stake(uint256 _noOfTokens) internal {
        IERC20(stakeToken).transferFrom(msg.sender, address(this), _noOfTokens);
        StakeHolders[msg.sender].amount = StakeHolders[msg.sender].amount.add(_noOfTokens);
        StakeHolders[msg.sender].isClaimed = false;
        StakeHolders[msg.sender].stakedBlock = block.number;
        StakeHolders[msg.sender].rewards = _calculateRewards(_noOfTokens);
        currentPool = currentPool.add(_noOfTokens);
        if(stakingPool == currentPool) {
            isPoolActive = true;
            stakingEndBlock = _currentBlockNumber().add(stakingDuration.mul(avgETHBlocksPerDay));
        }
        noOfStakes = noOfStakes.add(1);
        allStakeHolders.push(msg.sender);
        emit Staked(msg.sender, _noOfTokens);
    }

    /**
     * @notice This is the internal reward calculation function which can be called by _stake
     * @param _noOfTokens is the no.of Tokens user want to stake into the pool in WEI
     */
    function _calculateRewards(uint256 _noOfTokens) internal view returns (uint256) {
        uint256 userShareInPool = (_noOfTokens.mul(1e6)).div(stakingPool);
        return StakeHolders[msg.sender].rewards.add((userShareInPool.mul(stakingPoolRewards)).div(1e6));
    }

    /**
     * @notice This is the external function to calculate reward
     * @param _noOfTokens is the no.of Tokens user want to stake into the pool in WEI
     */
    function calculateRewardsView(address _wallet, uint256 _noOfTokens) external view returns (uint256) {
        uint256 userShareInPool = (_noOfTokens.mul(1e6)).div(stakingPool);
        return StakeHolders[_wallet].rewards.add((userShareInPool.mul(stakingPoolRewards)).div(1e6));
    }

    /**
     * @notice This is the endpoint for Claiming the Stake + Rewards
     */
    function claim() external {
        require(isStakingPaused == false, "Claim:: Pool is Paused");
        require(isPoolActive == true, "Claim:: Pool is not active");
        require(StakeHolders[msg.sender].isClaimed == false, "Claim:: Already Claimed");
        require(StakeHolders[msg.sender].amount > 0, "Claim:: Seems like haven't staked to claim");
        require(_currentBlockNumber() > stakingEndBlock, "Claim:: You can not claim before staked duration");
        require(IERC20(stakeToken).balanceOf(address(this)) >= (StakeHolders[msg.sender].amount).add(StakeHolders[msg.sender].rewards), "Claim:: Insufficient Balance");
        _claim();
    }

    /**
     * @notice This is the internal function which will be called by claim
     */
    function _claim() internal {
        uint256 claimedTokens = StakeHolders[msg.sender].amount;
        uint256 claimedRewards = StakeHolders[msg.sender].rewards;
        IERC20(stakeToken).transfer(msg.sender, claimedTokens);
        IERC20(stakeToken).transfer(msg.sender, claimedRewards);
        StakeHolders[msg.sender].isClaimed = true;
        StakeHolders[msg.sender].amount = claimedTokens;
        StakeHolders[msg.sender].rewards = claimedRewards;
        StakeHolders[msg.sender].releaseBlock = _currentBlockNumber();
        StakeHolders[msg.sender].claimedOn = _currentBlockTimestamp();
        updateFullyClaimed();
        emit Claimed(msg.sender, claimedTokens, claimedRewards);
    }

    /**
     * @notice Admin Function
     */
    function pauseStaking() external onlyManager {
        isStakingPaused = true;
        emit Paused(isStakingPaused, block.timestamp, block.number);
    }

    /**
     * @notice Admin Function
     */
    function unPauseStaking() external onlyManager {
        isStakingPaused = false;
        emit Paused(isStakingPaused, block.timestamp, block.number);
    }

    /**
     * @notice This is the internal function which fetch the Current Time Stamp from Network
     */
    function _currentBlockTimestamp() internal view returns (uint256) {
        return block.timestamp;
    }

    /**
     * @notice This is the internal function which fetch the Current Block number from Network
     */
    function _currentBlockNumber() internal view returns (uint256) {
        return block.number;
    }

    /**
     * @notice This is the external function which allow user to check the staking status
     */
    function claimStatus(address _address) external view returns (bool) {
        return StakeHolders[_address].isClaimed;
    }

    /**
     * @notice This is the external function to fetch the wallet and token information
     */
    function stakeTokenInfo(address _wallet) external view returns(string memory, string memory, uint256) {
        return (IERC20(stakeToken).name(), IERC20(stakeToken).symbol(), IERC20(stakeToken).balanceOf(_wallet));
    }
    
    /**
     * @notice Admin Function
     */
    function withdraw(uint256 _noOfTokens) external onlyManager {
        require(_currentBlockNumber() < stakingEndBlock, "Withdraw:: Invalid withdraw");
        require(IERC20(stakeToken).balanceOf(address(this)) >= _noOfTokens, "Withdraw:: Invalid Balance");
        IERC20(stakeToken).transfer(hotWallet(), _noOfTokens);
        emit Withdraw(stakeToken, hotWallet(), _noOfTokens, block.timestamp, block.number);
    }
    
    /**
     * @notice Admin Function
     */
    function safeWithdraw() external onlyManager {
        require(_currentBlockNumber() > stakingEndBlock, "SafeWithdraw:: Invalid withdraw");
        
        // Unclaimed Tokens
        uint256 notClaimedStake;
        uint256 notClaimedRewards;
        
        // Claimed Tokens
        uint256 claimedStake;
        uint256 claimedRewards;
        
        for(uint256 i=0; i<allStakeHolders.length; i++) {
            if(StakeHolders[allStakeHolders[i]].isClaimed == false) {
                notClaimedStake = notClaimedStake.add(StakeHolders[allStakeHolders[i]].amount);
                notClaimedRewards = notClaimedRewards.add(StakeHolders[allStakeHolders[i]].rewards); 
            } else if (StakeHolders[allStakeHolders[i]].isClaimed == true) {
                claimedStake = claimedStake.add(StakeHolders[allStakeHolders[i]].amount);
                claimedRewards = claimedRewards.add(StakeHolders[allStakeHolders[i]].rewards); 
            }
        }
        
        // Calculate Balance
        uint256 totalUnClaimed = notClaimedStake.add(notClaimedRewards);
        uint256 balanceInContract = IERC20(stakeToken).balanceOf(address(this));
        
        if(balanceInContract > totalUnClaimed) {
            IERC20(stakeToken).transfer(hotWallet(), balanceInContract.sub(totalUnClaimed));
            emit SafeWithdraw(stakeToken, hotWallet(), balanceInContract.sub(totalUnClaimed), block.timestamp, block.number);
        }
    }

    /**
     * @notice Total Unclaimed Tokens
     */
    function totalUnClaimedTokens() public view returns(uint256) {        
        uint256 notClaimedStake;
        uint256 notClaimedRewards;
        for(uint256 i=0; i<allStakeHolders.length; i++) {
            if(StakeHolders[allStakeHolders[i]].isClaimed == false) {
                notClaimedStake = notClaimedStake.add(StakeHolders[allStakeHolders[i]].amount);
                notClaimedRewards = notClaimedRewards.add(StakeHolders[allStakeHolders[i]].rewards); 
            }
        }
        uint256 totalUnClaimed = notClaimedStake.add(notClaimedRewards);
        return totalUnClaimed;
    }

    /**
     * @notice Update Fully Claimed Status
     */
    function updateFullyClaimed() internal {
        if(totalUnClaimedTokens() == 0) {
            isPoolFullyClaimed = true;
        }
    }

    /**
     * @notice Get the current balance of the tokens in the contract
     */
    function balanceOfContact() external view returns(uint256) {
        return IERC20(stakeToken).balanceOf(address(this));
    }

    /**
     * @notice Get the current balance of the tokens
     */
    function balanceToMaintain() external view returns(uint256) {
        uint256 currentBalance = IERC20(stakeToken).balanceOf(address(this));
        uint256 totalUnClaimed = totalUnClaimedTokens();
        if(totalUnClaimed > currentBalance) {
            return totalUnClaimed.sub(currentBalance);
        } else {
            return 0;
        }
    }

    /** 
     * @notice EMERGENCY WITHDRAWL is used to empty the balance in contract in case of Emergency Situation
     */
    function emergencyWithdrawl() external onlyManager {
        isStakingPaused = true;
        uint256 balanceInContract = IERC20(stakeToken).balanceOf(address(this));
        IERC20(stakeToken).transfer(hotWallet(), balanceInContract);
        emit EmergencyWithdraw(stakeToken, hotWallet(), balanceInContract, block.timestamp, block.number);
    }
}

contract ManagerRole {
    address public superAdmin;
    address _hotWallet;

    event ManagerAdded(address _manager, bool _status);
    event ManagerUpdated(address _manager, bool _status);
    event HotWalletUpdated(address _oldHotWallet, address _newHotWallet);
    
    constructor(address _wallet) {
        require(_wallet != address(0), "Hotwallet can't be the zero address");
        superAdmin = msg.sender;
        _hotWallet = _wallet;
    }
    
    modifier onlySuperAdmin {
        require(superAdmin == msg.sender, "Unauthorized Access");
        _;
    }

    struct Manager {
        address _manager;
        bool _isActive;
    }
    
    mapping (address => Manager) public managers;
    
    function addManager(address _address, bool _status) external onlySuperAdmin {
        require(_address != address(0), "Manager can't be the zero address");
        managers[_address]._manager = _address;
        managers[_address]._isActive = _status;
        emit ManagerAdded(_address, _status);
    }
    
    function getManager(address _address) view external returns (address, bool) {
        return(managers[_address]._manager, managers[_address]._isActive);
    }

    function isManager(address _address) external view returns(bool _status) {
        return(managers[_address]._isActive);
    }
    
    function updateManager(address _address, bool _status) external onlySuperAdmin {
        require(_address != address(0), "Manager can't be the zero address");
        require(managers[_address]._isActive != _status);
        managers[_address]._isActive = _status;
        emit ManagerUpdated(_address, _status);
    }
    
    function governance() external view returns(address){
        return superAdmin;
    }
    
    function getHotWallet() external view returns(address) {
        return _hotWallet;
    }
    
    function setNewHotWallet(address _newHotWallet) external onlySuperAdmin {
        require(_newHotWallet != address(0), "Hotwallet can't be the zero address");
        address _oldHotWallet = _hotWallet;
        _hotWallet = _newHotWallet;
        emit HotWalletUpdated(_oldHotWallet, _newHotWallet);
    }
    
}

interface IERC20 {
    
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the sybmol of token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_stakingToken","type":"address"},{"internalType":"uint256","name":"_stakingPool","type":"uint256"},{"internalType":"uint256","name":"_stakingPoolRewards","type":"uint256"},{"internalType":"uint256","name":"_stakingOpenTime","type":"uint256"},{"internalType":"uint256","name":"_stakingDuration","type":"uint256"},{"internalType":"contract ManagerRole","name":"_manager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"_stakedTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_claimedTokens","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_stakeToken","type":"address"},{"indexed":false,"internalType":"address","name":"_hotwallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"_noOfTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_status","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_stakeToken","type":"address"},{"indexed":false,"internalType":"address","name":"_hotwallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"_noOfTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"SafeWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"_stakedTokens","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_stakeToken","type":"address"},{"indexed":false,"internalType":"address","name":"_hotwallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"_noOfTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"StakeHolders","outputs":[{"internalType":"bool","name":"isClaimed","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakedBlock","type":"uint256"},{"internalType":"uint256","name":"releaseBlock","type":"uint256"},{"internalType":"uint256","name":"claimedOn","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"avgETHBlocksPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfContact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceToMaintain","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_noOfTokens","type":"uint256"}],"name":"calculateRewardsView","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"claimStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdrawl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPoolActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPoolFullyClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStakingPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"contract ManagerRole","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"noOfStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"noOfStakingBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safeWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_noOfTokens","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"stakeTokenInfo","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingOpenTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPoolRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUnClaimedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unPauseStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_noOfTokens","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80637935e5a311610104578063a91d8fed116100a2578063da46af3a11610071578063da46af3a14610344578063df868ed31461034c578063ec2fc05114610354578063f999c5061461035c576101da565b8063a91d8fed14610307578063d2cbf7ad1461030f578063d5432cd414610317578063d67c3df31461033c576101da565b80638005a7de116100de5780638005a7de146102dc57806390c7a6e0146102e45780639d0f4482146102ec578063a694fc3a146102f4576101da565b80637935e5a3146102b95780637d590ccd146102c15780637fd42617146102d4576101da565b80634c8bb1321161017c578063692b69ae1161014b578063692b69ae146102995780636ae02ae6146102a1578063702bd900146102a95780637431b613146102b1576101da565b80634c8bb1321461026e5780634e71d92d14610276578063502ab61f1461027e57806351ed6a3014610291576101da565b8063248a891e116101b8578063248a891e1461021a5780632e1a7d4d1461023c578063481c6a751461025157806349db9a6e14610266576101da565b80630a122c8a146101df5780630c56ae3b146101fd5780631ea7ca8914610205575b600080fd5b6101e7610364565b6040516101f491906120da565b60405180910390f35b6101e761036a565b61020d610370565b6040516101f49190611cc7565b61022d610228366004611aa2565b610380565b6040516101f493929190611d14565b61024f61024a366004611bc8565b610526565b005b610259610770565b6040516101f49190611c24565b6101e761077f565b6101e7610837565b61024f610972565b61020d61028c366004611aa2565b610b1d565b610259610b3b565b6101e7610b4a565b61024f610b50565b61020d610c43565b6101e7610c4c565b61024f610cd2565b6101e76102cf366004611ada565b610ec4565b61024f610f34565b6101e7611365565b6101e761136b565b6101e7611371565b61024f610302366004611bc8565b611377565b6101e7611446565b6101e761144c565b61032a610325366004611aa2565b611491565b6040516101f496959493929190611cea565b6101e76114cd565b6101e76114d3565b61020d6114d9565b6101e76114e9565b61024f6114ef565b60095481565b60045481565b600354600160a01b900460ff1681565b6060806000600360009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156103d357600080fd5b505afa1580156103e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261040f9190810190611b25565b600360009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561045d57600080fd5b505afa158015610471573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104999190810190611b25565b6003546040516370a0823160e01b81526001600160a01b03909116906370a08231906104c9908990600401611c24565b60206040518083038186803b1580156104e157600080fd5b505afa1580156104f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105199190611be0565b9250925092509193909250565b60005460405163f3ae241560e01b81526001600160a01b039091169063f3ae241590610556903390600401611c24565b60206040518083038186803b15801561056e57600080fd5b505afa158015610582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a69190611b05565b6105cb5760405162461bcd60e51b81526004016105c290611d9a565b60405180910390fd5b6009546105d66115da565b106105f35760405162461bcd60e51b81526004016105c290611f90565b6003546040516370a0823160e01b815282916001600160a01b0316906370a0823190610623903090600401611c24565b60206040518083038186803b15801561063b57600080fd5b505afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190611be0565b10156106915760405162461bcd60e51b81526004016105c290612035565b6003546001600160a01b031663a9059cbb6106aa6115de565b836040518363ffffffff1660e01b81526004016106c8929190611c8d565b602060405180830381600087803b1580156106e257600080fd5b505af11580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a9190611b05565b506003547febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f906001600160a01b03166107516115de565b834243604051610765959493929190611c5c565b60405180910390a150565b6000546001600160a01b031681565b6003546040516370a0823160e01b815260009182916001600160a01b03909116906370a08231906107b4903090600401611c24565b60206040518083038186803b1580156107cc57600080fd5b505afa1580156107e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108049190611be0565b90506000610810610837565b90508181111561082d576108248183611665565b92505050610834565b6000925050505b90565b60008080805b60025481101561095d57600160006002838154811061086c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1661094b576108ef60016000600284815481106108c057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020600101548490611678565b9250610948600160006002848154811061091957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020600501548390611678565b91505b8061095581612181565b91505061083d565b50600061096a8383611678565b935050505090565b600354600160a01b900460ff161561099c5760405162461bcd60e51b81526004016105c290611e19565b600354600160a81b900460ff1615156001146109ca5760405162461bcd60e51b81526004016105c290611f0f565b3360009081526001602052604090205460ff16156109fa5760405162461bcd60e51b81526004016105c2906120a3565b3360009081526001602081905260409091200154610a2a5760405162461bcd60e51b81526004016105c290611f46565b600954610a356115da565b11610a525760405162461bcd60e51b81526004016105c290611d4a565b3360009081526001602081905260409091206005810154910154610a7591611678565b6003546040516370a0823160e01b81526001600160a01b03909116906370a0823190610aa5903090600401611c24565b60206040518083038186803b158015610abd57600080fd5b505afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190611be0565b1015610b135760405162461bcd60e51b81526004016105c290611fc7565b610b1b611684565b565b6001600160a01b031660009081526001602052604090205460ff1690565b6003546001600160a01b031681565b600d5481565b60005460405163f3ae241560e01b81526001600160a01b039091169063f3ae241590610b80903390600401611c24565b60206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd09190611b05565b610bec5760405162461bcd60e51b81526004016105c290611d9a565b6003805460ff60a01b1916908190556040517f38b9e359e45b457f6dea79f7a0f0169d7987c545ac59b080e4385722080048da91610c3991600160a01b90910460ff169042904390611cd2565b60405180910390a1565b600e5460ff1681565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610c7d903090600401611c24565b60206040518083038186803b158015610c9557600080fd5b505afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611be0565b905090565b60005460405163f3ae241560e01b81526001600160a01b039091169063f3ae241590610d02903390600401611c24565b60206040518083038186803b158015610d1a57600080fd5b505afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190611b05565b610d6e5760405162461bcd60e51b81526004016105c290611d9a565b6003805460ff60a01b1916600160a01b17908190556040516370a0823160e01b81526000916001600160a01b0316906370a0823190610db1903090600401611c24565b60206040518083038186803b158015610dc957600080fd5b505afa158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e019190611be0565b6003549091506001600160a01b031663a9059cbb610e1d6115de565b836040518363ffffffff1660e01b8152600401610e3b929190611c8d565b602060405180830381600087803b158015610e5557600080fd5b505af1158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d9190611b05565b506003547f73c8d106c93f18e1b97a29556ef7a7972c462ad3b6af8c27026ab42f45e79f70906001600160a01b03166107516115de565b600080610ee9600454610ee3620f42408661184f90919063ffffffff16565b9061185b565b9050610f2c610f0a620f4240610ee36005548561184f90919063ffffffff16565b6001600160a01b03861660009081526001602052604090206005015490611678565b949350505050565b60005460405163f3ae241560e01b81526001600160a01b039091169063f3ae241590610f64903390600401611c24565b60206040518083038186803b158015610f7c57600080fd5b505afa158015610f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb49190611b05565b610fd05760405162461bcd60e51b81526004016105c290611d9a565b600954610fdb6115da565b11610ff85760405162461bcd60e51b81526004016105c290611ffe565b60008060008060005b6002548110156111d157600160006002838154811061103057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16611113576110b3600160006002848154811061108457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020600101548690611678565b945061110c60016000600284815481106110dd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020600501548590611678565b93506111bf565b600160006002838154811061113857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff161515600114156111bf5761119260016000600284815481106108c057634e487b7160e01b600052603260045260246000fd5b92506111bc600160006002848154811061091957634e487b7160e01b600052603260045260246000fd5b91505b806111c981612181565b915050611001565b5060006111de8585611678565b6003546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611214903090600401611c24565b60206040518083038186803b15801561122c57600080fd5b505afa158015611240573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112649190611be0565b90508181111561135d576003546001600160a01b031663a9059cbb6112876115de565b6112918486611665565b6040518363ffffffff1660e01b81526004016112ae929190611c8d565b602060405180830381600087803b1580156112c857600080fd5b505af11580156112dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113009190611b05565b506003547f6bd62c8c0078c0c9887ea420734755a5da28b76cd4ff88f8c684f6ff9fc582bf906001600160a01b03166113376115de565b6113418486611665565b4243604051611354959493929190611c5c565b60405180910390a15b505050505050565b60065481565b600a5481565b600b5481565b600354600160a01b900460ff16156113a15760405162461bcd60e51b81526004016105c29061206c565b600081116113c15760405162461bcd60e51b81526004016105c290611ece565b6007546113cc611867565b116113e95760405162461bcd60e51b81526004016105c290611e80565b600d546004541161140c5760405162461bcd60e51b81526004016105c290611e49565b600d5460045461141b91611665565b81111561143a5760405162461bcd60e51b81526004016105c290611dd1565b6114438161186b565b50565b60075481565b60008061148b61146960065460045461184f90919063ffffffff16565b610ee36064611485600f5460055461184f90919063ffffffff16565b9061184f565b91505090565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff909516949293919290919086565b60055481565b600c5481565b600354600160a81b900460ff1681565b60085481565b60005460405163f3ae241560e01b81526001600160a01b039091169063f3ae24159061151f903390600401611c24565b60206040518083038186803b15801561153757600080fd5b505afa15801561154b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156f9190611b05565b61158b5760405162461bcd60e51b81526004016105c290611d9a565b6003805460ff60a01b1916600160a01b908117918290556040517f38b9e359e45b457f6dea79f7a0f0169d7987c545ac59b080e4385722080048da92610c3992900460ff169042904390611cd2565b4390565b60008060009054906101000a90046001600160a01b03166001600160a01b031663d367c5406040518163ffffffff1660e01b815260040160206040518083038186803b15801561162d57600080fd5b505afa158015611641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611abe565b6000611671828461213a565b9392505050565b600061167182846120e3565b3360008181526001602081905260409182902090810154600590910154600354925163a9059cbb60e01b8152919390926001600160a01b03169163a9059cbb916116d2918690600401611c8d565b602060405180830381600087803b1580156116ec57600080fd5b505af1158015611700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117249190611b05565b5060035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906117579033908590600401611c8d565b602060405180830381600087803b15801561177157600080fd5b505af1158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190611b05565b50336000908152600160208190526040909120805460ff1916821781559081018390556005018190556117da6115da565b336000908152600160205260409020600301556117f5611867565b33600090815260016020526040902060040155611810611a2e565b7f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a33838360405161184393929190611ca6565b60405180910390a15050565b6000611671828461211b565b600061167182846120fb565b4290565b6003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061189f90339030908690600401611c38565b602060405180830381600087803b1580156118b957600080fd5b505af11580156118cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f19190611b05565b5033600090815260016020819052604090912001546119109082611678565b33600090815260016020819052604090912090810191909155805460ff191681554360029091015561194181611a49565b33600090815260016020526040902060050155600d546119619082611678565b600d81905560045414156119a8576003805460ff60a81b1916600160a81b179055600c546006546119a491611996919061184f565b61199e6115da565b90611678565b6009555b600b546119b6906001611678565b600b55600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b031916339081179091556040517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d91610765918490611c8d565b611a36610837565b610b1b57600e805460ff19166001179055565b600080611a68600454610ee3620f42408661184f90919063ffffffff16565b9050611671611a89620f4240610ee36005548561184f90919063ffffffff16565b3360009081526001602052604090206005015490611678565b600060208284031215611ab3578081fd5b8135611671816121c8565b600060208284031215611acf578081fd5b8151611671816121c8565b60008060408385031215611aec578081fd5b8235611af7816121c8565b946020939093013593505050565b600060208284031215611b16578081fd5b81518015158114611671578182fd5b600060208284031215611b36578081fd5b815167ffffffffffffffff80821115611b4d578283fd5b818401915084601f830112611b60578283fd5b815181811115611b7257611b726121b2565b604051601f8201601f191681016020018381118282101715611b9657611b966121b2565b604052818152838201602001871015611bad578485fd5b611bbe826020830160208701612151565b9695505050505050565b600060208284031215611bd9578081fd5b5035919050565b600060208284031215611bf1578081fd5b5051919050565b60008151808452611c10816020860160208601612151565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03958616815293909416602084015260408301919091526060820152608081019190915260a00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b901515815260200190565b92151583526020830191909152604082015260600190565b9515158652602086019490945260408501929092526060840152608083015260a082015260c00190565b600060608252611d276060830186611bf8565b8281036020840152611d398186611bf8565b915050826040830152949350505050565b60208082526030908201527f436c61696d3a3a20596f752063616e206e6f7420636c61696d206265666f726560408201526f1039ba30b5b2b210323ab930ba34b7b760811b606082015260800190565b6020808252601d908201527f4d616e616765723a3a20556e617574686f72697a656420416363657373000000604082015260600190565b60208082526028908201527f5374616b653a2043616e206e6f74207374616b65206d6f7265207468616e20706040820152676f6f6c2073697a6560c01b606082015260800190565b60208082526016908201527510db185a5b4e8e88141bdbdb081a5cc814185d5cd95960521b604082015260600190565b6020808252601c908201527f5374616b653a3a205374616b696e6720506f6f6c2069732046756c6c00000000604082015260600190565b6020808252602e908201527f5374616b653a3a205374616b696e672068617665206e6f74207374617274656460408201526d08199bdc881d1a1a5cc81c1bdbdb60921b606082015260800190565b60208082526021908201527f5374616b653a3a2043616e206e6f74207374616b65205a65726f20546f6b656e6040820152607360f81b606082015260800190565b6020808252601a908201527f436c61696d3a3a20506f6f6c206973206e6f7420616374697665000000000000604082015260600190565b6020808252602a908201527f436c61696d3a3a205365656d73206c696b6520686176656e2774207374616b656040820152696420746f20636c61696d60b01b606082015260800190565b6020808252601b908201527f57697468647261773a3a20496e76616c69642077697468647261770000000000604082015260600190565b6020808252601c908201527f436c61696d3a3a20496e73756666696369656e742042616c616e636500000000604082015260600190565b6020808252601f908201527f5361666557697468647261773a3a20496e76616c696420776974686472617700604082015260600190565b6020808252601a908201527f57697468647261773a3a20496e76616c69642042616c616e6365000000000000604082015260600190565b60208082526019908201527f5374616b653a3a205374616b696e672069732070617573656400000000000000604082015260600190565b60208082526017908201527f436c61696d3a3a20416c726561647920436c61696d6564000000000000000000604082015260600190565b90815260200190565b600082198211156120f6576120f661219c565b500190565b60008261211657634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156121355761213561219c565b500290565b60008282101561214c5761214c61219c565b500390565b60005b8381101561216c578181015183820152602001612154565b8381111561217b576000848401525b50505050565b60006000198214156121955761219561219c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461144357600080fdfea2646970667358221220e6182e2398d5516b6b0cbb83a90677fce4032117f985e72c11a2a4934d751e2864736f6c63430008000033

Deployed Bytecode Sourcemap

6768:13736:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8065:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7681:26;;;:::i;7534:27::-;;;:::i;:::-;;;;;;;:::i;16220:223::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;16504:423::-;;;;;;:::i;:::-;;:::i;:::-;;6831:26;;;:::i;:::-;;;;;;;:::i;19654:360::-;;;:::i;18530:609::-;;;:::i;13506:665::-;;;:::i;15980:126::-;;;;;;:::i;:::-;;:::i;7458:25::-;;;:::i;8436:26::-;;;:::i;15254:159::-;;;:::i;8519:30::-;;;:::i;19446:128::-;;;:::i;20149:352::-;;;:::i;13123:287::-;;;;;;:::i;:::-;;:::i;16988:1477::-;;;:::i;7826:30::-;;;:::i;8133:32::-;;;:::i;8201:25::-;;;:::i;10956:524::-;;;;;;:::i;:::-;;:::i;7913:30::-;;;:::i;10453:185::-;;;:::i;7288:52::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;7751:33::-;;;:::i;8332:40::-;;;:::i;7609:24::-;;;:::i;7987:32::-;;;:::i;15041:156::-;;;:::i;8065:30::-;;;;:::o;7681:26::-;;;;:::o;7534:27::-;;;-1:-1:-1;;;7534:27:0;;;;;:::o;16220:223::-;16283:13;16298;16313:7;16348:10;;;;;;;;;-1:-1:-1;;;;;16348:10:0;-1:-1:-1;;;;;16341:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16341:25:0;;;;;;;;;;;;:::i;:::-;16375:10;;;;;;;;;-1:-1:-1;;;;;16375:10:0;-1:-1:-1;;;;;16368:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16368:27:0;;;;;;;;;;;;:::i;:::-;16404:10;;16397:37;;-1:-1:-1;;;16397:37:0;;-1:-1:-1;;;;;16404:10:0;;;;16397:28;;:37;;16426:7;;16397:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16333:102;;;;;;16220:223;;;;;:::o;16504:423::-;10711:7;;:29;;-1:-1:-1;;;10711:29:0;;-1:-1:-1;;;;;10711:7:0;;;;:17;;:29;;10729:10;;10711:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10703:71;;;;-1:-1:-1;;;10703:71:0;;;;;;;:::i;:::-;;;;;;;;;16607:15:::1;;16583:21;:19;:21::i;:::-;:39;16575:79;;;;-1:-1:-1::0;;;16575:79:0::1;;;;;;;:::i;:::-;16680:10;::::0;16673:43:::1;::::0;-1:-1:-1;;;16673:43:0;;16720:11;;-1:-1:-1;;;;;16680:10:0::1;::::0;16673:28:::1;::::0;:43:::1;::::0;16710:4:::1;::::0;16673:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;16665:97;;;;-1:-1:-1::0;;;16665:97:0::1;;;;;;;:::i;:::-;16780:10;::::0;-1:-1:-1;;;;;16780:10:0::1;16773:27;16801:11;:9;:11::i;:::-;16814;16773:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;16851:10:0::1;::::0;16842:77:::1;::::0;-1:-1:-1;;;;;16851:10:0::1;16863:11;:9;:11::i;:::-;16876;16889:15;16906:12;16842:77;;;;;;;;;;:::i;:::-;;;;;;;;16504:423:::0;:::o;6831:26::-;;;-1:-1:-1;;;;;6831:26:0;;:::o;19654:360::-;19757:10;;19750:43;;-1:-1:-1;;;19750:43:0;;19705:7;;;;-1:-1:-1;;;;;19757:10:0;;;;19750:28;;:43;;19787:4;;19750:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19725:68;;19804:22;19829;:20;:22::i;:::-;19804:47;;19882:14;19865;:31;19862:145;;;19920:34;:14;19939;19920:18;:34::i;:::-;19913:41;;;;;;19862:145;19994:1;19987:8;;;;19654:360;;:::o;18530:609::-;18582:7;;;;18680:346;18699:15;:22;18697:24;;18680:346;;;18746:12;:32;18759:15;18775:1;18759:18;;;;;;-1:-1:-1;;;18759:18:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18759:18:0;18746:32;;;;;;;;;;;;:42;;;18743:272;;18836:60;18856:12;:32;18869:15;18885:1;18869:18;;;;;;-1:-1:-1;;;18869:18:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18869:18:0;18856:32;;;;;;;;;;;;18869:18;18856:39;;18836:15;;:19;:60::i;:::-;18818:78;;18935:63;18957:12;:32;18970:15;18986:1;18970:18;;;;;;-1:-1:-1;;;18970:18:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18970:18:0;18957:32;;;;;;;;;;;;:40;;;18935:17;;:21;:63::i;:::-;18915:83;;18743:272;18723:3;;;;:::i;:::-;;;;18680:346;;;-1:-1:-1;19036:22:0;19061:38;:15;19081:17;19061:19;:38::i;:::-;19036:63;-1:-1:-1;;;;18530:609:0;:::o;13506:665::-;13551:15;;-1:-1:-1;;;13551:15:0;;;;:24;13543:59;;;;-1:-1:-1;;;13543:59:0;;;;;;;:::i;:::-;13621:12;;-1:-1:-1;;;13621:12:0;;;;:20;;13637:4;13621:20;13613:59;;;;-1:-1:-1;;;13613:59:0;;;;;;;:::i;:::-;13704:10;13691:24;;;;:12;:24;;;;;:34;;;:43;13683:79;;;;-1:-1:-1;;;13683:79:0;;;;;;;:::i;:::-;13794:10;13815:1;13781:24;;;:12;:24;;;;;;;;:31;;13773:90;;;;-1:-1:-1;;;13773:90:0;;;;;;;:::i;:::-;13906:15;;13882:21;:19;:21::i;:::-;:39;13874:100;;;;-1:-1:-1;;;13874:100:0;;;;;;;:::i;:::-;14091:10;14078:24;;;;:12;:24;;;;;;;;:32;;;;14041:31;;;14040:71;;:37;:71::i;:::-;14000:10;;13993:43;;-1:-1:-1;;;13993:43:0;;-1:-1:-1;;;;;14000:10:0;;;;13993:28;;:43;;14030:4;;13993:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:118;;13985:159;;;;-1:-1:-1;;;13985:159:0;;;;;;;:::i;:::-;14155:8;:6;:8::i;:::-;13506:665::o;15980:126::-;-1:-1:-1;;;;;16066:22:0;16042:4;16066:22;;;:12;:22;;;;;:32;;;;15980:126::o;7458:25::-;;;-1:-1:-1;;;;;7458:25:0;;:::o;8436:26::-;;;;:::o;15254:159::-;10711:7;;:29;;-1:-1:-1;;;10711:29:0;;-1:-1:-1;;;;;10711:7:0;;;;:17;;:29;;10729:10;;10711:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10703:71;;;;-1:-1:-1;;;10703:71:0;;;;;;;:::i;:::-;15312:15:::1;:23:::0;;-1:-1:-1;;;;15312:23:0::1;::::0;;;;15351:54:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;15358:15:0;;::::1;15312:23;15358:15;::::0;15375::::1;::::0;15392:12:::1;::::0;15351:54:::1;:::i;:::-;;;;;;;;15254:159::o:0;8519:30::-;;;;;;:::o;19446:128::-;19530:10;;19523:43;;-1:-1:-1;;;19523:43:0;;19496:7;;-1:-1:-1;;;;;19530:10:0;;19523:28;;:43;;19560:4;;19523:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19516:50;;19446:128;:::o;20149:352::-;10711:7;;:29;;-1:-1:-1;;;10711:29:0;;-1:-1:-1;;;;;10711:7:0;;;;:17;;:29;;10729:10;;10711:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10703:71;;;;-1:-1:-1;;;10703:71:0;;;;;;;:::i;:::-;20211:15:::1;:22:::0;;-1:-1:-1;;;;20211:22:0::1;-1:-1:-1::0;;;20211:22:0::1;::::0;;;;20272:43:::1;::::0;-1:-1:-1;;;20272:43:0;;20211:22;;-1:-1:-1;;;;;20279:10:0::1;::::0;20272:28:::1;::::0;:43:::1;::::0;20309:4:::1;::::0;20272:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20333:10;::::0;20244:71;;-1:-1:-1;;;;;;20333:10:0::1;20326:27;20354:11;:9;:11::i;:::-;20367:17;20326:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;20419:10:0::1;::::0;20401:92:::1;::::0;-1:-1:-1;;;;;20419:10:0::1;20431:11;:9;:11::i;13123:287::-:0;13214:7;13234:23;13260:39;13287:11;;13261:20;13277:3;13261:11;:15;;:20;;;;:::i;:::-;13260:26;;:39::i;:::-;13234:65;;13317:85;13351:50;13397:3;13352:39;13372:18;;13352:15;:19;;:39;;;;:::i;13351:50::-;-1:-1:-1;;;;;13317:21:0;;;;;;:12;:21;;;;;:29;;;;:33;:85::i;:::-;13310:92;13123:287;-1:-1:-1;;;;13123:287:0:o;16988:1477::-;10711:7;;:29;;-1:-1:-1;;;10711:29:0;;-1:-1:-1;;;;;10711:7:0;;;;:17;;:29;;10729:10;;10711:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10703:71;;;;-1:-1:-1;;;10703:71:0;;;;;;;:::i;:::-;17076:15:::1;;17052:21;:19;:21::i;:::-;:39;17044:83;;;;-1:-1:-1::0;;;17044:83:0::1;;;;;;;:::i;:::-;17177:23;17211:25:::0;17284:20:::1;17315:22:::0;17362:9:::1;17358:612;17377:15;:22:::0;17375:24;::::1;17358:612;;;17424:12;:32;17437:15;17453:1;17437:18;;;;;;-1:-1:-1::0;;;17437:18:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;17437:18:0::1;17424:32:::0;;;::::1;::::0;;;;;;;;:42;::::1;;17421:538;;17514:60;17534:12;:32;17547:15;17563:1;17547:18;;;;;;-1:-1:-1::0;;;17547:18:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;17547:18:0::1;17534:32:::0;;;::::1;::::0;;;;;;;;17547:18;17534:39:::1;::::0;17514:15;;:19:::1;:60::i;:::-;17496:78;;17613:63;17635:12;:32;17648:15;17664:1;17648:18;;;;;;-1:-1:-1::0;;;17648:18:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;17648:18:0::1;17635:32:::0;;;::::1;::::0;;;;;;;;:40:::1;;::::0;17613:17;;:21:::1;:63::i;:::-;17593:83;;17421:538;;;17703:12;:32;17716:15;17732:1;17716:18;;;;;;-1:-1:-1::0;;;17716:18:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;17716:18:0::1;17703:32:::0;;;::::1;::::0;;;;;;;;:42;::::1;;:50;;17716:18:::0;17703:50:::1;17699:260;;;17789:57;17806:12;:32;17819:15;17835:1;17819:18;;;;;;-1:-1:-1::0;;;17819:18:0::1;;;;;;;;17789:57;17774:72;;17882:60;17901:12;:32;17914:15;17930:1;17914:18;;;;;;-1:-1:-1::0;;;17914:18:0::1;;;;;;;;17882:60;17865:77;;17699:260;17401:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17358:612;;;-1:-1:-1::0;18020:22:0::1;18045:38;:15:::0;18065:17;18045:19:::1;:38::i;:::-;18129:10;::::0;18122:43:::1;::::0;-1:-1:-1;;;18122:43:0;;18020:63;;-1:-1:-1;18094:25:0::1;::::0;-1:-1:-1;;;;;18129:10:0;;::::1;::::0;18122:28:::1;::::0;:43:::1;::::0;18159:4:::1;::::0;18122:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18094:71;;18209:14;18189:17;:34;18186:272;;;18247:10;::::0;-1:-1:-1;;;;;18247:10:0::1;18240:27;18268:11;:9;:11::i;:::-;18281:37;:17:::0;18303:14;18281:21:::1;:37::i;:::-;18240:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18352:10:0::1;::::0;18339:107:::1;::::0;-1:-1:-1;;;;;18352:10:0::1;18364:11;:9;:11::i;:::-;18377:37;:17:::0;18399:14;18377:21:::1;:37::i;:::-;18416:15;18433:12;18339:107;;;;;;;;;;:::i;:::-;;;;;;;;18186:272;10785:1;;;;;;16988:1477::o:0;7826:30::-;;;;:::o;8133:32::-;;;;:::o;8201:25::-;;;;:::o;10956:524::-;11020:15;;-1:-1:-1;;;11020:15:0;;;;:24;11012:62;;;;-1:-1:-1;;;11012:62:0;;;;;;;:::i;:::-;11107:1;11093:11;:15;11085:61;;;;-1:-1:-1;;;11085:61:0;;;;;;;:::i;:::-;11192:15;;11165:24;:22;:24::i;:::-;:42;11157:101;;;;-1:-1:-1;;;11157:101:0;;;;;;;:::i;:::-;11291:11;;11277;;:25;11269:66;;;;-1:-1:-1;;;11269:66:0;;;;;;;:::i;:::-;11385:11;;11369;;:28;;:15;:28::i;:::-;11354:11;:43;;11346:96;;;;-1:-1:-1;;;11346:96:0;;;;;;;:::i;:::-;11453:19;11460:11;11453:6;:19::i;:::-;10956:524;:::o;7913:30::-;;;;:::o;10453:185::-;10493:7;10513:11;10527:82;10576:32;10592:15;;10576:11;;:15;;:32;;;;:::i;:::-;10527:44;10567:3;10527:35;10550:11;;10527:18;;:22;;:35;;;;:::i;:::-;:39;;:44::i;:82::-;10513:96;-1:-1:-1;;10453:185:0;:::o;7288:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7751:33::-;;;;:::o;8332:40::-;;;;:::o;7609:24::-;;;-1:-1:-1;;;7609:24:0;;;;;:::o;7987:32::-;;;;:::o;15041:156::-;10711:7;;:29;;-1:-1:-1;;;10711:29:0;;-1:-1:-1;;;;;10711:7:0;;;;:17;;:29;;10729:10;;10711:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10703:71;;;;-1:-1:-1;;;10703:71:0;;;;;;;:::i;:::-;15097:15:::1;:22:::0;;-1:-1:-1;;;;15097:22:0::1;-1:-1:-1::0;;;15097:22:0;;::::1;::::0;;;;15135:54:::1;::::0;::::1;::::0;::::1;::::0;15142:15;::::1;15097:22;15142:15;::::0;15159::::1;::::0;15176:12:::1;::::0;15135:54:::1;:::i;15762:101::-:0;15843:12;15762:101;:::o;10345:100::-;10388:7;10415;;;;;;;;;-1:-1:-1;;;;;10415:7:0;-1:-1:-1;;;;;10415:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2984:98::-;3042:7;3069:5;3073:1;3069;:5;:::i;:::-;3062:12;2984:98;-1:-1:-1;;;2984:98:0:o;2603:::-;2661:7;2688:5;2692:1;2688;:5;:::i;14273:711::-;14348:10;14311:21;14335:24;;;:12;:24;;;;;;;;;:31;;;;14402:32;;;;;14452:10;;14445:54;;-1:-1:-1;;;14445:54:0;;14335:31;;14402:32;;-1:-1:-1;;;;;14452:10:0;;14445:27;;:54;;14335:31;;14445:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14517:10:0;;14510:55;;-1:-1:-1;;;14510:55:0;;-1:-1:-1;;;;;14517:10:0;;;;14510:27;;:55;;14538:10;;14550:14;;14510:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14589:10:0;14576:24;;;;14613:4;14576:24;;;;;;;;:41;;-1:-1:-1;;14576:41:0;;;;;14628:31;;;:47;;;14686:32;;:49;;;14786:21;:19;:21::i;:::-;14759:10;14746:24;;;;:12;:24;;;;;:37;;:61;14855:24;:22;:24::i;:::-;14831:10;14818:24;;;;:12;:24;;;;;:34;;:61;14890:20;:18;:20::i;:::-;14926:50;14934:10;14946:13;14961:14;14926:50;;;;;;;;:::i;:::-;;;;;;;;14273:711;;:::o;3341:98::-;3399:7;3426:5;3430:1;3426;:5;:::i;3740:98::-;3798:7;3825:5;3829:1;3825;:5;:::i;15533:107::-;15617:15;15533:107;:::o;11676:790::-;11740:10;;11733:71;;-1:-1:-1;;;11733:71:0;;-1:-1:-1;;;;;11740:10:0;;;;11733:31;;:71;;11765:10;;11785:4;;11792:11;;11733:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;11862:10:0;11849:24;;;;:12;:24;;;;;;;;:31;;:48;;11885:11;11849:35;:48::i;:::-;11828:10;11815:24;;;;:12;:24;;;;;;;;:31;;;:82;;;;11908:42;;-1:-1:-1;;11908:42:0;;;12000:12;11961:36;;;;:51;12058:30;12076:11;12058:17;:30::i;:::-;12036:10;12023:24;;;;:12;:24;;;;;:32;;:65;12113:11;;:28;;12129:11;12113:15;:28::i;:::-;12099:11;:42;;;12155:11;;:26;12152:176;;;12198:12;:19;;-1:-1:-1;;;;12198:19:0;-1:-1:-1;;;12198:19:0;;;12296:18;;12276:15;;12250:66;;12276:39;;:15;:19;:39::i;:::-;12250:21;:19;:21::i;:::-;:25;;:66::i;:::-;12232:15;:84;12152:176;12351:10;;:17;;12366:1;12351:14;:17::i;:::-;12338:10;:30;12379:15;:32;;;;;;;-1:-1:-1;12379:32:0;;;;;;;;-1:-1:-1;;;;;;12379:32:0;12400:10;12379:32;;;;;;12427:31;;;;;;12446:11;;12427:31;:::i;19209:141::-;19262:22;:20;:22::i;:::-;19259:84;;19306:18;:25;;-1:-1:-1;;19306:25:0;19327:4;19306:25;;;19209:141::o;12674:270::-;12745:7;12765:23;12791:39;12818:11;;12792:20;12808:3;12792:11;:15;;:20;;;;:::i;12791:39::-;12765:65;;12848:88;12885:50;12931:3;12886:39;12906:18;;12886:15;:19;;:39;;;;:::i;12885:50::-;12861:10;12848:24;;;;:12;:24;;;;;:32;;;;:36;:88::i;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:327::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;863:2;848:18;;;;835:32;;-1:-1:-1;;;633:240:1:o;878:297::-;;998:2;986:9;977:7;973:23;969:32;966:2;;;1019:6;1011;1004:22;966:2;1056:9;1050:16;1109:5;1102:13;1095:21;1088:5;1085:32;1075:2;;1136:6;1128;1121:22;1180:894;;1313:2;1301:9;1292:7;1288:23;1284:32;1281:2;;;1334:6;1326;1319:22;1281:2;1372:9;1366:16;1401:18;1442:2;1434:6;1431:14;1428:2;;;1463:6;1455;1448:22;1428:2;1506:6;1495:9;1491:22;1481:32;;1551:7;1544:4;1540:2;1536:13;1532:27;1522:2;;1578:6;1570;1563:22;1522:2;1612;1606:9;1634:2;1630;1627:10;1624:2;;;1640:18;;:::i;:::-;1689:2;1683:9;1758:2;1739:13;;-1:-1:-1;;1735:27:1;1723:40;;1765:2;1719:49;1783:18;;;1803:22;;;1780:46;1777:2;;;1829:18;;:::i;:::-;1865:2;1858:22;1889:18;;;1926:11;;;1939:2;1922:20;1919:33;-1:-1:-1;1916:2:1;;;1970:6;1962;1955:22;1916:2;1988:55;2040:2;2035;2027:6;2023:15;2018:2;2014;2010:11;1988:55;:::i;:::-;2062:6;1271:803;-1:-1:-1;;;;;;1271:803:1:o;2079:190::-;;2191:2;2179:9;2170:7;2166:23;2162:32;2159:2;;;2212:6;2204;2197:22;2159:2;-1:-1:-1;2240:23:1;;2149:120;-1:-1:-1;2149:120:1:o;2274:194::-;;2397:2;2385:9;2376:7;2372:23;2368:32;2365:2;;;2418:6;2410;2403:22;2365:2;-1:-1:-1;2446:16:1;;2355:113;-1:-1:-1;2355:113:1:o;2473:260::-;;2555:5;2549:12;2582:6;2577:3;2570:19;2598:63;2654:6;2647:4;2642:3;2638:14;2631:4;2624:5;2620:16;2598:63;:::i;:::-;2715:2;2694:15;-1:-1:-1;;2690:29:1;2681:39;;;;2722:4;2677:50;;2525:208;-1:-1:-1;;2525:208:1:o;2738:203::-;-1:-1:-1;;;;;2902:32:1;;;;2884:51;;2872:2;2857:18;;2839:102::o;2946:375::-;-1:-1:-1;;;;;3204:15:1;;;3186:34;;3256:15;;;;3251:2;3236:18;;3229:43;3303:2;3288:18;;3281:34;;;;3136:2;3121:18;;3103:218::o;3326:519::-;-1:-1:-1;;;;;3641:15:1;;;3623:34;;3693:15;;;;3688:2;3673:18;;3666:43;3740:2;3725:18;;3718:34;;;;3783:2;3768:18;;3761:34;3826:3;3811:19;;3804:35;;;;3572:3;3557:19;;3539:306::o;3850:274::-;-1:-1:-1;;;;;4042:32:1;;;;4024:51;;4106:2;4091:18;;4084:34;4012:2;3997:18;;3979:145::o;4129:345::-;-1:-1:-1;;;;;4349:32:1;;;;4331:51;;4413:2;4398:18;;4391:34;;;;4456:2;4441:18;;4434:34;4319:2;4304:18;;4286:188::o;4479:187::-;4644:14;;4637:22;4619:41;;4607:2;4592:18;;4574:92::o;4671:329::-;4892:14;;4885:22;4867:41;;4939:2;4924:18;;4917:34;;;;4982:2;4967:18;;4960:34;4855:2;4840:18;;4822:178::o;5005:545::-;5311:14;;5304:22;5286:41;;5358:2;5343:18;;5336:34;;;;5401:2;5386:18;;5379:34;;;;5444:2;5429:18;;5422:34;5487:3;5472:19;;5465:35;5531:3;5516:19;;5509:35;5273:3;5258:19;;5240:310::o;5783:458::-;;6008:2;5997:9;5990:21;6034:47;6077:2;6066:9;6062:18;6054:6;6034:47;:::i;:::-;6129:9;6121:6;6117:22;6112:2;6101:9;6097:18;6090:50;6157:35;6185:6;6177;6157:35;:::i;:::-;6149:43;;;6228:6;6223:2;6212:9;6208:18;6201:34;5980:261;;;;;;:::o;6246:412::-;6448:2;6430:21;;;6487:2;6467:18;;;6460:30;6526:34;6521:2;6506:18;;6499:62;-1:-1:-1;;;6592:2:1;6577:18;;6570:46;6648:3;6633:19;;6420:238::o;6663:353::-;6865:2;6847:21;;;6904:2;6884:18;;;6877:30;6943:31;6938:2;6923:18;;6916:59;7007:2;6992:18;;6837:179::o;7021:404::-;7223:2;7205:21;;;7262:2;7242:18;;;7235:30;7301:34;7296:2;7281:18;;7274:62;-1:-1:-1;;;7367:2:1;7352:18;;7345:38;7415:3;7400:19;;7195:230::o;7430:346::-;7632:2;7614:21;;;7671:2;7651:18;;;7644:30;-1:-1:-1;;;7705:2:1;7690:18;;7683:52;7767:2;7752:18;;7604:172::o;7781:352::-;7983:2;7965:21;;;8022:2;8002:18;;;7995:30;8061;8056:2;8041:18;;8034:58;8124:2;8109:18;;7955:178::o;8138:410::-;8340:2;8322:21;;;8379:2;8359:18;;;8352:30;8418:34;8413:2;8398:18;;8391:62;-1:-1:-1;;;8484:2:1;8469:18;;8462:44;8538:3;8523:19;;8312:236::o;8553:397::-;8755:2;8737:21;;;8794:2;8774:18;;;8767:30;8833:34;8828:2;8813:18;;8806:62;-1:-1:-1;;;8899:2:1;8884:18;;8877:31;8940:3;8925:19;;8727:223::o;8955:350::-;9157:2;9139:21;;;9196:2;9176:18;;;9169:30;9235:28;9230:2;9215:18;;9208:56;9296:2;9281:18;;9129:176::o;9310:406::-;9512:2;9494:21;;;9551:2;9531:18;;;9524:30;9590:34;9585:2;9570:18;;9563:62;-1:-1:-1;;;9656:2:1;9641:18;;9634:40;9706:3;9691:19;;9484:232::o;9721:351::-;9923:2;9905:21;;;9962:2;9942:18;;;9935:30;10001:29;9996:2;9981:18;;9974:57;10063:2;10048:18;;9895:177::o;10077:352::-;10279:2;10261:21;;;10318:2;10298:18;;;10291:30;10357;10352:2;10337:18;;10330:58;10420:2;10405:18;;10251:178::o;10434:355::-;10636:2;10618:21;;;10675:2;10655:18;;;10648:30;10714:33;10709:2;10694:18;;10687:61;10780:2;10765:18;;10608:181::o;10794:350::-;10996:2;10978:21;;;11035:2;11015:18;;;11008:30;11074:28;11069:2;11054:18;;11047:56;11135:2;11120:18;;10968:176::o;11149:349::-;11351:2;11333:21;;;11390:2;11370:18;;;11363:30;11429:27;11424:2;11409:18;;11402:55;11489:2;11474:18;;11323:175::o;11503:347::-;11705:2;11687:21;;;11744:2;11724:18;;;11717:30;11783:25;11778:2;11763:18;;11756:53;11841:2;11826:18;;11677:173::o;11855:177::-;12001:25;;;11989:2;11974:18;;11956:76::o;12037:128::-;;12108:1;12104:6;12101:1;12098:13;12095:2;;;12114:18;;:::i;:::-;-1:-1:-1;12150:9:1;;12085:80::o;12170:217::-;;12236:1;12226:2;;-1:-1:-1;;;12261:31:1;;12315:4;12312:1;12305:15;12343:4;12268:1;12333:15;12226:2;-1:-1:-1;12372:9:1;;12216:171::o;12392:168::-;;12498:1;12494;12490:6;12486:14;12483:1;12480:21;12475:1;12468:9;12461:17;12457:45;12454:2;;;12505:18;;:::i;:::-;-1:-1:-1;12545:9:1;;12444:116::o;12565:125::-;;12633:1;12630;12627:8;12624:2;;;12638:18;;:::i;:::-;-1:-1:-1;12675:9:1;;12614:76::o;12695:258::-;12767:1;12777:113;12791:6;12788:1;12785:13;12777:113;;;12867:11;;;12861:18;12848:11;;;12841:39;12813:2;12806:10;12777:113;;;12908:6;12905:1;12902:13;12899:2;;;12943:1;12934:6;12929:3;12925:16;12918:27;12899:2;;12748:205;;;:::o;12958:135::-;;-1:-1:-1;;13018:17:1;;13015:2;;;13038:18;;:::i;:::-;-1:-1:-1;13085:1:1;13074:13;;13005:88::o;13098:127::-;13159:10;13154:3;13150:20;13147:1;13140:31;13190:4;13187:1;13180:15;13214:4;13211:1;13204:15;13230:127;13291:10;13286:3;13282:20;13279:1;13272:31;13322:4;13319:1;13312:15;13346:4;13343:1;13336:15;13362:133;-1:-1:-1;;;;;13439:31:1;;13429:42;;13419:2;;13485:1;13482;13475:12

Swarm Source

ipfs://e6182e2398d5516b6b0cbb83a90677fce4032117f985e72c11a2a4934d751e28

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.