MON Price: $0.020749 (+3.70%)

Contract

0x30429AC8d68335900d2aF0935758aa6E970e0704

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Authorized D...377995352025-11-25 1:07:3866 days ago1764032858IN
0x30429AC8...E970e0704
0 MON0.00943183103.74
Set Authorized D...377958912025-11-25 0:43:1666 days ago1764031396IN
0x30429AC8...E970e0704
0 MON0.00936637103.02
Set Authorized D...377925372025-11-25 0:20:5166 days ago1764030051IN
0x30429AC8...E970e0704
0 MON0.00927363102
Set Authorized D...377629382025-11-24 21:02:4966 days ago1764018169IN
0x30429AC8...E970e0704
0 MON0.01020099112.2

Latest 17 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
377933392025-11-25 0:26:1366 days ago1764030373
0x30429AC8...E970e0704
0 MON
377933392025-11-25 0:26:1366 days ago1764030373
0x30429AC8...E970e0704
0 MON
377885082025-11-24 23:53:5366 days ago1764028433
0x30429AC8...E970e0704
0 MON
377885082025-11-24 23:53:5366 days ago1764028433
0x30429AC8...E970e0704
0 MON
377885082025-11-24 23:53:5366 days ago1764028433
0x30429AC8...E970e0704
0 MON
377880182025-11-24 23:50:3666 days ago1764028236
0x30429AC8...E970e0704
0 MON
377880182025-11-24 23:50:3666 days ago1764028236
0x30429AC8...E970e0704
0 MON
377880182025-11-24 23:50:3666 days ago1764028236
0x30429AC8...E970e0704
0 MON
377823152025-11-24 23:12:2866 days ago1764025948
0x30429AC8...E970e0704
0 MON
377823152025-11-24 23:12:2866 days ago1764025948
0x30429AC8...E970e0704
0 MON
377823152025-11-24 23:12:2866 days ago1764025948
0x30429AC8...E970e0704
0 MON
377751292025-11-24 22:24:2366 days ago1764023063
0x30429AC8...E970e0704
0 MON
377751292025-11-24 22:24:2366 days ago1764023063
0x30429AC8...E970e0704
0 MON
377726942025-11-24 22:08:0666 days ago1764022086
0x30429AC8...E970e0704
0 MON
377726942025-11-24 22:08:0666 days ago1764022086
0x30429AC8...E970e0704
0 MON
377663962025-11-24 21:25:5866 days ago1764019558
0x30429AC8...E970e0704
0 MON
377663962025-11-24 21:25:5866 days ago1764019558
0x30429AC8...E970e0704
0 MON
Loading...
Loading

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

Contract Name:
DevLockVault

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at monadscan.com on 2025-11-27
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

