ETH Price: $2,627.01 (+0.52%)

Token

WINS LIVE (WNL)
 

Overview

Max Total Supply

77,777,777 WNL

Holders

1,316 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,694 WNL

Value
$0.00
0x9C0B192f0db44f0fAc5f1164f2F46bD822FD812D
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Online gambling

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WINSToken

Compiler Version
v0.5.9+commit.e560f70d

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-06-11
*/

pragma solidity 0.5.9;


library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

/// @dev It is ERC20 compliant, but still needs to under go further testing.

contract Ownable {
    address payable public owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () public {
        owner = msg.sender;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param _newOwner The address to transfer ownership to.
     */
    function transferOwnership(address payable _newOwner) external onlyOwner {
        require(_newOwner != address(0));
        owner = _newOwner;
        emit OwnershipTransferred(owner, _newOwner);
    }
}

contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 _amount, address _token, bytes calldata  _data) external;
}

/// @dev The actual token contract, the default owner is the msg.sender
contract WINSToken is Ownable {

    string public name;                //The Token's name: e.g. DigixDAO Tokens
    uint8 public decimals;             //Number of decimals of the smallest unit
    string public symbol;              //An identifier: e.g. REP

    /// @dev `Checkpoint` is the structure that attaches a block number to a
    ///  given value, the block number attached is the one that last changed the
    ///  value
    struct  Checkpoint {

        // `fromBlock` is the block number that the value was generated from
        uint128 fromBlock;

        // `value` is the amount of tokens at a specific block number
        uint128 value;
    }

    // `creationBlock` is the block number that the Clone Token was created
    uint public creationBlock;

    // Flag that determines if the token is transferable or not.
    bool public transfersEnabled;

    // `balances` is the map that tracks the balance of each address, in this
    //  contract when the balance changes the block number that the change
    //  occurred is also included in the map
    mapping (address => Checkpoint[]) balances;

    // `allowed` tracks any extra transfer rights as in all ERC20 tokens
    mapping (address => mapping (address => uint256)) allowed;

    // Tracks the history of the `totalSupply` of the token
    Checkpoint[] totalSupplyHistory;
    Checkpoint[] totalSupplyHolders;
    mapping (address => bool) public holders;
    uint public minHolderAmount = 20000 ether;

    ////////////////
    // Events
    ////////////////
    event ClaimedTokens(address indexed _token, address indexed _owner, uint _amount);
    event Transfer(address indexed _from, address indexed _to, uint256 _amount);
    event Approval(address indexed _owner, address indexed _spender, uint256 _amount);


    modifier whenTransfersEnabled() {
        require(transfersEnabled);
        _;
    }

    ////////////////
    // Constructor
    ////////////////


    constructor () public {
        name = "WINS LIVE";
        symbol = "WNL";
        decimals = 18;
        creationBlock = block.number;
        transfersEnabled = true;

        //initial emission
        uint _amount = 77777777 * (10 ** uint256(decimals));
        updateValueAtNow(totalSupplyHistory, _amount);
        updateValueAtNow(balances[msg.sender], _amount);

        holders[msg.sender] = true;
        updateValueAtNow(totalSupplyHolders, _amount);
        emit Transfer(address(0), msg.sender, _amount);
    }


    /// @notice The fallback function
    function () external payable {}

    ///////////////////
    // ERC20 Methods
    ///////////////////

    /// @notice Send `_amount` tokens to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _amount) whenTransfersEnabled external returns (bool) {
        doTransfer(msg.sender, _to, _amount);
        return true;
    }

    /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it
    ///  is approved by `_from`
    /// @param _from The address holding the tokens being transferred
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function transferFrom(address _from, address _to, uint256 _amount) whenTransfersEnabled external returns (bool) {
        // The standard ERC 20 transferFrom functionality
        require(allowed[_from][msg.sender] >= _amount);
        allowed[_from][msg.sender] -= _amount;
        doTransfer(_from, _to, _amount);
        return true;
    }

    /// @dev This is the actual transfer function in the token contract, it can
    ///  only be called by other functions in this contract.
    /// @param _from The address holding the tokens being transferred
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function doTransfer(address _from, address _to, uint _amount) internal {

        if (_amount == 0) {
            emit Transfer(_from, _to, _amount);    // Follow the spec to louch the event when transfer 0
            return;
        }

        // Do not allow transfer to 0x0 or the token contract itself
        require((_to != address(0)) && (_to != address(this)));

        // If the amount being transfered is more than the balance of the
        //  account the transfer throws
        uint previousBalanceFrom = balanceOfAt(_from, block.number);

        require(previousBalanceFrom >= _amount);

        // First update the balance array with the new value for the address
        //  sending the tokens
        updateValueAtNow(balances[_from], previousBalanceFrom - _amount);

        // Then update the balance array with the new value for the address
        //  receiving the tokens
        uint previousBalanceTo = balanceOfAt(_to, block.number);
        require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
        updateValueAtNow(balances[_to], previousBalanceTo + _amount);

        // An event to make the transfer easy to find on the blockchain
        emit Transfer(_from, _to, _amount);


        uint curTotalSupplyHolders = totalSupplyHoldersAt(block.number);

        if (holders[_from]) {
            if (previousBalanceFrom - _amount < minHolderAmount) {
                delete holders[_from];
                require(curTotalSupplyHolders >= previousBalanceFrom);
                curTotalSupplyHolders = curTotalSupplyHolders - previousBalanceFrom;
                updateValueAtNow(totalSupplyHolders, curTotalSupplyHolders);
            } else {
                require(curTotalSupplyHolders >= _amount);
                curTotalSupplyHolders = curTotalSupplyHolders - _amount;
                updateValueAtNow(totalSupplyHolders, curTotalSupplyHolders);
            }
        }

        if (previousBalanceTo + _amount >= minHolderAmount) {
            if (holders[_to]) {
                require(curTotalSupplyHolders + _amount >= curTotalSupplyHolders); // Check for overflow
                updateValueAtNow(totalSupplyHolders, curTotalSupplyHolders + _amount);
            }

            if (!holders[_to]) {
                holders[_to] = true;
                require(curTotalSupplyHolders + previousBalanceTo + _amount >= curTotalSupplyHolders); // Check for overflow
                updateValueAtNow(totalSupplyHolders, curTotalSupplyHolders + previousBalanceTo + _amount);
            }
        }


    }

    /// @param _owner The address that's balance is being requested
    /// @return The balance of `_owner` at the current block
    function balanceOf(address _owner) external view returns (uint256 balance) {
        return balanceOfAt(_owner, block.number);
    }

    /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on
    ///  its behalf. This is a modified version of the ERC20 approve function
    ///  to be a little bit safer
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _amount The amount of tokens to be approved for transfer
    /// @return True if the approval was successful
    function approve(address _spender, uint256 _amount) whenTransfersEnabled public returns (bool) {
        // To change the approve amount you first have to reduce the addresses`
        //  allowance to zero by calling `approve(_spender,0)` if it is not
        //  already 0 to mitigate the race condition described here:
        //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
        require((_amount == 0) || (allowed[msg.sender][_spender] == 0));

        allowed[msg.sender][_spender] = _amount;
        emit Approval(msg.sender, _spender, _amount);
        return true;
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowance[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _addedAmount The amount of tokens to increase the allowance by.
     */
    function increaseApproval(address _spender, uint _addedAmount) external returns (bool) {
        require(allowed[msg.sender][_spender] + _addedAmount >= allowed[msg.sender][_spender]); // Check for overflow
        allowed[msg.sender][_spender] = allowed[msg.sender][_spender] + _addedAmount;
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowance[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedAmount The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(address _spender, uint _subtractedAmount) external returns (bool)
    {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedAmount >= oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = oldValue - _subtractedAmount;
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }


    /// @dev This function makes it easy to read the `allowed[]` map
    /// @param _owner The address of the account that owns the token
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens of _owner that _spender is allowed
    ///  to spend
    function allowance(address _owner, address _spender) external view returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }

    /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on
    ///  its behalf, and then a function is triggered in the contract that is
    ///  being approved, `_spender`. This allows users to use their tokens to
    ///  interact with contracts in one function call instead of two
    /// @param _spender The address of the contract able to transfer the tokens
    /// @param _amount The amount of tokens to be approved for transfer
    /// @return True if the function call was successful
    function approveAndCall(address _spender, uint256 _amount, bytes calldata _extraData) external returns (bool) {
        require(approve(_spender, _amount));

        ApproveAndCallFallBack(_spender).receiveApproval(
            msg.sender,
            _amount,
            address(this),
            _extraData
        );

        return true;
    }

    /// @dev This function makes it easy to get the total number of tokens
    /// @return The total number of tokens
    function totalSupply() external view returns (uint) {
        return totalSupplyAt(block.number);
    }

    function currentTotalSupplyHolders() external view returns (uint) {
        return totalSupplyHoldersAt(block.number);
    }

    ////////////////
    // Query balance and totalSupply in History
    ////////////////

    /// @dev Queries the balance of `_owner` at a specific `_blockNumber`
    /// @param _owner The address from which the balance will be retrieved
    /// @param _blockNumber The block number when the balance is queried
    /// @return The balance at `_blockNumber`
    function balanceOfAt(address _owner, uint _blockNumber) public view returns (uint) {
        if ((balances[_owner].length == 0) || (balances[_owner][0].fromBlock > _blockNumber)) {
            return 0;
            // This will return the expected balance during normal situations
        } else {
            return getValueAt(balances[_owner], _blockNumber);
        }
    }

    /// @notice Total amount of tokens at a specific `_blockNumber`.
    /// @param _blockNumber The block number when the totalSupply is queried
    /// @return The total amount of tokens at `_blockNumber`
    function totalSupplyAt(uint _blockNumber) public view returns(uint) {
        if ((totalSupplyHistory.length == 0) || (totalSupplyHistory[0].fromBlock > _blockNumber)) {
            return 0;
            // This will return the expected totalSupply during normal situations
        } else {
            return getValueAt(totalSupplyHistory, _blockNumber);
        }
    }


    function totalSupplyHoldersAt(uint _blockNumber) public view returns(uint) {
        if ((totalSupplyHolders.length == 0) || (totalSupplyHolders[0].fromBlock > _blockNumber)) {
            return 0;
            // This will return the expected totalSupply during normal situations
        } else {
            return getValueAt(totalSupplyHolders, _blockNumber);
        }
    }

    function isHolder(address _holder) external view returns(bool) {
        return holders[_holder];
    }


    function destroyTokens(uint _amount) onlyOwner public returns (bool) {
        uint curTotalSupply = totalSupplyAt(block.number);
        require(curTotalSupply >= _amount);
        uint previousBalanceFrom = balanceOfAt(msg.sender, block.number);

        require(previousBalanceFrom >= _amount);
        updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount);
        updateValueAtNow(balances[msg.sender], previousBalanceFrom - _amount);
        emit Transfer(msg.sender, address(0), _amount);

        uint curTotalSupplyHolders = totalSupplyHoldersAt(block.number);
        if (holders[msg.sender]) {
            if (previousBalanceFrom - _amount < minHolderAmount) {
                delete holders[msg.sender];
                require(curTotalSupplyHolders >= previousBalanceFrom);
                updateValueAtNow(totalSupplyHolders, curTotalSupplyHolders - previousBalanceFrom);
            } else {
                require(curTotalSupplyHolders >= _amount);
                updateValueAtNow(totalSupplyHolders, curTotalSupplyHolders - _amount);
            }
        }
        return true;
    }


    ////////////////
    // Enable tokens transfers
    ////////////////


    /// @notice Enables token holders to transfer their tokens freely if true
    /// @param _transfersEnabled True if transfers are allowed in the clone
    function enableTransfers(bool _transfersEnabled) public onlyOwner {
        transfersEnabled = _transfersEnabled;
    }

    ////////////////
    // Internal helper functions to query and set a value in a snapshot array
    ////////////////

    /// @dev `getValueAt` retrieves the number of tokens at a given block number
    /// @param checkpoints The history of values being queried
    /// @param _block The block number to retrieve the value at
    /// @return The number of tokens being queried
    function getValueAt(Checkpoint[] storage checkpoints, uint _block) view internal returns (uint) {
        if (checkpoints.length == 0) return 0;

        // Shortcut for the actual value
        if (_block >= checkpoints[checkpoints.length-1].fromBlock)
            return checkpoints[checkpoints.length-1].value;
        if (_block < checkpoints[0].fromBlock) return 0;

        // Binary search of the value in the array
        uint min = 0;
        uint max = checkpoints.length-1;
        while (max > min) {
            uint mid = (max + min + 1)/ 2;
            if (checkpoints[mid].fromBlock<=_block) {
                min = mid;
            } else {
                max = mid-1;
            }
        }
        return checkpoints[min].value;
    }

    /// @dev `updateValueAtNow` used to update the `balances` map and the
    ///  `totalSupplyHistory`
    /// @param checkpoints The history of data being updated
    /// @param _value The new number of tokens
    function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value) internal  {
        if ((checkpoints.length == 0)
            || (checkpoints[checkpoints.length -1].fromBlock < block.number)) {
            Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ];
            newCheckPoint.fromBlock =  uint128(block.number);
            newCheckPoint.value = uint128(_value);
        } else {
            Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1];
            oldCheckPoint.value = uint128(_value);
        }
    }


    /// @dev Helper function to return a min betwen the two uints
    function min(uint a, uint b) pure internal returns (uint) {
        return a < b ? a : b;
    }



    //////////
    // Safety Methods
    //////////

    /// @notice This method can be used by the owner to extract mistakenly
    ///  sent tokens to this contract.
    /// @param _token The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
    function claimTokens(address payable _token) external onlyOwner {
        if (_token == address(0)) {
            owner.transfer(address(this).balance);
            return;
        }

        WINSToken token = WINSToken(_token);
        uint balance = token.balanceOf(address(this));
        token.transfer(owner, balance);
        emit ClaimedTokens(_token, owner, balance);
    }


    function setMinHolderAmount(uint _minHolderAmount) external onlyOwner {
        minHolderAmount = _minHolderAmount;
    }
}


