Token Coin Utility Token

 

Overview [ERC-20]

Price
$0.02 @ 0.000008 Eth (+0.03%)
Fully Diluted Market Cap
Max Total Supply:
107,142,857 COIN

Holders:
4,922 (0.00%)

Transfers:
-

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

OVERVIEW

Coin is a cross-chain P2P decentralized wallet, exchange, and assistant powered by atomic swap and artificial intelligence technology.

Market

Volume (24H):$0.00
Market Capitalization:$0.00
Circulating Supply:0.00 COIN
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
CoinToken

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.4.24;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMathLib{
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || 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;
  }
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;
  address public coinvest;
  mapping (address => bool) public admins;

  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;
    coinvest = msg.sender;
    admins[owner] = true;
    admins[coinvest] = true;
  }

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

  modifier onlyCoinvest() {
      require(msg.sender == coinvest);
      _;
  }

  modifier onlyAdmin() {
      require(admins[msg.sender]);
      _;
  }

  /**
   * @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 newOwner) onlyOwner public {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
  
  /**
   * @dev Changes the Coinvest wallet that will receive funds from investment contract.
   * @param _newCoinvest The address of the new wallet.
  **/
  function transferCoinvest(address _newCoinvest) 
    external
    onlyCoinvest
  {
    require(_newCoinvest != address(0));
    coinvest = _newCoinvest;
  }

  /**
   * @dev Used to add admins who are allowed to add funds to the investment contract.
   * @param _user The address of the admin to add or remove.
   * @param _status True to add the user, False to remove the user.
  **/
  function alterAdmin(address _user, bool _status)
    external
    onlyCoinvest
  {
    require(_user != address(0));
    require(_user != coinvest);
    admins[_user] = _status;
  }

}

/**
 * @dev Abstract contract for approveAndCall.
**/
contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}

/**
 * @title Coin Utility Token
 * @dev ERC20 contract utilizing ERC865 structure (3esmit's implementation with alterations).
 * @dev to allow users to pay Ethereum fees in tokens.
 * @author Coin -- Robert M.C. Forster
**/
contract CoinToken is Ownable {
    using SafeMathLib for uint256;
    
    string public constant symbol = "COIN";
    string public constant name = "Coin Utility Token";
    
    uint8 public constant decimals = 18;
    uint256 private _totalSupply = 107142857 * (10 ** 18);
    
    // Function sigs to be used within contract for signature recovery.
    bytes4 internal constant transferSig = 0xa9059cbb;
    bytes4 internal constant approveSig = 0x095ea7b3;
    bytes4 internal constant increaseApprovalSig = 0xd73dd623;
    bytes4 internal constant decreaseApprovalSig = 0x66188463;
    bytes4 internal constant approveAndCallSig = 0xcae9ca51;
    bytes4 internal constant revokeHashSig = 0x70de43f1;

    // Balances for each account
    mapping(address => uint256) balances;

    // Owner of account approves the transfer of an amount to another account
    mapping(address => mapping (address => uint256)) allowed;
    
    // Mapping of past used hashes: true if already used.
    mapping(address => mapping (bytes32 => bool)) invalidHashes;

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed from, address indexed spender, uint tokens);
    event HashRedeemed(bytes32 indexed txHash, address indexed from);

    /**
     * @dev Set owner and beginning balance.
    **/
    constructor()
      public
    {
        balances[msg.sender] = _totalSupply;
    }

    /**
     * @dev approveAndCall reception used primarily to pay gas with other tokens.
    **/
    function receiveApproval(address _from, uint256 _amount, address _token, bytes _data) 
      public
    {
        require(msg.sender != address(this));
        require(address(this).delegatecall(_data));
        _from; _amount; _token;
    }

/** ******************************** ERC20 ********************************* **/

    /**
     * @dev Transfers coins from one address to another.
     * @param _to The recipient of the transfer amount.
     * @param _amount The amount of tokens to transfer.
    **/
    function transfer(address _to, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_transfer(msg.sender, _to, _amount));
        return true;
    }
    
    /**
     * @dev An allowed address can transfer tokens from another's address.
     * @param _from The owner of the tokens to be transferred.
     * @param _to The address to which the tokens will be transferred.
     * @param _amount The amount of tokens to be transferred.
    **/
    function transferFrom(address _from, address _to, uint _amount)
      public
    returns (bool success)
    {
        require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount);

        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount);
        require(_transfer(_from, _to, _amount));
        return true;
    }
    
    /**
     * @dev Approves a wallet to transfer tokens on one's behalf.
     * @param _spender The wallet approved to spend tokens.
     * @param _amount The amount of tokens approved to spend.
    **/
    function approve(address _spender, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_approve(msg.sender, _spender, _amount));
        return true;
    }
    
    /**
     * @dev Increases the allowed amount for spender from msg.sender.
     * @param _spender The address to increase allowed amount for.
     * @param _amount The amount of tokens to increase allowed amount by.
    **/
    function increaseApproval(address _spender, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_increaseApproval(msg.sender, _spender, _amount));
        return true;
    }
    
    /**
     * @dev Decreases the allowed amount for spender from msg.sender.
     * @param _spender The address to decrease allowed amount for.
     * @param _amount The amount of tokens to decrease allowed amount by.
    **/
    function decreaseApproval(address _spender, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_decreaseApproval(msg.sender, _spender, _amount));
        return true;
    }
    
    /**
     * @dev Used to approve an address and call a function on it in the same transaction.
     * @dev _spender The address to be approved to spend COIN.
     * @dev _amount The amount of COIN to be approved to spend.
     * @dev _data The data to send to the called contract.
    **/
    function approveAndCall(address _spender, uint256 _amount, bytes _data) 
      public
    returns (bool success) 
    {
        require(_approve(msg.sender, _spender, _amount));
        ApproveAndCallFallBack(_spender).receiveApproval(msg.sender, _amount, address(this), _data);
        return true;
    }

