Token Sperax

 

Overview [ERC-20]

Max Total Supply:
5,000,000,000 SPA

Holders:
3,769 (0.00%)

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Sperax token contract has migrated to 0xb4a3b0faf0ab53df58001804dda5bfc6a3d59008

# Exchange Pair Price  24H Volume % Volume
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xfb931d41a744be590e8b51e2e343bbe030ac4f93

Contract Name:
SperaxToken

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-24
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {

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

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

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

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

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

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

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

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

abstract contract Context {
    function _msgSender() internal view returns (address) {
        return msg.sender;
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
}

/**
 * @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.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * 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(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 private _totalSupply;

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        require((allowance(_msgSender(), spender) == 0) || (amount == 0), "ERC20: change allowance use increaseAllowance or decreaseAllowance instead");
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

contract SperaxToken is ERC20, Pausable, Ownable {

    mapping(address => TimeLock) private _timelock;

    event BlockTransfer(address indexed account);
    event AllowTransfer(address indexed account);

    struct TimeLock {
        uint256 releaseTime;
        uint256 amount;
    }

    /**
     * @dev Initialize the contract give all tokens to the deployer
     */
    constructor(string memory _name, string memory _symbol, uint8 _decimals, uint256 _initialSupply) public {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        _mint(_msgSender(), _initialSupply * (10 ** uint256(_decimals)));
    }

    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public {
        uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "SperaxToken: burn amount exceeds allowance");

        _approve(account, _msgSender(), decreasedAllowance);
        _burn(account, amount);
    }


    /**
     * @dev View `account` locked information
     */
    function timelockOf(address account) public view returns(uint256 releaseTime, uint256 amount) {
        TimeLock memory timelock = _timelock[account];
        return (timelock.releaseTime, timelock.amount);
    }

    /**
     * @dev Transfer to the "recipient" some specified 'amount' that is locked until "releaseTime"
     * @notice only Owner call
     */
    function transferWithLock(address recipient, uint256 amount, uint256 releaseTime) public onlyOwner returns (bool) {
        require(recipient != address(0), "SperaxToken: transferWithLock to zero address");
        require(releaseTime > block.timestamp, "SperaxToken: release time before lock time");
        require(_timelock[recipient].releaseTime == 0, "SperaxToken: already locked");

        TimeLock memory timelock = TimeLock({
            releaseTime : releaseTime,
            amount      : amount
        });
        _timelock[recipient] = timelock;

        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev Release the specified `amount` of locked amount
     * @notice only Owner call
     */
    function release(address account, uint256 releaseAmount) public onlyOwner {
        require(account != address(0), "SperaxToken: release zero address");

        TimeLock storage timelock = _timelock[account];
        timelock.amount = timelock.amount.sub(releaseAmount);
        if(timelock.amount == 0) {
            timelock.releaseTime = 0;
        }
    }

    /**
     * @dev Triggers stopped state.
     * @notice only Owner call
     */
    function pause() public onlyOwner {
        _pause();
    }

    /**
     * @dev Returns to normal state.
     * @notice only Owner call
     */
    function unpause() public onlyOwner {
        _unpause();
    }

    /**
     * @dev Batch transfer amount to recipient
     * @notice that excessive gas consumption causes transaction revert
     */
    function batchTransfer(address[] memory recipients, uint256[] memory amounts) public {
        require(recipients.length > 0, "SperaxToken: least one recipient address");
        require(recipients.length == amounts.length, "SperaxToken: number of recipient addresses does not match the number of tokens");

        for(uint256 i = 0; i < recipients.length; ++i) {
            _transfer(_msgSender(), recipients[i], amounts[i]);
        }
    }

    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     * - accounts must not trigger the locked `amount` during the locked period.
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal override {
        require(!paused(), "SperaxToken: token transfer while paused");

        // Check whether the locked amount is triggered
        TimeLock storage timelock = _timelock[from];
        if(timelock.releaseTime != 0 && balanceOf(from).sub(amount) < timelock.amount) {
            require(block.timestamp >= timelock.releaseTime, "SperaxToken: current time is before from account release time");

            // Update the locked `amount` if the current time reaches the release time
            timelock.amount = balanceOf(from).sub(amount);
            if(timelock.amount == 0) {
                timelock.releaseTime = 0;
            }
        }

        super._beforeTokenTransfer(from, to, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AllowTransfer","type":"event"},{"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":"account","type":"address"}],"name":"BlockTransfer","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"releaseAmount","type":"uint256"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"timelockOf","outputs":[{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"releaseTime","type":"uint256"}],"name":"transferWithLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200336738038062003367833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190805190602001909291905050506000600660006101000a81548160ff0219169083151502179055506000620001f96200031860201b60201c565b905080600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508360029080519060200190620002b0929190620008bd565b508260039080519060200190620002c9929190620008bd565b5081600460006101000a81548160ff021916908360ff1602179055506200030e620002f96200031860201b60201c565b8360ff16600a0a83026200032060201b60201c565b5050505062000963565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620003d860008383620004fe60201b60201c565b620003f481600554620006ba60201b62001a8a1790919060201c565b60058190555062000452816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620006ba60201b62001a8a1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6200050e6200074360201b60201c565b1562000566576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180620033026028913960400191505060405180910390fd5b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015414158015620005eb57508060010154620005e983620005d5876200075a60201b60201c565b620007a260201b62001b121790919060201c565b105b156200069c57806000015442101562000650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806200332a603d913960400191505060405180910390fd5b6200067a8262000666866200075a60201b60201c565b620007a260201b62001b121790919060201c565b81600101819055506000816001015414156200069b57600081600001819055505b5b620006b4848484620007f460201b62001b5c1760201c565b50505050565b60008082840190508381101562000739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600660009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000620007ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620007f960201b60201c565b905092915050565b505050565b6000838311158290620008aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200086e57808201518184015260208101905062000851565b50505050905090810190601f1680156200089c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200090057805160ff191683800117855562000931565b8280016001018555821562000931579182015b828111156200093057825182559160200191906001019062000913565b5b50905062000940919062000944565b5090565b5b808211156200095f57600081600090555060010162000945565b5090565b61298f80620009736000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063a457c2d71161007c578063a457c2d7146106c3578063a9059cbb14610727578063c1708ad41461078b578063dd62ed3e146107ea578063de6baccb14610862578063f2fde38b146108d05761014d565b8063715018a61461045e57806379cc6790146104685780638456cb59146104b657806388d695b2146104c05780638da5cb5b1461060c57806395d89b41146106405761014d565b8063313ce56711610115578063313ce56714610329578063395093511461034a5780633f4ba83a146103ae57806342966c68146103b85780635c975abb146103e657806370a08231146104065761014d565b80630357371d1461015257806306fdde03146101a0578063095ea7b31461022357806318160ddd1461028757806323b872dd146102a5575b600080fd5b61019e6004803603604081101561016857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610914565b005b6101a8610ae3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e85780820151818401526020810190506101cd565b50505050905090810190601f1680156102155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61026f6004803603604081101561023957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b81565b60405180821515815260200191505060405180910390f35b61028f610c12565b6040518082815260200191505060405180910390f35b610311600480360360608110156102bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c1c565b60405180821515815260200191505060405180910390f35b610331610cf5565b604051808260ff16815260200191505060405180910390f35b6103966004803603604081101561036057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d08565b60405180821515815260200191505060405180910390f35b6103b6610dbb565b005b6103e4600480360360208110156103ce57600080fd5b8101908080359060200190929190505050610e8f565b005b6103ee610ea3565b60405180821515815260200191505060405180910390f35b6104486004803603602081101561041c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eba565b6040518082815260200191505060405180910390f35b610466610f02565b005b6104b46004803603604081101561047e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108d565b005b6104be6110ef565b005b61060a600480360360408110156104d657600080fd5b81019080803590602001906401000000008111156104f357600080fd5b82018360208201111561050557600080fd5b8035906020019184602083028401116401000000008311171561052757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561058757600080fd5b82018360208201111561059957600080fd5b803590602001918460208302840111640100000000831117156105bb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506111c3565b005b6106146112cb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106486112f5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561068857808201518184015260208101905061066d565b50505050905090810190601f1680156106b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61070f600480360360408110156106d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611393565b60405180821515815260200191505060405180910390f35b6107736004803603604081101561073d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611460565b60405180821515815260200191505060405180910390f35b6107cd600480360360208110156107a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061147e565b604051808381526020018281526020019250505060405180910390f35b61084c6004803603604081101561080057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114fd565b6040518082815260200191505060405180910390f35b6108b86004803603606081101561087857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611584565b60405180821515815260200191505060405180910390f35b610912600480360360208110156108e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061187a565b005b61091c611b61565b73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806127316021913960400191505060405180910390fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610abe828260010154611b1290919063ffffffff16565b8160010181905550600081600101541415610ade57600081600001819055505b505050565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b795780601f10610b4e57610100808354040283529160200191610b79565b820191906000526020600020905b815481529060010190602001808311610b5c57829003601f168201915b505050505081565b600080610b95610b8f611b61565b856114fd565b1480610ba15750600082145b610bf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604a8152602001806128ae604a913960600191505060405180910390fd5b610c08610c01611b61565b8484611b69565b6001905092915050565b6000600554905090565b6000610c29848484611d60565b610cea84610c35611b61565b610ce5856040518060600160405280602881526020016127a660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c9b611b61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120219092919063ffffffff16565b611b69565b600190509392505050565b600460009054906101000a900460ff1681565b6000610db1610d15611b61565b84610dac8560016000610d26611b61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8a90919063ffffffff16565b611b69565b6001905092915050565b610dc3611b61565b73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610e8d6120e1565b565b610ea0610e9a611b61565b826121d4565b50565b6000600660009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f0a611b61565b73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006110cc826040518060600160405280602a815260200161277c602a91396110bd866110b8611b61565b6114fd565b6120219092919063ffffffff16565b90506110e0836110da611b61565b83611b69565b6110ea83836121d4565b505050565b6110f7611b61565b73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6111c1612398565b565b600082511161121d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806127ce6028913960400191505060405180910390fd5b8051825114611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604e8152602001806127f6604e913960600191505060405180910390fd5b60005b82518110156112c6576112bb61128e611b61565b84838151811061129a57fe5b60200260200101518484815181106112ae57fe5b6020026020010151611d60565b80600101905061127a565b505050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561138b5780601f106113605761010080835404028352916020019161138b565b820191906000526020600020905b81548152906001019060200180831161136e57829003601f168201915b505050505081565b60006114566113a0611b61565b846114518560405180606001604052806025815260200161293560259139600160006113ca611b61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120219092919063ffffffff16565b611b69565b6001905092915050565b600061147461146d611b61565b8484611d60565b6001905092915050565b60008061148961260e565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050806000015181602001519250925050915091565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061158e611b61565b73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611650576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806126dc602d913960400191505060405180910390fd5b42821161172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612752602a913960400191505060405180910390fd5b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154146117e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f537065726178546f6b656e3a20616c7265616479206c6f636b6564000000000081525060200191505060405180910390fd5b6117ee61260e565b604051806040016040528084815260200185815250905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015590505061186e611867611b61565b8686611d60565b60019150509392505050565b611882611b61565b73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061266e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828401905083811015611b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000611b5483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612021565b905092915050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061288a6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806126946022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611de6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806128656025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806126296023913960400191505060405180910390fd5b611e7783838361248c565b611ee2816040518060600160405280602681526020016126b6602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120219092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f75816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008383111582906120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612093578082015181840152602081019050612078565b50505050905090810190601f1680156120c05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600660009054906101000a900460ff16612163576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6121a7611b61565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561225a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806128446021913960400191505060405180910390fd5b6122668260008361248c565b6122d18160405180606001604052806022815260200161264c602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120219092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061232881600554611b1290919063ffffffff16565b600581905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600660009054906101000a900460ff161561241b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861245f611b61565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b612494610ea3565b156124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806127096028913960400191505060405180910390fd5b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541415801561255f5750806001015461255d8361254f87610eba565b611b1290919063ffffffff16565b105b156125fd5780600001544210156125c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806128f8603d913960400191505060405180910390fd5b6125dc826125ce86610eba565b611b1290919063ffffffff16565b81600101819055506000816001015414156125fc57600081600001819055505b5b612608848484611b5c565b50505050565b60405180604001604052806000815260200160008152509056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365537065726178546f6b656e3a207472616e73666572576974684c6f636b20746f207a65726f2061646472657373537065726178546f6b656e3a20746f6b656e207472616e73666572207768696c6520706175736564537065726178546f6b656e3a2072656c65617365207a65726f2061646472657373537065726178546f6b656e3a2072656c656173652074696d65206265666f7265206c6f636b2074696d65537065726178546f6b656e3a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365537065726178546f6b656e3a206c65617374206f6e6520726563697069656e742061646472657373537065726178546f6b656e3a206e756d626572206f6620726563697069656e742061646472657373657320646f6573206e6f74206d6174636820746865206e756d626572206f6620746f6b656e7345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a206368616e676520616c6c6f77616e63652075736520696e637265617365416c6c6f77616e6365206f72206465637265617365416c6c6f77616e636520696e7374656164537065726178546f6b656e3a2063757272656e742074696d65206973206265666f72652066726f6d206163636f756e742072656c656173652074696d6545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cc7284372a4c64408ad20acb7f1e430a4d9f8e6698daff9f2254a9d0465f8d7c64736f6c634300060c0033537065726178546f6b656e3a20746f6b656e207472616e73666572207768696c6520706175736564537065726178546f6b656e3a2063757272656e742074696d65206973206265666f72652066726f6d206163636f756e742072656c656173652074696d65000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000012a05f2000000000000000000000000000000000000000000000000000000000000000006537065726178000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035350410000000000000000000000000000000000000000000000000000000000

Deployed ByteCode Sourcemap

18151:5029:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20840:368;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8431:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9620:315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8605:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10417:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8483:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11139:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21460:65;;;:::i;:::-;;18926:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16991:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8768:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6499:140;;;:::i;:::-;;19328:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21303:61;;;:::i;:::-;;21672:451;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5857:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8456:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11852:261;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9100:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19696:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;9330:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20069:652;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6794:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20840:368;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20952:1:::1;20933:21;;:7;:21;;;;20925:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21005:25;21033:9;:18;21043:7;21033:18;;;;;;;;;;;;;;;21005:46;;21080:34;21100:13;21080:8;:15;;;:19;;:34;;;;:::i;:::-;21062:8;:15;;:52;;;;21147:1;21128:8;:15;;;:20;21125:76;;;21188:1;21165:8;:20;;:24;;;;21125:76;6139:1;20840:368:::0;;:::o;8431:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9620:315::-;9695:4;9757:1;9721:32;9731:12;:10;:12::i;:::-;9745:7;9721:9;:32::i;:::-;:37;9720:56;;;;9774:1;9764:6;:11;9720:56;9712:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9866:39;9875:12;:10;:12::i;:::-;9889:7;9898:6;9866:8;:39::i;:::-;9923:4;9916:11;;9620:315;;;;:::o;8605:100::-;8658:7;8685:12;;8678:19;;8605:100;:::o;10417:313::-;10515:4;10532:36;10542:6;10550:9;10561:6;10532:9;:36::i;:::-;10579:121;10588:6;10596:12;:10;:12::i;:::-;10610:89;10648:6;10610:89;;;;;;;;;;;;;;;;;:11;:19;10622:6;10610:19;;;;;;;;;;;;;;;:33;10630:12;:10;:12::i;:::-;10610:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10579:8;:121::i;:::-;10718:4;10711:11;;10417:313;;;;;:::o;8483:21::-;;;;;;;;;;;;;:::o;11139:210::-;11219:4;11236:83;11245:12;:10;:12::i;:::-;11259:7;11268:50;11307:10;11268:11;:25;11280:12;:10;:12::i;:::-;11268:25;;;;;;;;;;;;;;;:34;11294:7;11268:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11236:8;:83::i;:::-;11337:4;11330:11;;11139:210;;;;:::o;21460:65::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21507:10:::1;:8;:10::i;:::-;21460:65::o:0;18926:83::-;18974:27;18980:12;:10;:12::i;:::-;18994:6;18974:5;:27::i;:::-;18926:83;:::o;16991:78::-;17030:4;17054:7;;;;;;;;;;;17047:14;;16991:78;:::o;8768:119::-;8834:7;8861:9;:18;8871:7;8861:18;;;;;;;;;;;;;;;;8854:25;;8768:119;;;:::o;6499:140::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6598:1:::1;6561:40;;6582:6;;;;;;;;;;;6561:40;;;;;;;;;;;;6629:1;6612:6;;:19;;;;;;;;;;;;;;;;;;6499:140::o:0;19328:293::-;19397:26;19426:90;19463:6;19426:90;;;;;;;;;;;;;;;;;:32;19436:7;19445:12;:10;:12::i;:::-;19426:9;:32::i;:::-;:36;;:90;;;;;:::i;:::-;19397:119;;19529:51;19538:7;19547:12;:10;:12::i;:::-;19561:18;19529:8;:51::i;:::-;19591:22;19597:7;19606:6;19591:5;:22::i;:::-;19328:293;;;:::o;21303:61::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21348:8:::1;:6;:8::i;:::-;21303:61::o:0;21672:451::-;21796:1;21776:10;:17;:21;21768:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21882:7;:14;21861:10;:17;:35;21853:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21996:9;21992:124;22015:10;:17;22011:1;:21;21992:124;;;22054:50;22064:12;:10;:12::i;:::-;22078:10;22089:1;22078:13;;;;;;;;;;;;;;22093:7;22101:1;22093:10;;;;;;;;;;;;;;22054:9;:50::i;:::-;22034:3;;;;;21992:124;;;;21672:451;;:::o;5857:79::-;5895:7;5922:6;;;;;;;;;;;5915:13;;5857:79;:::o;8456:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11852:261::-;11937:4;11954:129;11963:12;:10;:12::i;:::-;11977:7;11986:96;12025:15;11986:96;;;;;;;;;;;;;;;;;:11;:25;11998:12;:10;:12::i;:::-;11986:25;;;;;;;;;;;;;;;:34;12012:7;11986:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11954:8;:129::i;:::-;12101:4;12094:11;;11852:261;;;;:::o;9100:167::-;9178:4;9195:42;9205:12;:10;:12::i;:::-;9219:9;9230:6;9195:9;:42::i;:::-;9255:4;9248:11;;9100:167;;;;:::o;19696:215::-;19753:19;19774:14;19801:24;;:::i;:::-;19828:9;:18;19838:7;19828:18;;;;;;;;;;;;;;;19801:45;;;;;;;;;;;;;;;;;;;;;;;;;;;19865:8;:20;;;19887:8;:15;;;19857:46;;;;;19696:215;;;:::o;9330:143::-;9411:7;9438:11;:18;9450:5;9438:18;;;;;;;;;;;;;;;:27;9457:7;9438:27;;;;;;;;;;;;;;;;9431:34;;9330:143;;;;:::o;20069:652::-;20177:4;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20223:1:::1;20202:23;;:9;:23;;;;20194:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20308:15;20294:11;:29;20286:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20425:1;20389:9;:20;20399:9;20389:20;;;;;;;;;;;;;;;:32;;;:37;20381:77;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20471:24;;:::i;:::-;20498:96;;;;;;;;20536:11;20498:96;;;;20576:6;20498:96;;::::0;20471:123:::1;;20628:8;20605:9;:20;20615:9;20605:20;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;20649:42;20659:12;:10;:12::i;:::-;20673:9;20684:6;20649:9;:42::i;:::-;20709:4;20702:11;;;20069:652:::0;;;;;:::o;6794:236::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6895:1:::1;6875:22;;:8;:22;;;;6867:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6985:8;6956:38;;6977:6;;;;;;;;;;;6956:38;;;;;;;;;;;;7014:8;7005:6;;:17;;;;;;;;;;;;;;;;;;6794:236:::0;:::o;3747:181::-;3805:7;3825:9;3841:1;3837;:5;3825:17;;3866:1;3861;:6;;3853:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3919:1;3912:8;;;3747:181;;;;:::o;4211:136::-;4269:7;4296:43;4300:1;4303;4296:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4289:50;;4211:136;;;;:::o;15908:92::-;;;;:::o;2810:90::-;2855:7;2882:10;2875:17;;2810:90;:::o;14967:338::-;15078:1;15061:19;;:5;:19;;;;15053:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15159:1;15140:21;;:7;:21;;;;15132:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15243:6;15213:11;:18;15225:5;15213:18;;;;;;;;;;;;;;;:27;15232:7;15213:27;;;;;;;;;;;;;;;:36;;;;15281:7;15265:32;;15274:5;15265:32;;;15290:6;15265:32;;;;;;;;;;;;;;;;;;14967:338;;;:::o;12603:531::-;12719:1;12701:20;;:6;:20;;;;12693:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12803:1;12782:23;;:9;:23;;;;12774:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12858:47;12879:6;12887:9;12898:6;12858:20;:47::i;:::-;12938:71;12960:6;12938:71;;;;;;;;;;;;;;;;;:9;:17;12948:6;12938:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12918:9;:17;12928:6;12918:17;;;;;;;;;;;;;;;:91;;;;13043:32;13068:6;13043:9;:20;13053:9;13043:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13020:9;:20;13030:9;13020:20;;;;;;;;;;;;;;;:55;;;;13108:9;13091:35;;13100:6;13091:35;;;13119:6;13091:35;;;;;;;;;;;;;;;;;;12603:531;;;:::o;4650:192::-;4736:7;4769:1;4764;:6;;4772:12;4756:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4796:9;4812:1;4808;:5;4796:17;;4833:1;4826:8;;;4650:192;;;;;:::o;18032:112::-;17585:7;;;;;;;;;;;17577:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18093:5:::1;18083:7;;:15;;;;;;;;;;;;;;;;;;18114:22;18123:12;:10;:12::i;:::-;18114:22;;;;;;;;;;;;;;;;;;;;18032:112::o:0;14119:410::-;14214:1;14195:21;;:7;:21;;;;14187:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14267:49;14288:7;14305:1;14309:6;14267:20;:49::i;:::-;14350:68;14373:6;14350:68;;;;;;;;;;;;;;;;;:9;:18;14360:7;14350:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;14329:9;:18;14339:7;14329:18;;;;;;;;;;;;;;;:89;;;;14444:24;14461:6;14444:12;;:16;;:24;;;;:::i;:::-;14429:12;:39;;;;14510:1;14484:37;;14493:7;14484:37;;;14514:6;14484:37;;;;;;;;;;;;;;;;;;14119:410;;:::o;17781:110::-;17309:7;;;;;;;;;;;17308:8;17300:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17843:4:::1;17833:7;;:14;;;;;;;;;;;;;;;;;;17863:20;17870:12;:10;:12::i;:::-;17863:20;;;;;;;;;;;;;;;;;;;;17781:110::o:0;22359:818::-;22469:8;:6;:8::i;:::-;22468:9;22460:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22592:25;22620:9;:15;22630:4;22620:15;;;;;;;;;;;;;;;22592:43;;22673:1;22649:8;:20;;;:25;;:74;;;;;22708:8;:15;;;22678:27;22698:6;22678:15;22688:4;22678:9;:15::i;:::-;:19;;:27;;;;:::i;:::-;:45;22649:74;22646:467;;;22767:8;:20;;;22748:15;:39;;22740:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22976:27;22996:6;22976:15;22986:4;22976:9;:15::i;:::-;:19;;:27;;;;:::i;:::-;22958:8;:15;;:45;;;;23040:1;23021:8;:15;;;:20;23018:84;;;23085:1;23062:8;:20;;:24;;;;23018:84;22646:467;23125:44;23152:4;23158:2;23162:6;23125:26;:44::i;:::-;22359:818;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://cc7284372a4c64408ad20acb7f1e430a4d9f8e6698daff9f2254a9d0465f8d7c

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.