/// @notice Minimal ERC20 interface for lock/claim operations
interface IERC20 {
    function transfer(address to, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
}

/// @title DevLockVault
/// @notice Token locking vault for Gain.fun launches.
///         - Early Buy: Optional locking with custom duration (called by BondingCurve/Factory).
///         - User Locks: Users can lock their own tokens for custom duration (hours, days, or months).
///         - Tokens can be claimed after unlock time.
///         - No owner withdraw for locked balances (no rug).
contract DevLockVault {
    // ---------------------------------------------------------------------
    // Ownership (simple, no external dependency)
    // ---------------------------------------------------------------------

    address public owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    modifier onlyOwner() {
        require(msg.sender == owner, "DevLockVault: caller is not the owner");
        _;
    }

    constructor() {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "DevLockVault: new owner is zero");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

    // ---------------------------------------------------------------------
    // Config
    // ---------------------------------------------------------------------

    /// @notice Default lock duration for early buy (1 hour).
    uint256 public constant DEFAULT_LOCK_DURATION = 1 hours;
    
    /// @notice Maximum lock duration (5 years = 60 months).
    uint256 public constant MAX_LOCK_DURATION = 60 * 30 days; // 5 years max
    
    /// @notice Time unit constants for convenience.
    uint256 public constant SECONDS_PER_HOUR = 1 hours;
    uint256 public constant SECONDS_PER_DAY = 1 days;
    uint256 public constant SECONDS_PER_MONTH = 30 days; // approximate: 30 days

    /// @notice Addresses allowed to lock tokens (BondingCurve, Factory, etc.).
    mapping(address => bool) public isAuthorizedDepositor;

    event AuthorizedDepositorUpdated(address indexed depositor, bool allowed);

    /// @notice Update which addresses are allowed to create locks.
    /// @dev Typically set to BondingCurve + Factory contracts.
    function setAuthorizedDepositor(address depositor, bool allowed) external onlyOwner {
        isAuthorizedDepositor[depositor] = allowed;
        emit AuthorizedDepositorUpdated(depositor, allowed);
    }

    // ---------------------------------------------------------------------
    // Lock storage
    // ---------------------------------------------------------------------

    struct LockInfo {
        uint256 amount;      // total locked tokens for this token+dev
        uint256 unlockTime;  // timestamp when claim becomes available
    }

    /// @notice token => dev => lock info
    mapping(address => mapping(address => LockInfo)) public locks;

    event TokensLocked(
        address indexed token,
        address indexed dev,
        uint256 amount,
        uint256 unlockTime
    );

    event TokensClaimed(
        address indexed token,
        address indexed dev,
        uint256 amount
    );

    // ---------------------------------------------------------------------
    // Core logic
    // ---------------------------------------------------------------------

    /// @notice Lock dev tokens for a specific creator (dev) with optional duration.
    /// @dev Caller must be authorized (BondingCurve/Factory).
    ///      This function pulls tokens from msg.sender via transferFrom.
    ///      If lockDurationSeconds is 0, tokens are sent directly to dev (no lock).
    ///      Flow example (inside BondingCurve):
    ///        1) compute devTokens
    ///        2) IERC20(token).approve(devLockVault, devTokens);
    ///        3) devLockVault.lockFrom(token, creator, devTokens, lockDurationSeconds);
    ///
    /// @param token The token to lock (GainFunToken address).
    /// @param dev   The wallet address of the token creator (dev).
    /// @param amount Amount of tokens to lock.
    /// @param lockDurationSeconds Lock duration in seconds (0 = no lock, send directly to dev).
    ///                             Use SECONDS_PER_HOUR, SECONDS_PER_DAY, or SECONDS_PER_MONTH constants.
    function lockFrom(address token, address dev, uint256 amount, uint256 lockDurationSeconds) external {
        require(isAuthorizedDepositor[msg.sender], "DevLockVault: not authorized");
        require(dev != address(0), "DevLockVault: dev is zero");
        require(amount > 0, "DevLockVault: amount is zero");
        require(lockDurationSeconds <= MAX_LOCK_DURATION, "DevLockVault: lock too long");

        // Pull tokens from depositor (BondingCurve/Factory).
        bool ok = IERC20(token).transferFrom(msg.sender, address(this), amount);
        require(ok, "DevLockVault: transferFrom failed");

        // If no lock duration, send directly to dev
        if (lockDurationSeconds == 0) {
            ok = IERC20(token).transfer(dev, amount);
            require(ok, "DevLockVault: direct transfer failed");
            emit TokensLocked(token, dev, amount, block.timestamp); // unlockTime = now means immediately claimable
            return;
        }

        LockInfo storage l = locks[token][dev];

        // Calculate unlock time: now + lockDurationSeconds
        uint256 newUnlock = block.timestamp + lockDurationSeconds;
        
        // Extend unlock time if new lock is longer
        if (newUnlock > l.unlockTime) {
            l.unlockTime = newUnlock;
        }

        l.amount += amount;

        emit TokensLocked(token, dev, amount, l.unlockTime);
    }

    /// @dev Internal lock function (shared logic for lock and convenience functions)
    function _lock(address token, address user, uint256 amount, uint256 lockDurationSeconds) internal {
        require(token != address(0), "DevLockVault: token is zero");
        require(amount > 0, "DevLockVault: amount is zero");
        require(lockDurationSeconds > 0 && lockDurationSeconds <= MAX_LOCK_DURATION, "DevLockVault: invalid duration");

        // Pull tokens from user
        bool ok = IERC20(token).transferFrom(user, address(this), amount);
        require(ok, "DevLockVault: transferFrom failed");

        LockInfo storage l = locks[token][user];

        // Calculate unlock time: now + lockDurationSeconds
        uint256 newUnlock = block.timestamp + lockDurationSeconds;
        
        // Extend unlock time if new lock is longer
        if (newUnlock > l.unlockTime) {
            l.unlockTime = newUnlock;
        }

        l.amount += amount;

        emit TokensLocked(token, user, amount, l.unlockTime);
    }

    /// @notice Lock tokens for msg.sender with custom duration (in seconds).
    /// @dev Users can lock their own tokens for a specified duration.
    ///      Tokens must be approved first: IERC20(token).approve(devLockVault, amount)
    ///      Use helper functions lockHours, lockDays, lockMonths for convenience.
    ///
    /// @param token The token to lock.
    /// @param amount Amount of tokens to lock.
    /// @param lockDurationSeconds Lock duration in seconds.
    ///                             Use SECONDS_PER_HOUR, SECONDS_PER_DAY, or SECONDS_PER_MONTH constants.
    function lock(address token, uint256 amount, uint256 lockDurationSeconds) external {
        _lock(token, msg.sender, amount, lockDurationSeconds);
    }

    /// @notice Lock tokens for msg.sender for specified hours.
    /// @dev Convenience function for locking by hours.
    /// @param token The token to lock.
    /// @param amount Amount of tokens to lock.
    /// @param hours_ Number of hours to lock (max 43800 hours = 5 years).
    function lockHours(address token, uint256 amount, uint256 hours_) external {
        require(hours_ > 0, "DevLockVault: hours must be > 0");
        uint256 lockDurationSeconds = hours_ * SECONDS_PER_HOUR;
        require(lockDurationSeconds <= MAX_LOCK_DURATION, "DevLockVault: lock too long");
        _lock(token, msg.sender, amount, lockDurationSeconds);
    }

    /// @notice Lock tokens for msg.sender for specified days.
    /// @dev Convenience function for locking by days.
    /// @param token The token to lock.
    /// @param amount Amount of tokens to lock.
    /// @param days_ Number of days to lock (max 1825 days = 5 years).
    function lockDays(address token, uint256 amount, uint256 days_) external {
        require(days_ > 0, "DevLockVault: days must be > 0");
        uint256 lockDurationSeconds = days_ * SECONDS_PER_DAY;
        require(lockDurationSeconds <= MAX_LOCK_DURATION, "DevLockVault: lock too long");
        _lock(token, msg.sender, amount, lockDurationSeconds);
    }

    /// @notice Lock tokens for msg.sender for specified months.
    /// @dev Convenience function for locking by months.
    /// @param token The token to lock.
    /// @param amount Amount of tokens to lock.
    /// @param months_ Number of months to lock (max 60 months = 5 years).
    function lockMonths(address token, uint256 amount, uint256 months_) external {
        require(months_ > 0, "DevLockVault: months must be > 0");
        uint256 lockDurationSeconds = months_ * SECONDS_PER_MONTH;
        require(lockDurationSeconds <= MAX_LOCK_DURATION, "DevLockVault: lock too long");
        _lock(token, msg.sender, amount, lockDurationSeconds);
    }

    /// @notice Claim all unlocked tokens for msg.sender for a specific token.
    /// @dev Users can claim their own locked tokens after unlock time.
    function claim(address token) external {
        LockInfo storage l = locks[token][msg.sender];
        uint256 amount = l.amount;
        require(amount > 0, "DevLockVault: nothing to claim");
        require(block.timestamp >= l.unlockTime, "DevLockVault: still locked");

        // Clear before transfer to prevent re-entrancy issues on non-standard tokens.
        l.amount = 0;
        l.unlockTime = 0;

        bool ok = IERC20(token).transfer(msg.sender, amount);
        require(ok, "DevLockVault: transfer failed");

        emit TokensClaimed(token, msg.sender, amount);
    }

    // ---------------------------------------------------------------------
    // Views for frontend
    // ---------------------------------------------------------------------

    /// @notice Get lock info for a given token and user wallet.
    /// @param token The token address.
    /// @param dev   The user wallet address.
    /// @return amount      Currently locked token amount.
    /// @return unlockTime  Timestamp when this lock can be claimed.
    function getLockInfo(address token, address dev)
        external
        view
        returns (uint256 amount, uint256 unlockTime)
    {
        LockInfo memory l = locks[token][dev];
        return (l.amount, l.unlockTime);
    }

    /// @notice Returns true if the user's lock for this token is currently claimable.
    function isUnlocked(address token, address dev) external view returns (bool) {
        LockInfo memory l = locks[token][dev];
        return (l.amount > 0 && block.timestamp >= l.unlockTime);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"depositor","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"AuthorizedDepositorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"dev","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"dev","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlockTime","type":"uint256"}],"name":"TokensLocked","type":"event"},{"inputs":[],"name":"DEFAULT_LOCK_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LOCK_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_PER_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_PER_HOUR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_PER_MONTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"dev","type":"address"}],"name":"getLockInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAuthorizedDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"dev","type":"address"}],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockDurationSeconds","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"days_","type":"uint256"}],"name":"lockDays","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"dev","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockDurationSeconds","type":"uint256"}],"name":"lockFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"hours_","type":"uint256"}],"name":"lockHours","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"months_","type":"uint256"}],"name":"lockMonths","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"locks","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"depositor","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAuthorizedDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