/** ****************************** Internal ******************************** **/
    
    /**
     * @dev Internal transfer for all functions that transfer.
     * @param _from The address that is transferring coins.
     * @param _to The receiving address of the coins.
     * @param _amount The amount of coins being transferred.
    **/
    function _transfer(address _from, address _to, uint256 _amount)
      internal
    returns (bool success)
    {
        require (_to != address(0), "Invalid transfer recipient address.");
        require(balances[_from] >= _amount, "Sender does not have enough balance.");
        
        balances[_from] = balances[_from].sub(_amount);
        balances[_to] = balances[_to].add(_amount);
        
        emit Transfer(_from, _to, _amount);
        return true;
    }
    
    /**
     * @dev Internal approve for all functions that require an approve.
     * @param _owner The owner who is allowing spender to use their balance.
     * @param _spender The wallet approved to spend tokens.
     * @param _amount The amount of tokens approved to spend.
    **/
    function _approve(address _owner, address _spender, uint256 _amount) 
      internal
    returns (bool success)
    {
        allowed[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
        return true;
    }
    
    /**
     * @dev Increases the allowed by "_amount" for "_spender" from "owner"
     * @param _owner The address that tokens may be transferred from.
     * @param _spender The address that may transfer these tokens.
     * @param _amount The amount of tokens to transfer.
    **/
    function _increaseApproval(address _owner, address _spender, uint256 _amount)
      internal
    returns (bool success)
    {
        allowed[_owner][_spender] = allowed[_owner][_spender].add(_amount);
        emit Approval(_owner, _spender, allowed[_owner][_spender]);
        return true;
    }
    
    /**
     * @dev Decreases the allowed by "_amount" for "_spender" from "_owner"
     * @param _owner The owner of the tokens to decrease allowed for.
     * @param _spender The spender whose allowed will decrease.
     * @param _amount The amount of tokens to decrease allowed by.
    **/
    function _decreaseApproval(address _owner, address _spender, uint256 _amount)
      internal
    returns (bool success)
    {
        if (allowed[_owner][_spender] <= _amount) allowed[_owner][_spender] = 0;
        else allowed[_owner][_spender] = allowed[_owner][_spender].sub(_amount);
        
        emit Approval(_owner, _spender, allowed[_owner][_spender]);
        return true;
    }
    
/** ************************ Delegated Functions *************************** **/

    /**
     * @dev Called by delegate with a signed hash of the transaction data to allow a user
     * @dev to transfer tokens without paying gas in Ether (they pay in COIN instead).
     * @param _signature Signed hash of data for this transfer.
     * @param _to The address to transfer COIN to.
     * @param _value The amount of COIN to transfer.
     * @param _gasPrice Price (IN COIN) that will be paid per unit of gas by user to "delegate".
     * @param _nonce Nonce of the user's new transaction.
    **/
    function transferPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        uint256 _gasPrice, 
        uint256 _nonce) 
      public
    returns (bool) 
    {
        // Log starting gas left of transaction for later gas price calculations.
        uint256 gas = gasleft();
        
        // Recover signer address from signature; ensure address is valid.
        address from = recoverPreSigned(_signature, transferSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");
        
        // Require the hash has not been used, declare it used.
        bytes32 txHash = getPreSignedHash(transferSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        // Internal transfer.
        require(_transfer(from, _to, _value));

        // If the delegate is charging, pay them for gas in COIN.
        if (_gasPrice > 0) {
            // 35000 because of base fee of 21000 and ~14000 for the fee transfer.
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Called by a delegate with signed hash to approve a transaction for user.
     * @dev All variables equivalent to transfer except _to:
     * @param _to The address that will be approved to transfer COIN from user's wallet.
    **/
    function approvePreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        uint256 _gasPrice, 
        uint256 _nonce) 
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, approveSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(approveSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        require(_approve(from, _to, _value));

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }

        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Used to increase the amount allowed for "_to" to spend from "from"
     * @dev A bare approve allows potentially nasty race conditions when using a delegate.
    **/
    function increaseApprovalPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        uint256 _gasPrice, 
        uint256 _nonce)
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, increaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(increaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        require(_increaseApproval(from, _to, _value));

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Added for the same reason as increaseApproval. Decreases to 0 if "_value" is greater than allowed.
    **/
    function decreaseApprovalPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value, 
        uint256 _gasPrice, 
        uint256 _nonce) 
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        require(_decreaseApproval(from, _to, _value));

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }

        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev approveAndCallPreSigned allows a user to approve a contract and call a function on it
     * @dev in the same transaction. As with the other presigneds, a delegate calls this with signed data from user.
     * @dev This function is the big reason we're using gas price and calculating gas use.
     * @dev Using this with the investment contract can result in varying gas costs.
     * @param _extraData The data to send to the contract.
    **/
    function approveAndCallPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        bytes _extraData,
        uint256 _gasPrice,
        uint256 _nonce) 
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, approveAndCallSig, _to, _value, _extraData, _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(approveAndCallSig, _to, _value, _extraData, _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        if (_value > 0) require(_approve(from, _to, _value));
        ApproveAndCallFallBack(_to).receiveApproval(from, _value, address(this), _extraData);

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }

/** *************************** Revoke PreSigned ************************** **/
    
    /**
     * @dev Revoke hash without going through a delegate.
     * @param _hashToRevoke The hash that you no longer want to be used.
    **/
    function revokeHash(bytes32 _hashToRevoke)
      public
    returns (bool)
    {
        invalidHashes[msg.sender][_hashToRevoke] = true;
        return true;
    }
    
    /**
     * @dev Revoke hash through a delegate.
     * @param _signature The signature allowing this revocation.
     * @param _hashToRevoke The hash that you would like revoked.
     * @param _gasPrice The amount of token wei to be paid for each uint of gas.
    **/
    function revokeHashPreSigned(
        bytes _signature,
        bytes32 _hashToRevoke,
        uint256 _gasPrice)
      public
    returns (bool)
    {
        uint256 gas = gasleft();
        address from = recoverRevokeHash(_signature, _hashToRevoke, _gasPrice);
        require(from != address(0), "Invalid signature provided.");
        
        bytes32 txHash = getRevokeHash(_hashToRevoke, _gasPrice);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        invalidHashes[from][_hashToRevoke] = true;
        
        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Get hash for a revocation.
     * @param _hashToRevoke The signature to be revoked.
     * @param _gasPrice The amount to be paid to delegate for sending this tx.
    **/
    function getRevokeHash(bytes32 _hashToRevoke, uint256 _gasPrice)
      public
      view
    returns (bytes32 txHash)
    {
        return keccak256(abi.encodePacked(address(this), revokeHashSig, _hashToRevoke, _gasPrice));
    }

    /**
     * @dev Recover the address from a revocation hash.
     * @param _hashToRevoke The hash to be revoked.
     * @param _signature The signature allowing this revocation.
     * @param _gasPrice The amount of token wei to be paid for each unit of gas.
    **/
    function recoverRevokeHash(bytes _signature, bytes32 _hashToRevoke, uint256 _gasPrice)
      public
      view
    returns (address from)
    {
        return ecrecoverFromSig(getSignHash(getRevokeHash(_hashToRevoke, _gasPrice)), _signature);
    }
    
/** ************************** PreSigned Constants ************************ **/

    /**
     * @dev Used in frontend and contract to get hashed data of any given pre-signed transaction.
     * @param _to The address to transfer COIN to.
     * @param _value The amount of COIN to be transferred.
     * @param _extraData Extra data of tx if needed. Transfers and approves will leave this null.
     * @param _function Function signature of the pre-signed function being used.
     * @param _gasPrice The agreed-upon amount of COIN to be paid per unit of gas.
     * @param _nonce The user's nonce of the new transaction.
    **/
    function getPreSignedHash(
        bytes4 _function,
        address _to, 
        uint256 _value,
        bytes _extraData,
        uint256 _gasPrice,
        uint256 _nonce)
      public
      view
    returns (bytes32 txHash) 
    {
        return keccak256(abi.encodePacked(address(this), _function, _to, _value, _extraData, _gasPrice, _nonce));
    }
    
    /**
     * @dev Recover an address from a signed pre-signed hash.
     * @param _sig The signed hash.
     * @param _function The function signature for function being called.
     * @param _to The address to transfer/approve/transferFrom/etc. tokens to.
     * @param _value The amont of tokens to transfer/approve/etc.
     * @param _extraData The extra data included in the transaction, if any.
     * @param _gasPrice The amount of token wei to be paid to the delegate for each unit of gas.
     * @param _nonce The user's nonce for this transaction.
    **/
    function recoverPreSigned(
        bytes _sig,
        bytes4 _function,
        address _to,
        uint256 _value,
        bytes _extraData,
        uint256 _gasPrice,
        uint256 _nonce) 
      public
      view
    returns (address recovered)
    {
        return ecrecoverFromSig(getSignHash(getPreSignedHash(_function, _to, _value, _extraData, _gasPrice, _nonce)), _sig);
    }
    
    /**
     * @dev Add signature prefix to hash for recovery à la ERC191.
     * @param _hash The hashed transaction to add signature prefix to.
    **/
    function getSignHash(bytes32 _hash)
      public
      pure
    returns (bytes32 signHash)
    {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _hash));
    }

    /**
     * @dev Helps to reduce stack depth problems for delegations. Thank you to Bokky for this!
     * @param hash The hash of signed data for the transaction.
     * @param sig Contains r, s, and v for recovery of address from the hash.
    **/
    function ecrecoverFromSig(bytes32 hash, bytes sig) 
      public 
      pure 
    returns (address recoveredAddress) 
    {
        bytes32 r;
        bytes32 s;
        uint8 v;
        if (sig.length != 65) return address(0);
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            // Here we are loading the last 32 bytes. We exploit the fact that 'mload' will pad with zeroes if we overread.
            // There is no 'mload8' to do this, but that would be nicer.
            v := byte(0, mload(add(sig, 96)))
        }
        // Albeit non-transactional signatures are not specified by the YP, one would expect it to match the YP range of [27, 28]
        // geth uses [0, 1] and some clients have followed. This might change, see https://github.com/ethereum/go-ethereum/issues/2053
        if (v < 27) v += 27;
        if (v != 27 && v != 28) return address(0);
        return ecrecover(hash, v, r, s);
    }

/** ****************************** Constants ******************************* **/
    
    /**
     * @dev Return total supply of token.
    **/
    function totalSupply() 
      external
      view 
     returns (uint256)
    {
        return _totalSupply;
    }

    /**
     * @dev Return balance of a certain address.
     * @param _owner The address whose balance we want to check.
    **/
    function balanceOf(address _owner)
      external
      view 
    returns (uint256) 
    {
        return balances[_owner];
    }
    
    /**
     * @dev Allowed amount for a user to spend of another's tokens.
     * @param _owner The owner of the tokens approved to spend.
     * @param _spender The address of the user allowed to spend the tokens.
    **/
    function allowance(address _owner, address _spender) 
      external
      view 
    returns (uint256) 
    {
        return allowed[_owner][_spender];
    }
    