contract DividendManager is Ownable {
    using SafeMath for uint;

    event DividendDeposited(address indexed _depositor, uint256 _blockNumber, uint256 _amount, uint256 _totalSupply, uint256 _dividendIndex);
    event DividendClaimed(address indexed _claimer, uint256 _dividendIndex, uint256 _claim);
    event DividendRecycled(address indexed _recycler, uint256 _blockNumber, uint256 _amount, uint256 _totalSupply, uint256 _dividendIndex);

    WINSToken public token;

    uint256 public RECYCLE_TIME = 365 days;
    uint public minHolderAmount = 20000 ether;

    struct Dividend {
        uint256 blockNumber;
        uint256 timestamp;
        uint256 amount;
        uint256 claimedAmount;
        uint256 totalSupply;
        bool recycled;
        mapping (address => bool) claimed;
    }

    Dividend[] public dividends;

    mapping (address => uint256) dividendsClaimed;

    struct NotClaimed {
        uint listIndex;
        bool exists;
    }

    mapping (address => NotClaimed) public notClaimed;
    address[] public notClaimedList;

    modifier validDividendIndex(uint256 _dividendIndex) {
        require(_dividendIndex < dividends.length);
        _;
    }

    constructor(address payable _token) public {
        token = WINSToken(_token);
    }

    function depositDividend() payable public {
        uint256 currentSupply = token.totalSupplyHoldersAt(block.number);

        uint i;
        for( i = 0; i < notClaimedList.length; i++) {
            if (token.isHolder(notClaimedList[i])) {
                currentSupply = currentSupply.sub(token.balanceOf(notClaimedList[i]));
            }
        }

        uint256 dividendIndex = dividends.length;
        uint256 blockNumber = SafeMath.sub(block.number, 1);
        dividends.push(
            Dividend(
                blockNumber,
                getNow(),
                msg.value,
                0,
                currentSupply,
                false
            )
        );
        emit DividendDeposited(msg.sender, blockNumber, msg.value, currentSupply, dividendIndex);
    }


    function claimDividend(uint256 _dividendIndex) public validDividendIndex(_dividendIndex)
    {
        require(!notClaimed[msg.sender].exists);

        Dividend storage dividend = dividends[_dividendIndex];

        require(dividend.claimed[msg.sender] == false);
        require(dividend.recycled == false);

        uint256 balance = token.balanceOfAt(msg.sender, dividend.blockNumber);
        require(balance >= minHolderAmount);

        uint256 claim = balance.mul(dividend.amount).div(dividend.totalSupply);
        dividend.claimed[msg.sender] = true;
        dividend.claimedAmount = SafeMath.add(dividend.claimedAmount, claim);

        if (claim > 0) {
            msg.sender.transfer(claim);
            emit DividendClaimed(msg.sender, _dividendIndex, claim);
        }
    }

    function claimDividendAll() public {
        require(dividendsClaimed[msg.sender] < dividends.length);
        for (uint i = dividendsClaimed[msg.sender]; i < dividends.length; i++) {
            if ((dividends[i].claimed[msg.sender] == false) && (dividends[i].recycled == false)) {
                dividendsClaimed[msg.sender] = SafeMath.add(i, 1);
                claimDividend(i);
            }
        }
    }

    function recycleDividend(uint256 _dividendIndex) public
    onlyOwner
    validDividendIndex(_dividendIndex)
    {
        Dividend storage dividend = dividends[_dividendIndex];
        require(dividend.recycled == false);
        require(dividend.timestamp < SafeMath.sub(getNow(), RECYCLE_TIME));
        dividends[_dividendIndex].recycled = true;
        uint256 currentSupply = token.totalSupplyAt(block.number);
        uint256 remainingAmount = SafeMath.sub(dividend.amount, dividend.claimedAmount);
        uint256 dividendIndex = dividends.length;
        uint256 blockNumber = SafeMath.sub(block.number, 1);
        dividends.push(
            Dividend(
                blockNumber,
                getNow(),
                remainingAmount,
                0,
                currentSupply,
                false
            )
        );
        emit DividendRecycled(msg.sender, blockNumber, remainingAmount, currentSupply, dividendIndex);
    }

    //Function is mocked for tests
    function getNow() internal view returns (uint256) {
        return now;
    }

    function dividendsCount() external view returns (uint) {
        return dividends.length;
    }


    function registerNotClaimed(address _notClaimed) onlyOwner public {
        require(_notClaimed != address(0));
        if (!notClaimed[_notClaimed].exists) {
            notClaimed[_notClaimed] = NotClaimed({
                listIndex: notClaimedList.length,
                exists: true
                });
            notClaimedList.push(_notClaimed);
        }
    }


    function unregisterNotClaimed(address _notClaimed) onlyOwner public {
        require(notClaimed[_notClaimed].exists && notClaimedList.length > 0);
        uint lastIdx = notClaimedList.length - 1;
        notClaimed[notClaimedList[lastIdx]].listIndex = notClaimed[_notClaimed].listIndex;
        notClaimedList[notClaimed[_notClaimed].listIndex] = notClaimedList[lastIdx];
        notClaimedList.length--;
        delete notClaimed[_notClaimed];
    }

    /// @notice This method can be used by the owner to extract mistakenly
    ///  sent tokens to this contract.
    /// @param _token The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
    function claimTokens(address payable _token) external onlyOwner {
        //        if (_token == 0x0) {
        //            owner.transfer(address(this).balance);
        //            return;
        //        }

        WINSToken claimToken = WINSToken(_token);
        uint balance = claimToken.balanceOf(address(this));
        claimToken.transfer(owner, balance);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"holders","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentTotalSupplyHolders","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedAmount","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"destroyTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyHoldersAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minHolderAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minHolderAmount","type":"uint256"}],"name":"setMinHolderAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"isHolder","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedAmount","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_transfersEnabled","type":"bool"}],"name":"enableTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405269043c33c1937564800000600b553480156200001f57600080fd5b50600080546001600160a01b031916331790556040805180820190915260098082527f57494e53204c4956450000000000000000000000000000000000000000000000602090920191825262000078916001916200027d565b506040805180820190915260038082527f574e4c00000000000000000000000000000000000000000000000000000000006020909201918252620000bd91816200027d565b5060028054601260ff1991821617918290554360045560058054909116600117905560ff16600a0a6304a2cb7102620000f86008826200018b565b3360009081526006602052604090206200011c90826001600160e01b036200018b16565b336000908152600a60205260409020805460ff191660011790556200014c6009826001600160e01b036200018b16565b60408051828152905133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506200034e565b81541580620001c157508154439083906000198101908110620001aa57fe5b6000918252602090912001546001600160801b0316105b15620002315781546000908390620001dd826001830162000302565b81548110620001e857fe5b600091825260209091200180546001600160801b03848116700100000000000000000000000000000000024382166001600160801b031990931692909217161790555062000279565b8154600090839060001981019081106200024757fe5b600091825260209091200180546001600160801b03808516700100000000000000000000000000000000029116179055505b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002c057805160ff1916838001178555620002f0565b82800160010185558215620002f0579182015b82811115620002f0578251825591602001919060010190620002d3565b50620002fe9291506200032e565b5090565b8154818355818111156200032957600083815260209020620003299181019083016200032e565b505050565b6200034b91905b80821115620002fe576000815560010162000335565b90565b61164b806200035e6000396000f3fe60806040526004361061019c5760003560e01c80638da5cb5b116100ec578063cae9ca511161008a578063dd62ed3e11610064578063dd62ed3e1461065b578063df8de3e714610696578063f2fde38b146106c9578063f41e60c5146106fc5761019c565b8063cae9ca511461055d578063d4d7b19a146105ef578063d73dd623146106225761019c565b8063a9059cbb116100c6578063a9059cbb146104d0578063bea4c88314610509578063bef97c871461051e578063c2ef2a06146105335761019c565b80638da5cb5b1461046057806395d89b4114610491578063981b24d0146104a65761019c565b80632c1918e811610159578063661884631161013357806366188463146103a057806367fbd289146103d95780636a7042521461040357806370a082311461042d5761019c565b80632c1918e814610327578063313ce5671461033c5780634ee2cd7e146103675761019c565b806306fdde031461019e578063095ea7b314610228578063176345141461027557806318160ddd1461029c57806318a5bbdc146102b157806323b872dd146102e4575b005b3480156101aa57600080fd5b506101b3610728565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ed5781810151838201526020016101d5565b50505050905090810190601f16801561021a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023457600080fd5b506102616004803603604081101561024b57600080fd5b506001600160a01b0381351690602001356107b5565b604080519115158252519081900360200190f35b34801561028157600080fd5b5061028a610866565b60408051918252519081900360200190f35b3480156102a857600080fd5b5061028a61086c565b3480156102bd57600080fd5b50610261600480360360208110156102d457600080fd5b50356001600160a01b031661087d565b3480156102f057600080fd5b506102616004803603606081101561030757600080fd5b506001600160a01b03813581169160208101359091169060400135610892565b34801561033357600080fd5b5061028a610913565b34801561034857600080fd5b5061035161091e565b6040805160ff9092168252519081900360200190f35b34801561037357600080fd5b5061028a6004803603604081101561038a57600080fd5b506001600160a01b038135169060200135610927565b3480156103ac57600080fd5b50610261600480360360408110156103c357600080fd5b506001600160a01b0381351690602001356109b7565b3480156103e557600080fd5b50610261600480360360208110156103fc57600080fd5b5035610a9a565b34801561040f57600080fd5b5061028a6004803603602081101561042657600080fd5b5035610bd6565b34801561043957600080fd5b5061028a6004803603602081101561045057600080fd5b50356001600160a01b0316610c28565b34801561046c57600080fd5b50610475610c34565b604080516001600160a01b039092168252519081900360200190f35b34801561049d57600080fd5b506101b3610c43565b3480156104b257600080fd5b5061028a600480360360208110156104c957600080fd5b5035610c9e565b3480156104dc57600080fd5b50610261600480360360408110156104f357600080fd5b506001600160a01b038135169060200135610ce9565b34801561051557600080fd5b5061028a610d0f565b34801561052a57600080fd5b50610261610d15565b34801561053f57600080fd5b5061019c6004803603602081101561055657600080fd5b5035610d1e565b34801561056957600080fd5b506102616004803603606081101561058057600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156105b057600080fd5b8201836020820111156105c257600080fd5b803590602001918460018302840111640100000000831117156105e457600080fd5b509092509050610d3a565b3480156105fb57600080fd5b506102616004803603602081101561061257600080fd5b50356001600160a01b0316610e03565b34801561062e57600080fd5b506102616004803603604081101561064557600080fd5b506001600160a01b038135169060200135610e21565b34801561066757600080fd5b5061028a6004803603604081101561067e57600080fd5b506001600160a01b0381358116916020013516610ebf565b3480156106a257600080fd5b5061019c600480360360208110156106b957600080fd5b50356001600160a01b0316610eea565b3480156106d557600080fd5b5061019c600480360360208110156106ec57600080fd5b50356001600160a01b031661109a565b34801561070857600080fd5b5061019c6004803603602081101561071f57600080fd5b50351515611112565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107ad5780601f10610782576101008083540402835291602001916107ad565b820191906000526020600020905b81548152906001019060200180831161079057829003601f168201915b505050505081565b60055460009060ff166107c757600080fd5b8115806107f557503360009081526007602090815260408083206001600160a01b0387168452909152902054155b6107fe57600080fd5b3360008181526007602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60045481565b600061087743610c9e565b90505b90565b600a6020526000908152604090205460ff1681565b60055460009060ff166108a457600080fd5b6001600160a01b03841660009081526007602090815260408083203384529091529020548211156108d457600080fd5b6001600160a01b038416600090815260076020908152604080832033845290915290208054839003905561090984848461113c565b5060019392505050565b600061087743610bd6565b60025460ff1681565b6001600160a01b038216600090815260066020526040812054158061098157506001600160a01b0383166000908152600660205260408120805484929061096a57fe5b6000918252602090912001546001600160801b0316115b1561098e57506000610860565b6001600160a01b03831660009081526006602052604090206109b090836113d0565b9050610860565b3360009081526007602090815260408083206001600160a01b0386168452909152812054808310610a0b573360009081526007602090815260408083206001600160a01b0388168452909152812055610a34565b3360009081526007602090815260408083206001600160a01b0388168452909152902083820390555b3360008181526007602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600080546001600160a01b03163314610ab257600080fd5b6000610abd43610c9e565b905082811015610acc57600080fd5b6000610ad83343610927565b905083811015610ae757600080fd5b610af46008858403611500565b336000908152600660205260409020610b0f90858303611500565b60408051858152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a36000610b5243610bd6565b336000908152600a602052604090205490915060ff1615610bc957600b548583031015610baf57336000908152600a60205260409020805460ff1916905581811015610b9d57600080fd5b610baa6009838303611500565b610bc9565b84811015610bbc57600080fd5b610bc96009868303611500565b600193505050505b919050565b6009546000901580610c095750816009600081548110610bf257fe5b6000918252602090912001546001600160801b0316115b15610c1657506000610bd1565b610c216009836113d0565b9050610bd1565b60006108608243610927565b6000546001600160a01b031681565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107ad5780601f10610782576101008083540402835291602001916107ad565b6008546000901580610cd15750816008600081548110610cba57fe5b6000918252602090912001546001600160801b0316115b15610cde57506000610bd1565b610c216008836113d0565b60055460009060ff16610cfb57600080fd5b610d0633848461113c565b50600192915050565b600b5481565b60055460ff1681565b6000546001600160a01b03163314610d3557600080fd5b600b55565b6000610d4685856107b5565b610d4f57600080fd5b604051638f4ffcb160e01b81523360048201818152602483018790523060448401819052608060648501908152608485018790526001600160a01b038a1694638f4ffcb194938a93928a928a92919060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610de057600080fd5b505af1158015610df4573d6000803e3d6000fd5b50600198975050505050505050565b6001600160a01b03166000908152600a602052604090205460ff1690565b3360009081526007602090815260408083206001600160a01b03861684529091528120548281011015610e5357600080fd5b3360008181526007602090815260408083206001600160a01b038816808552908352928190208054870190819055815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6000546001600160a01b03163314610f0157600080fd5b6001600160a01b038116610f5057600080546040516001600160a01b0390911691303180156108fc02929091818181858888f19350505050158015610f4a573d6000803e3d6000fd5b50611097565b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610f9b57600080fd5b505afa158015610faf573d6000803e3d6000fd5b505050506040513d6020811015610fc557600080fd5b5051600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b15801561102257600080fd5b505af1158015611036573d6000803e3d6000fd5b505050506040513d602081101561104c57600080fd5b50506000546040805183815290516001600160a01b03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a350505b50565b6000546001600160a01b031633146110b157600080fd5b6001600160a01b0381166110c457600080fd5b600080546001600160a01b0319166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461112957600080fd5b6005805460ff1916911515919091179055565b8061119157816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36113cb565b6001600160a01b038216158015906111b257506001600160a01b0382163014155b6111bb57600080fd5b60006111c78443610927565b9050818110156111d657600080fd5b6001600160a01b03841660009081526006602052604090206111fa90838303611500565b60006112068443610927565b905080838201101561121757600080fd5b6001600160a01b038416600090815260066020526040902061123b90828501611500565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600061129143610bd6565b6001600160a01b0387166000908152600a602052604090205490915060ff161561131c57600b548484031015611301576001600160a01b0386166000908152600a60205260409020805460ff19169055828110156112ee57600080fd5b8290036112fc600982611500565b61131c565b8381101561130e57600080fd5b83900361131c600982611500565b600b54848301106113c7576001600160a01b0385166000908152600a602052604090205460ff16156113645780848201101561135757600080fd5b6113646009858301611500565b6001600160a01b0385166000908152600a602052604090205460ff166113c7576001600160a01b0385166000908152600a60205260409020805460ff1916600117905581810184018111156113b857600080fd5b6113c760098584840101611500565b5050505b505050565b81546000906113e157506000610860565b8254839060001981019081106113f357fe5b6000918252602090912001546001600160801b031682106114435782548390600019810190811061142057fe5b600091825260209091200154600160801b90046001600160801b03169050610860565b8260008154811061145057fe5b6000918252602090912001546001600160801b031682101561147457506000610860565b8254600090600019015b818111156114cf5760006002600183850101049050848682815481106114a057fe5b6000918252602090912001546001600160801b0316116114c2578092506114c9565b6001810391505b5061147e565b8482815481106114db57fe5b600091825260209091200154600160801b90046001600160801b031695945050505050565b815415806115345750815443908390600019810190811061151d57fe5b6000918252602090912001546001600160801b0316105b1561159b578154600090839061154d82600183016115d9565b8154811061155757fe5b600091825260209091200180546001600160801b03848116600160801b024382166fffffffffffffffffffffffffffffffff199093169290921716179055506115d5565b8154600090839060001981019081106115b057fe5b600091825260209091200180546001600160801b03808516600160801b029116179055505b5050565b8154818355818111156113cb576000838152602090206113cb91810190830161087a91905b8082111561161257600081556001016115fe565b509056fea265627a7a723058207ceee917a141972bf5e26be2b07de16f87d89f31b5d5cd42418789a4641e848f64736f6c63430005090032