0x6080604052348015600e575f5ffd5b505f80546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3610fb68061005a5f395ff3fe608060405234801561000f575f5ffd5b5060043610610111575f3560e01c80638efc9dfa1161009e578063e952acc81161006e578063e952acc814610286578063ee3ca99c146101d4578063efd6eaa1146102b8578063f16ce33e146102cb578063f2fde38b146102de575f5ffd5b80638efc9dfa1461021c578063c05f61551461022f578063dcef06bf14610260578063e2ab691d14610273575f5ffd5b806322abe7e3116100e457806322abe7e3146101c15780634df86126146101d45780634f1bfc9e146101dd57806374f0314f146101e85780638da5cb5b146101f2575f5ffd5b8063061c90401461011557806310786deb1461018157806312248bd2146101995780631e83409a146101ae575b5f5ffd5b610167610123366004610d9c565b6001600160a01b039182165f908152600260209081526040808320939094168252918252829020825180840190935280548084526001909101549290910182905291565b604080519283526020830191909152015b60405180910390f35b61018b62278d0081565b604051908152602001610178565b6101ac6101a7366004610dcd565b6102f1565b005b6101ac6101bc366004610dfd565b6103bb565b6101ac6101cf366004610dcd565b61058e565b61018b610e1081565b61018b6309450c0081565b61018b6201518081565b5f54610204906001600160a01b031681565b6040516001600160a01b039091168152602001610178565b6101ac61022a366004610e2d565b6105ea565b61016761023d366004610d9c565b600260209081525f92835260408084209091529082529020805460019091015482565b6101ac61026e366004610e62565b610671565b6101ac610281366004610dcd565b610a40565b6102a8610294366004610dfd565b60016020525f908152604090205460ff1681565b6040519015158152602001610178565b6101ac6102c6366004610dcd565b610a51565b6102a86102d9366004610d9c565b610aae565b6101ac6102ec366004610dfd565b610b0d565b5f81116103455760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a2064617973206d757374206265203e2030000060448201526064015b60405180910390fd5b5f6103536201518083610eb5565b90506309450c008111156103a95760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a206c6f636b20746f6f206c6f6e670000000000604482015260640161033c565b6103b584338584610be5565b50505050565b6001600160a01b0381165f908152600260209081526040808320338452909152902080548061042c5760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a206e6f7468696e6720746f20636c61696d0000604482015260640161033c565b81600101544210156104805760405162461bcd60e51b815260206004820152601a60248201527f4465764c6f636b5661756c743a207374696c6c206c6f636b6564000000000000604482015260640161033c565b5f8083556001830181905560405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0385169063a9059cbb906044016020604051808303815f875af11580156104d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f99190610ecc565b9050806105485760405162461bcd60e51b815260206004820152601d60248201527f4465764c6f636b5661756c743a207472616e73666572206661696c6564000000604482015260640161033c565b60405182815233906001600160a01b038616907fa86305abc2db271df4609aa86a8d044bc11fb36939841bfdad6c1ab2b26e94719060200160405180910390a350505050565b5f81116105dd5760405162461bcd60e51b815260206004820152601f60248201527f4465764c6f636b5661756c743a20686f757273206d757374206265203e203000604482015260640161033c565b5f610353610e1083610eb5565b5f546001600160a01b031633146106135760405162461bcd60e51b815260040161033c90610ee7565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527fd8ca4ccec562bc375bed25d6c45ea2c3229b9cd6f5e0569ab9b193479d0a1092910160405180910390a25050565b335f9081526001602052604090205460ff166106cf5760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a206e6f7420617574686f72697a656400000000604482015260640161033c565b6001600160a01b0383166107255760405162461bcd60e51b815260206004820152601960248201527f4465764c6f636b5661756c743a20646576206973207a65726f00000000000000604482015260640161033c565b5f82116107745760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a20616d6f756e74206973207a65726f00000000604482015260640161033c565b6309450c008111156107c85760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a206c6f636b20746f6f206c6f6e670000000000604482015260640161033c565b6040516323b872dd60e01b8152336004820152306024820152604481018390525f906001600160a01b038616906323b872dd906064016020604051808303815f875af115801561081a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083e9190610ecc565b90508061085d5760405162461bcd60e51b815260040161033c90610f2c565b815f0361097d5760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303815f875af11580156108b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d49190610ecc565b90508061092f5760405162461bcd60e51b8152602060048201526024808201527f4465764c6f636b5661756c743a20646972656374207472616e736665722066616044820152631a5b195960e21b606482015260840161033c565b604080518481524260208201526001600160a01b0380871692908816917fc8b76441f0c994977de3f73de32b3573a68b94e5d786ffd899638438754c9de9910160405180910390a3506103b5565b6001600160a01b038086165f9081526002602090815260408083209388168352929052908120906109ae8442610f6d565b905081600101548111156109c457600182018190555b84825f015f8282546109d69190610f6d565b92505081905550856001600160a01b0316876001600160a01b03167fc8b76441f0c994977de3f73de32b3573a68b94e5d786ffd899638438754c9de9878560010154604051610a2f929190918252602082015260400190565b60405180910390a350505050505050565b610a4c83338484610be5565b505050565b5f8111610aa05760405162461bcd60e51b815260206004820181905260248201527f4465764c6f636b5661756c743a206d6f6e746873206d757374206265203e2030604482015260640161033c565b5f61035362278d0083610eb5565b6001600160a01b038083165f9081526002602090815260408083209385168352928152828220835180850190945280548085526001909101549184019190915290919015801590610b03575080602001514210155b9150505b92915050565b5f546001600160a01b03163314610b365760405162461bcd60e51b815260040161033c90610ee7565b6001600160a01b038116610b8c5760405162461bcd60e51b815260206004820152601f60248201527f4465764c6f636b5661756c743a206e6577206f776e6572206973207a65726f00604482015260640161033c565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038416610c3b5760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a20746f6b656e206973207a65726f0000000000604482015260640161033c565b5f8211610c8a5760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a20616d6f756e74206973207a65726f00000000604482015260640161033c565b5f81118015610c9d57506309450c008111155b610ce95760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a20696e76616c6964206475726174696f6e0000604482015260640161033c565b6040516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490525f91908616906323b872dd906064016020604051808303815f875af1158015610d3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d629190610ecc565b90508061097d5760405162461bcd60e51b815260040161033c90610f2c565b80356001600160a01b0381168114610d97575f5ffd5b919050565b5f5f60408385031215610dad575f5ffd5b610db683610d81565b9150610dc460208401610d81565b90509250929050565b5f5f5f60608486031215610ddf575f5ffd5b610de884610d81565b95602085013595506040909401359392505050565b5f60208284031215610e0d575f5ffd5b610e1682610d81565b9392505050565b8015158114610e2a575f5ffd5b50565b5f5f60408385031215610e3e575f5ffd5b610e4783610d81565b91506020830135610e5781610e1d565b809150509250929050565b5f5f5f5f60808587031215610e75575f5ffd5b610e7e85610d81565b9350610e8c60208601610d81565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b0757610b07610ea1565b5f60208284031215610edc575f5ffd5b8151610e1681610e1d565b60208082526025908201527f4465764c6f636b5661756c743a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b60208082526021908201527f4465764c6f636b5661756c743a207472616e7366657246726f6d206661696c656040820152601960fa1b606082015260800190565b80820180821115610b0757610b07610ea156fea26469706673582212206afa878fbd4c2050d6d14930270ba76e222ea87e10a4cad0265794d181c9110564736f6c634300081e0033