/** ****************************** onlyOwner ******************************* **/
    
    /**
     * @dev Allow the owner to take ERC20 tokens off of this contract if they are accidentally sent.
    **/
    function tokenEscape(address _tokenContract)
      external
      onlyOwner
    {
        CoinToken lostToken = CoinToken(_tokenContract);
        
        uint256 stuckTokens = lostToken.balanceOf(address(this));
        lostToken.transfer(owner, stuckTokens);
    }
    
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"coinvest","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_sig","type":"bytes"},{"name":"_function","type":"bytes4"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"recoverPreSigned","outputs":[{"name":"recovered","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_status","type":"bool"}],"name":"alterAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"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":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"tokenEscape","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"recoverRevokeHash","outputs":[{"name":"from","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approvePreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_hashToRevoke","type":"bytes32"}],"name":"revokeHash","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"decreaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"revokeHashPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_token","type":"address"},{"name":"_data","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"getRevokeHash","outputs":[{"name":"txHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_function","type":"bytes4"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"getPreSignedHash","outputs":[{"name":"txHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"getSignHash","outputs":[{"name":"signHash","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approveAndCallPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"sig","type":"bytes"}],"name":"ecrecoverFromSig","outputs":[{"name":"recoveredAddress","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCoinvest","type":"address"}],"name":"transferCoinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"txHash","type":"bytes32"},{"indexed":true,"name":"from","type":"address"}],"name":"HashRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040526a58a061ea91aa7f2584000060035534801561001f57600080fd5b5060008054600160a060020a0319908116339081178084556001805490931682178355600160a060020a039081168452600260209081526040808620805460ff1990811687179091558554909316865280862080549093169094179091556003549184526004905291205561258b806100996000396000f3006080604052600436106101875763ffffffff60e060020a60003504166306fdde03811461018c5780630958a9f314610216578063095ea7b31461024757806309ea63e31461027f57806310840303146103595780631296830d1461038157806318160ddd146103f457806323b872dd1461041b578063313ce567146104455780633f45440614610470578063429b62e514610491578063476e492f146104b2578063617b390b14610514578063661884631461058757806370a08231146105ab57806370de43f1146105cc5780638be52783146105e45780638da5cb5b146106575780638e421f161461066c5780638f4ffcb1146106ce57806395d89b411461073e578063a59b3d4614610753578063a9059cbb1461076e578063a9a0b49514610792578063adb8249e14610829578063b15aa5b71461089c578063c8d4b389146108b4578063cae9ca511461096a578063d4acaf6c146109d3578063d73dd62314610a31578063dd62ed3e14610a55578063dfb6c46814610a7c578063f2fde38b14610a9d575b600080fd5b34801561019857600080fd5b506101a1610abe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101db5781810151838201526020016101c3565b50505050905090810190601f1680156102085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022257600080fd5b5061022b610af5565b60408051600160a060020a039092168252519081900360200190f35b34801561025357600080fd5b5061026b600160a060020a0360043516602435610b04565b604080519115158252519081900360200190f35b34801561028b57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022b94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff198b35169b600160a060020a03848d0135169b958601359a919950975060809094019550919350918201918190840183828082843750949750508435955050506020909201359150610b259050565b34801561036557600080fd5b5061037f600160a060020a03600435166024351515610b52565b005b34801561038d57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135610bc4565b34801561040057600080fd5b50610409610e08565b60408051918252519081900360200190f35b34801561042757600080fd5b5061026b600160a060020a0360043581169060243516604435610e0e565b34801561045157600080fd5b5061045a610edc565b6040805160ff9092168252519081900360200190f35b34801561047c57600080fd5b5061037f600160a060020a0360043516610ee1565b34801561049d57600080fd5b5061026b600160a060020a0360043516611030565b3480156104be57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022b9436949293602493928401919081908401838280828437509497505084359550505060209092013591506110459050565b34801561052057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135611065565b34801561059357600080fd5b5061026b600160a060020a03600435166024356111c9565b3480156105b757600080fd5b50610409600160a060020a03600435166111d6565b3480156105d857600080fd5b5061026b6004356111f1565b3480156105f057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a031694505050602082013591604081013591506060013561121b565b34801561066357600080fd5b5061022b61137f565b34801561067857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050843595505050602090920135915061138e9050565b3480156106da57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261037f94600160a060020a0381358116956024803596604435909316953695608494920191819084018382808284375094975061158a9650505050505050565b34801561074a57600080fd5b506101a161161d565b34801561075f57600080fd5b50610409600435602435611654565b34801561077a57600080fd5b5061026b600160a060020a036004351660243561171b565b34801561079e57600080fd5b50604080516020601f606435600481810135928301849004840285018401909552818452610409947bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1981351694600160a060020a0360248035919091169560443595369560849493019181908401838280828437509497505084359550505060209092013591506117289050565b34801561083557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a031694505050602082013591604081013591506060013561189f565b3480156108a857600080fd5b50610409600435611a03565b3480156108c057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a91999098506060909101965091945090810192508190840183828082843750949750508435955050506020909201359150611aad9050565b34801561097657600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261026b948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611dff9650505050505050565b3480156109df57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261022b958335953695604494919390910191908190840183828082843750949750611f1b9650505050505050565b348015610a3d57600080fd5b5061026b600160a060020a0360043516602435611ff0565b348015610a6157600080fd5b50610409600160a060020a0360043581169060243516611ffd565b348015610a8857600080fd5b5061037f600160a060020a0360043516612028565b348015610aa957600080fd5b5061037f600160a060020a0360043516612083565b60408051808201909152601281527f436f696e205574696c69747920546f6b656e0000000000000000000000000000602082015281565b600154600160a060020a031681565b6000610b11338484612117565b1515610b1c57600080fd5b50600192915050565b6000610b46610b40610b3b898989898989611728565b611a03565b89611f1b565b98975050505050505050565b600154600160a060020a03163314610b6957600080fd5b600160a060020a0382161515610b7e57600080fd5b600154600160a060020a0383811691161415610b9957600080fd5b600160a060020a03919091166000908152600260205260409020805460ff1916911515919091179055565b6000806000805a9250610bf68963a9059cbb60e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a0382161515610c46576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b610c6e63a9059cbb60e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615610cef576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d28828989612182565b1515610d3357600080fd5b6000861115610dc357610d4d5a849063ffffffff61235e16565b6188b8019250610d6d8232610d68898763ffffffff61237016565b612182565b1515610dc3576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a350600198975050505050505050565b60035490565b600160a060020a0383166000908152600460205260408120548211801590610e595750600160a060020a03841660009081526005602090815260408083203384529091529020548211155b1515610e6457600080fd5b600160a060020a0384166000908152600560209081526040808320338452909152902054610e98908363ffffffff61235e16565b600160a060020a0385166000908152600560209081526040808320338452909152902055610ec7848484612182565b1515610ed257600080fd5b5060019392505050565b601281565b600080548190600160a060020a03163314610efb57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b505050506040513d6020811015610f8957600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b158015610fff57600080fd5b505af1158015611013573d6000803e3d6000fd5b505050506040513d602081101561102957600080fd5b5050505050565b60026020526000908152604090205460ff1681565b600061105d611057610b3b8585611654565b85611f1b565b949350505050565b6000806000805a92506110978963095ea7b360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a03821615156110e7576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b61110f63095ea7b360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611190576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d28828989612117565b6000610b1133848461239b565b600160a060020a031660009081526004602052604090205490565b33600090815260066020908152604080832093835292905220805460ff1916600190811790915590565b6000806000805a925061124d89636618846360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a038216151561129d576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b6112c5636618846360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611346576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d2882898961239b565b600054600160a060020a031681565b6000806000805a92506113a2878787611045565b9150600160a060020a03821615156113f2576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b6113fc8686611654565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff161561147d576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091528082208054600160ff1991821681179092558984529183208054909216179055851115611547576114d65a849063ffffffff61235e16565b6188b80192506114f18232610d68888763ffffffff61237016565b1515611547576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a35060019695505050505050565b3330141561159757600080fd5b30600160a060020a03168160405180828051906020019080838360005b838110156115cc5781810151838201526020016115b4565b50505050905090810190601f1680156115f95780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af4915050151561161757600080fd5b50505050565b60408051808201909152600481527f434f494e00000000000000000000000000000000000000000000000000000000602082015281565b604080516c0100000000000000000000000030026020808301919091527f70de43f1000000000000000000000000000000000000000000000000000000006034830152603882018590526058808301859052835180840390910181526078909201928390528151600093918291908401908083835b602083106116e85780518252601f1990920191602091820191016116c9565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209695505050505050565b6000610b11338484612182565b6000308787878787876040516020018088600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040186600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140185815260200184805190602001908083835b602083106117fb5780518252601f1990920191602091820191016117dc565b51815160209384036101000a60001901801990921691161790529201948552508381019290925250604080518084038301815292810190819052825192975095508594508601925090508083835b602083106118685780518252601f199092019160209182019101611849565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209a9950505050505050505050565b6000806000805a92506118d18963d73dd62360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a0382161515611921576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b61194963d73dd62360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff16156119ca576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d288289896124b8565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c80830185905283518084039091018152605c909201928390528151600093918291908401908083835b60208310611a7b5780518252601f199092019160209182019101611a5c565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b6000806000805a9250611ae58a7fcae9ca51000000000000000000000000000000000000000000000000000000008b8b8b8b8b610b25565b9150600160a060020a0382161515611b35576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b611b637fcae9ca51000000000000000000000000000000000000000000000000000000008a8a8a8a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611be4576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091528120805460ff19166001179055881115611c2f57611c24828a8a612117565b1515611c2f57600080fd5b88600160a060020a0316638f4ffcb1838a308b6040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611cc7578181015183820152602001611caf565b50505050905090810190601f168015611cf45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015611d1657600080fd5b505af1158015611d2a573d6000803e3d6000fd5b505050506000861115611db957611d485a849063ffffffff61235e16565b6188b8019250611d638232610d68898763ffffffff61237016565b1515611db9576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a35060019998505050505050505050565b6000611e0c338585612117565b1515611e1757600080fd5b6040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b83811015611eaa578181015183820152602001611e92565b50505050905090810190601f168015611ed75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b506001979650505050505050565b60008060008084516041141515611f355760009350611fe7565b50505060208201516040830151606084015160001a601b60ff82161015611f5a57601b015b8060ff16601b14158015611f7257508060ff16601c14155b15611f805760009350611fe7565b60408051600080825260208083018085528a905260ff8516838501526060830187905260808301869052925160019360a0808501949193601f19840193928390039091019190865af1158015611fda573d6000803e3d6000fd5b5050506020604051035193505b50505092915050565b6000610b113384846124b8565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b600154600160a060020a0316331461203f57600080fd5b600160a060020a038116151561205457600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461209a57600080fd5b600160a060020a03811615156120af57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03808416600081815260056020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000600160a060020a038316151561220a576040805160e560020a62461bcd02815260206004820152602360248201527f496e76616c6964207472616e7366657220726563697069656e7420616464726560448201527f73732e0000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03841660009081526004602052604090205482111561229f576040805160e560020a62461bcd028152602060048201526024808201527f53656e64657220646f6573206e6f74206861766520656e6f7567682062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0384166000908152600460205260409020546122c8908363ffffffff61235e16565b600160a060020a0380861660009081526004602052604080822093909355908516815220546122fd908363ffffffff6124f016565b600160a060020a0380851660008181526004602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b60008282111561236a57fe5b50900390565b600082820283158061238c575082848281151561238957fe5b04145b151561239457fe5b9392505050565b600160a060020a03808416600090815260056020908152604080832093861683529290529081205482106123f657600160a060020a038085166000908152600560209081526040808320938716835292905290812055612453565b600160a060020a0380851660009081526005602090815260408083209387168352929052205461242c908363ffffffff61235e16565b600160a060020a038086166000908152600560209081526040808320938816835292905220555b600160a060020a0384811660008181526005602090815260408083209488168084529482529182902054825190815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35060019392505050565b600160a060020a03808416600090815260056020908152604080832093861683529290529081205461242c908363ffffffff6124f016565b60008282018381101561239457fe005472616e73616374696f6e2068617320616c7265616479206265656e2065786563757465642e0000000000000000000000000000000000000000000000000000496e76616c6964207369676e61747572652070726f76696465642e0000000000a165627a7a72305820c5f31889e3915aad670c448dac3aa2e66d2b27260024d48e62c2b7ab26b2697b0029

Deployed ByteCode Sourcemap

3352:22390:0:-;;;;;;;;;-1:-1:-1;;;3352:22390:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3476:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3476:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;3476:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1078:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1078:23:0;;;;;;;;-1:-1:-1;;;;;1078:23:0;;;;;;;;;;;;;;6520:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6520:189:0;-1:-1:-1;;;;;6520:189:0;;;;;;;;;;;;;;;;;;;;;;;;;22261:401;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22261:401:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22261:401:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22261:401:0;;;;-1:-1:-1;;;;;22261:401:0;;;;;;;;;;;;;-1:-1:-1;22261:401:0;-1:-1:-1;22261:401:0;;;;;-1:-1:-1;22261:401:0;;-1:-1:-1;22261:401:0;;;;;;;;;;;;;;-1:-1:-1;22261:401:0;;-1:-1:-1;;22261:401:0;;;-1:-1:-1;;;22261:401:0;;;;;;-1:-1:-1;22261:401:0;;-1:-1:-1;22261:401:0;2732:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2732:188:0;-1:-1:-1;;;;;2732:188:0;;;;;;;;;;;11558:1381;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11558:1381:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11558:1381:0;;-1:-1:-1;;;11558:1381:0;;-1:-1:-1;;;;;11558:1381:0;;-1:-1:-1;;;11558:1381:0;;;;;;;;;;-1:-1:-1;11558:1381:0;;;;;24437:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24437:120:0;;;;;;;;;;;;;;;;;;;;5940:359;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5940:359:0;-1:-1:-1;;;;;5940:359:0;;;;;;;;;;;;3539:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3539:35:0;;;;;;;;;;;;;;;;;;;;;;;25458:275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25458:275:0;-1:-1:-1;;;;;25458:275:0;;;;;1106:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1106:39:0;-1:-1:-1;;;;;1106:39:0;;;;;20398:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20398:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20398:254:0;;-1:-1:-1;;20398:254:0;;;-1:-1:-1;;;20398:254:0;;;;;;-1:-1:-1;20398:254:0;;-1:-1:-1;20398:254:0;13207:945;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13207:945:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13207:945:0;;-1:-1:-1;;;13207:945:0;;-1:-1:-1;;;;;13207:945:0;;-1:-1:-1;;;13207:945:0;;;;;;;;;;-1:-1:-1;13207:945:0;;;;;7404:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7404:207:0;-1:-1:-1;;;;;7404:207:0;;;;;;;24699:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24699:135:0;-1:-1:-1;;;;;24699:135:0;;;;;18324:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18324:170:0;;;;;15484:982;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15484:982:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15484:982:0;;-1:-1:-1;;;15484:982:0;;-1:-1:-1;;;;;15484:982:0;;-1:-1:-1;;;15484:982:0;;;;;;;;;;-1:-1:-1;15484:982:0;;;;;1053:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1053:20:0;;;;18784:887;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18784:887:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18784:887:0;;-1:-1:-1;;18784:887:0;;;-1:-1:-1;;;18784:887:0;;;;;;-1:-1:-1;18784:887:0;;-1:-1:-1;18784:887:0;4925:247;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4925:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4925:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4925:247:0;;-1:-1:-1;4925:247:0;;-1:-1:-1;;;;;;;4925:247:0;3431:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3431:38:0;;;;19879:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19879:235:0;;;;;;;5454:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5454:181:0;-1:-1:-1;;;;;5454:181:0;;;;;;;21305:367;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21305:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21305:367:0;;;;-1:-1:-1;;;;;21305:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21305:367:0;;-1:-1:-1;;21305:367:0;;;-1:-1:-1;;;21305:367:0;;;;;;-1:-1:-1;21305:367:0;;-1:-1:-1;21305:367:0;14354:988;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14354:988:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14354:988:0;;-1:-1:-1;;;14354:988:0;;-1:-1:-1;;;;;14354:988:0;;-1:-1:-1;;;14354:988:0;;;;;;;;;;-1:-1:-1;14354:988:0;;;;;22833:195;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22833:195:0;;;;;16951:1127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16951:1127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16951:1127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16951:1127:0;;;;;;;;;;;-1:-1:-1;16951:1127:0;;;;;-1:-1:-1;16951:1127:0;;-1:-1:-1;16951:1127:0;;;;-1:-1:-1;16951:1127:0;;;;;;;;;;-1:-1:-1;16951:1127:0;;-1:-1:-1;;16951:1127:0;;;-1:-1:-1;;;16951:1127:0;;;;;;-1:-1:-1;16951:1127:0;;-1:-1:-1;16951:1127:0;7921:312;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7921:312:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7921:312:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7921:312:0;;-1:-1:-1;7921:312:0;;-1:-1:-1;;;;;;;7921:312:0;23294:986;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23294:986:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23294:986:0;;-1:-1:-1;23294:986:0;;-1:-1:-1;;;;;;;23294:986:0;6953:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6953:207:0;-1:-1:-1;;;;;6953:207:0;;;;;;;25075:163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25075:163:0;-1:-1:-1;;;;;25075:163:0;;;;;;;;;;2332:162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2332:162:0;-1:-1:-1;;;;;2332:162:0;;;;;1986:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1986:178:0;-1:-1:-1;;;;;1986:178:0;;;;;3476:50;;;;;;;;;;;;;;;;;;;:::o;1078:23::-;;;-1:-1:-1;;;;;1078:23:0;;:::o;6520:189::-;6601:12;6639:39;6648:10;6660:8;6670:7;6639:8;:39::i;:::-;6631:48;;;;;;;;-1:-1:-1;6697:4:0;6520:189;;;;:::o;22261:401::-;22504:17;22546:108;22563:84;22575:71;22592:9;22603:3;22608:6;22616:10;22628:9;22639:6;22575:16;:71::i;:::-;22563:11;:84::i;:::-;22649:4;22546:16;:108::i;:::-;22539:115;22261:401;-1:-1:-1;;;;;;;;22261:401:0:o;2732:188::-;1715:8;;-1:-1:-1;;;;;1715:8:0;1701:10;:22;1693:31;;;;;;-1:-1:-1;;;;;2831:19:0;;;;2823:28;;;;;;2875:8;;-1:-1:-1;;;;;2866:17:0;;;2875:8;;2866:17;;2858:26;;;;;;-1:-1:-1;;;;;2891:13:0;;;;;;;;:6;:13;;;;;:23;;-1:-1:-1;;2891:23:0;;;;;;;;;;2732:188::o;11558:1381::-;11744:4;11850:11;11970:12;12217:14;11864:9;11850:23;;11985:77;12002:10;3759;-1:-1:-1;;;12014:11:0;12027:3;12032:6;11985:77;;;;;;;;;;;;;12044:9;12055:6;11985:16;:77::i;:::-;11970:92;-1:-1:-1;;;;;;12081:18:0;;;;12073:58;;;;;-1:-1:-1;;;;;12073:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12073:58:0;;;;;;;;;;;;;;;12234:65;3759:10;-1:-1:-1;;;12251:11:0;12264:3;12269:6;12234:65;;;;;;;;;;;;;12281:9;12292:6;12234:16;:65::i;:::-;-1:-1:-1;;;;;12319:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;12217:82;;-1:-1:-1;12319:27:0;;12318:28;12310:79;;;;;-1:-1:-1;;;;;12310:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12310:79:0;;;;-1:-1:-1;;;;;;;;;;;12310:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;12400:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;12400:34:0;12430:4;12400:34;;;12486:28;12414:4;12502:3;12507:6;12486:9;:28::i;:::-;12478:37;;;;;;;;12611:1;12599:9;:13;12595:263;;;12727:18;12735:9;12727:3;;:18;:7;:18;:::i;:::-;12719:5;:26;;-1:-1:-1;12768:46:0;12778:4;12784:9;12795:18;:9;12719:26;12795:18;:13;:18;:::i;:::-;12768:9;:46::i;:::-;12760:86;;;;;;;-1:-1:-1;;;;;12760:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12883:26;;-1:-1:-1;;;;;12883:26:0;;;12896:6;;12883:26;;;;;-1:-1:-1;12927:4:0;;11558:1381;-1:-1:-1;;;;;;;;11558:1381:0:o;24437:120::-;24537:12;;24437:120;:::o;5940:359::-;-1:-1:-1;;;;;6070:15:0;;6032:12;6070:15;;;:8;:15;;;;;;:26;-1:-1:-1;6070:26:0;;;:67;;-1:-1:-1;;;;;;6100:14:0;;;;;;:7;:14;;;;;;;;6115:10;6100:26;;;;;;;;:37;-1:-1:-1;6100:37:0;6070:67;6062:76;;;;;;;;-1:-1:-1;;;;;6180:14:0;;;;;;:7;:14;;;;;;;;6195:10;6180:26;;;;;;;;:39;;6211:7;6180:39;:30;:39;:::i;:::-;-1:-1:-1;;;;;6151:14:0;;;;;;:7;:14;;;;;;;;6166:10;6151:26;;;;;;;:68;6238:30;6159:5;6255:3;6260:7;6238:9;:30::i;:::-;6230:39;;;;;;;;-1:-1:-1;6287:4:0;5940:359;;;;;:::o;3539:35::-;3572:2;3539:35;:::o;25458:275::-;25552:19;1634:5;;25552:19;;-1:-1:-1;;;;;1634:5:0;1620:10;:19;1612:28;;;;;;25642:34;;;;;;25670:4;25642:34;;;;;;25584:14;;-1:-1:-1;;;;;;25642:19:0;;;;;:34;;;;;;;;;;;;;;-1:-1:-1;25642:19:0;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;25642:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25642:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25642:34:0;25706:5;;;25687:38;;;;;;-1:-1:-1;;;;;25706:5:0;;;25687:38;;;;;;;;;;;;25642:34;;-1:-1:-1;25687:18:0;;;;;;:38;;;;;25642:34;;25687:38;;;;;;;;;;;:18;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;25687:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25687:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;25458:275:0:o;1106:39::-;;;;;;;;;;;;;;;:::o;20398:254::-;20525:12;20562:82;20579:52;20591:39;20605:13;20620:9;20591:13;:39::i;20579:52::-;20633:10;20562:16;:82::i;:::-;20555:89;20398:254;-1:-1:-1;;;;20398:254:0:o;13207:945::-;13392:4;13415:11;13449:12;13622:14;13429:9;13415:23;;13464:76;13481:10;3814;-1:-1:-1;;;13493:10:0;13505:3;13510:6;13464:76;;;;;;;;;;;;;13522:9;13533:6;13464:16;:76::i;:::-;13449:91;-1:-1:-1;;;;;;13559:18:0;;;;13551:58;;;;;-1:-1:-1;;;;;13551:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13551:58:0;;;;;;;;;;;;;;;13639:64;3814:10;-1:-1:-1;;;13656:10:0;13668:3;13673:6;13639:64;;;;;;;;;;;;;13685:9;13696:6;13639:16;:64::i;:::-;-1:-1:-1;;;;;13723:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;13622:81;;-1:-1:-1;13723:27:0;;13722:28;13714:79;;;;;-1:-1:-1;;;;;13714:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13714:79:0;;;;-1:-1:-1;;;;;;;;;;;13714:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13804:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;13804:34:0;13834:4;13804:34;;;13859:27;13818:4;13874:3;13879:6;13859:8;:27::i;7404:207::-;7494:12;7532:48;7550:10;7562:8;7572:7;7532:17;:48::i;24699:135::-;-1:-1:-1;;;;;24810:16:0;24777:7;24810:16;;;:8;:16;;;;;;;24699:135::o;18324:170::-;18431:10;18395:4;18417:25;;;:13;:25;;;;;;;;:40;;;;;;;:47;;-1:-1:-1;;18417:47:0;18460:4;18417:47;;;;;;18460:4;18324:170::o;15484:982::-;15679:4;15702:11;15736:12;15918:14;15716:9;15702:23;;15751:85;15768:10;3942;-1:-1:-1;;;15780:19:0;15801:3;15806:6;15751:85;;;;;;;;;;;;;15818:9;15829:6;15751:16;:85::i;:::-;15736:100;-1:-1:-1;;;;;;15855:18:0;;;;15847:58;;;;;-1:-1:-1;;;;;15847:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15847:58:0;;;;;;;;;;;;;;;15935:73;3942:10;-1:-1:-1;;;15952:19:0;15973:3;15978:6;15935:73;;;;;;;;;;;;;15990:9;16001:6;15935:16;:73::i;:::-;-1:-1:-1;;;;;16028:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;15918:90;;-1:-1:-1;16028:27:0;;16027:28;16019:79;;;;;-1:-1:-1;;;;;16019:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16019:79:0;;;;-1:-1:-1;;;;;;;;;;;16019:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16109:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;16109:34:0;16139:4;16109:34;;;16164:36;16123:4;16188:3;16193:6;16164:17;:36::i;1053:20::-;;;-1:-1:-1;;;;;1053:20:0;;:::o;18784:887::-;18929:4;18951:11;18985:12;19145:14;18965:9;18951:23;;19000:55;19018:10;19030:13;19045:9;19000:17;:55::i;:::-;18985:70;-1:-1:-1;;;;;;19074:18:0;;;;19066:58;;;;;-1:-1:-1;;;;;19066:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19066:58:0;;;;;;;;;;;;;;;19162:39;19176:13;19191:9;19162:13;:39::i;:::-;-1:-1:-1;;;;;19221:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;19145:56;;-1:-1:-1;19221:27:0;;19220:28;19212:79;;;;;-1:-1:-1;;;;;19212:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19212:79:0;;;;-1:-1:-1;;;;;;;;;;;19212:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19302:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;:34;;19332:4;-1:-1:-1;;19302:34:0;;;;;;;;19349;;;;;;:41;;;;;;;;19415:13;;19411:179;;;19459:18;19467:9;19459:3;;:18;:7;:18;:::i;:::-;19451:5;:26;;-1:-1:-1;19500:46:0;19510:4;19516:9;19527:18;:9;19451:26;19527:18;:13;:18;:::i;19500:46::-;19492:86;;;;;;;-1:-1:-1;;;;;19492:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19615:26;;-1:-1:-1;;;;;19615:26:0;;;19628:6;;19615:26;;;;;-1:-1:-1;19659:4:0;;18784:887;-1:-1:-1;;;;;;18784:887:0:o;4925:247::-;5050:10;5072:4;5050:27;;5042:36;;;;;;5105:4;-1:-1:-1;;;;;5097:26:0;5124:5;5097:33;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5097:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5089:42;;;;;;;;4925:247;;;;:::o;3431:38::-;;;;;;;;;;;;;;;;;;;:::o;19879:235::-;20033:72;;;;20058:4;20033:72;;;;;;;;;20065:13;20033:72;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20033:72:0;;;;;;;;20023:83;;19984:14;;20033:72;;;20023:83;;;;;20033:72;20023:83;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;20023:83:0;;;;;;;;;;;;-1:-1:-1;;;;;;19879:235:0:o;5454:181::-;5531:12;5569:35;5579:10;5591:3;5596:7;5569:9;:35::i;21305:367::-;21527:14;21602:4;21609:9;21620:3;21625:6;21633:10;21645:9;21656:6;21577:86;;;;;;-1:-1:-1;;;;;21577:86:0;-1:-1:-1;;;;;21577:86:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21577:86:0;-1:-1:-1;;;;;21577:86:0;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;21577:86:0;;;;;-1:-1:-1;21577:86:0;;;;;;;-1:-1:-1;21577:86:0;;;26:21:-1;;;22:32;;6:49;;21577:86:0;;;;;;;21567:97;;21577:86;;-1:-1:-1;21577:86:0;-1:-1:-1;21577:86:0;;-1:-1:-1;21567:97:0;;;-1:-1:-1;21567:97:0;-1:-1:-1;21567:97:0;21577:86;21567:97;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;21567:97:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;21305:367:0:o;14354:988::-;14547:4;14570:11;14604:12;14786:14;14584:9;14570:23;;14619:85;14636:10;3878;-1:-1:-1;;;14648:19:0;14669:3;14674:6;14619:85;;;;;;;;;;;;;14686:9;14697:6;14619:16;:85::i;:::-;14604:100;-1:-1:-1;;;;;;14723:18:0;;;;14715:58;;;;;-1:-1:-1;;;;;14715:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14715:58:0;;;;;;;;;;;;;;;14803:73;3878:10;-1:-1:-1;;;14820:19:0;14841:3;14846:6;14803:73;;;;;;;;;;;;;14858:9;14869:6;14803:16;:73::i;:::-;-1:-1:-1;;;;;14896:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;14786:90;;-1:-1:-1;14896:27:0;;14895:28;14887:79;;;;;-1:-1:-1;;;;;14887:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14887:79:0;;;;-1:-1:-1;;;;;;;;;;;14887:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14977:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;14977:34:0;15007:4;14977:34;;;15032:36;14991:4;15056:3;15061:6;15032:17;:36::i;22833:195::-;22960:59;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;22960:59:0;;;;;;;;22950:70;;22909:16;;22960:59;;;22950:70;;;;;22960:59;22950:70;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;22950:70:0;;;;;;;;;;;;-1:-1:-1;;;;;22833:195:0:o;16951:1127::-;17169:4;17192:11;17226:12;17414:14;17206:9;17192:23;-1:-1:-1;17241:91:0;17258:10;17270:17;17289:3;17294:6;17302:10;17314:9;17325:6;17241:16;:91::i;:::-;17226:106;-1:-1:-1;;;;;;17351:18:0;;;;17343:58;;;;;-1:-1:-1;;;;;17343:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17343:58:0;;;;;;;;;;;;;;;17431:79;17448:17;17467:3;17472:6;17480:10;17492:9;17503:6;17431:16;:79::i;:::-;-1:-1:-1;;;;;17530:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;17414:96;;-1:-1:-1;17530:27:0;;17529:28;17521:79;;;;;-1:-1:-1;;;;;17521:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17521:79:0;;;;-1:-1:-1;;;;;;;;;;;17521:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17611:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;17611:34:0;17641:4;17611:34;;;17662:10;;17658:52;;;17682:27;17691:4;17697:3;17702:6;17682:8;:27::i;:::-;17674:36;;;;;;;;17744:3;-1:-1:-1;;;;;17721:43:0;;17765:4;17771:6;17787:4;17794:10;17721:84;;;;;-1:-1:-1;;;17721:84:0;;;;;;;-1:-1:-1;;;;;17721:84:0;-1:-1:-1;;;;;17721:84:0;;;;;;;;;;;-1:-1:-1;;;;;17721:84:0;-1:-1:-1;;;;;17721:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17721:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17721:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17721:84:0;;;;17834:1;17822:9;:13;17818:179;;;17866:18;17874:9;17866:3;;:18;:7;:18;:::i;:::-;17858:5;:26;;-1:-1:-1;17907:46:0;17917:4;17923:9;17934:18;:9;17858:26;17934:18;:13;:18;:::i;17907:46::-;17899:86;;;;;;;-1:-1:-1;;;;;17899:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18022:26;;-1:-1:-1;;;;;18022:26:0;;;18035:6;;18022:26;;;;;-1:-1:-1;18066:4:0;;16951:1127;-1:-1:-1;;;;;;;;;16951:1127:0:o;7921:312::-;8022:12;8061:39;8070:10;8082:8;8092:7;8061:8;:39::i;:::-;8053:48;;;;;;;;8112:91;;;;;8161:10;8112:91;;;;;;;;;;;;8190:4;8112:91;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8112:48:0;;;;;8161:10;8173:7;;8190:4;8197:5;;8112:91;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8112:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8112:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;8221:4:0;;7921:312;-1:-1:-1;;;;;;;7921:312:0:o;23294:986::-;23388:24;23431:9;23451;23471:7;23493:3;:10;23507:2;23493:16;;23489:39;;;23526:1;23511:17;;;;23489:39;-1:-1:-1;;;23583:2:0;23574:12;;23568:19;23621:2;23612:12;;23606:19;23866:2;23857:12;;23851:19;23848:1;23843:28;24167:2;24163:6;;;;24159:19;;;24176:2;24171:7;24159:19;24193:1;:7;;24198:2;24193:7;;:18;;;;;24204:1;:7;;24209:2;24204:7;;24193:18;24189:41;;;24228:1;24213:17;;;;24189:41;24248:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24248:24:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24248:24:0;;;;;;;;24241:31;;23294:986;;;;;;;;:::o;6953:207::-;7043:12;7081:48;7099:10;7111:8;7121:7;7081:17;:48::i;25075:163::-;-1:-1:-1;;;;;25205:15:0;;;25172:7;25205:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;25075:163::o;2332:162::-;1715:8;;-1:-1:-1;;;;;1715:8:0;1701:10;:22;1693:31;;;;;;-1:-1:-1;;;;;2431:26:0;;;;2423:35;;;;;;2465:8;:23;;-1:-1:-1;;2465:23:0;-1:-1:-1;;;;;2465:23:0;;;;;;;;;;2332:162::o;1986:178::-;1634:5;;-1:-1:-1;;;;;1634:5:0;1620:10;:19;1612:28;;;;;;-1:-1:-1;;;;;2063:22:0;;;;2055:31;;;;;;2119:5;;;2098:37;;-1:-1:-1;;;;;2098:37:0;;;;2119:5;;;2098:37;;;2142:5;:16;;-1:-1:-1;;2142:16:0;-1:-1:-1;;;;;2142:16:0;;;;;;;;;;1986:178::o;9375:246::-;-1:-1:-1;;;;;9505:15:0;;;9475:12;9505:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;:35;;;9556;;;;;;;9475:12;;9505:25;:15;9556:35;;;;;;;;;;;-1:-1:-1;9609:4:0;9375:246;;;;;:::o;8589:481::-;8683:12;-1:-1:-1;;;;;8722:17:0;;;;8713:66;;;;;-1:-1:-1;;;;;8713:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8798:15:0;;;;;;:8;:15;;;;;;:26;-1:-1:-1;8798:26:0;8790:75;;;;;-1:-1:-1;;;;;8790:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8904:15:0;;;;;;:8;:15;;;;;;:28;;8924:7;8904:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;8886:15:0;;;;;;;:8;:15;;;;;;:46;;;;8959:13;;;;;;;:26;;8977:7;8959:26;:17;:26;:::i;:::-;-1:-1:-1;;;;;8943:13:0;;;;;;;:8;:13;;;;;;;;;:42;;;;9011:29;;;;;;;8943:13;;9011:29;;;;;;;;;;;;;-1:-1:-1;9058:4:0;8589:481;;;;;:::o;575:113::-;633:7;656:6;;;;649:14;;;;-1:-1:-1;677:5:0;;;575:113::o;146:147::-;204:7;232:5;;;251:6;;;:20;;;270:1;265;261;:5;;;;;;;;:10;251:20;244:28;;;;;;286:1;146:147;-1:-1:-1;;;146:147:0:o;10537:400::-;-1:-1:-1;;;;;10679:15:0;;;10645:12;10679:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;:36;-1:-1:-1;10675:153:0;;-1:-1:-1;;;;;10717:15:0;;;10745:1;10717:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;:29;10675:153;;;-1:-1:-1;;;;;10790:15:0;;;;;;;:7;:15;;;;;;;;:25;;;;;;;;;;:38;;10820:7;10790:38;:29;:38;:::i;:::-;-1:-1:-1;;;;;10762:15:0;;;;;;;:7;:15;;;;;;;;:25;;;;;;;;;:66;10675:153;-1:-1:-1;;;;;10854:53:0;;;10881:15;;;;:7;:15;;;;;;;;10854:53;;;10881:25;;;;;;;;;;;10854:53;;;;;;;;;;;;;;;;;-1:-1:-1;10925:4:0;10537:400;;;;;:::o;9923:303::-;-1:-1:-1;;;;;10089:15:0;;;10031:12;10089:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;:38;;10119:7;10089:38;:29;:38;:::i;696:133::-;754:7;782:5;;;801:6;;;;794:14;;

Swarm Source

bzzr://c5f31889e3915aad670c448dac3aa2e66d2b27260024d48e62c2b7ab26b2697b

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.