ETH Price: $3,365.11 (+0.08%)

Token

Nahmii (NII)
 

Overview

Max Total Supply

120,000,000,000 NII

Holders

5,422 ( 0.018%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 15 Decimals)

Filtered by Token Holder
peylay.eth
Balance
40,664.671156407237337 NII

Value
$0.00
0x8ac20a0c0de02d30837a75a7d50826125f1a7e46
Loading...
Loading
Loading...
Loading
Loading...
Loading


 


# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NahmiiToken

Compiler Version
v0.5.13+commit.5b0b510c

Optimization Enabled:
Yes with 0 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-03
*/

pragma solidity >=0.4.25 <0.6.0;
pragma experimental ABIEncoderV2;


contract Context {
    
    
    constructor () internal { }
    

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

    function _msgData() internal view returns (bytes memory) {
        this; 
        return msg.data;
    }
}

interface IERC20 {
    
    function totalSupply() external view returns (uint256);

    
    function balanceOf(address account) external view returns (uint256);

    
    function transfer(address recipient, uint256 amount) external returns (bool);

    
    function allowance(address owner, address spender) external view returns (uint256);

    
    function approve(address spender, uint256 amount) external returns (bool);

    
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    
    event Transfer(address indexed from, address indexed to, uint256 value);

    
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        
        
        
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        
        require(b > 0, errorMessage);
        uint256 c = a / b;
        

        return c;
    }

    
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

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

    
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    
    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");

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

    
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

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

     
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

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

    
    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);
    }

    
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

contract MinterRole is Context {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

    constructor () internal {
        _addMinter(_msgSender());
    }

    modifier onlyMinter() {
        require(isMinter(_msgSender()), "MinterRole: caller does not have the Minter role");
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(_msgSender());
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }
}

contract ERC20Mintable is ERC20, MinterRole {
    
    function mint(address account, uint256 amount) public onlyMinter returns (bool) {
        _mint(account, amount);
        return true;
    }
}