Deployed Bytecode

0x60806040526004361061019c5760003560e01c80638da5cb5b116100ec578063cae9ca511161008a578063dd62ed3e11610064578063dd62ed3e1461065b578063df8de3e714610696578063f2fde38b146106c9578063f41e60c5146106fc5761019c565b8063cae9ca511461055d578063d4d7b19a146105ef578063d73dd623146106225761019c565b8063a9059cbb116100c6578063a9059cbb146104d0578063bea4c88314610509578063bef97c871461051e578063c2ef2a06146105335761019c565b80638da5cb5b1461046057806395d89b4114610491578063981b24d0146104a65761019c565b80632c1918e811610159578063661884631161013357806366188463146103a057806367fbd289146103d95780636a7042521461040357806370a082311461042d5761019c565b80632c1918e814610327578063313ce5671461033c5780634ee2cd7e146103675761019c565b806306fdde031461019e578063095ea7b314610228578063176345141461027557806318160ddd1461029c57806318a5bbdc146102b157806323b872dd146102e4575b005b3480156101aa57600080fd5b506101b3610728565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ed5781810151838201526020016101d5565b50505050905090810190601f16801561021a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023457600080fd5b506102616004803603604081101561024b57600080fd5b506001600160a01b0381351690602001356107b5565b604080519115158252519081900360200190f35b34801561028157600080fd5b5061028a610866565b60408051918252519081900360200190f35b3480156102a857600080fd5b5061028a61086c565b3480156102bd57600080fd5b50610261600480360360208110156102d457600080fd5b50356001600160a01b031661087d565b3480156102f057600080fd5b506102616004803603606081101561030757600080fd5b506001600160a01b03813581169160208101359091169060400135610892565b34801561033357600080fd5b5061028a610913565b34801561034857600080fd5b5061035161091e565b6040805160ff9092168252519081900360200190f35b34801561037357600080fd5b5061028a6004803603604081101561038a57600080fd5b506001600160a01b038135169060200135610927565b3480156103ac57600080fd5b50610261600480360360408110156103c357600080fd5b506001600160a01b0381351690602001356109b7565b3480156103e557600080fd5b50610261600480360360208110156103fc57600080fd5b5035610a9a565b34801561040f57600080fd5b5061028a6004803603602081101561042657600080fd5b5035610bd6565b34801561043957600080fd5b5061028a6004803603602081101561045057600080fd5b50356001600160a01b0316610c28565b34801561046c57600080fd5b50610475610c34565b604080516001600160a01b039092168252519081900360200190f35b34801561049d57600080fd5b506101b3610c43565b3480156104b257600080fd5b5061028a600480360360208110156104c957600080fd5b5035610c9e565b3480156104dc57600080fd5b50610261600480360360408110156104f357600080fd5b506001600160a01b038135169060200135610ce9565b34801561051557600080fd5b5061028a610d0f565b34801561052a57600080fd5b50610261610d15565b34801561053f57600080fd5b5061019c6004803603602081101561055657600080fd5b5035610d1e565b34801561056957600080fd5b506102616004803603606081101561058057600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156105b057600080fd5b8201836020820111156105c257600080fd5b803590602001918460018302840111640100000000831117156105e457600080fd5b509092509050610d3a565b3480156105fb57600080fd5b506102616004803603602081101561061257600080fd5b50356001600160a01b0316610e03565b34801561062e57600080fd5b506102616004803603604081101561064557600080fd5b506001600160a01b038135169060200135610e21565b34801561066757600080fd5b5061028a6004803603604081101561067e57600080fd5b506001600160a01b0381358116916020013516610ebf565b3480156106a257600080fd5b5061019c600480360360208110156106b957600080fd5b50356001600160a01b0316610eea565b3480156106d557600080fd5b5061019c600480360360208110156106ec57600080fd5b50356001600160a01b031661109a565b34801561070857600080fd5b5061019c6004803603602081101561071f57600080fd5b50351515611112565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107ad5780601f10610782576101008083540402835291602001916107ad565b820191906000526020600020905b81548152906001019060200180831161079057829003601f168201915b505050505081565b60055460009060ff166107c757600080fd5b8115806107f557503360009081526007602090815260408083206001600160a01b0387168452909152902054155b6107fe57600080fd5b3360008181526007602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60045481565b600061087743610c9e565b90505b90565b600a6020526000908152604090205460ff1681565b60055460009060ff166108a457600080fd5b6001600160a01b03841660009081526007602090815260408083203384529091529020548211156108d457600080fd5b6001600160a01b038416600090815260076020908152604080832033845290915290208054839003905561090984848461113c565b5060019392505050565b600061087743610bd6565b60025460ff1681565b6001600160a01b038216600090815260066020526040812054158061098157506001600160a01b0383166000908152600660205260408120805484929061096a57fe5b6000918252602090912001546001600160801b0316115b1561098e57506000610860565b6001600160a01b03831660009081526006602052604090206109b090836113d0565b9050610860565b3360009081526007602090815260408083206001600160a01b0386168452909152812054808310610a0b573360009081526007602090815260408083206001600160a01b0388168452909152812055610a34565b3360009081526007602090815260408083206001600160a01b0388168452909152902083820390555b3360008181526007602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600080546001600160a01b03163314610ab257600080fd5b6000610abd43610c9e565b905082811015610acc57600080fd5b6000610ad83343610927565b905083811015610ae757600080fd5b610af46008858403611500565b336000908152600660205260409020610b0f90858303611500565b60408051858152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a36000610b5243610bd6565b336000908152600a602052604090205490915060ff1615610bc957600b548583031015610baf57336000908152600a60205260409020805460ff1916905581811015610b9d57600080fd5b610baa6009838303611500565b610bc9565b84811015610bbc57600080fd5b610bc96009868303611500565b600193505050505b919050565b6009546000901580610c095750816009600081548110610bf257fe5b6000918252602090912001546001600160801b0316115b15610c1657506000610bd1565b610c216009836113d0565b9050610bd1565b60006108608243610927565b6000546001600160a01b031681565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107ad5780601f10610782576101008083540402835291602001916107ad565b6008546000901580610cd15750816008600081548110610cba57fe5b6000918252602090912001546001600160801b0316115b15610cde57506000610bd1565b610c216008836113d0565b60055460009060ff16610cfb57600080fd5b610d0633848461113c565b50600192915050565b600b5481565b60055460ff1681565b6000546001600160a01b03163314610d3557600080fd5b600b55565b6000610d4685856107b5565b610d4f57600080fd5b604051638f4ffcb160e01b81523360048201818152602483018790523060448401819052608060648501908152608485018790526001600160a01b038a1694638f4ffcb194938a93928a928a92919060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610de057600080fd5b505af1158015610df4573d6000803e3d6000fd5b50600198975050505050505050565b6001600160a01b03166000908152600a602052604090205460ff1690565b3360009081526007602090815260408083206001600160a01b03861684529091528120548281011015610e5357600080fd5b3360008181526007602090815260408083206001600160a01b038816808552908352928190208054870190819055815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6000546001600160a01b03163314610f0157600080fd5b6001600160a01b038116610f5057600080546040516001600160a01b0390911691303180156108fc02929091818181858888f19350505050158015610f4a573d6000803e3d6000fd5b50611097565b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610f9b57600080fd5b505afa158015610faf573d6000803e3d6000fd5b505050506040513d6020811015610fc557600080fd5b5051600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b15801561102257600080fd5b505af1158015611036573d6000803e3d6000fd5b505050506040513d602081101561104c57600080fd5b50506000546040805183815290516001600160a01b03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a350505b50565b6000546001600160a01b031633146110b157600080fd5b6001600160a01b0381166110c457600080fd5b600080546001600160a01b0319166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461112957600080fd5b6005805460ff1916911515919091179055565b8061119157816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36113cb565b6001600160a01b038216158015906111b257506001600160a01b0382163014155b6111bb57600080fd5b60006111c78443610927565b9050818110156111d657600080fd5b6001600160a01b03841660009081526006602052604090206111fa90838303611500565b60006112068443610927565b905080838201101561121757600080fd5b6001600160a01b038416600090815260066020526040902061123b90828501611500565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600061129143610bd6565b6001600160a01b0387166000908152600a602052604090205490915060ff161561131c57600b548484031015611301576001600160a01b0386166000908152600a60205260409020805460ff19169055828110156112ee57600080fd5b8290036112fc600982611500565b61131c565b8381101561130e57600080fd5b83900361131c600982611500565b600b54848301106113c7576001600160a01b0385166000908152600a602052604090205460ff16156113645780848201101561135757600080fd5b6113646009858301611500565b6001600160a01b0385166000908152600a602052604090205460ff166113c7576001600160a01b0385166000908152600a60205260409020805460ff1916600117905581810184018111156113b857600080fd5b6113c760098584840101611500565b5050505b505050565b81546000906113e157506000610860565b8254839060001981019081106113f357fe5b6000918252602090912001546001600160801b031682106114435782548390600019810190811061142057fe5b600091825260209091200154600160801b90046001600160801b03169050610860565b8260008154811061145057fe5b6000918252602090912001546001600160801b031682101561147457506000610860565b8254600090600019015b818111156114cf5760006002600183850101049050848682815481106114a057fe5b6000918252602090912001546001600160801b0316116114c2578092506114c9565b6001810391505b5061147e565b8482815481106114db57fe5b600091825260209091200154600160801b90046001600160801b031695945050505050565b815415806115345750815443908390600019810190811061151d57fe5b6000918252602090912001546001600160801b0316105b1561159b578154600090839061154d82600183016115d9565b8154811061155757fe5b600091825260209091200180546001600160801b03848116600160801b024382166fffffffffffffffffffffffffffffffff199093169290921716179055506115d5565b8154600090839060001981019081106115b057fe5b600091825260209091200180546001600160801b03808516600160801b029116179055505b5050565b8154818355818111156113cb576000838152602090206113cb91810190830161087a91905b8082111561161257600081556001016115fe565b509056fea265627a7a723058207ceee917a141972bf5e26be2b07de16f87d89f31b5d5cd42418789a4641e848f64736f6c63430005090032

