ETH Price: $3,350.62 (-1.13%)

Token

bZx Vesting Token (vBZRX)
 

Overview

Max Total Supply

889,389,933 vBZRX

Holders

699

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
8ventures.eth
Balance
2,088 vBZRX

Value
$0.00
0x7f43909414ff1b9e8fcc531e87212378e4a3f9e4
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Vested BZRX token.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BZRXVestingToken

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-07-11
*/

/**
 * Copyright 2017-2020, bZeroX, LLC <https://bzx.network/>. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0.
 */

pragma solidity 0.5.17;


contract IERC20 {
    string public name;
    uint8 public decimals;
    string public symbol;
    function totalSupply() public view returns (uint256);
    function balanceOf(address _who) public view returns (uint256);
    function allowance(address _owner, address _spender) public view returns (uint256);
    function approve(address _spender, uint256 _value) public returns (bool);
    function transfer(address _to, uint256 _value) public returns (bool);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "unauthorized");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * Copyright (C) 2019 Aragon One <https://aragon.one/>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @title Checkpointing
 * @notice Checkpointing library for keeping track of historical values based on an arbitrary time
 *         unit (e.g. seconds or block numbers).
 * @dev Adapted from:
 *   - Checkpointing  (https://github.com/aragonone/voting-connectors/blob/master/shared/contract-utils/contracts/Checkpointing.sol)
 */
library Checkpointing {

    struct Checkpoint {
        uint256 time;
        uint256 value;
    }

    struct History {
        Checkpoint[] history;
    }

    function addCheckpoint(
        History storage _self,
        uint256 _time,
        uint256 _value)
        internal
    {
        uint256 length = _self.history.length;
        if (length == 0) {
            _self.history.push(Checkpoint(_time, _value));
        } else {
            Checkpoint storage currentCheckpoint = _self.history[length - 1];
            uint256 currentCheckpointTime = currentCheckpoint.time;

            if (_time > currentCheckpointTime) {
                _self.history.push(Checkpoint(_time, _value));
            } else if (_time == currentCheckpointTime) {
                currentCheckpoint.value = _value;
            } else { // ensure list ordering
                revert("past-checkpoint");
            }
        }
    }

    function getValueAt(
        History storage _self,
        uint256 _time)
        internal
        view
        returns (uint256)
    {
        return _getValueAt(_self, _time);
    }

    function lastUpdated(
        History storage _self)
        internal
        view
        returns (uint256)
    {
        uint256 length = _self.history.length;
        if (length != 0) {
            return _self.history[length - 1].time;
        }
    }

    function latestValue(
        History storage _self)
        internal
        view
        returns (uint256)
    {
        uint256 length = _self.history.length;
        if (length != 0) {
            return _self.history[length - 1].value;
        }
    }

    function _getValueAt(
        History storage _self,
        uint256 _time)
        private
        view
        returns (uint256)
    {
        uint256 length = _self.history.length;

        // Short circuit if there's no checkpoints yet
        // Note that this also lets us avoid using SafeMath later on, as we've established that
        // there must be at least one checkpoint
        if (length == 0) {
            return 0;
        }

        // Check last checkpoint
        uint256 lastIndex = length - 1;
        Checkpoint storage lastCheckpoint = _self.history[lastIndex];
        if (_time >= lastCheckpoint.time) {
            return lastCheckpoint.value;
        }

        // Check first checkpoint (if not already checked with the above check on last)
        if (length == 1 || _time < _self.history[0].time) {
            return 0;
        }

        // Do binary search
        // As we've already checked both ends, we don't need to check the last checkpoint again
        uint256 low = 0;
        uint256 high = lastIndex - 1;

        while (high != low) {
            uint256 mid = (high + low + 1) / 2; // average, ceil round
            Checkpoint storage checkpoint = _self.history[mid];
            uint256 midTime = checkpoint.time;

            if (_time > midTime) {
                low = mid;
            } else if (_time < midTime) {
                // Note that we don't need SafeMath here because mid must always be greater than 0
                // from the while condition
                high = mid - 1;
            } else {
                // _time == midTime
                return checkpoint.value;
            }
        }

        return _self.history[low].value;
    }
}

contract CheckpointingToken is IERC20 {
    using Checkpointing for Checkpointing.History;

    mapping (address => mapping (address => uint256)) internal allowances_;

    mapping (address => Checkpointing.History) internal balancesHistory_;

    struct Checkpoint {
        uint256 time;
        uint256 value;
    }

    struct History {
        Checkpoint[] history;
    }

    // override this function if a totalSupply should be tracked
    function totalSupply()
        public
        view
        returns (uint256)
    {
        return 0;
    }

    function balanceOf(
        address _owner)
        public
        view
        returns (uint256)
    {
        return balanceOfAt(_owner, block.number);
    }

    function balanceOfAt(
        address _owner,
        uint256 _blockNumber)
        public
        view
        returns (uint256)
    {
        return balancesHistory_[_owner].getValueAt(_blockNumber);
    }

    function allowance(
        address _owner,
        address _spender)
        public
        view
        returns (uint256)
    {
        return allowances_[_owner][_spender];
    }

    function approve(
        address _spender,
        uint256 _value)
        public
        returns (bool)
    {
        allowances_[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    function transfer(
        address _to,
        uint256 _value)
        public
        returns (bool)
    {
        return transferFrom(
            msg.sender,
            _to,
            _value
        );
    }

    function transferFrom(
        address _from,
        address _to,
        uint256 _value)
        public
        returns (bool)
    {
        uint256 previousBalanceFrom = balanceOfAt(_from, block.number);
        require(previousBalanceFrom >= _value, "insufficient-balance");

        if (_from != msg.sender && allowances_[_from][msg.sender] != uint(-1)) {
            require(allowances_[_from][msg.sender] >= _value, "insufficient-allowance");
            allowances_[_from][msg.sender] = allowances_[_from][msg.sender] - _value; // overflow not possible
        }

        balancesHistory_[_from].addCheckpoint(
            block.number,
            previousBalanceFrom - _value // overflow not possible
        );

        balancesHistory_[_to].addCheckpoint(
            block.number,
            add(
                balanceOfAt(_to, block.number),
                _value
            )
        );

        emit Transfer(_from, _to, _value);
        return true;
    }

    function _getBlockNumber()
        internal
        view
        returns (uint256)
    {
        return block.number;
    }

    function _getTimestamp()
        internal
        view
        returns (uint256)
    {
        return block.timestamp;
    }

    function add(
        uint256 x,
        uint256 y)
        internal
        pure
        returns (uint256 c)
    {
        require((c = x + y) >= x, "addition-overflow");
    }

    function sub(
        uint256 x,
        uint256 y)
        internal
        pure
        returns (uint256 c)
    {
        require((c = x - y) <= x, "subtraction-overflow");
    }

    function mul(
        uint256 a,
        uint256 b)
        internal
        pure
        returns (uint256 c)
    {
        if (a == 0) {
            return 0;
        }
        require((c = a * b) / a == b, "multiplication-overflow");
    }

    function div(
        uint256 a,
        uint256 b)
        internal
        pure
        returns (uint256 c)
    {
        require(b != 0, "division by zero");
        c = a / b;
    }
}

contract BZRXVestingToken is CheckpointingToken, Ownable {

    event Claim(
        address indexed owner,
        uint256 value
    );

    string public constant name = "bZx Vesting Token";
    string public constant symbol = "vBZRX";
    uint8 public constant decimals = 18;

    uint256 public constant cliffDuration =                  15768000; // 86400 * 365 * 0.5
    uint256 public constant vestingDuration =               126144000; // 86400 * 365 * 4
    uint256 internal constant vestingDurationAfterCliff_ =  110376000; // 86400 * 365 * 3.5

    uint256 public constant vestingStartTimestamp =         1594648800; // start_time
    uint256 public constant vestingCliffTimestamp =         vestingStartTimestamp + cliffDuration;
    uint256 public constant vestingEndTimestamp =           vestingStartTimestamp + vestingDuration;
    uint256 public constant vestingLastClaimTimestamp =     vestingEndTimestamp + 86400 * 365;

    uint256 public totalClaimed; // total claimed since start

    IERC20 public constant BZRX = IERC20(0x56d811088235F11C8920698a204A5010a788f4b3);

    uint256 internal constant startingBalance_ = 889389933e18; // 889,389,933 BZRX

    Checkpointing.History internal totalSupplyHistory_;

    mapping (address => uint256) internal lastClaimTime_;
    mapping (address => uint256) internal userTotalClaimed_;

    bool internal isInitialized_;


    // sets up vesting and deposits BZRX
    function initialize()
        external
    {
        require(!isInitialized_, "already initialized");

        balancesHistory_[msg.sender].addCheckpoint(_getBlockNumber(), startingBalance_);
        totalSupplyHistory_.addCheckpoint(_getBlockNumber(), startingBalance_);

        emit Transfer(
            address(0),
            msg.sender,
            startingBalance_
        );

        BZRX.transferFrom(
            msg.sender,
            address(this),
            startingBalance_
        );

        isInitialized_ = true;
    }

    function transferFrom(
        address _from,
        address _to,
        uint256 _value)
        public
        returns (bool)
    {
        _claim(_from);
        if (_from != _to) {
            _claim(_to);
        }

        return super.transferFrom(
            _from,
            _to,
            _value
        );
    }

    // user can claim vested BZRX
    function claim()
        public
    {
        _claim(msg.sender);
    }

    // user can burn remaining vBZRX tokens once fully vested; unclaimed BZRX with be withdrawn
    function burn()
        external
    {
        require(_getTimestamp() >= vestingEndTimestamp, "not fully vested");

        _claim(msg.sender);

        uint256 _blockNumber = _getBlockNumber();
        uint256 balanceBefore = balanceOfAt(msg.sender, _blockNumber);
        balancesHistory_[msg.sender].addCheckpoint(_blockNumber, 0);
        totalSupplyHistory_.addCheckpoint(_blockNumber, totalSupplyAt(_blockNumber) - balanceBefore); // overflow not possible

        emit Transfer(
            msg.sender,
            address(0),
            balanceBefore
        );
    }

    // funds unclaimed one year after vesting ends (5 years) can be rescued
    function rescue(
        address _receiver,
        uint256 _amount)
        external
        onlyOwner
    {
        require(_getTimestamp() > vestingLastClaimTimestamp, "unauthorized");

        BZRX.transfer(
            _receiver,
            _amount
        );
    }

    function totalSupply()
        public
        view
        returns (uint256)
    {
        return totalSupplyAt(_getBlockNumber());
    }

    function totalSupplyAt(
        uint256 _blockNumber)
        public
        view
        returns (uint256)
    {
        return totalSupplyHistory_.getValueAt(_blockNumber);
    }

    // total that has vested, but has not yet been claimed by a user
    function vestedBalanceOf(
        address _owner)
        public
        view
        returns (uint256)
    {
        uint256 lastClaim = lastClaimTime_[_owner];
        if (lastClaim < _getTimestamp()) {
            return _totalVested(
                balanceOfAt(_owner, _getBlockNumber()),
                lastClaim
            );
        }
    }

    // total that has not yet vested
    function vestingBalanceOf(
        address _owner)
        public
        view
        returns (uint256 balance)
    {
        balance = balanceOfAt(_owner, _getBlockNumber());
        if (balance != 0) {
            uint256 lastClaim = lastClaimTime_[_owner];
            if (lastClaim < _getTimestamp()) {
                balance = sub(
                    balance,
                    _totalVested(
                        balance,
                        lastClaim
                    )
                );
            }
        }
    }

    // total that has been claimed by a user
    function claimedBalanceOf(
        address _owner)
        public
        view
        returns (uint256)
    {
        return userTotalClaimed_[_owner];
    }

    // total vested since start (claimed + unclaimed)
    function totalVested()
        external
        view
        returns (uint256)
    {
        return _totalVested(startingBalance_, 0);
    }

    // total unclaimed since start
    function totalUnclaimed()
        external
        view
        returns (uint256)
    {
        return sub(
            _totalVested(startingBalance_, 0),
            totalClaimed
        );
    }

    function _claim(
        address _owner)
        internal
    {
        uint256 vested = vestedBalanceOf(_owner);
        if (vested != 0) {
            userTotalClaimed_[_owner] = add(userTotalClaimed_[_owner], vested);
            totalClaimed = add(totalClaimed, vested);

            BZRX.transfer(
                _owner,
                vested
            );

            emit Claim(
                _owner,
                vested
            );
        }

        lastClaimTime_[_owner] = _getTimestamp();
    }

    function _totalVested(
        uint256 _proportionalSupply,
        uint256 _lastClaimTime)
        internal
        view
        returns (uint256)
    {
        uint256 currentTimeForVesting = _getTimestamp();

        if (currentTimeForVesting <= vestingCliffTimestamp ||
            _lastClaimTime >= vestingEndTimestamp ||
            currentTimeForVesting > vestingLastClaimTimestamp) {
            // time cannot be before vesting starts
            // OR all vested token has already been claimed
            // OR time cannot be after last claim date
            return 0;
        }
        if (_lastClaimTime < vestingCliffTimestamp) {
            // vesting starts at the cliff timestamp
            _lastClaimTime = vestingCliffTimestamp;
        }
        if (currentTimeForVesting > vestingEndTimestamp) {
            // vesting ends at the end timestamp
            currentTimeForVesting = vestingEndTimestamp;
        }

        uint256 timeSinceClaim = sub(currentTimeForVesting, _lastClaimTime);
        return mul(_proportionalSupply, timeSinceClaim) / vestingDurationAfterCliff_; // will never divide by 0
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Claim","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"BZRX","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"claimedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cliffDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalUnclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalVested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"vestedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"vestingBalanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vestingCliffTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vestingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vestingEndTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vestingLastClaimTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vestingStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405260006100176001600160e01b0361006a16565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6114ad8061007d6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80637a4e4ecf1161010f578063c96f14b8116100a2578063d85349f711610071578063d85349f7146104dc578063dd62ed3e146104e4578063f2fde38b14610512578063f30127a514610538576101e5565b8063c96f14b8146104bc578063caced914146104c4578063d54ad2a1146104cc578063d6ddd21b146104d4576101e5565b806395d89b41116100de57806395d89b4114610445578063981b24d01461044d578063a9059cbb1461046a578063c8de1d5614610496576101e5565b80637a4e4ecf146103e55780638129fc1c146104115780638da5cb5b146104195780638f32d59b1461043d576101e5565b80633032bbe8116101875780634e71d92d116101565780634e71d92d146103835780634ee2cd7e1461038b57806351db5688146103b757806370a08231146103bf576101e5565b80633032bbe81461032d578063313ce5671461033557806336ca03651461035357806344df8e7014610379576101e5565b80631514617e116101c35780631514617e146102df57806318160ddd146102e7578063199cbc54146102ef57806323b872dd146102f7576101e5565b806306fdde03146101ea578063095ea7b3146102675780630e2d1a2a146102a7575b600080fd5b6101f2610540565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022c578181015183820152602001610214565b50505050905090810190601f1680156102595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102936004803603604081101561027d57600080fd5b506001600160a01b03813516906020013561056d565b604080519115158252519081900360200190f35b6102cd600480360360208110156102bd57600080fd5b50356001600160a01b03166105d4565b60408051918252519081900360200190f35b6102cd610625565b6102cd61062d565b6102cd610644565b6102936004803603606081101561030d57600080fd5b506001600160a01b0381358116916020810135909116906040013561065d565b6102cd61069d565b61033d6106a5565b6040805160ff9092168252519081900360200190f35b6102cd6004803603602081101561036957600080fd5b50356001600160a01b03166106aa565b610381610702565b005b6103816107f5565b6102cd600480360360408110156103a157600080fd5b506001600160a01b038135169060200135610800565b6102cd610828565b6102cd600480360360208110156103d557600080fd5b50356001600160a01b0316610830565b610381600480360360408110156103fb57600080fd5b506001600160a01b03813516906020013561083c565b610381610965565b610421610af6565b604080516001600160a01b039092168252519081900360200190f35b610293610b05565b6101f2610b2b565b6102cd6004803603602081101561046357600080fd5b5035610b4c565b6102936004803603604081101561048057600080fd5b506001600160a01b038135169060200135610b5f565b6102cd600480360360208110156104ac57600080fd5b50356001600160a01b0316610b6c565b6102cd610b87565b6102cd610bab565b6102cd610bb3565b6102cd610bb9565b6102cd610bc1565b6102cd600480360360408110156104fa57600080fd5b506001600160a01b0381358116916020013516610bc8565b6103816004803603602081101561052857600080fd5b50356001600160a01b0316610bf3565b610421610c47565b60405180604001604052806011815260200170312d3c102b32b9ba34b733902a37b5b2b760791b81525081565b3360008181526003602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6001600160a01b0381166000908152600860205260408120546105f5610c5f565b81101561061e576106166106108461060b610c63565b610800565b82610c67565b915050610620565b505b919050565b630784ce0081565b600061063f61063a610c63565b610b4c565b905090565b600061063f6b02dfafa4e0948fa0719400006000610c67565b600061066884610cfd565b826001600160a01b0316846001600160a01b03161461068a5761068a83610cfd565b610695848484610e53565b949350505050565b63669136e081565b601281565b60006106b88261060b610c63565b90508015610620576001600160a01b0382166000908152600860205260409020546106e1610c5f565b81101561061e576106fb826106f68484610c67565b61104a565b9392505050565b63669136e061070f610c5f565b1015610755576040805162461bcd60e51b815260206004820152601060248201526f1b9bdd08199d5b1b1e481d995cdd195960821b604482015290519081900360640190fd5b61075e33610cfd565b6000610768610c63565b905060006107763383610800565b33600090815260046020526040812091925061079a9190849063ffffffff61109916565b6107b982826107a885610b4c565b60079291900363ffffffff61109916565b60408051828152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6107fe33610cfd565b565b6001600160a01b03821660009081526004602052604081206106fb908363ffffffff6111a616565b635ffd02a081565b60006105ce8243610800565b610844610b05565b610884576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6368726a60610891610c5f565b116108d2576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81526001600160a01b03841660048201526024810183905290517356d811088235f11c8920698a204a5010a788f4b39163a9059cbb9160448083019260209291908290030181600087803b15801561093557600080fd5b505af1158015610949573d6000803e3d6000fd5b505050506040513d602081101561095f57600080fd5b50505050565b600a5460ff16156109b3576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b6109e66109be610c63565b336000908152600460205260409020906b02dfafa4e0948fa07194000063ffffffff61109916565b610a0c6109f1610c63565b6007906b02dfafa4e0948fa07194000063ffffffff61109916565b604080516b02dfafa4e0948fa0719400008152905133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3604080516323b872dd60e01b81523360048201523060248201526b02dfafa4e0948fa071940000604482015290517356d811088235f11c8920698a204a5010a788f4b3916323b872dd9160648083019260209291908290030181600087803b158015610abb57600080fd5b505af1158015610acf573d6000803e3d6000fd5b505050506040513d6020811015610ae557600080fd5b5050600a805460ff19166001179055565b6005546001600160a01b031690565b6005546000906001600160a01b0316610b1c6111b2565b6001600160a01b031614905090565b604051806040016040528060058152602001640ec84b4a4b60db1b81525081565b60006105ce60078363ffffffff6111a616565b60006106fb33848461065d565b6001600160a01b031660009081526009602052604090205490565b600061063f610ba36b02dfafa4e0948fa0719400006000610c67565b60065461104a565b6368726a6081565b60065481565b635f0c68e081565b62f099c081565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b610bfb610b05565b610c3b576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b610c44816111b6565b50565b7356d811088235f11c8920698a204a5010a788f4b381565b4290565b4390565b600080610c72610c5f565b9050635ffd02a081111580610c8b575063669136e08310155b80610c9957506368726a6081115b15610ca85760009150506105ce565b635ffd02a0831015610cbc57635ffd02a092505b63669136e0811115610ccf575063669136e05b6000610cdb828561104a565b90506306943440610cec8683611257565b81610cf357fe5b0495945050505050565b6000610d08826105d4565b90508015610e2b576001600160a01b038216600090815260096020526040902054610d3390826112c7565b6001600160a01b038316600090815260096020526040902055600654610d5990826112c7565b6006556040805163a9059cbb60e01b81526001600160a01b03841660048201526024810183905290517356d811088235f11c8920698a204a5010a788f4b39163a9059cbb9160448083019260209291908290030181600087803b158015610dbf57600080fd5b505af1158015610dd3573d6000803e3d6000fd5b505050506040513d6020811015610de957600080fd5b50506040805182815290516001600160a01b038416917f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4919081900360200190a25b610e33610c5f565b6001600160a01b0390921660009081526008602052604090209190915550565b600080610e608543610800565b905082811015610eae576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742d62616c616e636560601b604482015290519081900360640190fd5b6001600160a01b0385163314801590610eec57506001600160a01b038516600090815260036020908152604080832033845290915290205460001914155b15610f8d576001600160a01b0385166000908152600360209081526040808320338452909152902054831115610f62576040805162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e742d616c6c6f77616e636560501b604482015290519081900360640190fd5b6001600160a01b03851660009081526003602090815260408083203384529091529020805484900390555b6001600160a01b0385166000908152600460205260409020610fb8904385840363ffffffff61109916565b610ff443610fcf610fc98743610800565b866112c7565b6001600160a01b0387166000908152600460205260409020919063ffffffff61109916565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b808203828111156105ce576040805162461bcd60e51b81526020600482015260146024820152737375627472616374696f6e2d6f766572666c6f7760601b604482015290519081900360640190fd5b8254806110dd57604080518082019091528381526020808201848152865460018181018955600089815293909320935160029091029093019283555191015561095f565b60008460000160018303815481106110f157fe5b6000918252602090912060029091020180549091508085111561114b57604080518082019091528581526020808201868152885460018181018b5560008b815293909320935160029091029093019283555191015561119e565b8085141561115f576001820184905561119e565b6040805162461bcd60e51b815260206004820152600f60248201526e1c185cdd0b58da1958dadc1bda5b9d608a1b604482015290519081900360640190fd5b505050505050565b60006106fb8383611313565b3390565b6001600160a01b0381166111fb5760405162461bcd60e51b81526004018080602001828103825260268152602001806114536026913960400191505060405180910390fd5b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082611266575060006105ce565b508181028183828161127457fe5b04146105ce576040805162461bcd60e51b815260206004820152601760248201527f6d756c7469706c69636174696f6e2d6f766572666c6f77000000000000000000604482015290519081900360640190fd5b808201828110156105ce576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e2d6f766572666c6f7760781b604482015290519081900360640190fd5b8154600090806113275760009150506105ce565b835460001982019060009086908390811061133e57fe5b9060005260206000209060020201905080600001548510611367576001015492506105ce915050565b826001148061139657508560000160008154811061138157fe5b90600052602060002090600202016000015485105b156113a757600093505050506105ce565b600060001983015b818114611424578754600283830160010104906000908a90839081106113d157fe5b600091825260209091206002909102018054909150808a11156113f65782945061141c565b808a10156114095760018303935061141c565b506001015496506105ce95505050505050565b5050506113af565b87600001828154811061143357fe5b906000526020600020906002020160010154955050505050509291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820ebedd7f9e77f5dc76d72dad591122cc69cabd43678fcab9d111893b83fd48e5f64736f6c63430005110032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80637a4e4ecf1161010f578063c96f14b8116100a2578063d85349f711610071578063d85349f7146104dc578063dd62ed3e146104e4578063f2fde38b14610512578063f30127a514610538576101e5565b8063c96f14b8146104bc578063caced914146104c4578063d54ad2a1146104cc578063d6ddd21b146104d4576101e5565b806395d89b41116100de57806395d89b4114610445578063981b24d01461044d578063a9059cbb1461046a578063c8de1d5614610496576101e5565b80637a4e4ecf146103e55780638129fc1c146104115780638da5cb5b146104195780638f32d59b1461043d576101e5565b80633032bbe8116101875780634e71d92d116101565780634e71d92d146103835780634ee2cd7e1461038b57806351db5688146103b757806370a08231146103bf576101e5565b80633032bbe81461032d578063313ce5671461033557806336ca03651461035357806344df8e7014610379576101e5565b80631514617e116101c35780631514617e146102df57806318160ddd146102e7578063199cbc54146102ef57806323b872dd146102f7576101e5565b806306fdde03146101ea578063095ea7b3146102675780630e2d1a2a146102a7575b600080fd5b6101f2610540565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022c578181015183820152602001610214565b50505050905090810190601f1680156102595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102936004803603604081101561027d57600080fd5b506001600160a01b03813516906020013561056d565b604080519115158252519081900360200190f35b6102cd600480360360208110156102bd57600080fd5b50356001600160a01b03166105d4565b60408051918252519081900360200190f35b6102cd610625565b6102cd61062d565b6102cd610644565b6102936004803603606081101561030d57600080fd5b506001600160a01b0381358116916020810135909116906040013561065d565b6102cd61069d565b61033d6106a5565b6040805160ff9092168252519081900360200190f35b6102cd6004803603602081101561036957600080fd5b50356001600160a01b03166106aa565b610381610702565b005b6103816107f5565b6102cd600480360360408110156103a157600080fd5b506001600160a01b038135169060200135610800565b6102cd610828565b6102cd600480360360208110156103d557600080fd5b50356001600160a01b0316610830565b610381600480360360408110156103fb57600080fd5b506001600160a01b03813516906020013561083c565b610381610965565b610421610af6565b604080516001600160a01b039092168252519081900360200190f35b610293610b05565b6101f2610b2b565b6102cd6004803603602081101561046357600080fd5b5035610b4c565b6102936004803603604081101561048057600080fd5b506001600160a01b038135169060200135610b5f565b6102cd600480360360208110156104ac57600080fd5b50356001600160a01b0316610b6c565b6102cd610b87565b6102cd610bab565b6102cd610bb3565b6102cd610bb9565b6102cd610bc1565b6102cd600480360360408110156104fa57600080fd5b506001600160a01b0381358116916020013516610bc8565b6103816004803603602081101561052857600080fd5b50356001600160a01b0316610bf3565b610421610c47565b60405180604001604052806011815260200170312d3c102b32b9ba34b733902a37b5b2b760791b81525081565b3360008181526003602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6001600160a01b0381166000908152600860205260408120546105f5610c5f565b81101561061e576106166106108461060b610c63565b610800565b82610c67565b915050610620565b505b919050565b630784ce0081565b600061063f61063a610c63565b610b4c565b905090565b600061063f6b02dfafa4e0948fa0719400006000610c67565b600061066884610cfd565b826001600160a01b0316846001600160a01b03161461068a5761068a83610cfd565b610695848484610e53565b949350505050565b63669136e081565b601281565b60006106b88261060b610c63565b90508015610620576001600160a01b0382166000908152600860205260409020546106e1610c5f565b81101561061e576106fb826106f68484610c67565b61104a565b9392505050565b63669136e061070f610c5f565b1015610755576040805162461bcd60e51b815260206004820152601060248201526f1b9bdd08199d5b1b1e481d995cdd195960821b604482015290519081900360640190fd5b61075e33610cfd565b6000610768610c63565b905060006107763383610800565b33600090815260046020526040812091925061079a9190849063ffffffff61109916565b6107b982826107a885610b4c565b60079291900363ffffffff61109916565b60408051828152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6107fe33610cfd565b565b6001600160a01b03821660009081526004602052604081206106fb908363ffffffff6111a616565b635ffd02a081565b60006105ce8243610800565b610844610b05565b610884576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6368726a60610891610c5f565b116108d2576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81526001600160a01b03841660048201526024810183905290517356d811088235f11c8920698a204a5010a788f4b39163a9059cbb9160448083019260209291908290030181600087803b15801561093557600080fd5b505af1158015610949573d6000803e3d6000fd5b505050506040513d602081101561095f57600080fd5b50505050565b600a5460ff16156109b3576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b6109e66109be610c63565b336000908152600460205260409020906b02dfafa4e0948fa07194000063ffffffff61109916565b610a0c6109f1610c63565b6007906b02dfafa4e0948fa07194000063ffffffff61109916565b604080516b02dfafa4e0948fa0719400008152905133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3604080516323b872dd60e01b81523360048201523060248201526b02dfafa4e0948fa071940000604482015290517356d811088235f11c8920698a204a5010a788f4b3916323b872dd9160648083019260209291908290030181600087803b158015610abb57600080fd5b505af1158015610acf573d6000803e3d6000fd5b505050506040513d6020811015610ae557600080fd5b5050600a805460ff19166001179055565b6005546001600160a01b031690565b6005546000906001600160a01b0316610b1c6111b2565b6001600160a01b031614905090565b604051806040016040528060058152602001640ec84b4a4b60db1b81525081565b60006105ce60078363ffffffff6111a616565b60006106fb33848461065d565b6001600160a01b031660009081526009602052604090205490565b600061063f610ba36b02dfafa4e0948fa0719400006000610c67565b60065461104a565b6368726a6081565b60065481565b635f0c68e081565b62f099c081565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b610bfb610b05565b610c3b576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b610c44816111b6565b50565b7356d811088235f11c8920698a204a5010a788f4b381565b4290565b4390565b600080610c72610c5f565b9050635ffd02a081111580610c8b575063669136e08310155b80610c9957506368726a6081115b15610ca85760009150506105ce565b635ffd02a0831015610cbc57635ffd02a092505b63669136e0811115610ccf575063669136e05b6000610cdb828561104a565b90506306943440610cec8683611257565b81610cf357fe5b0495945050505050565b6000610d08826105d4565b90508015610e2b576001600160a01b038216600090815260096020526040902054610d3390826112c7565b6001600160a01b038316600090815260096020526040902055600654610d5990826112c7565b6006556040805163a9059cbb60e01b81526001600160a01b03841660048201526024810183905290517356d811088235f11c8920698a204a5010a788f4b39163a9059cbb9160448083019260209291908290030181600087803b158015610dbf57600080fd5b505af1158015610dd3573d6000803e3d6000fd5b505050506040513d6020811015610de957600080fd5b50506040805182815290516001600160a01b038416917f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4919081900360200190a25b610e33610c5f565b6001600160a01b0390921660009081526008602052604090209190915550565b600080610e608543610800565b905082811015610eae576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742d62616c616e636560601b604482015290519081900360640190fd5b6001600160a01b0385163314801590610eec57506001600160a01b038516600090815260036020908152604080832033845290915290205460001914155b15610f8d576001600160a01b0385166000908152600360209081526040808320338452909152902054831115610f62576040805162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e742d616c6c6f77616e636560501b604482015290519081900360640190fd5b6001600160a01b03851660009081526003602090815260408083203384529091529020805484900390555b6001600160a01b0385166000908152600460205260409020610fb8904385840363ffffffff61109916565b610ff443610fcf610fc98743610800565b866112c7565b6001600160a01b0387166000908152600460205260409020919063ffffffff61109916565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b808203828111156105ce576040805162461bcd60e51b81526020600482015260146024820152737375627472616374696f6e2d6f766572666c6f7760601b604482015290519081900360640190fd5b8254806110dd57604080518082019091528381526020808201848152865460018181018955600089815293909320935160029091029093019283555191015561095f565b60008460000160018303815481106110f157fe5b6000918252602090912060029091020180549091508085111561114b57604080518082019091528581526020808201868152885460018181018b5560008b815293909320935160029091029093019283555191015561119e565b8085141561115f576001820184905561119e565b6040805162461bcd60e51b815260206004820152600f60248201526e1c185cdd0b58da1958dadc1bda5b9d608a1b604482015290519081900360640190fd5b505050505050565b60006106fb8383611313565b3390565b6001600160a01b0381166111fb5760405162461bcd60e51b81526004018080602001828103825260268152602001806114536026913960400191505060405180910390fd5b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082611266575060006105ce565b508181028183828161127457fe5b04146105ce576040805162461bcd60e51b815260206004820152601760248201527f6d756c7469706c69636174696f6e2d6f766572666c6f77000000000000000000604482015290519081900360640190fd5b808201828110156105ce576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e2d6f766572666c6f7760781b604482015290519081900360640190fd5b8154600090806113275760009150506105ce565b835460001982019060009086908390811061133e57fe5b9060005260206000209060020201905080600001548510611367576001015492506105ce915050565b826001148061139657508560000160008154811061138157fe5b90600052602060002090600202016000015485105b156113a757600093505050506105ce565b600060001983015b818114611424578754600283830160010104906000908a90839081106113d157fe5b600091825260209091206002909102018054909150808a11156113f65782945061141c565b808a10156114095760018303935061141c565b506001015496506105ce95505050505050565b5050506113af565b87600001828154811061143357fe5b906000526020600020906002020160010154955050505050509291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820ebedd7f9e77f5dc76d72dad591122cc69cabd43678fcab9d111893b83fd48e5f64736f6c63430005110032

Deployed Bytecode Sourcemap

12310:7347:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12310:7347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12459:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12459:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9678:252;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9678:252:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16297:363;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16297:363:0;-1:-1:-1;;;;;16297:363:0;;:::i;:::-;;;;;;;;;;;;;;;;12698:65;;;:::i;15881:143::-;;;:::i;17546:146::-;;;:::i;14343:345::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14343:345:0;;;;;;;;;;;;;;;;;:::i;13071:95::-;;;:::i;12561:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16706:558;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16706:558:0;-1:-1:-1;;;;;16706:558:0;;:::i;14911:594::-;;;:::i;:::-;;14731:75;;;:::i;9258:215::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9258:215:0;;;;;;;;:::i;12971:93::-;;;:::i;9084:166::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9084:166:0;-1:-1:-1;;;;;9084:166:0;;:::i;15590:283::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15590:283:0;;;;;;;;:::i;13774:561::-;;;:::i;2894:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2894:79:0;;;;;;;;;;;;;;3240:94;;;:::i;12515:39::-;;;:::i;16032:187::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16032:187:0;;:::i;9938:224::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9938:224:0;;;;;;;;:::i;17318:165::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17318:165:0;-1:-1:-1;;;;;17318:165:0;;:::i;17736:205::-;;;:::i;13173:89::-;;;:::i;13271:27::-;;;:::i;12884:66::-;;;:::i;12605:65::-;;;:::i;9481:189::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9481:189:0;;;;;;;;;;:::i;3489:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3489:109:0;-1:-1:-1;;;;;3489:109:0;;:::i;13336:80::-;;;:::i;12459:49::-;;;;;;;;;;;;;;-1:-1:-1;;;12459:49:0;;;;:::o;9678:252::-;9816:10;9782:4;9804:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;9804:33:0;;;;;;;;;;;:42;;;9862:38;;;;;;;9782:4;;9804:33;;9816:10;;9862:38;;;;;;;;-1:-1:-1;9918:4:0;9678:252;;;;;:::o;16297:363::-;-1:-1:-1;;;;;16441:22:0;;16396:7;16441:22;;;:14;:22;;;;;;16490:15;:13;:15::i;:::-;16478:9;:27;16474:179;;;16529:112;16560:38;16572:6;16580:17;:15;:17::i;:::-;16560:11;:38::i;:::-;16617:9;16529:12;:112::i;:::-;16522:119;;;;;16474:179;16297:363;;;;;:::o;12698:65::-;12754:9;12698:65;:::o;15881:143::-;15952:7;15984:32;15998:17;:15;:17::i;:::-;15984:13;:32::i;:::-;15977:39;;15881:143;:::o;17546:146::-;17619:7;17651:33;13470:12;17682:1;17651:12;:33::i;14343:345::-;14471:4;14493:13;14500:5;14493:6;:13::i;:::-;14530:3;-1:-1:-1;;;;;14521:12:0;:5;-1:-1:-1;;;;;14521:12:0;;14517:56;;14550:11;14557:3;14550:6;:11::i;:::-;14592:88;14625:5;14645:3;14663:6;14592:18;:88::i;:::-;14585:95;14343:345;-1:-1:-1;;;;14343:345:0:o;13071:95::-;13127:39;13071:95;:::o;12561:35::-;12594:2;12561:35;:::o;16706:558::-;16806:15;16849:38;16861:6;16869:17;:15;:17::i;16849:38::-;16839:48;-1:-1:-1;16902:12:0;;16898:359;;-1:-1:-1;;;;;16951:22:0;;16931:17;16951:22;;;:14;:22;;;;;;17004:15;:13;:15::i;:::-;16992:9;:27;16988:258;;;17050:180;17076:7;17106:105;17145:7;17179:9;17106:12;:105::i;:::-;17050:3;:180::i;:::-;17040:190;16706:558;-1:-1:-1;;;16706:558:0:o;14911:594::-;13127:39;14969:15;:13;:15::i;:::-;:38;;14961:67;;;;;-1:-1:-1;;;14961:67:0;;;;;;;;;;;;-1:-1:-1;;;14961:67:0;;;;;;;;;;;;;;;15041:18;15048:10;15041:6;:18::i;:::-;15072:20;15095:17;:15;:17::i;:::-;15072:40;;15123:21;15147:37;15159:10;15171:12;15147:11;:37::i;:::-;15212:10;15252:1;15195:28;;;:16;:28;;;;;15123:61;;-1:-1:-1;15195:59:0;;:28;15238:12;;15195:59;:42;:59;:::i;:::-;15265:92;15299:12;15343:13;15313:27;15327:12;15313:13;:27::i;:::-;15265:19;;:92;15313:43;;15265:92;:33;:92;:::i;:::-;15400:97;;;;;;;;15456:1;;15423:10;;15400:97;;;;;;;;;14911:594;;:::o;14731:75::-;14780:18;14787:10;14780:6;:18::i;:::-;14731:75::o;9258:215::-;-1:-1:-1;;;;;9416:24:0;;9384:7;9416:24;;;:16;:24;;;;;:49;;9452:12;9416:49;:35;:49;:::i;12971:93::-;13027:37;12971:93;:::o;9084:166::-;9177:7;9209:33;9221:6;9229:12;9209:11;:33::i;15590:283::-;3106:9;:7;:9::i;:::-;3098:34;;;;;-1:-1:-1;;;3098:34:0;;;;;;;;;;;;-1:-1:-1;;;3098:34:0;;;;;;;;;;;;;;;13229:33;15722:15;:13;:15::i;:::-;:43;15714:68;;;;;-1:-1:-1;;;15714:68:0;;;;;;;;;;;;-1:-1:-1;;;15714:68:0;;;;;;;;;;;;;;;15795:70;;;-1:-1:-1;;;15795:70:0;;-1:-1:-1;;;;;15795:70:0;;;;;;;;;;;;;;13373:42;;15795:13;;:70;;;;;;;;;;;;;;-1:-1:-1;13373:42:0;15795:70;;;5:2:-1;;;;30:1;27;20:12;5:2;15795:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15795:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;15590:283:0:o;13774:561::-;13839:14;;;;13838:15;13830:47;;;;;-1:-1:-1;;;13830:47:0;;;;;;;;;;;;-1:-1:-1;;;13830:47:0;;;;;;;;;;;;;;;13890:79;13933:17;:15;:17::i;:::-;13907:10;13890:28;;;;:16;:28;;;;;;13470:12;13890:79;:42;:79;:::i;:::-;13980:70;14014:17;:15;:17::i;:::-;13980:19;;13470:12;13980:70;:33;:70;:::i;:::-;14068:100;;;13470:12;14068:100;;;;14116:10;;14099:1;;14068:100;;;;;;;;;14181:112;;;-1:-1:-1;;;14181:112:0;;14213:10;14181:112;;;;14246:4;14181:112;;;;13470:12;14181:112;;;;;;13373:42;;14181:17;;:112;;;;;;;;;;;;;;-1:-1:-1;13373:42:0;14181:112;;;5:2:-1;;;;30:1;27;20:12;5:2;14181:112:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14181:112:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;14306:14:0;:21;;-1:-1:-1;;14306:21:0;14323:4;14306:21;;;13774:561::o;2894:79::-;2959:6;;-1:-1:-1;;;;;2959:6:0;2894:79;:::o;3240:94::-;3320:6;;3280:4;;-1:-1:-1;;;;;3320:6:0;3304:12;:10;:12::i;:::-;-1:-1:-1;;;;;3304:22:0;;3297:29;;3240:94;:::o;12515:39::-;;;;;;;;;;;;;;-1:-1:-1;;;12515:39:0;;;;:::o;16032:187::-;16135:7;16167:44;:19;16198:12;16167:44;:30;:44;:::i;9938:224::-;10038:4;10067:87;10094:10;10119:3;10137:6;10067:12;:87::i;17318:165::-;-1:-1:-1;;;;;17450:25:0;17418:7;17450:25;;;:17;:25;;;;;;;17318:165::o;17736:205::-;17812:7;17844:89;17862:33;13470:12;17893:1;17862:12;:33::i;:::-;17910:12;;17844:3;:89::i;13173:::-;13229:33;13173:89;:::o;13271:27::-;;;;:::o;12884:66::-;12940:10;12884:66;:::o;12605:65::-;12662:8;12605:65;:::o;9481:189::-;-1:-1:-1;;;;;9633:19:0;;;9601:7;9633:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;9481:189::o;3489:109::-;3106:9;:7;:9::i;:::-;3098:34;;;;;-1:-1:-1;;;3098:34:0;;;;;;;;;;;;-1:-1:-1;;;3098:34:0;;;;;;;;;;;;;;;3562:28;3581:8;3562:18;:28::i;:::-;3489:109;:::o;13336:80::-;13373:42;13336:80;:::o;11322:130::-;11429:15;11322:130;:::o;11185:129::-;11294:12;11185:129;:::o;18496:1158::-;18640:7;18665:29;18697:15;:13;:15::i;:::-;18665:47;-1:-1:-1;13027:37:0;18729:46;;;;:100;;-1:-1:-1;13127:39:0;18792:37;;;18729:100;:166;;;-1:-1:-1;13229:33:0;18846:49;;18729:166;18725:377;;;19089:1;19082:8;;;;;18725:377;13027:37;19116:38;;19112:163;;;13027:37;;-1:-1:-1;19112:163:0;13127:39;19289:43;;19285:169;;;-1:-1:-1;13127:39:0;19285:169;19466:22;19491:42;19495:21;19518:14;19491:3;:42::i;:::-;19466:67;;12845:9;19551:40;19555:19;19576:14;19551:3;:40::i;:::-;:69;;;;;;;18496:1158;-1:-1:-1;;;;;18496:1158:0:o;17949:539::-;18025:14;18042:23;18058:6;18042:15;:23::i;:::-;18025:40;-1:-1:-1;18080:11:0;;18076:352;;-1:-1:-1;;;;;18140:25:0;;;;;;:17;:25;;;;;;18136:38;;18167:6;18136:3;:38::i;:::-;-1:-1:-1;;;;;18108:25:0;;;;;;:17;:25;;;;;:66;18208:12;;18204:25;;18222:6;18204:3;:25::i;:::-;18189:12;:40;18246:78;;;-1:-1:-1;;;18246:78:0;;-1:-1:-1;;;;;18246:78:0;;;;;;;;;;;;;;13373:42;;18246:13;;:78;;;;;;;;;;;;;;-1:-1:-1;13373:42:0;18246:78;;;5:2:-1;;;;30:1;27;20:12;5:2;18246:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18246:78:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;18346:70:0;;;;;;;;-1:-1:-1;;;;;18346:70:0;;;;;;;;;18246:78;18346:70;;;18076:352;18465:15;:13;:15::i;:::-;-1:-1:-1;;;;;18440:22:0;;;;;;;:14;:22;;;;;:40;;;;-1:-1:-1;17949:539:0:o;10170:1007::-;10298:4;10320:27;10350:32;10362:5;10369:12;10350:11;:32::i;:::-;10320:62;;10424:6;10401:19;:29;;10393:62;;;;;-1:-1:-1;;;10393:62:0;;;;;;;;;;;;-1:-1:-1;;;10393:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10472:19:0;;10481:10;10472:19;;;;:65;;-1:-1:-1;;;;;;10495:18:0;;;;;;:11;:18;;;;;;;;10514:10;10495:30;;;;;;;;-1:-1:-1;;10495:42:0;;10472:65;10468:285;;;-1:-1:-1;;;;;10562:18:0;;;;;;:11;:18;;;;;;;;10581:10;10562:30;;;;;;;;:40;-1:-1:-1;10562:40:0;10554:75;;;;;-1:-1:-1;;;10554:75:0;;;;;;;;;;;;-1:-1:-1;;;10554:75:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10677:18:0;;;;;;:11;:18;;;;;;;;10696:10;10677:30;;;;;;;;;:39;;;10644:72;;10468:285;-1:-1:-1;;;;;10765:23:0;;;;;;:16;:23;;;;;:143;;10817:12;10844:28;;;10765:143;:37;:143;:::i;:::-;10921:180;10971:12;10998:92;11020:30;11032:3;11037:12;11020:11;:30::i;:::-;11069:6;10998:3;:92::i;:::-;-1:-1:-1;;;;;10921:21:0;;;;;;:16;:21;;;;;;:180;;:35;:180;:::i;:::-;11135:3;-1:-1:-1;;;;;11119:28:0;11128:5;-1:-1:-1;;;;;11119:28:0;;11140:6;11119:28;;;;;;;;;;;;;;;;;;-1:-1:-1;11165:4:0;;10170:1007;-1:-1:-1;;;;10170:1007:0:o;11653:188::-;11797:5;;;11792:16;;;;11784:49;;;;;-1:-1:-1;;;11784:49:0;;;;;;;;;;;;-1:-1:-1;;;11784:49:0;;;;;;;;;;;;;;5194:779;5350:20;;5385:11;5381:585;;5432:25;;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;5413:13:0;:45;;;;;;;;;;;;;;;;;;;;;;;5381:585;;;5491:36;5530:5;:13;;5553:1;5544:6;:10;5530:25;;;;;;;;;;;;;;;;;;;;;5602:22;;5530:25;;-1:-1:-1;5645:29:0;;;5641:314;;;5714:25;;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;5695:13:0;:45;;;;;;;;;;;;;;;;;;;;;;;5641:314;;;5775:21;5766:5;:30;5762:193;;;5817:23;;;:32;;;5762:193;;;5914:25;;;-1:-1:-1;;;5914:25:0;;;;;;;;;;;;-1:-1:-1;;;5914:25:0;;;;;;;;;;;;;;5762:193;5381:585;;5194:779;;;;:::o;5981:192::-;6108:7;6140:25;6152:5;6159;6140:11;:25::i;1685:98::-;1765:10;1685:98;:::o;3704:229::-;-1:-1:-1;;;;;3778:22:0;;3770:73;;;;-1:-1:-1;;;3770:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3880:6;;3859:38;;-1:-1:-1;;;;;3859:38:0;;;;3880:6;;3859:38;;3880:6;;3859:38;3908:6;:17;;-1:-1:-1;;;;;;3908:17:0;-1:-1:-1;;;;;3908:17:0;;;;;;;;;;3704:229::o;11849:252::-;11953:9;11984:6;11980:47;;-1:-1:-1;12014:1:0;12007:8;;11980:47;-1:-1:-1;12050:5:0;;;12064:1;12059;12050:5;12059:1;12045:15;;;;;:20;12037:56;;;;;-1:-1:-1;;;12037:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11460:185;11604:5;;;11599:16;;;;11591:46;;;;;-1:-1:-1;;;11591:46:0;;;;;;;;;;;;-1:-1:-1;;;11591:46:0;;;;;;;;;;;;;;6728:1765;6897:20;;6855:7;;7137:11;7133:52;;7172:1;7165:8;;;;;7133:52;7308:24;;-1:-1:-1;;7251:10:0;;;7231:17;;7308:5;;7251:10;;7308:24;;;;;;;;;;;;;;;;7272:60;;7356:14;:19;;;7347:5;:28;7343:88;;7399:20;;;;-1:-1:-1;7392:27:0;;-1:-1:-1;;7392:27:0;7343:88;7536:6;7546:1;7536:11;:44;;;;7559:5;:13;;7573:1;7559:16;;;;;;;;;;;;;;;;;;:21;;;7551:5;:29;7536:44;7532:85;;;7604:1;7597:8;;;;;;;7532:85;7755:11;-1:-1:-1;;7796:13:0;;7822:620;7837:3;7829:4;:11;7822:620;;7961:18;;7890:1;7872:10;;;7885:1;7872:14;7871:20;;7857:11;;7961:5;;7871:20;;7961:18;;;;;;;;;;;;;;;;;;;8012:15;;7961:18;;-1:-1:-1;8048:15:0;;;8044:387;;;8090:3;8084:9;;8044:387;;;8127:7;8119:5;:15;8115:316;;;8313:1;8307:3;:7;8300:14;;8115:316;;;-1:-1:-1;8399:16:0;;;;-1:-1:-1;8392:23:0;;-1:-1:-1;;;;;;8392:23:0;8115:316;7822:620;;;;;;8461:5;:13;;8475:3;8461:18;;;;;;;;;;;;;;;;;;:24;;;8454:31;;;;;;;6728:1765;;;;:::o

Swarm Source

bzzr://ebedd7f9e77f5dc76d72dad591122cc69cabd43678fcab9d111893b83fd48e5f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.