Deployed Bytecode

0x608060405234801561000f575f5ffd5b5060043610610111575f3560e01c80638efc9dfa1161009e578063e952acc81161006e578063e952acc814610286578063ee3ca99c146101d4578063efd6eaa1146102b8578063f16ce33e146102cb578063f2fde38b146102de575f5ffd5b80638efc9dfa1461021c578063c05f61551461022f578063dcef06bf14610260578063e2ab691d14610273575f5ffd5b806322abe7e3116100e457806322abe7e3146101c15780634df86126146101d45780634f1bfc9e146101dd57806374f0314f146101e85780638da5cb5b146101f2575f5ffd5b8063061c90401461011557806310786deb1461018157806312248bd2146101995780631e83409a146101ae575b5f5ffd5b610167610123366004610d9c565b6001600160a01b039182165f908152600260209081526040808320939094168252918252829020825180840190935280548084526001909101549290910182905291565b604080519283526020830191909152015b60405180910390f35b61018b62278d0081565b604051908152602001610178565b6101ac6101a7366004610dcd565b6102f1565b005b6101ac6101bc366004610dfd565b6103bb565b6101ac6101cf366004610dcd565b61058e565b61018b610e1081565b61018b6309450c0081565b61018b6201518081565b5f54610204906001600160a01b031681565b6040516001600160a01b039091168152602001610178565b6101ac61022a366004610e2d565b6105ea565b61016761023d366004610d9c565b600260209081525f92835260408084209091529082529020805460019091015482565b6101ac61026e366004610e62565b610671565b6101ac610281366004610dcd565b610a40565b6102a8610294366004610dfd565b60016020525f908152604090205460ff1681565b6040519015158152602001610178565b6101ac6102c6366004610dcd565b610a51565b6102a86102d9366004610d9c565b610aae565b6101ac6102ec366004610dfd565b610b0d565b5f81116103455760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a2064617973206d757374206265203e2030000060448201526064015b60405180910390fd5b5f6103536201518083610eb5565b90506309450c008111156103a95760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a206c6f636b20746f6f206c6f6e670000000000604482015260640161033c565b6103b584338584610be5565b50505050565b6001600160a01b0381165f908152600260209081526040808320338452909152902080548061042c5760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a206e6f7468696e6720746f20636c61696d0000604482015260640161033c565b81600101544210156104805760405162461bcd60e51b815260206004820152601a60248201527f4465764c6f636b5661756c743a207374696c6c206c6f636b6564000000000000604482015260640161033c565b5f8083556001830181905560405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0385169063a9059cbb906044016020604051808303815f875af11580156104d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f99190610ecc565b9050806105485760405162461bcd60e51b815260206004820152601d60248201527f4465764c6f636b5661756c743a207472616e73666572206661696c6564000000604482015260640161033c565b60405182815233906001600160a01b038616907fa86305abc2db271df4609aa86a8d044bc11fb36939841bfdad6c1ab2b26e94719060200160405180910390a350505050565b5f81116105dd5760405162461bcd60e51b815260206004820152601f60248201527f4465764c6f636b5661756c743a20686f757273206d757374206265203e203000604482015260640161033c565b5f610353610e1083610eb5565b5f546001600160a01b031633146106135760405162461bcd60e51b815260040161033c90610ee7565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527fd8ca4ccec562bc375bed25d6c45ea2c3229b9cd6f5e0569ab9b193479d0a1092910160405180910390a25050565b335f9081526001602052604090205460ff166106cf5760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a206e6f7420617574686f72697a656400000000604482015260640161033c565b6001600160a01b0383166107255760405162461bcd60e51b815260206004820152601960248201527f4465764c6f636b5661756c743a20646576206973207a65726f00000000000000604482015260640161033c565b5f82116107745760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a20616d6f756e74206973207a65726f00000000604482015260640161033c565b6309450c008111156107c85760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a206c6f636b20746f6f206c6f6e670000000000604482015260640161033c565b6040516323b872dd60e01b8152336004820152306024820152604481018390525f906001600160a01b038616906323b872dd906064016020604051808303815f875af115801561081a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083e9190610ecc565b90508061085d5760405162461bcd60e51b815260040161033c90610f2c565b815f0361097d5760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303815f875af11580156108b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d49190610ecc565b90508061092f5760405162461bcd60e51b8152602060048201526024808201527f4465764c6f636b5661756c743a20646972656374207472616e736665722066616044820152631a5b195960e21b606482015260840161033c565b604080518481524260208201526001600160a01b0380871692908816917fc8b76441f0c994977de3f73de32b3573a68b94e5d786ffd899638438754c9de9910160405180910390a3506103b5565b6001600160a01b038086165f9081526002602090815260408083209388168352929052908120906109ae8442610f6d565b905081600101548111156109c457600182018190555b84825f015f8282546109d69190610f6d565b92505081905550856001600160a01b0316876001600160a01b03167fc8b76441f0c994977de3f73de32b3573a68b94e5d786ffd899638438754c9de9878560010154604051610a2f929190918252602082015260400190565b60405180910390a350505050505050565b610a4c83338484610be5565b505050565b5f8111610aa05760405162461bcd60e51b815260206004820181905260248201527f4465764c6f636b5661756c743a206d6f6e746873206d757374206265203e2030604482015260640161033c565b5f61035362278d0083610eb5565b6001600160a01b038083165f9081526002602090815260408083209385168352928152828220835180850190945280548085526001909101549184019190915290919015801590610b03575080602001514210155b9150505b92915050565b5f546001600160a01b03163314610b365760405162461bcd60e51b815260040161033c90610ee7565b6001600160a01b038116610b8c5760405162461bcd60e51b815260206004820152601f60248201527f4465764c6f636b5661756c743a206e6577206f776e6572206973207a65726f00604482015260640161033c565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038416610c3b5760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a20746f6b656e206973207a65726f0000000000604482015260640161033c565b5f8211610c8a5760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a20616d6f756e74206973207a65726f00000000604482015260640161033c565b5f81118015610c9d57506309450c008111155b610ce95760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a20696e76616c6964206475726174696f6e0000604482015260640161033c565b6040516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490525f91908616906323b872dd906064016020604051808303815f875af1158015610d3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d629190610ecc565b90508061097d5760405162461bcd60e51b815260040161033c90610f2c565b80356001600160a01b0381168114610d97575f5ffd5b919050565b5f5f60408385031215610dad575f5ffd5b610db683610d81565b9150610dc460208401610d81565b90509250929050565b5f5f5f60608486031215610ddf575f5ffd5b610de884610d81565b95602085013595506040909401359392505050565b5f60208284031215610e0d575f5ffd5b610e1682610d81565b9392505050565b8015158114610e2a575f5ffd5b50565b5f5f60408385031215610e3e575f5ffd5b610e4783610d81565b91506020830135610e5781610e1d565b809150509250929050565b5f5f5f5f60808587031215610e75575f5ffd5b610e7e85610d81565b9350610e8c60208601610d81565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b0757610b07610ea1565b5f60208284031215610edc575f5ffd5b8151610e1681610e1d565b60208082526025908201527f4465764c6f636b5661756c743a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b60208082526021908201527f4465764c6f636b5661756c743a207472616e7366657246726f6d206661696c656040820152601960fa1b606082015260800190565b80820180821115610b0757610b07610ea156fea26469706673582212206afa878fbd4c2050d6d14930270ba76e222ea87e10a4cad0265794d181c9110564736f6c634300081e0033