Deployed Bytecode Sourcemap

2054:18082:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2093:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2093:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2093:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9579:613;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9579:613:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9579:613:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2817:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2817:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;13531:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13531:105:0;;;:::i;3483:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3483:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3483:40:0;-1:-1:-1;;;;;3483:40:0;;:::i;5532:348::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5532:348:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5532:348:0;;;;;;;;;;;;;;;;;:::i;13644:126::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13644:126:0;;;:::i;2174:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2174:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14145:383;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14145:383:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14145:383:0;;;;;;;;:::i;11585:458::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11585:458:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11585:458:0;;;;;;;;:::i;15642:1134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15642:1134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15642:1134:0;;:::i;15134:385::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15134:385:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15134:385:0;;:::i;9038:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9038:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9038:134:0;-1:-1:-1;;;;;9038:134:0;;:::i;953:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;953:28:0;;;:::i;:::-;;;;-1:-1:-1;;;;;953:28:0;;;;;;;;;;;;;;2256:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2256:20:0;;;:::i;14746:378::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14746:378:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14746:378:0;;:::i;5004:170::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5004:170:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5004:170:0;;;;;;;;:::i;3530:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3530:41:0;;;:::i;2917:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2917:28:0;;;:::i;20010:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20010:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20010:123:0;;:::i;13043:360::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13043:360:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;13043:360:0;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;13043:360:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13043:360:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;13043:360:0;;-1:-1:-1;13043:360:0;-1:-1:-1;13043:360:0;:::i;15527:105::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15527:105:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15527:105:0;-1:-1:-1;;;;;15527:105:0;;:::i;10686:400::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10686:400:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10686:400:0;;;;;;;;:::i;12371:146::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12371:146:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12371:146:0;;;;;;;;;;:::i;19609:391::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19609:391:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19609:391:0;-1:-1:-1;;;;;19609:391:0;;:::i;1618:206::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1618:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1618:206:0;-1:-1:-1;;;;;1618:206:0;;:::i;17022:121::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17022:121:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17022:121:0;;;;:::i;2093:18::-;;;;;;;;;;;;;;;-1:-1:-1;;2093:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9579:613::-;3952:16;;9668:4;;3952:16;;3944:25;;;;;;10001:12;;;10000:54;;-1:-1:-1;10027:10:0;10019:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10019:29:0;;;;;;;;;;:34;10000:54;9992:63;;;;;;10076:10;10068:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10068:29:0;;;;;;;;;;;;:39;;;10123;;;;;;;10068:29;;10076:10;10123:39;;;;;;;;;;;-1:-1:-1;10180:4:0;3980:1;9579:613;;;;:::o;2817:25::-;;;;:::o;13531:105::-;13577:4;13601:27;13615:12;13601:13;:27::i;:::-;13594:34;;13531:105;;:::o;3483:40::-;;;;;;;;;;;;;;;:::o;5532:348::-;3952:16;;5638:4;;3952:16;;3944:25;;;;;;-1:-1:-1;;;;;5722:14:0;;;;;;:7;:14;;;;;;;;5737:10;5722:26;;;;;;;;:37;-1:-1:-1;5722:37:0;5714:46;;;;;;-1:-1:-1;;;;;5771:14:0;;;;;;:7;:14;;;;;;;;5786:10;5771:26;;;;;;;:37;;;;;;;5819:31;5779:5;5837:3;5801:7;5819:10;:31::i;:::-;-1:-1:-1;5868:4:0;5532:348;;;;;:::o;13644:126::-;13704:4;13728:34;13749:12;13728:20;:34::i;2174:21::-;;;;;;:::o;14145:383::-;-1:-1:-1;;;;;14244:16:0;;14222:4;14244:16;;;:8;:16;;;;;:23;:28;;14243:80;;-1:-1:-1;;;;;;14278:16:0;;;;;;:8;:16;;;;;:19;;14310:12;;14278:16;:19;;;;;;;;;;;;;:29;-1:-1:-1;;;;;14278:29:0;:44;14243:80;14239:282;;;-1:-1:-1;14347:1:0;14340:8;;14239:282;-1:-1:-1;;;;;14478:16:0;;;;;;:8;:16;;;;;14467:42;;14496:12;14467:10;:42::i;:::-;14460:49;;;;11585:458;11717:10;11671:4;11709:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11709:29:0;;;;;;;;;;11753;;;11749:188;;11807:10;11831:1;11799:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11799:29:0;;;;;;;;;:33;11749:188;;;11873:10;11865:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11865:29:0;;;;;;;;;11897:28;;;11865:60;;11749:188;11961:10;11983:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11952:61:0;;11983:29;;;;;;;;;;;11952:61;;;;;;;;;11961:10;11952:61;;;;;;;;;;;-1:-1:-1;12031:4:0;;11585:458;-1:-1:-1;;;11585:458:0:o;15642:1134::-;15705:4;1414:5;;-1:-1:-1;;;;;1414:5:0;1400:10;:19;1392:28;;;;;;15722:19;15744:27;15758:12;15744:13;:27::i;:::-;15722:49;;15808:7;15790:14;:25;;15782:34;;;;;;15827:24;15854:37;15866:10;15878:12;15854:11;:37::i;:::-;15827:64;;15935:7;15912:19;:30;;15904:39;;;;;;15954:62;15971:18;16008:7;15991:14;:24;15954:16;:62::i;:::-;16053:10;16044:20;;;;:8;:20;;;;;16027:69;;16066:29;;;16027:16;:69::i;:::-;16112:41;;;;;;;;16141:1;;16121:10;;16112:41;;;;;;;;;16166:26;16195:34;16216:12;16195:20;:34::i;:::-;16252:10;16244:19;;;;:7;:19;;;;;;16166:63;;-1:-1:-1;16244:19:0;;16240:507;;;16316:15;;16306:7;16284:19;:29;:47;16280:456;;;16367:10;16359:19;;;;:7;:19;;;;;16352:26;;-1:-1:-1;;16352:26:0;;;16405:44;;;;16397:53;;;;;;16469:81;16486:18;16530:19;16506:21;:43;16469:16;:81::i;:::-;16280:456;;;16624:7;16599:21;:32;;16591:41;;;;;;16651:69;16668:18;16712:7;16688:21;:31;16651:16;:69::i;:::-;16764:4;16757:11;;;;;1431:1;15642:1134;;;:::o;15134:385::-;15225:18;:25;15203:4;;15225:30;;15224:84;;;15295:12;15261:18;15280:1;15261:21;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;15261:31:0;:46;15224:84;15220:292;;;-1:-1:-1;15332:1:0;15325:8;;15220:292;15456:44;15467:18;15487:12;15456:10;:44::i;:::-;15449:51;;;;9038:134;9096:15;9131:33;9143:6;9151:12;9131:11;:33::i;953:28::-;;;-1:-1:-1;;;;;953:28:0;;:::o;2256:20::-;;;;;;;;;;;;;;;-1:-1:-1;;2256:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14746:378;14830:18;:25;14808:4;;14830:30;;14829:84;;;14900:12;14866:18;14885:1;14866:21;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;14866:31:0;:46;14829:84;14825:292;;;-1:-1:-1;14937:1:0;14930:8;;14825:292;15061:44;15072:18;15092:12;15061:10;:44::i;5004:170::-;3952:16;;5091:4;;3952:16;;3944:25;;;;;;5108:36;5119:10;5131:3;5136:7;5108:10;:36::i;:::-;-1:-1:-1;5162:4:0;5004:170;;;;:::o;3530:41::-;;;;:::o;2917:28::-;;;;;;:::o;20010:123::-;1414:5;;-1:-1:-1;;;;;1414:5:0;1400:10;:19;1392:28;;;;;;20091:15;:34;20010:123::o;13043:360::-;13147:4;13172:26;13180:8;13190:7;13172;:26::i;:::-;13164:35;;;;;;13212:159;;-1:-1:-1;;;13212:159:0;;13275:10;13212:159;;;;;;;;;;;;13330:4;13212:159;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13212:48:0;;;;;13275:10;13300:7;;13330:4;13350:10;;;;13212:159;;;;13350:10;;;;13212:159;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;13212:159:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13212:159:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;13391:4:0;;13043:360;-1:-1:-1;;;;;;;;13043:360:0:o;15527:105::-;-1:-1:-1;;;;;15608:16:0;15584:4;15608:16;;;:7;:16;;;;;;;;;15527:105::o;10686:400::-;10848:10;10767:4;10840:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10840:29:0;;;;;;;;;;10792:44;;;:77;;10784:86;;;;;;10943:10;10935:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10935:29:0;;;;;;;;;;;;;;:44;;10903:76;;;;10995:61;;;;;;;10935:29;;10943:10;10995:61;;;;;;;;;;;-1:-1:-1;11074:4:0;10686:400;;;;:::o;12371:146::-;-1:-1:-1;;;;;12484:15:0;;;12447:17;12484:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;12371:146::o;19609:391::-;1414:5;;-1:-1:-1;;;;;1414:5:0;1400:10;:19;1392:28;;;;;;-1:-1:-1;;;;;19688:20:0;;19684:111;;19725:5;;;:37;;-1:-1:-1;;;;;19725:5:0;;;;19748:4;19740:21;19725:37;;;;;19740:21;;19725:37;:5;:37;19740:21;19725:5;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19725:37:0;19777:7;;19684:111;19868:30;;;-1:-1:-1;;;19868:30:0;;19892:4;19868:30;;;;;;19835:6;;19807:15;;-1:-1:-1;;;;;19868:15:0;;;;;:30;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;19868:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19868:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19868:30:0;19924:5;;;19909:30;;;-1:-1:-1;;;19909:30:0;;-1:-1:-1;;;;;19924:5:0;;;19909:30;;;;;;;;;;;;19868;;-1:-1:-1;19909:14:0;;;;;;:30;;;;;19868;;19909;;;;;;;;;;;:14;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;19909:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19909:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;19977:5:0;;19955:37;;;;;;;;-1:-1:-1;;;;;19977:5:0;;;;19955:37;;;;;;;;;19909:30;19955:37;;;1431:1;;;19609:391;:::o;1618:206::-;1414:5;;-1:-1:-1;;;;;1414:5:0;1400:10;:19;1392:28;;;;;;-1:-1:-1;;;;;1710:23:0;;1702:32;;;;;;1745:5;:17;;-1:-1:-1;;;;;;1745:17:0;-1:-1:-1;;;;;1745:17:0;;;;;;;;;1778:38;;1745:17;;1799:5;;;1778:38;;1745:5;1778:38;1618:206;:::o;17022:121::-;1414:5;;-1:-1:-1;;;;;1414:5:0;1400:10;:19;1392:28;;;;;;17099:16;:36;;-1:-1:-1;;17099:36:0;;;;;;;;;;17022:121::o;6267:2632::-;6355:12;6351:157;;6405:3;-1:-1:-1;;;;;6389:29:0;6398:5;-1:-1:-1;;;;;6389:29:0;;6410:7;6389:29;;;;;;;;;;;;;;;;;;6490:7;;6351:157;-1:-1:-1;;;;;6599:17:0;;;;;;6598:45;;-1:-1:-1;;;;;;6622:20:0;;6637:4;6622:20;;6598:45;6590:54;;;;;;6773:24;6800:32;6812:5;6819:12;6800:11;:32::i;:::-;6773:59;;6876:7;6853:19;:30;;6845:39;;;;;;-1:-1:-1;;;;;7024:15:0;;;;;;:8;:15;;;;;7007:64;;7041:29;;;7007:16;:64::i;:::-;7195:22;7220:30;7232:3;7237:12;7220:11;:30::i;:::-;7195:55;;7300:17;7289:7;7269:17;:27;:48;;7261:57;;;;;;-1:-1:-1;;;;;7368:13:0;;;;;;:8;:13;;;;;7351:60;;7383:27;;;7351:16;:60::i;:::-;7518:3;-1:-1:-1;;;;;7502:29:0;7511:5;-1:-1:-1;;;;;7502:29:0;;7523:7;7502:29;;;;;;;;;;;;;;;;;;7546:26;7575:34;7596:12;7575:20;:34::i;:::-;-1:-1:-1;;;;;7626:14:0;;;;;;:7;:14;;;;;;7546:63;;-1:-1:-1;7626:14:0;;7622:625;;;7693:15;;7683:7;7661:19;:29;:47;7657:579;;;-1:-1:-1;;;;;7736:14:0;;;;;;:7;:14;;;;;7729:21;;-1:-1:-1;;7729:21:0;;;7777:44;;;;7769:53;;;;;;7865:43;;;7927:59;7944:18;7865:43;7927:16;:59::i;:::-;7657:579;;;8060:7;8035:21;:32;;8027:41;;;;;;8111:31;;;8161:59;8178:18;8111:31;8161:16;:59::i;:::-;8294:15;;8283:7;8263:17;:27;:46;8259:629;;-1:-1:-1;;;;;8330:12:0;;;;;;:7;:12;;;;;;;;8326:228;;;8406:21;8395:7;8371:21;:31;:56;;8363:65;;;;;;8469:69;8486:18;8530:7;8506:21;:31;8469:16;:69::i;:::-;-1:-1:-1;;;;;8575:12:0;;;;;;:7;:12;;;;;;;;8570:307;;-1:-1:-1;;;;;8608:12:0;;;;;;:7;:12;;;;;:19;;-1:-1:-1;;8608:19:0;8623:4;8608:19;;;8654:41;;;:51;;:76;-1:-1:-1;8654:76:0;8646:85;;;;;;8772:89;8789:18;8853:7;8833:17;8809:21;:41;:51;8772:16;:89::i;:::-;6267:2632;;;;;;;:::o;17539:776::-;17650:18;;17629:4;;17646:37;;-1:-1:-1;17682:1:0;17675:8;;17646:37;17764:18;;17752:11;;-1:-1:-1;;17764:20:0;;;17752:33;;;;;;;;;;;;;;;:43;-1:-1:-1;;;;;17752:43:0;17742:53;;17738:118;;17829:18;;17817:11;;-1:-1:-1;;17829:20:0;;;17817:33;;;;;;;;;;;;;;;:39;-1:-1:-1;;;17817:39:0;;-1:-1:-1;;;;;17817:39:0;;-1:-1:-1;17810:46:0;;17738:118;17880:11;17892:1;17880:14;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;;;;17880:24:0;17871:33;;17867:47;;;-1:-1:-1;17913:1:0;17906:8;;17867:47;18013:18;;17979:8;;-1:-1:-1;;18013:20:0;18044:224;18057:3;18051;:9;18044:224;;;18077:8;18105:1;18101;18089:9;;;:13;18088:18;18077:29;;18153:6;18125:11;18137:3;18125:16;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;18125:26:0;:34;18121:136;;18186:3;18180:9;;18121:136;;;18240:1;18236:3;:5;18230:11;;18121:136;18044:224;;;;18285:11;18297:3;18285:16;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;;18285:22:0;;-1:-1:-1;;;;;18285:22:0;;17539:776;-1:-1:-1;;;;;17539:776:0:o;18539:575::-;18638:18;;:23;;18637:103;;-1:-1:-1;18692:18:0;;18727:12;;18680:11;;-1:-1:-1;;18692:21:0;;;18680:34;;;;;;;;;;;;;;;:44;-1:-1:-1;;;;;18680:44:0;:59;18637:103;18633:474;;;18805:20;;18757:32;;18792:11;;18805:20;18792:11;18805:20;;;;:::i;:::-;18792:35;;;;;;;;;;;;;;;;;18842:48;;-1:-1:-1;;;;;18905:37:0;;;-1:-1:-1;;;18905:37:0;18877:12;18842:48;;-1:-1:-1;;18842:48:0;;;;;;;18905:37;;;;-1:-1:-1;18633:474:0;;;19022:18;;18975:32;;19010:11;;-1:-1:-1;;19022:20:0;;;19010:33;;;;;;;;;;;;;;;19058:37;;-1:-1:-1;;;;;19058:37:0;;;-1:-1:-1;;;19058:37:0;;;;;;-1:-1:-1;18633:474:0;18539:575;;:::o;2054:18082::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

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