library Math {
    
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

interface BalanceRecordable {
    
    function balanceRecordsCount(address account)
    external
    view
    returns (uint256);

    
    function recordBalance(address account, uint256 index)
    external
    view
    returns (uint256);

    
    function recordBlockNumber(address account, uint256 index)
    external
    view
    returns (uint256);

    
    function recordIndexByBlockNumber(address account, uint256 blockNumber)
    external
    view
    returns (int256);
}

contract TokenUpgradeAgent {

    
    address public origin;

    constructor(address _origin)
    public
    {
        origin = _origin;
    }

    
    
    
    function upgradeFrom(address from, uint256 value)
    public
    returns (bool);

    
    
    
    modifier onlyOrigin() {
        require(msg.sender == origin);
        _;
    }
}

contract RevenueToken is ERC20Mintable, BalanceRecordable {
    using SafeMath for uint256;
    using Math for uint256;

    struct BalanceRecord {
        uint256 blockNumber;
        uint256 balance;
    }

    mapping(address => BalanceRecord[]) public balanceRecords;

    bool public mintingDisabled;

    event DisableMinting();
    event Upgrade(TokenUpgradeAgent tokenUpgradeAgent, address from, uint256 value);
    event UpgradeFrom(TokenUpgradeAgent tokenUpgradeAgent, address upgrader, address from, uint256 value);
    event UpgradeBalanceRecords(address account, uint256 startIndex, uint256 endIndex);

    
    function disableMinting()
    public
    onlyMinter
    {
        
        mintingDisabled = true;

        
        emit DisableMinting();
    }

    
    function mint(address to, uint256 value)
    public
    onlyMinter
    returns (bool)
    {
        
        require(!mintingDisabled, "Minting disabled [RevenueToken.sol:68]");

        
        bool minted = super.mint(to, value);

        
        if (minted)
            _addBalanceRecord(to);

        
        return minted;
    }

    
    function transfer(address to, uint256 value)
    public
    returns (bool)
    {
        
        bool transferred = super.transfer(to, value);

        
        if (transferred) {
            _addBalanceRecord(msg.sender);
            _addBalanceRecord(to);
        }

        
        return transferred;
    }

    
    function approve(address spender, uint256 value)
    public
    returns (bool)
    {
        
        require(
            0 == value || 0 == allowance(msg.sender, spender),
            "Value or allowance non-zero [RevenueToken.sol:117]"
        );

        
        return super.approve(spender, value);
    }

    
    function transferFrom(address from, address to, uint256 value)
    public
    returns (bool)
    {
        
        bool transferred = super.transferFrom(from, to, value);

        
        if (transferred) {
            _addBalanceRecord(from);
            _addBalanceRecord(to);
        }

        
        return transferred;
    }

    
    function upgrade(TokenUpgradeAgent tokenUpgradeAgent, uint256 value)
    public
    returns (bool)
    {
        
        _burn(msg.sender, value);

        
        bool upgraded = tokenUpgradeAgent.upgradeFrom(msg.sender, value);

        
        require(upgraded, "Upgrade failed [RevenueToken.sol:168]");

        
        emit Upgrade(tokenUpgradeAgent, msg.sender, value);

        
        return upgraded;
    }

    
    function upgradeFrom(TokenUpgradeAgent tokenUpgradeAgent, address from, uint256 value)
    public
    returns (bool)
    {
        
        _burnFrom(from, value);

        
        bool upgraded = tokenUpgradeAgent.upgradeFrom(from, value);

        
        require(upgraded, "Upgrade failed [RevenueToken.sol:195]");

        
        emit UpgradeFrom(tokenUpgradeAgent, msg.sender, from, value);

        
        return upgraded;
    }

    
    function balanceRecordsCount(address account)
    public
    view
    returns (uint256)
    {
        return balanceRecords[account].length;
    }

    
    function recordBalance(address account, uint256 index)
    public
    view
    returns (uint256)
    {
        return balanceRecords[account][index].balance;
    }

    
    function recordBlockNumber(address account, uint256 index)
    public
    view
    returns (uint256)
    {
        return balanceRecords[account][index].blockNumber;
    }

    
    function recordIndexByBlockNumber(address account, uint256 blockNumber)
    public
    view
    returns (int256)
    {
        for (uint256 i = balanceRecords[account].length; i > 0;) {
            i = i.sub(1);
            if (balanceRecords[account][i].blockNumber <= blockNumber)
                return int256(i);
        }
        return - 1;
    }

    
    function upgradeBalanceRecords(address account, BalanceRecord[] memory _balanceRecords)
    public
    onlyMinter
    {
        
        if (0 < _balanceRecords.length) {
            
            require(!mintingDisabled, "Minting disabled [RevenueToken.sol:280]");

            
            uint256 startIndex = balanceRecords[account].length;
            uint256 endIndex = startIndex.add(_balanceRecords.length).sub(1);

            
            uint256 previousBlockNumber = startIndex > 0 ? balanceRecords[account][startIndex - 1].blockNumber : 0;

            
            for (uint256 i = 0; i < _balanceRecords.length; i++) {
                
                require(previousBlockNumber <= _balanceRecords[i].blockNumber, "Invalid balance record block number [RevenueToken.sol:292]");

                
                balanceRecords[account].push(_balanceRecords[i]);

                
                previousBlockNumber = _balanceRecords[i].blockNumber;
            }

            
            emit UpgradeBalanceRecords(account, startIndex, endIndex);
        }
    }

    
    function _addBalanceRecord(address account)
    private
    {
        balanceRecords[account].push(BalanceRecord(block.number, balanceOf(account)));
    }
}

contract NahmiiToken is RevenueToken {

    string public name = "Nahmii";

    string public symbol = "NII";

    uint8 public constant decimals = 15;

    event SetName(string name);

    event SetSymbol(string symbol);

    
    function setName(string memory _name)
    public
    onlyMinter
    {
        name = _name;
        emit SetName(name);
    }

    
    function setSymbol(string memory _symbol)
    public
    onlyMinter
    {
        symbol = _symbol;
        emit SetSymbol(_symbol);
    }
}

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":[],"name":"DisableMinting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"symbol","type":"string"}],"name":"SetSymbol","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":"contract TokenUpgradeAgent","name":"tokenUpgradeAgent","type":"address"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Upgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"startIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endIndex","type":"uint256"}],"name":"UpgradeBalanceRecords","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract TokenUpgradeAgent","name":"tokenUpgradeAgent","type":"address"},{"indexed":false,"internalType":"address","name":"upgrader","type":"address"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"UpgradeFrom","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceRecords","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceRecordsCount","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mintingDisabled","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"recordBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"recordBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"recordIndexByBlockNumber","outputs":[{"internalType":"int256","name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_symbol","type":"string"}],"name":"setSymbol","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":"totalSupply","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":"contract TokenUpgradeAgent","name":"tokenUpgradeAgent","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"upgrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"components":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"internalType":"struct RevenueToken.BalanceRecord[]","name":"_balanceRecords","type":"tuple[]"}],"name":"upgradeBalanceRecords","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract TokenUpgradeAgent","name":"tokenUpgradeAgent","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"upgradeFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60c0604052600660808190527f4e61686d6969000000000000000000000000000000000000000000000000000060a09081526200003e919081620001eb565b506040805180820190915260038082527f4e4949000000000000000000000000000000000000000000000000000000000060209092019182526200008591600791620001eb565b50620000ac6200009d6001600160e01b03620000b216565b6001600160e01b03620000b716565b6200035c565b335b90565b620000d28160036200010960201b620013621790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6200011e82826001600160e01b036200018616565b1562000161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001589062000329565b60405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620001cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001589062000341565b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022e57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025e57825182559160200191906001019062000241565b506200026c92915062000270565b5090565b620000b491905b808211156200026c576000815560010162000277565b60006200029c601f8362000353565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500815260200192915050565b6000620002d760228362000353565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726581527f7373000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b602080825281016200033b816200028d565b92915050565b602080825281016200033b81620002c8565b90815260200190565b61218a806200036c6000396000f3fe608060405234801561001057600080fd5b50600436106101495760003560e01c806306fdde031461014e578063095ea7b31461016c57806312c508ba1461018c57806318160ddd146101ac57806321afb5ee146101b457806323b872dd146101bc578063313ce567146101cf57806339509351146101e45780633d5a18b2146101f757806340c10f191461020a5780634c6c6a5c1461021d57806370a08231146102305780637319424f146102435780637e5cd5c11461025657806395d89b4114610260578063983b2d5614610268578063986502751461027b5780639f151d6614610283578063a457c2d714610296578063a9059cbb146102a9578063aa271e1a146102bc578063b84c8246146102cf578063c47f0027146102e2578063d1264b10146102f5578063dd62ed3e14610316578063e0622b2714610329578063f08c84151461033c575b600080fd5b61015661034f565b6040516101639190611dad565b60405180910390f35b61017f61017a3660046116c5565b6103dd565b6040516101639190611d38565b61019f61019a3660046116c5565b61042b565b6040516101639190611d9f565b61019f610469565b61017f610470565b61017f6101ca366004611631565b610479565b6101d76104ab565b6040516101639190611eed565b61017f6101f23660046116c5565b6104b0565b61019f6102053660046115d1565b610512565b61017f6102183660046116c5565b61052d565b61017f61022b366004611713565b610596565b61019f61023e3660046115d1565b610689565b61019f6102513660046116c5565b6106a4565b61025e61072c565b005b61015661078b565b61025e6102763660046115d1565b6107e6565b61025e610819565b61025e61029136600461167e565b61082b565b61017f6102a43660046116c5565b610a0d565b61017f6102b73660046116c5565b610a7b565b61017f6102ca3660046115d1565b610aa2565b61025e6102dd366004611753565b610ab5565b61025e6102f0366004611753565b610b2a565b6103086103033660046116c5565b610b95565b604051610163929190611edf565b61019f6103243660046115f7565b610bce565b61017f610337366004611734565b610bf9565b61019f61034a3660046116c5565b610ce9565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103d55780601f106103aa576101008083540402835291602001916103d5565b820191906000526020600020905b8154815290600101906020018083116103b857829003601f168201915b505050505081565b60008115806103f357506103f13384610bce565b155b6104185760405162461bcd60e51b815260040161040f90611e1f565b60405180910390fd5b6104228383610d27565b90505b92915050565b6001600160a01b038216600090815260046020526040812080548390811061044f57fe5b906000526020600020906002020160010154905092915050565b6002545b90565b60055460ff1681565b600080610487858585610d3b565b905080156104a15761049885610dc3565b6104a184610dc3565b90505b9392505050565b600f81565b60006105096104bd610e2e565b8461050485600160006104ce610e2e565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610e3216565b610e57565b50600192915050565b6001600160a01b031660009081526004602052604090205490565b600061053a6102ca610e2e565b6105565760405162461bcd60e51b815260040161040f90611e2f565b60055460ff16156105795760405162461bcd60e51b815260040161040f90611e5f565b60006105858484610f0b565b905080156104225761042284610dc3565b60006105a28383610f3e565b60405163753e88e560e01b81526000906001600160a01b0386169063753e88e5906105d39087908790600401611d02565b602060405180830381600087803b1580156105ed57600080fd5b505af1158015610601573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061062591908101906116f5565b9050806106445760405162461bcd60e51b815260040161040f90611dcf565b7f9e86ce1ab9d3506dc3b13066468e34275a2b4defd12d8393095330769f46ea6f853386866040516106799493929190611d46565b60405180910390a1949350505050565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b0382166000908152600460205260408120545b8015610721576106d581600163ffffffff610f9216565b6001600160a01b038516600090815260046020526040902080549192508491839081106106fe57fe5b9060005260206000209060020201600001541161071c579050610425565b6106be565b506000199392505050565b6107376102ca610e2e565b6107535760405162461bcd60e51b815260040161040f90611e2f565b6005805460ff191660011790556040517f2d86df2e5d84b22790939c34e14094e95a52090fbf291a1fa69b9b4e837c635390600090a1565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103d55780601f106103aa576101008083540402835291602001916103d5565b6107f16102ca610e2e565b61080d5760405162461bcd60e51b815260040161040f90611e2f565b61081681610fd4565b50565b610829610824610e2e565b61101c565b565b6108366102ca610e2e565b6108525760405162461bcd60e51b815260040161040f90611e2f565b805115610a095760055460ff161561087c5760405162461bcd60e51b815260040161040f90611e9f565b6001600160a01b03821660009081526004602052604081205482519091906108be906001906108b290859063ffffffff610e3216565b9063ffffffff610f9216565b905060008083116108d057600061090b565b6001600160a01b0385166000908152600460205260409020805460001985019081106108f857fe5b9060005260206000209060020201600001545b905060005b84518110156109c95784818151811061092557fe5b6020026020010151600001518211156109505760405162461bcd60e51b815260040161040f90611ebf565b6001600160a01b0386166000908152600460205260409020855186908390811061097657fe5b602090810291909101810151825460018181018555600094855293839020825160029092020190815591015191015584518590829081106109b357fe5b6020908102919091010151519150600101610910565b507f7ac4799cf246767cb06f9ce53099648140148e7942291ed50d4a6a46797cfd028584846040516109fd93929190611d10565b60405180910390a15050505b5050565b6000610509610a1a610e2e565b84610504856040518060600160405280602581526020016121236025913960016000610a44610e2e565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61106416565b600080610a888484611090565b9050801561042257610a9933610dc3565b61042284610dc3565b600061042560038363ffffffff6110a416565b610ac06102ca610e2e565b610adc5760405162461bcd60e51b815260040161040f90611e2f565b8051610aef9060079060208401906113f6565b507fadf3ae8bd543b3007d464f15cb8ea1db3f44e84d41d203164f40b95e27558ac681604051610b1f9190611dad565b60405180910390a150565b610b356102ca610e2e565b610b515760405162461bcd60e51b815260040161040f90611e2f565b8051610b649060069060208401906113f6565b507f4df9dcd34ae35f40f2c756fd8ac83210ed0b76d065543ee73d868aec7c7fcf026006604051610b1f9190611dbe565b60046020528160005260406000208181548110610bae57fe5b600091825260209091206002909102018054600190910154909250905082565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6000610c0533836110ec565b60405163753e88e560e01b81526000906001600160a01b0385169063753e88e590610c369033908790600401611ce7565b602060405180830381600087803b158015610c5057600080fd5b505af1158015610c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8891908101906116f5565b905080610ca75760405162461bcd60e51b815260040161040f90611eaf565b7f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac843385604051610cda93929190611d84565b60405180910390a19392505050565b6001600160a01b0382166000908152600460205260408120805483908110610d0d57fe5b906000526020600020906002020160000154905092915050565b6000610509610d34610e2e565b8484610e57565b6000610d488484846111bc565b610db984610d54610e2e565b61050485604051806060016040528060288152602001612097602891396001600160a01b038a16600090815260016020526040812090610d92610e2e565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61106416565b5060019392505050565b60046000826001600160a01b03166001600160a01b031681526020019081526020016000206040518060400160405280438152602001610e0284610689565b905281546001818101845560009384526020938490208351600290930201918255929091015191015550565b3390565b6000828201838110156104225760405162461bcd60e51b815260040161040f90611e0f565b6001600160a01b038316610e7d5760405162461bcd60e51b815260040161040f90611e8f565b6001600160a01b038216610ea35760405162461bcd60e51b815260040161040f90611dff565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610efe908590611d9f565b60405180910390a3505050565b6000610f186102ca610e2e565b610f345760405162461bcd60e51b815260040161040f90611e2f565b61050983836112c0565b610f4882826110ec565b610a0982610f54610e2e565b610504846040518060600160405280602481526020016120bf602491396001600160a01b038816600090815260016020526040812090610d92610e2e565b600061042283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611064565b610fe560038263ffffffff61136216565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61102d60038263ffffffff6113ae16565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b600081848411156110885760405162461bcd60e51b815260040161040f9190611dad565b505050900390565b600061050961109d610e2e565b84846111bc565b60006001600160a01b0382166110cc5760405162461bcd60e51b815260040161040f90611e4f565b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b0382166111125760405162461bcd60e51b815260040161040f90611e6f565b6111558160405180606001604052806022815260200161204f602291396001600160a01b038516600090815260208190526040902054919063ffffffff61106416565b6001600160a01b038316600090815260208190526040902055600254611181908263ffffffff610f9216565b6002556040516000906001600160a01b038416906000805160206120e3833981519152906111b0908590611d9f565b60405180910390a35050565b6001600160a01b0383166111e25760405162461bcd60e51b815260040161040f90611e7f565b6001600160a01b0382166112085760405162461bcd60e51b815260040161040f90611ddf565b61124b81604051806060016040528060268152602001612071602691396001600160a01b038616600090815260208190526040902054919063ffffffff61106416565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611280908263ffffffff610e3216565b6001600160a01b0380841660008181526020819052604090819020939093559151908516906000805160206120e383398151915290610efe908590611d9f565b6001600160a01b0382166112e65760405162461bcd60e51b815260040161040f90611ecf565b6002546112f9908263ffffffff610e3216565b6002556001600160a01b038216600090815260208190526040902054611325908263ffffffff610e3216565b6001600160a01b0383166000818152602081905260408082209390935591519091906000805160206120e3833981519152906111b0908590611d9f565b61136c82826110a4565b156113895760405162461bcd60e51b815260040161040f90611def565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6113b882826110a4565b6113d45760405162461bcd60e51b815260040161040f90611e3f565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061143757805160ff1916838001178555611464565b82800160010185558215611464579182015b82811115611464578251825591602001919060010190611449565b50611470929150611474565b5090565b61046d91905b80821115611470576000815560010161147a565b803561042581611fff565b600082601f8301126114aa57600080fd5b81356114bd6114b882611f21565b611efb565b915081818352602084019350602081019050838560408402820111156114e257600080fd5b60005b8381101561151057816114f8888261157f565b845250602090920191604091909101906001016114e5565b5050505092915050565b805161042581612013565b80356104258161201c565b600082601f83011261154157600080fd5b813561154f6114b882611f41565b9150808252602083016020830185838301111561156b57600080fd5b611576838284611fb9565b50505092915050565b60006040828403121561159157600080fd5b61159b6040611efb565b905060006115a984846115c6565b82525060206115ba848483016115c6565b60208301525092915050565b803561042581612025565b6000602082840312156115e357600080fd5b60006115ef848461148e565b949350505050565b6000806040838503121561160a57600080fd5b6000611616858561148e565b92505060206116278582860161148e565b9150509250929050565b60008060006060848603121561164657600080fd5b6000611652868661148e565b93505060206116638682870161148e565b9250506040611674868287016115c6565b9150509250925092565b6000806040838503121561169157600080fd5b600061169d858561148e565b92505060208301356001600160401b038111156116b957600080fd5b61162785828601611499565b600080604083850312156116d857600080fd5b60006116e4858561148e565b9250506020611627858286016115c6565b60006020828403121561170757600080fd5b60006115ef848461151a565b60008060006060848603121561172857600080fd5b60006116528686611525565b6000806040838503121561174757600080fd5b60006116e48585611525565b60006020828403121561176557600080fd5b81356001600160401b0381111561177b57600080fd5b6115ef84828501611530565b61179081611fae565b82525050565b61179081611f81565b61179081611f8c565b61179081611f91565b6117908161046d565b60006117c582611f74565b6117cf8185611f78565b93506117df818560208601611fc5565b6117e881611ff5565b9093019392505050565b60008154600181166000811461180f576001811461183557611874565b607f60028304166118208187611f78565b60ff1984168152955050602085019250611874565b600282046118438187611f78565b955061184e85611f68565b60005b8281101561186d57815488820152600190910190602001611851565b8701945050505b505092915050565b6000611889602583611f78565b6000805160206121038339815191528152643a3139355d60d81b602082015260400192915050565b60006118be602383611f78565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b602082015260400192915050565b6000611903601f83611f78565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500815260200192915050565b600061193c602283611f78565b7f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b602082015260400192915050565b6000611980601b83611f78565b7a536166654d6174683a206164646974696f6e206f766572666c6f7760281b815260200192915050565b60006119b7603283611f78565b7f56616c7565206f7220616c6c6f77616e6365206e6f6e2d7a65726f205b526576815271656e7565546f6b656e2e736f6c3a3131375d60701b602082015260400192915050565b6000611a0b603083611f78565b7f4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766581526f20746865204d696e74657220726f6c6560801b602082015260400192915050565b6000611a5d602183611f78565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c8152606560f81b602082015260400192915050565b6000611aa0602283611f78565b7f526f6c65733a206163636f756e7420697320746865207a65726f206164647265815261737360f01b602082015260400192915050565b6000611ae4602683611f78565b60008051602061202f8339815191528152656f6c3a36385d60d01b602082015260400192915050565b6000611b1a602183611f78565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265738152607360f81b602082015260400192915050565b6000611b5d602583611f78565b7f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b602082015260400192915050565b6000611ba4602483611f78565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b602082015260400192915050565b6000611bea602783611f78565b60008051602061202f8339815191528152666f6c3a3238305d60c81b602082015260400192915050565b6000611c21602583611f78565b6000805160206121038339815191528152643a3136385d60d81b602082015260400192915050565b6000611c56603a83611f78565b7f496e76616c69642062616c616e6365207265636f726420626c6f636b206e756d815279626572205b526576656e7565546f6b656e2e736f6c3a3239325d60301b602082015260400192915050565b6000611cb2601f83611f78565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b61179081611fa8565b60408101611cf58285611787565b6104a460208301846117b1565b60408101611cf58285611796565b60608101611d1e8286611796565b611d2b60208301856117b1565b6115ef60408301846117b1565b60208101610425828461179f565b60808101611d5482876117a8565b611d616020830186611787565b611d6e6040830185611796565b611d7b60608301846117b1565b95945050505050565b60608101611d9282866117a8565b611d2b6020830185611787565b6020810161042582846117b1565b6020808252810161042281846117ba565b6020808252810161042281846117f2565b602080825281016104258161187c565b60208082528101610425816118b1565b60208082528101610425816118f6565b602080825281016104258161192f565b6020808252810161042581611973565b60208082528101610425816119aa565b60208082528101610425816119fe565b6020808252810161042581611a50565b6020808252810161042581611a93565b6020808252810161042581611ad7565b6020808252810161042581611b0d565b6020808252810161042581611b50565b6020808252810161042581611b97565b6020808252810161042581611bdd565b6020808252810161042581611c14565b6020808252810161042581611c49565b6020808252810161042581611ca5565b60408101611cf582856117b1565b602081016104258284611cde565b6040518181016001600160401b0381118282101715611f1957600080fd5b604052919050565b60006001600160401b03821115611f3757600080fd5b5060209081020190565b60006001600160401b03821115611f5757600080fd5b506020601f91909101601f19160190565b60009081526020902090565b5190565b90815260200190565b600061042582611f9c565b151590565b600061042582611f81565b6001600160a01b031690565b60ff1690565b600061042582611f91565b82818337506000910152565b60005b83811015611fe0578181015183820152602001611fc8565b83811115611fef576000848401525b50505050565b601f01601f191690565b61200881611f81565b811461081657600080fd5b61200881611f8c565b61200881611f91565b6120088161046d56fe4d696e74696e672064697361626c6564205b526576656e7565546f6b656e2e7345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef55706772616465206661696c6564205b526576656e7565546f6b656e2e736f6c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a7231582067b65be887c78aa65ed120e4b140c9a6a0c1873d1defde40257327911fecf0656c6578706572696d656e74616cf564736f6c634300050d0040

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101495760003560e01c806306fdde031461014e578063095ea7b31461016c57806312c508ba1461018c57806318160ddd146101ac57806321afb5ee146101b457806323b872dd146101bc578063313ce567146101cf57806339509351146101e45780633d5a18b2146101f757806340c10f191461020a5780634c6c6a5c1461021d57806370a08231146102305780637319424f146102435780637e5cd5c11461025657806395d89b4114610260578063983b2d5614610268578063986502751461027b5780639f151d6614610283578063a457c2d714610296578063a9059cbb146102a9578063aa271e1a146102bc578063b84c8246146102cf578063c47f0027146102e2578063d1264b10146102f5578063dd62ed3e14610316578063e0622b2714610329578063f08c84151461033c575b600080fd5b61015661034f565b6040516101639190611dad565b60405180910390f35b61017f61017a3660046116c5565b6103dd565b6040516101639190611d38565b61019f61019a3660046116c5565b61042b565b6040516101639190611d9f565b61019f610469565b61017f610470565b61017f6101ca366004611631565b610479565b6101d76104ab565b6040516101639190611eed565b61017f6101f23660046116c5565b6104b0565b61019f6102053660046115d1565b610512565b61017f6102183660046116c5565b61052d565b61017f61022b366004611713565b610596565b61019f61023e3660046115d1565b610689565b61019f6102513660046116c5565b6106a4565b61025e61072c565b005b61015661078b565b61025e6102763660046115d1565b6107e6565b61025e610819565b61025e61029136600461167e565b61082b565b61017f6102a43660046116c5565b610a0d565b61017f6102b73660046116c5565b610a7b565b61017f6102ca3660046115d1565b610aa2565b61025e6102dd366004611753565b610ab5565b61025e6102f0366004611753565b610b2a565b6103086103033660046116c5565b610b95565b604051610163929190611edf565b61019f6103243660046115f7565b610bce565b61017f610337366004611734565b610bf9565b61019f61034a3660046116c5565b610ce9565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103d55780601f106103aa576101008083540402835291602001916103d5565b820191906000526020600020905b8154815290600101906020018083116103b857829003601f168201915b505050505081565b60008115806103f357506103f13384610bce565b155b6104185760405162461bcd60e51b815260040161040f90611e1f565b60405180910390fd5b6104228383610d27565b90505b92915050565b6001600160a01b038216600090815260046020526040812080548390811061044f57fe5b906000526020600020906002020160010154905092915050565b6002545b90565b60055460ff1681565b600080610487858585610d3b565b905080156104a15761049885610dc3565b6104a184610dc3565b90505b9392505050565b600f81565b60006105096104bd610e2e565b8461050485600160006104ce610e2e565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610e3216565b610e57565b50600192915050565b6001600160a01b031660009081526004602052604090205490565b600061053a6102ca610e2e565b6105565760405162461bcd60e51b815260040161040f90611e2f565b60055460ff16156105795760405162461bcd60e51b815260040161040f90611e5f565b60006105858484610f0b565b905080156104225761042284610dc3565b60006105a28383610f3e565b60405163753e88e560e01b81526000906001600160a01b0386169063753e88e5906105d39087908790600401611d02565b602060405180830381600087803b1580156105ed57600080fd5b505af1158015610601573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061062591908101906116f5565b9050806106445760405162461bcd60e51b815260040161040f90611dcf565b7f9e86ce1ab9d3506dc3b13066468e34275a2b4defd12d8393095330769f46ea6f853386866040516106799493929190611d46565b60405180910390a1949350505050565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b0382166000908152600460205260408120545b8015610721576106d581600163ffffffff610f9216565b6001600160a01b038516600090815260046020526040902080549192508491839081106106fe57fe5b9060005260206000209060020201600001541161071c579050610425565b6106be565b506000199392505050565b6107376102ca610e2e565b6107535760405162461bcd60e51b815260040161040f90611e2f565b6005805460ff191660011790556040517f2d86df2e5d84b22790939c34e14094e95a52090fbf291a1fa69b9b4e837c635390600090a1565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103d55780601f106103aa576101008083540402835291602001916103d5565b6107f16102ca610e2e565b61080d5760405162461bcd60e51b815260040161040f90611e2f565b61081681610fd4565b50565b610829610824610e2e565b61101c565b565b6108366102ca610e2e565b6108525760405162461bcd60e51b815260040161040f90611e2f565b805115610a095760055460ff161561087c5760405162461bcd60e51b815260040161040f90611e9f565b6001600160a01b03821660009081526004602052604081205482519091906108be906001906108b290859063ffffffff610e3216565b9063ffffffff610f9216565b905060008083116108d057600061090b565b6001600160a01b0385166000908152600460205260409020805460001985019081106108f857fe5b9060005260206000209060020201600001545b905060005b84518110156109c95784818151811061092557fe5b6020026020010151600001518211156109505760405162461bcd60e51b815260040161040f90611ebf565b6001600160a01b0386166000908152600460205260409020855186908390811061097657fe5b602090810291909101810151825460018181018555600094855293839020825160029092020190815591015191015584518590829081106109b357fe5b6020908102919091010151519150600101610910565b507f7ac4799cf246767cb06f9ce53099648140148e7942291ed50d4a6a46797cfd028584846040516109fd93929190611d10565b60405180910390a15050505b5050565b6000610509610a1a610e2e565b84610504856040518060600160405280602581526020016121236025913960016000610a44610e2e565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61106416565b600080610a888484611090565b9050801561042257610a9933610dc3565b61042284610dc3565b600061042560038363ffffffff6110a416565b610ac06102ca610e2e565b610adc5760405162461bcd60e51b815260040161040f90611e2f565b8051610aef9060079060208401906113f6565b507fadf3ae8bd543b3007d464f15cb8ea1db3f44e84d41d203164f40b95e27558ac681604051610b1f9190611dad565b60405180910390a150565b610b356102ca610e2e565b610b515760405162461bcd60e51b815260040161040f90611e2f565b8051610b649060069060208401906113f6565b507f4df9dcd34ae35f40f2c756fd8ac83210ed0b76d065543ee73d868aec7c7fcf026006604051610b1f9190611dbe565b60046020528160005260406000208181548110610bae57fe5b600091825260209091206002909102018054600190910154909250905082565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6000610c0533836110ec565b60405163753e88e560e01b81526000906001600160a01b0385169063753e88e590610c369033908790600401611ce7565b602060405180830381600087803b158015610c5057600080fd5b505af1158015610c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8891908101906116f5565b905080610ca75760405162461bcd60e51b815260040161040f90611eaf565b7f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac843385604051610cda93929190611d84565b60405180910390a19392505050565b6001600160a01b0382166000908152600460205260408120805483908110610d0d57fe5b906000526020600020906002020160000154905092915050565b6000610509610d34610e2e565b8484610e57565b6000610d488484846111bc565b610db984610d54610e2e565b61050485604051806060016040528060288152602001612097602891396001600160a01b038a16600090815260016020526040812090610d92610e2e565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61106416565b5060019392505050565b60046000826001600160a01b03166001600160a01b031681526020019081526020016000206040518060400160405280438152602001610e0284610689565b905281546001818101845560009384526020938490208351600290930201918255929091015191015550565b3390565b6000828201838110156104225760405162461bcd60e51b815260040161040f90611e0f565b6001600160a01b038316610e7d5760405162461bcd60e51b815260040161040f90611e8f565b6001600160a01b038216610ea35760405162461bcd60e51b815260040161040f90611dff565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610efe908590611d9f565b60405180910390a3505050565b6000610f186102ca610e2e565b610f345760405162461bcd60e51b815260040161040f90611e2f565b61050983836112c0565b610f4882826110ec565b610a0982610f54610e2e565b610504846040518060600160405280602481526020016120bf602491396001600160a01b038816600090815260016020526040812090610d92610e2e565b600061042283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611064565b610fe560038263ffffffff61136216565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61102d60038263ffffffff6113ae16565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b600081848411156110885760405162461bcd60e51b815260040161040f9190611dad565b505050900390565b600061050961109d610e2e565b84846111bc565b60006001600160a01b0382166110cc5760405162461bcd60e51b815260040161040f90611e4f565b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b0382166111125760405162461bcd60e51b815260040161040f90611e6f565b6111558160405180606001604052806022815260200161204f602291396001600160a01b038516600090815260208190526040902054919063ffffffff61106416565b6001600160a01b038316600090815260208190526040902055600254611181908263ffffffff610f9216565b6002556040516000906001600160a01b038416906000805160206120e3833981519152906111b0908590611d9f565b60405180910390a35050565b6001600160a01b0383166111e25760405162461bcd60e51b815260040161040f90611e7f565b6001600160a01b0382166112085760405162461bcd60e51b815260040161040f90611ddf565b61124b81604051806060016040528060268152602001612071602691396001600160a01b038616600090815260208190526040902054919063ffffffff61106416565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611280908263ffffffff610e3216565b6001600160a01b0380841660008181526020819052604090819020939093559151908516906000805160206120e383398151915290610efe908590611d9f565b6001600160a01b0382166112e65760405162461bcd60e51b815260040161040f90611ecf565b6002546112f9908263ffffffff610e3216565b6002556001600160a01b038216600090815260208190526040902054611325908263ffffffff610e3216565b6001600160a01b0383166000818152602081905260408082209390935591519091906000805160206120e3833981519152906111b0908590611d9f565b61136c82826110a4565b156113895760405162461bcd60e51b815260040161040f90611def565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6113b882826110a4565b6113d45760405162461bcd60e51b815260040161040f90611e3f565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061143757805160ff1916838001178555611464565b82800160010185558215611464579182015b82811115611464578251825591602001919060010190611449565b50611470929150611474565b5090565b61046d91905b80821115611470576000815560010161147a565b803561042581611fff565b600082601f8301126114aa57600080fd5b81356114bd6114b882611f21565b611efb565b915081818352602084019350602081019050838560408402820111156114e257600080fd5b60005b8381101561151057816114f8888261157f565b845250602090920191604091909101906001016114e5565b5050505092915050565b805161042581612013565b80356104258161201c565b600082601f83011261154157600080fd5b813561154f6114b882611f41565b9150808252602083016020830185838301111561156b57600080fd5b611576838284611fb9565b50505092915050565b60006040828403121561159157600080fd5b61159b6040611efb565b905060006115a984846115c6565b82525060206115ba848483016115c6565b60208301525092915050565b803561042581612025565b6000602082840312156115e357600080fd5b60006115ef848461148e565b949350505050565b6000806040838503121561160a57600080fd5b6000611616858561148e565b92505060206116278582860161148e565b9150509250929050565b60008060006060848603121561164657600080fd5b6000611652868661148e565b93505060206116638682870161148e565b9250506040611674868287016115c6565b9150509250925092565b6000806040838503121561169157600080fd5b600061169d858561148e565b92505060208301356001600160401b038111156116b957600080fd5b61162785828601611499565b600080604083850312156116d857600080fd5b60006116e4858561148e565b9250506020611627858286016115c6565b60006020828403121561170757600080fd5b60006115ef848461151a565b60008060006060848603121561172857600080fd5b60006116528686611525565b6000806040838503121561174757600080fd5b60006116e48585611525565b60006020828403121561176557600080fd5b81356001600160401b0381111561177b57600080fd5b6115ef84828501611530565b61179081611fae565b82525050565b61179081611f81565b61179081611f8c565b61179081611f91565b6117908161046d565b60006117c582611f74565b6117cf8185611f78565b93506117df818560208601611fc5565b6117e881611ff5565b9093019392505050565b60008154600181166000811461180f576001811461183557611874565b607f60028304166118208187611f78565b60ff1984168152955050602085019250611874565b600282046118438187611f78565b955061184e85611f68565b60005b8281101561186d57815488820152600190910190602001611851565b8701945050505b505092915050565b6000611889602583611f78565b6000805160206121038339815191528152643a3139355d60d81b602082015260400192915050565b60006118be602383611f78565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b602082015260400192915050565b6000611903601f83611f78565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500815260200192915050565b600061193c602283611f78565b7f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b602082015260400192915050565b6000611980601b83611f78565b7a536166654d6174683a206164646974696f6e206f766572666c6f7760281b815260200192915050565b60006119b7603283611f78565b7f56616c7565206f7220616c6c6f77616e6365206e6f6e2d7a65726f205b526576815271656e7565546f6b656e2e736f6c3a3131375d60701b602082015260400192915050565b6000611a0b603083611f78565b7f4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766581526f20746865204d696e74657220726f6c6560801b602082015260400192915050565b6000611a5d602183611f78565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c8152606560f81b602082015260400192915050565b6000611aa0602283611f78565b7f526f6c65733a206163636f756e7420697320746865207a65726f206164647265815261737360f01b602082015260400192915050565b6000611ae4602683611f78565b60008051602061202f8339815191528152656f6c3a36385d60d01b602082015260400192915050565b6000611b1a602183611f78565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265738152607360f81b602082015260400192915050565b6000611b5d602583611f78565b7f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b602082015260400192915050565b6000611ba4602483611f78565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b602082015260400192915050565b6000611bea602783611f78565b60008051602061202f8339815191528152666f6c3a3238305d60c81b602082015260400192915050565b6000611c21602583611f78565b6000805160206121038339815191528152643a3136385d60d81b602082015260400192915050565b6000611c56603a83611f78565b7f496e76616c69642062616c616e6365207265636f726420626c6f636b206e756d815279626572205b526576656e7565546f6b656e2e736f6c3a3239325d60301b602082015260400192915050565b6000611cb2601f83611f78565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b61179081611fa8565b60408101611cf58285611787565b6104a460208301846117b1565b60408101611cf58285611796565b60608101611d1e8286611796565b611d2b60208301856117b1565b6115ef60408301846117b1565b60208101610425828461179f565b60808101611d5482876117a8565b611d616020830186611787565b611d6e6040830185611796565b611d7b60608301846117b1565b95945050505050565b60608101611d9282866117a8565b611d2b6020830185611787565b6020810161042582846117b1565b6020808252810161042281846117ba565b6020808252810161042281846117f2565b602080825281016104258161187c565b60208082528101610425816118b1565b60208082528101610425816118f6565b602080825281016104258161192f565b6020808252810161042581611973565b60208082528101610425816119aa565b60208082528101610425816119fe565b6020808252810161042581611a50565b6020808252810161042581611a93565b6020808252810161042581611ad7565b6020808252810161042581611b0d565b6020808252810161042581611b50565b6020808252810161042581611b97565b6020808252810161042581611bdd565b6020808252810161042581611c14565b6020808252810161042581611c49565b6020808252810161042581611ca5565b60408101611cf582856117b1565b602081016104258284611cde565b6040518181016001600160401b0381118282101715611f1957600080fd5b604052919050565b60006001600160401b03821115611f3757600080fd5b5060209081020190565b60006001600160401b03821115611f5757600080fd5b506020601f91909101601f19160190565b60009081526020902090565b5190565b90815260200190565b600061042582611f9c565b151590565b600061042582611f81565b6001600160a01b031690565b60ff1690565b600061042582611f91565b82818337506000910152565b60005b83811015611fe0578181015183820152602001611fc8565b83811115611fef576000848401525b50505050565b601f01601f191690565b61200881611f81565b811461081657600080fd5b61200881611f8c565b61200881611f91565b6120088161046d56fe4d696e74696e672064697361626c6564205b526576656e7565546f6b656e2e7345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef55706772616465206661696c6564205b526576656e7565546f6b656e2e736f6c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a7231582067b65be887c78aa65ed120e4b140c9a6a0c1873d1defde40257327911fecf0656c6578706572696d656e74616cf564736f6c634300050d0040

Swarm Source

bzzr://67b65be887c78aa65ed120e4b140c9a6a0c1873d1defde40257327911fecf065
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.