Deployed Bytecode Sourcemap

796:10985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11244:238;;;;;;:::i;:::-;-1:-1:-1;;;;;11415:12:0;;;11343:14;11415:12;;;:5;:12;;;;;;;;:17;;;;;;;;;;;;11395:37;;;;;;;;;;;;;;;;;;;;;;;;;;11244:238;;;;;631:25:1;;;687:2;672:18;;665:34;;;;604:18;11244:238:0;;;;;;;;2256:51;;2300:7;2256:51;;;;;856:25:1;;;844:2;829:18;2256:51:0;710:177:1;8968:363:0;;;;;;:::i;:::-;;:::i;:::-;;10165:602;;;;;;:::i;:::-;;:::i;8309:369::-;;;;;;:::i;:::-;;:::i;2144:50::-;;2187:7;2144:50;;2006:56;;2050:12;2006:56;;2201:48;;2243:6;2201:48;;1034:20;;;;;-1:-1:-1;;;;;1034:20:0;;;;;;-1:-1:-1;;;;;1672:32:1;;;1654:51;;1642:2;1627:18;1034:20:0;1508:203:1;2699:207:0;;;;;;:::i;:::-;;:::i;3312:61::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4783:1416;;;;;;:::i;:::-;;:::i;7858:155::-;;;;;;:::i;:::-;;:::i;2421:53::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2824:14:1;;2817:22;2799:41;;2787:2;2772:18;2421:53:0;2659:187:1;9629:375:0;;;;;;:::i;:::-;;:::i;11578:200::-;;;;;;:::i;:::-;;:::i;1403:229::-;;;;;;:::i;:::-;;:::i;8968:363::-;9068:1;9060:5;:9;9052:52;;;;-1:-1:-1;;;9052:52:0;;3053:2:1;9052:52:0;;;3035:21:1;3092:2;3072:18;;;3065:30;3131:32;3111:18;;;3104:60;3181:18;;9052:52:0;;;;;;;;;9115:27;9145:23;2243:6;9145:5;:23;:::i;:::-;9115:53;;2050:12;9187:19;:40;;9179:80;;;;-1:-1:-1;;;9179:80:0;;3717:2:1;9179:80:0;;;3699:21:1;3756:2;3736:18;;;3729:30;3795:29;3775:18;;;3768:57;3842:18;;9179:80:0;3515:351:1;9179:80:0;9270:53;9276:5;9283:10;9295:6;9303:19;9270:5;:53::i;:::-;9041:290;8968:363;;;:::o;10165:602::-;-1:-1:-1;;;;;10236:12:0;;10215:18;10236:12;;;:5;:12;;;;;;;;10249:10;10236:24;;;;;;;10288:8;;10315:10;10307:53;;;;-1:-1:-1;;;10307:53:0;;4073:2:1;10307:53:0;;;4055:21:1;4112:2;4092:18;;;4085:30;4151:32;4131:18;;;4124:60;4201:18;;10307:53:0;3871:354:1;10307:53:0;10398:1;:12;;;10379:15;:31;;10371:70;;;;-1:-1:-1;;;10371:70:0;;4432:2:1;10371:70:0;;;4414:21:1;4471:2;4451:18;;;4444:30;4510:28;4490:18;;;4483:56;4556:18;;10371:70:0;4230:350:1;10371:70:0;10553:1;10542:12;;;10565;;;:16;;;10604:42;;-1:-1:-1;;;10604:42:0;;10627:10;10604:42;;;4759:51:1;4826:18;;;4819:34;;;-1:-1:-1;;;;;10604:22:0;;;;;4732:18:1;;10604:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10594:52;;10665:2;10657:44;;;;-1:-1:-1;;;10657:44:0;;5316:2:1;10657:44:0;;;5298:21:1;5355:2;5335:18;;;5328:30;5394:31;5374:18;;;5367:59;5443:18;;10657:44:0;5114:353:1;10657:44:0;10719:40;;856:25:1;;;10740:10:0;;-1:-1:-1;;;;;10719:40:0;;;;;844:2:1;829:18;10719:40:0;;;;;;;10204:563;;;10165:602;:::o;8309:369::-;8412:1;8403:6;:10;8395:54;;;;-1:-1:-1;;;8395:54:0;;5674:2:1;8395:54:0;;;5656:21:1;5713:2;5693:18;;;5686:30;5752:33;5732:18;;;5725:61;5803:18;;8395:54:0;5472:355:1;8395:54:0;8460:27;8490:25;2187:7;8490:6;:25;:::i;2699:207::-;1209:5;;-1:-1:-1;;;;;1209:5:0;1195:10;:19;1187:69;;;;-1:-1:-1;;;1187:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2794:32:0;::::1;;::::0;;;:21:::1;:32;::::0;;;;;;;;:42;;-1:-1:-1;;2794:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;2852:46;;2799:41:1;;;2852:46:0::1;::::0;2772:18:1;2852:46:0::1;;;;;;;2699:207:::0;;:::o;4783:1416::-;4924:10;4902:33;;;;:21;:33;;;;;;;;4894:74;;;;-1:-1:-1;;;4894:74:0;;6440:2:1;4894:74:0;;;6422:21:1;6479:2;6459:18;;;6452:30;6518;6498:18;;;6491:58;6566:18;;4894:74:0;6238:352:1;4894:74:0;-1:-1:-1;;;;;4987:17:0;;4979:55;;;;-1:-1:-1;;;4979:55:0;;6797:2:1;4979:55:0;;;6779:21:1;6836:2;6816:18;;;6809:30;6875:27;6855:18;;;6848:55;6920:18;;4979:55:0;6595:349:1;4979:55:0;5062:1;5053:6;:10;5045:51;;;;-1:-1:-1;;;5045:51:0;;7151:2:1;5045:51:0;;;7133:21:1;7190:2;7170:18;;;7163:30;7229;7209:18;;;7202:58;7277:18;;5045:51:0;6949:352:1;5045:51:0;2050:12;5115:19;:40;;5107:80;;;;-1:-1:-1;;;5107:80:0;;3717:2:1;5107:80:0;;;3699:21:1;3756:2;3736:18;;;3729:30;3795:29;3775:18;;;3768:57;3842:18;;5107:80:0;3515:351:1;5107:80:0;5273:61;;-1:-1:-1;;;5273:61:0;;5300:10;5273:61;;;7508:51:1;5320:4:0;7575:18:1;;;7568:60;7644:18;;;7637:34;;;5263:7:0;;-1:-1:-1;;;;;5273:26:0;;;;;7481:18:1;;5273:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5263:71;;5353:2;5345:48;;;;-1:-1:-1;;;5345:48:0;;;;;;;:::i;:::-;5464:19;5487:1;5464:24;5460:301;;5510:35;;-1:-1:-1;;;5510:35:0;;-1:-1:-1;;;;;4777:32:1;;;5510:35:0;;;4759:51:1;4826:18;;;4819:34;;;5510:22:0;;;;;4732:18:1;;5510:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5505:40;;5568:2;5560:51;;;;-1:-1:-1;;;5560:51:0;;8286:2:1;5560:51:0;;;8268:21:1;8325:2;8305:18;;;8298:30;8364:34;8344:18;;;8337:62;-1:-1:-1;;;8415:18:1;;;8408:34;8459:19;;5560:51:0;8084:400:1;5560:51:0;5631:49;;;631:25:1;;;5664:15:0;687:2:1;672:18;;665:34;-1:-1:-1;;;;;5631:49:0;;;;;;;;;;604:18:1;5631:49:0;;;;;;;5743:7;;;5460:301;-1:-1:-1;;;;;5794:12:0;;;5773:18;5794:12;;;:5;:12;;;;;;;;:17;;;;;;;;;;;;5905:37;5923:19;5905:15;:37;:::i;:::-;5885:57;;6032:1;:12;;;6020:9;:24;6016:81;;;6061:12;;;:24;;;6016:81;6121:6;6109:1;:8;;;:18;;;;;;;:::i;:::-;;;;;;;;6165:3;-1:-1:-1;;;;;6145:46:0;6158:5;-1:-1:-1;;;;;6145:46:0;;6170:6;6178:1;:12;;;6145:46;;;;;;631:25:1;;;687:2;672:18;;665:34;619:2;604:18;;457:248;6145:46:0;;;;;;;;4883:1316;;;4783:1416;;;;:::o;7858:155::-;7952:53;7958:5;7965:10;7977:6;7985:19;7952:5;:53::i;:::-;7858:155;;;:::o;9629:375::-;9735:1;9725:7;:11;9717:56;;;;-1:-1:-1;;;9717:56:0;;8821:2:1;9717:56:0;;;8803:21:1;;;8840:18;;;8833:30;8899:34;8879:18;;;8872:62;8951:18;;9717:56:0;8619:356:1;9717:56:0;9784:27;9814;2300:7;9814;:27;:::i;11578:200::-;-1:-1:-1;;;;;11686:12:0;;;11649:4;11686:12;;;:5;:12;;;;;;;;:17;;;;;;;;;;;11666:37;;;;;;;;;;;;;;;;;;;;;;;;;11649:4;;11666:37;11722:12;;;;:47;;;11757:1;:12;;;11738:15;:31;;11722:47;11714:56;;;11578:200;;;;;:::o;1403:229::-;1209:5;;-1:-1:-1;;;;;1209:5:0;1195:10;:19;1187:69;;;;-1:-1:-1;;;1187:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1486:22:0;::::1;1478:66;;;::::0;-1:-1:-1;;;1478:66:0;;9182:2:1;1478:66:0::1;::::0;::::1;9164:21:1::0;9221:2;9201:18;;;9194:30;9260:33;9240:18;;;9233:61;9311:18;;1478:66:0::1;8980:355:1::0;1478:66:0::1;1581:5;::::0;;1560:37:::1;::::0;-1:-1:-1;;;;;1560:37:0;;::::1;::::0;1581:5;::::1;::::0;1560:37:::1;::::0;::::1;1608:5;:16:::0;;-1:-1:-1;;;;;;1608:16:0::1;-1:-1:-1::0;;;;;1608:16:0;;;::::1;::::0;;;::::1;::::0;;1403:229::o;6294:963::-;-1:-1:-1;;;;;6411:19:0;;6403:59;;;;-1:-1:-1;;;6403:59:0;;9542:2:1;6403:59:0;;;9524:21:1;9581:2;9561:18;;;9554:30;9620:29;9600:18;;;9593:57;9667:18;;6403:59:0;9340:351:1;6403:59:0;6490:1;6481:6;:10;6473:51;;;;-1:-1:-1;;;6473:51:0;;7151:2:1;6473:51:0;;;7133:21:1;7190:2;7170:18;;;7163:30;7229;7209:18;;;7202:58;7277:18;;6473:51:0;6949:352:1;6473:51:0;6565:1;6543:19;:23;:67;;;;;2050:12;6570:19;:40;;6543:67;6535:110;;;;-1:-1:-1;;;6535:110:0;;9898:2:1;6535:110:0;;;9880:21:1;9937:2;9917:18;;;9910:30;9976:32;9956:18;;;9949:60;10026:18;;6535:110:0;9696:354:1;6535:110:0;6702:55;;-1:-1:-1;;;6702:55:0;;-1:-1:-1;;;;;7526:32:1;;;6702:55:0;;;7508:51:1;6743:4:0;7575:18:1;;;7568:60;7644:18;;;7637:34;;;6692:7:0;;6702:26;;;;;;7481:18:1;;6702:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6692:65;;6776:2;6768:48;;;;-1:-1:-1;;;6768:48:0;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:260::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;;408:38;442:2;431:9;427:18;408:38;:::i;:::-;398:48;;192:260;;;;;:::o;892:420::-;969:6;977;985;1038:2;1026:9;1017:7;1013:23;1009:32;1006:52;;;1054:1;1051;1044:12;1006:52;1077:29;1096:9;1077:29;:::i;:::-;1067:39;1175:2;1160:18;;1147:32;;-1:-1:-1;1276:2:1;1261:18;;;1248:32;;892:420;-1:-1:-1;;;892:420:1:o;1317:186::-;1376:6;1429:2;1417:9;1408:7;1404:23;1400:32;1397:52;;;1445:1;1442;1435:12;1397:52;1468:29;1487:9;1468:29;:::i;:::-;1458:39;1317:186;-1:-1:-1;;;1317:186:1:o;1716:118::-;1802:5;1795:13;1788:21;1781:5;1778:32;1768:60;;1824:1;1821;1814:12;1768:60;1716:118;:::o;1839:315::-;1904:6;1912;1965:2;1953:9;1944:7;1940:23;1936:32;1933:52;;;1981:1;1978;1971:12;1933:52;2004:29;2023:9;2004:29;:::i;:::-;1994:39;;2083:2;2072:9;2068:18;2055:32;2096:28;2118:5;2096:28;:::i;:::-;2143:5;2133:15;;;1839:315;;;;;:::o;2159:495::-;2245:6;2253;2261;2269;2322:3;2310:9;2301:7;2297:23;2293:33;2290:53;;;2339:1;2336;2329:12;2290:53;2362:29;2381:9;2362:29;:::i;:::-;2352:39;;2410:38;2444:2;2433:9;2429:18;2410:38;:::i;:::-;2159:495;;2400:48;;-1:-1:-1;;;;2517:2:1;2502:18;;2489:32;;2618:2;2603:18;2590:32;;2159:495::o;3210:127::-;3271:10;3266:3;3262:20;3259:1;3252:31;3302:4;3299:1;3292:15;3326:4;3323:1;3316:15;3342:168;3415:9;;;3446;;3463:15;;;3457:22;;3443:37;3433:71;;3484:18;;:::i;4864:245::-;4931:6;4984:2;4972:9;4963:7;4959:23;4955:32;4952:52;;;5000:1;4997;4990:12;4952:52;5032:9;5026:16;5051:28;5073:5;5051:28;:::i;5832:401::-;6034:2;6016:21;;;6073:2;6053:18;;;6046:30;6112:34;6107:2;6092:18;;6085:62;-1:-1:-1;;;6178:2:1;6163:18;;6156:35;6223:3;6208:19;;5832:401::o;7682:397::-;7884:2;7866:21;;;7923:2;7903:18;;;7896:30;7962:34;7957:2;7942:18;;7935:62;-1:-1:-1;;;8028:2:1;8013:18;;8006:31;8069:3;8054:19;;7682:397::o;8489:125::-;8554:9;;;8575:10;;;8572:36;;;8588:18;;:::i

Swarm Source

ipfs://6afa878fbd4c2050d6d14930270ba76e222ea87e10a4cad0265794d181c91105

Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.