ETH Price: $3,358.85 (+2.94%)
 

Overview

Max Total Supply

50,000,000 DFS

Holders

295 (0.00%)

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

DFS is designed to give sports fans the opportunity to show their knowledge, allowing users to use DFS as a means of confidence of how likely their predictions are correct against other people around the world.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DFSToken

Compiler Version
v0.5.10+commit.5a6ea5b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-07-30
*/

pragma solidity ^0.5.10;

/**
 * Innovative fantasy sports gaming ERC-20 token & arcade based on 
 * blockchain technology and Ethereum smart contracts.
 * The global leader and cryptocurrency for the $7 Billion Fantasy Sports & ESPORTS Industry. 
 * DFS is designed to give sports fans the opportunity to show their knowledge, 
 * allowing users to use DFS (Token) as a means of confidence of how likely their
 * sports predictions are correct against other people around the world.
 * 
 * Official Site: https://www.digitalfantasysports.com
 * Twitter: https://twitter.com/dfstoken
 * Telegram: https://t.me/digitalfantasysportsdfs
 * Instagram: https://www.instagram.com/dfstoken/
 */


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * See https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  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 a / b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  uint256 totalSupply_;

  /**
  * @dev Total number of tokens in existence
  */
  function totalSupply() public view returns (uint256) {
    return totalSupply_;
  }

  /**
  * @dev Transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public view returns (uint256) {
    return balances[_owner];
  }

}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender)
    public view returns (uint256);

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

  function approve(address spender, uint256 value) public returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}


/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * https://github.com/ethereum/EIPs/issues/20
 * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

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


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(
    address _from,
    address _to,
    uint256 _value
  )
    public
    returns (bool)
  {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    emit Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(
    address _owner,
    address _spender
   )
    public
    view
    returns (uint256)
  {
    return allowed[_owner][_spender];
  }

  /**
   * @dev Increase the amount of tokens that an owner allowed to a spender.
   * approve should be called when allowed[_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 _addedValue The amount of tokens to increase the allowance by.
   */
  function increaseApproval(
    address _spender,
    uint256 _addedValue
  )
    public
    returns (bool)
  {
    allowed[msg.sender][_spender] = (
      allowed[msg.sender][_spender].add(_addedValue));
    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 allowed[_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 _subtractedValue The amount of tokens to decrease the allowance by.
   */
  function decreaseApproval(
    address _spender,
    uint256 _subtractedValue
  )
    public
    returns (bool)
  {
    uint256 oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

/**
 * @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 payable public owner;


  event OwnershipRenounced(address indexed previousOwner);
  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 relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @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) public onlyOwner {
    _transferOwnership(_newOwner);
  }

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

/**
 * @title Mintable token
 * @dev Simple ERC20 Token example, with mintable token creation
 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol
 */
contract MintableToken is StandardToken, Ownable {
  event Mint(address indexed to, uint256 amount);
  event MintFinished();

  bool public mintingFinished = false;


  modifier canMint() {
    require(!mintingFinished);
    _;
  }

  modifier hasMintPermission() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(
    address _to,
    uint256 _amount
  )
    hasMintPermission
    canMint
    public
    returns (bool)
  {
    totalSupply_ = totalSupply_.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    emit Mint(_to, _amount);
    emit Transfer(address(0), _to, _amount);
    return true;
  }

  /**
   * @dev Function to stop minting new tokens.
   * @return True if the operation was successful.
   */
  function finishMinting() onlyOwner canMint public returns (bool) {
    mintingFinished = true;
    emit MintFinished();
    return true;
  }
}

/**
 * @title Contracts that should not own Ether
 * @author Remco Bloemen <remco@2π.com>
 * @dev This tries to block incoming ether to prevent accidental loss of Ether. Should Ether end up
 * in the contract, it will allow the owner to reclaim this ether.
 * @notice Ether can still be sent to this contract by:
 * calling functions labeled `payable`
 * `selfdestruct(contract_address)`
 * mining directly to the contract address
 */
contract HasNoEther is Ownable {

  /**
  * @dev Constructor that rejects incoming Ether
  * The `payable` flag is added so we can access `msg.value` without compiler warning. If we
  * leave out payable, then Solidity will allow inheriting contracts to implement a payable
  * constructor. By doing it this way we prevent a payable constructor from working. Alternatively
  * we could use assembly to access msg.value.
  */
  constructor() public payable {
    require(msg.value == 0);
  }

  /**
   * @dev Disallows direct send by settings a default function without the `payable` flag.
   */
  function() external {
  }

  /**
   * @dev Transfer all Ether held by the contract to the owner.
   */
  function reclaimEther() external onlyOwner {
    owner.transfer(address(this).balance);
  }
}

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
  function safeTransfer(ERC20Basic token, address to, uint256 value) internal {
    require(token.transfer(to, value));
  }

  function safeTransferFrom(
    ERC20 token,
    address from,
    address to,
    uint256 value
  )
    internal
  {
    require(token.transferFrom(from, to, value));
  }

  function safeApprove(ERC20 token, address spender, uint256 value) internal {
    require(token.approve(spender, value));
  }
}

/**
 * @title Contracts that should be able to recover tokens
 * @author SylTi
 * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
 * This will prevent any accidental loss of tokens.
 */
contract CanReclaimToken is Ownable {
  using SafeERC20 for ERC20Basic;

  /**
   * @dev Reclaim all ERC20Basic compatible tokens
   * @param token ERC20Basic The address of the token contract
   */
  function reclaimToken(ERC20Basic token) external onlyOwner {
    uint256 balance = token.balanceOf(address(this));
    token.safeTransfer(owner, balance);
  }

}

/**
 * @title Contracts that should not own Tokens
 * @author Remco Bloemen <remco@2π.com>
 * @dev This blocks incoming ERC223 tokens to prevent accidental loss of tokens.
 * Should tokens (any ERC20Basic compatible) end up in the contract, it allows the
 * owner to reclaim the tokens.
 */
contract HasNoTokens is CanReclaimToken {

 /**
  * @dev Reject all ERC223 compatible tokens
  * @param from_ address The address that is transferring the tokens
  * @param value_ uint256 the amount of the specified token
  * @param data_ Bytes The data passed from the caller.
  */
  function tokenFallback(address from_, uint256 value_, bytes calldata data_) pure external {
    from_;
    value_;
    data_;
    revert();
  }

}

/**
 * @title Contracts that should not own Contracts
 * @author Remco Bloemen <remco@2π.com>
 * @dev Should contracts (anything Ownable) end up being owned by this contract, it allows the owner
 * of this contract to reclaim ownership of the contracts.
 */
contract HasNoContracts is Ownable {

  /**
   * @dev Reclaim ownership of Ownable contracts
   * @param contractAddr The address of the Ownable to be reclaimed.
   */
  function reclaimContract(address contractAddr) external onlyOwner {
    Ownable contractInst = Ownable(contractAddr);
    contractInst.transferOwnership(owner);
  }
}

/**
 * @title Base contract for contracts that should not own things.
 * @author Remco Bloemen <remco@2π.com>
 * @dev Solves a class of errors where a contract accidentally becomes owner of Ether, Tokens or
 * Owned contracts. See respective base contracts for details.
 */
contract NoOwner is HasNoEther, HasNoTokens, HasNoContracts {
}

/**
 * @title ERC865Token Token
 *
 * ERC865Token allows users paying transfers in tokens instead of gas
 * https://github.com/ethereum/EIPs/issues/865
 *
 */

contract ERC865 is ERC20 {

    function transferPreSigned(
        bytes memory _signature,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        returns (bool);

    function approvePreSigned(
        bytes memory _signature,
        address _spender,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        returns (bool);

    function increaseApprovalPreSigned(
        bytes memory _signature,
        address _spender,
        uint256 _addedValue,
        uint256 _fee,
        uint256 _nonce
    )
        public
        returns (bool);

    function decreaseApprovalPreSigned(
        bytes memory _signature,
        address _spender,
        uint256 _subtractedValue,
        uint256 _fee,
        uint256 _nonce
    )
        public
        returns (bool);

    function transferFromPreSigned(
        bytes memory _signature,
        address _from,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        returns (bool);
}


/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * (.note) This call _does not revert_ if the signature is invalid, or
     * if the signer is otherwise unable to be retrieved. In those scenarios,
     * the zero address is returned.
     *
     * (.warning) `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise)
     * be too long), and then calling `toEthSignedMessageHash` on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Check the signature length
        if (signature.length != 65) {
            return (address(0));
        }

        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return address(0);
        }

        if (v != 27 && v != 28) {
            return address(0);
        }

        // If the signature is valid (and not malleable), return the signer address
        return ecrecover(hash, v, r, s);
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * replicates the behavior of the
     * [`eth_sign`](https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign)
     * JSON-RPC method.
     *
     * See `recover`.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }
}

/**
 * @title ERC865Token Token
 *
 * ERC865Token allows users paying transfers in tokens instead of gas
 * https://github.com/ethereum/EIPs/issues/865
 *
 */

contract ERC865Token is ERC865, StandardToken {
    using ECDSA for bytes32;

    /* Nonces of transfers performed */
    mapping(bytes => bool) signatures;

    event TransferPreSigned(address indexed from, address indexed to, address indexed delegate, uint256 amount, uint256 fee);
    event ApprovalPreSigned(address indexed from, address indexed to, address indexed delegate, uint256 amount, uint256 fee);

    /**
     * @notice Submit a presigned transfer
     * @param _signature bytes The signature, issued by the owner.
     * @param _to address The address which you want to transfer to.
     * @param _value uint256 The amount of tokens to be transferred.
     * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
     * @param _nonce uint256 Presigned transaction number.
     */
    function transferPreSigned(
        bytes memory _signature,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        returns (bool)
    {
        require(_to != address(0));
        require(signatures[_signature] == false);

        bytes32 hashedTx = transferPreSignedHashing(address(this), _to, _value, _fee, _nonce);

        address from = recover(hashedTx, _signature);
        require(from != address(0));

        balances[from] = balances[from].sub(_value).sub(_fee);
        balances[_to] = balances[_to].add(_value);
        balances[msg.sender] = balances[msg.sender].add(_fee);
        signatures[_signature] = true;

        emit Transfer(from, _to, _value);
        emit Transfer(from, msg.sender, _fee);
        emit TransferPreSigned(from, _to, msg.sender, _value, _fee);
        return true;
    }

    /**
     * @notice Submit a presigned approval
     * @param _signature bytes The signature, issued by the owner.
     * @param _spender address The address which will spend the funds.
     * @param _value uint256 The amount of tokens to allow.
     * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
     * @param _nonce uint256 Presigned transaction number.
     */
    function approvePreSigned(
        bytes memory _signature,
        address _spender,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        returns (bool)
    {
        require(_spender != address(0));
        require(signatures[_signature] == false);

        bytes32 hashedTx = approvePreSignedHashing(address(this), _spender, _value, _fee, _nonce);
        address from = recover(hashedTx, _signature);
        require(from != address(0));

        allowed[from][_spender] = _value;
        balances[from] = balances[from].sub(_fee);
        balances[msg.sender] = balances[msg.sender].add(_fee);
        signatures[_signature] = true;

        emit Approval(from, _spender, _value);
        emit Transfer(from, msg.sender, _fee);
        emit ApprovalPreSigned(from, _spender, msg.sender, _value, _fee);
        return true;
    }

    /**
     * @notice Increase the amount of tokens that an owner allowed to a spender.
     * @param _signature bytes The signature, issued by the owner.
     * @param _spender address The address which will spend the funds.
     * @param _addedValue uint256 The amount of tokens to increase the allowance by.
     * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
     * @param _nonce uint256 Presigned transaction number.
     */
    function increaseApprovalPreSigned(
        bytes memory _signature,
        address _spender,
        uint256 _addedValue,
        uint256 _fee,
        uint256 _nonce
    )
        public
        returns (bool)
    {
        require(_spender != address(0));
        require(signatures[_signature] == false);

        bytes32 hashedTx = increaseApprovalPreSignedHashing(address(this), _spender, _addedValue, _fee, _nonce);
        address from = recover(hashedTx, _signature);
        require(from != address(0));

        allowed[from][_spender] = allowed[from][_spender].add(_addedValue);
        balances[from] = balances[from].sub(_fee);
        balances[msg.sender] = balances[msg.sender].add(_fee);
        signatures[_signature] = true;

        emit Approval(from, _spender, allowed[from][_spender]);
        emit Transfer(from, msg.sender, _fee);
        emit ApprovalPreSigned(from, _spender, msg.sender, allowed[from][_spender], _fee);
        return true;
    }

    /**
     * @notice Decrease the amount of tokens that an owner allowed to a spender.
     * @param _signature bytes The signature, issued by the owner
     * @param _spender address The address which will spend the funds.
     * @param _subtractedValue uint256 The amount of tokens to decrease the allowance by.
     * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
     * @param _nonce uint256 Presigned transaction number.
     */
    function decreaseApprovalPreSigned(
        bytes memory _signature,
        address _spender,
        uint256 _subtractedValue,
        uint256 _fee,
        uint256 _nonce
    )
        public
        returns (bool)
    {
        require(_spender != address(0));
        require(signatures[_signature] == false);

        bytes32 hashedTx = decreaseApprovalPreSignedHashing(address(this), _spender, _subtractedValue, _fee, _nonce);
        address from = recover(hashedTx, _signature);
        require(from != address(0));

        uint oldValue = allowed[from][_spender];
        if (_subtractedValue > oldValue) {
            allowed[from][_spender] = 0;
        } else {
            allowed[from][_spender] = oldValue.sub(_subtractedValue);
        }
        balances[from] = balances[from].sub(_fee);
        balances[msg.sender] = balances[msg.sender].add(_fee);
        signatures[_signature] = true;

        emit Approval(from, _spender, _subtractedValue);
        emit Transfer(from, msg.sender, _fee);
        emit ApprovalPreSigned(from, _spender, msg.sender, allowed[from][_spender], _fee);
        return true;
    }

    /**
     * @notice Transfer tokens from one address to another
     * @param _signature bytes The signature, issued by the spender.
     * @param _from address The address which you want to send tokens from.
     * @param _to address The address which you want to transfer to.
     * @param _value uint256 The amount of tokens to be transferred.
     * @param _fee uint256 The amount of tokens paid to msg.sender, by the spender.
     * @param _nonce uint256 Presigned transaction number.
     */
    function transferFromPreSigned(
        bytes memory _signature,
        address _from,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        returns (bool)
    {
        require(_to != address(0));
        require(signatures[_signature] == false);

        bytes32 hashedTx = transferFromPreSignedHashing(address(this), _from, _to, _value, _fee, _nonce);

        address spender = recover(hashedTx, _signature);
        require(spender != address(0));

        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][spender] = allowed[_from][spender].sub(_value);

        balances[spender] = balances[spender].sub(_fee);
        balances[msg.sender] = balances[msg.sender].add(_fee);
        signatures[_signature] = true;

        emit Transfer(_from, _to, _value);
        emit Transfer(spender, msg.sender, _fee);
        return true;
    }


    /**
     * @notice Hash (keccak256) of the payload used by transferPreSigned
     * @param _token address The address of the token.
     * @param _to address The address which you want to transfer to.
     * @param _value uint256 The amount of tokens to be transferred.
     * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
     * @param _nonce uint256 Presigned transaction number.
     */
    function transferPreSignedHashing(
        address _token,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        pure
        returns (bytes32)
    {
        /* "48664c16": transferPreSignedHashing(address,address,address,uint256,uint256,uint256) */
        return keccak256(abi.encodePacked(bytes4(0x48664c16), _token, _to, _value, _fee, _nonce));
    }

    /**
     * @notice Hash (keccak256) of the payload used by approvePreSigned
     * @param _token address The address of the token
     * @param _spender address The address which will spend the funds.
     * @param _value uint256 The amount of tokens to allow.
     * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
     * @param _nonce uint256 Presigned transaction number.
     */
    function approvePreSignedHashing(
        address _token,
        address _spender,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        pure
        returns (bytes32)
    {
        /* "f7ac9c2e": approvePreSignedHashing(address,address,uint256,uint256,uint256) */
        return keccak256(abi.encodePacked(bytes4(0xf7ac9c2e), _token, _spender, _value, _fee, _nonce));
    }

    /**
     * @notice Hash (keccak256) of the payload used by increaseApprovalPreSigned
     * @param _token address The address of the token
     * @param _spender address The address which will spend the funds.
     * @param _addedValue uint256 The amount of tokens to increase the allowance by.
     * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
     * @param _nonce uint256 Presigned transaction number.
     */
    function increaseApprovalPreSignedHashing(
        address _token,
        address _spender,
        uint256 _addedValue,
        uint256 _fee,
        uint256 _nonce
    )
        public
        pure
        returns (bytes32)
    {
        /* "a45f71ff": increaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256) */
        return keccak256(abi.encodePacked(bytes4(0xa45f71ff), _token, _spender, _addedValue, _fee, _nonce));
    }

     /**
      * @notice Hash (keccak256) of the payload used by decreaseApprovalPreSigned
      * @param _token address The address of the token
      * @param _spender address The address which will spend the funds.
      * @param _subtractedValue uint256 The amount of tokens to decrease the allowance by.
      * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
      * @param _nonce uint256 Presigned transaction number.
      */
    function decreaseApprovalPreSignedHashing(
        address _token,
        address _spender,
        uint256 _subtractedValue,
        uint256 _fee,
        uint256 _nonce
    )
        public
        pure
        returns (bytes32)
    {
        /* "59388d78": decreaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256) */
        return keccak256(abi.encodePacked(bytes4(0x59388d78), _token, _spender, _subtractedValue, _fee, _nonce));
    }

    /**
     * @notice Hash (keccak256) of the payload used by transferFromPreSigned
     * @param _token address The address of the token
     * @param _from address The address which you want to send tokens from.
     * @param _to address The address which you want to transfer to.
     * @param _value uint256 The amount of tokens to be transferred.
     * @param _fee uint256 The amount of tokens paid to msg.sender, by the spender.
     * @param _nonce uint256 Presigned transaction number.
     */
    function transferFromPreSignedHashing(
        address _token,
        address _from,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        pure
        returns (bytes32)
    {
        /* "b7656dc5": transferFromPreSignedHashing(address,address,address,uint256,uint256,uint256) */
        return keccak256(abi.encodePacked(bytes4(0xb7656dc5), _token, _from, _to, _value, _fee, _nonce));
    }

    /**
     * @notice Recover signer address from a message by using his signature
     * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
     * @param sig bytes signature, the signature is generated using web3.eth.sign()
     */
    function recover(bytes32 hash, bytes memory sig) public pure returns (address) {
        return hash.toEthSignedMessageHash().recover(sig);
    }
}

contract DFSToken is MintableToken, ERC865Token, NoOwner {
    string public symbol = 'DFS';
    string public name = 'Fantasy Sports';
    uint8 public constant decimals = 18;

    bool public transferEnabled;    //allows to dissable transfers while minting and in case of emergency

    function setTransferEnabled(bool enable) onlyOwner public {
        transferEnabled = enable;
    }
    modifier canTransfer() {
        require( transferEnabled || msg.sender == owner);
        _;
    }
    
    function transfer(address _to, uint256 _value) canTransfer public returns (bool) {
        return super.transfer(_to, _value);
    }
    function transferFrom(address _from, address _to, uint256 _value) canTransfer public returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }

    function transferPreSigned(
        bytes memory _signature,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        canTransfer
        returns (bool)
    {
        return super.transferPreSigned(_signature, _to, _value, _fee, _nonce);
    }
    function transferFromPreSigned(
        bytes memory _signature,
        address _from,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
        public
        canTransfer
        returns (bool)
    {
        return super.transferFromPreSigned(_signature, _from, _to, _value, _fee, _nonce);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","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":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"sig","type":"bytes"}],"name":"recover","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"contractAddr","type":"address"}],"name":"reclaimContract","outputs":[],"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":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transferEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"decreaseApprovalPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","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":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","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":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"},{"name":"_fee","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":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reclaimEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"enable","type":"bool"}],"name":"setTransferEnabled","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferFromPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferFromPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"from_","type":"address"},{"name":"value_","type":"uint256"},{"name":"data_","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","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":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approvePreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"delegate","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"TransferPreSigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"delegate","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"ApprovalPreSigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

6003805460ff60a01b1916815560c060405260808190527f444653000000000000000000000000000000000000000000000000000000000060a09081526200004b9160059190620000b7565b5060408051808201909152600e8082527f46616e746173792053706f72747300000000000000000000000000000000000060209092019182526200009291600691620000b7565b50600380546001600160a01b031916331790553415620000b157600080fd5b6200015c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000fa57805160ff19168380011785556200012a565b828001600101855582156200012a579182015b828111156200012a5782518255916020019190600101906200010d565b50620001389291506200013c565b5090565b6200015991905b8082111562000138576000815560010162000143565b90565b612837806200016c6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a578063a9059cbb116100ad578063c0ee0b8a1161007c578063c0ee0b8a14610a13578063d73dd62314610a96578063dd62ed3e14610ac2578063f2fde38b14610af0578063f7ac9c2e14610b1657610206565b8063a9059cbb1461081b578063adb8249e14610847578063b7656dc514610905578063bca505151461094d57610206565b806395d89b41116100e957806395d89b41146107aa5780639f727c27146107b25780639fe9f623146107ba578063a45f71ff146107d957610206565b8063715018a6146106d45780637d64bcb4146106dc5780638be52783146106e45780638da5cb5b146107a257610206565b806323b872dd1161019d5780634cd412d51161016c5780634cd412d51461057a57806359388d7814610582578063617b390b146105c4578063661884631461068257806370a08231146106ae57610206565b806323b872dd146104d45780632aed7f3f1461050a578063313ce5671461053057806340c10f191461054e57610206565b806315420b71116101d957806315420b711461038b57806317ffc320146103df57806318160ddd1461040557806319045a251461040d57610206565b806305d2035b1461020857806306fdde0314610224578063095ea7b3146102a15780631296830d146102cd575b005b610210610b58565b604080519115158252519081900360200190f35b61022c610b68565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026657818101518382015260200161024e565b50505050905090810190601f1680156102935780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610210600480360360408110156102b757600080fd5b506001600160a01b038135169060200135610bf6565b610210600480360360a08110156102e357600080fd5b810190602081018135600160201b8111156102fd57600080fd5b82018360208201111561030f57600080fd5b803590602001918460018302840111600160201b8311171561033057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060208101359060408101359060600135610c4b565b6103cd600480360360a08110156103a157600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610c89565b60408051918252519081900360200190f35b610206600480360360208110156103f557600080fd5b50356001600160a01b0316610cf2565b6103cd610da6565b6104b86004803603604081101561042357600080fd5b81359190810190604081016020820135600160201b81111561044457600080fd5b82018360208201111561045657600080fd5b803590602001918460018302840111600160201b8311171561047757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610dac945050505050565b604080516001600160a01b039092168252519081900360200190f35b610210600480360360608110156104ea57600080fd5b506001600160a01b03813581169160208101359091169060400135610dce565b6102066004803603602081101561052057600080fd5b50356001600160a01b0316610e08565b610538610e89565b6040805160ff9092168252519081900360200190f35b6102106004803603604081101561056457600080fd5b506001600160a01b038135169060200135610e8e565b610210610f86565b6103cd600480360360a081101561059857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610f8f565b610210600480360360a08110156105da57600080fd5b810190602081018135600160201b8111156105f457600080fd5b82018360208201111561060657600080fd5b803590602001918460018302840111600160201b8311171561062757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060208101359060408101359060600135610ff8565b6102106004803603604081101561069857600080fd5b506001600160a01b038135169060200135611281565b6103cd600480360360208110156106c457600080fd5b50356001600160a01b031661135f565b61020661137a565b6102106113db565b610210600480360360a08110156106fa57600080fd5b810190602081018135600160201b81111561071457600080fd5b82018360208201111561072657600080fd5b803590602001918460018302840111600160201b8311171561074757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b03833516935050506020810135906040810135906060013561144e565b6104b8611756565b61022c611765565b6102066117c0565b610206600480360360208110156107d057600080fd5b50351515611814565b6103cd600480360360a08110156107ef57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561183e565b6102106004803603604081101561083157600080fd5b506001600160a01b0381351690602001356118a7565b610210600480360360a081101561085d57600080fd5b810190602081018135600160201b81111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460018302840111600160201b831117156108aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602081013590604081013590606001356118d8565b6103cd600480360360c081101561091b57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a00135611bb7565b610210600480360360c081101561096357600080fd5b810190602081018135600160201b81111561097d57600080fd5b82018360208201111561098f57600080fd5b803590602001918460018302840111600160201b831117156109b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401351692604081013592506060810135915060800135611c25565b61020660048036036060811015610a2957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610a5857600080fd5b820183602082011115610a6a57600080fd5b803590602001918460018302840111600160201b83111715610a8b57600080fd5b509092509050611c65565b61021060048036036040811015610aac57600080fd5b506001600160a01b038135169060200135611c6a565b6103cd60048036036040811015610ad857600080fd5b506001600160a01b0381358116916020013516611cf1565b61020660048036036020811015610b0657600080fd5b50356001600160a01b0316611d1c565b6103cd600480360360a0811015610b2c57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135611d3c565b600354600160a01b900460ff1681565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b505050505081565b3360008181526002602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390926000805160206127e3833981519152928290030190a35060015b92915050565b60075460009060ff1680610c6957506003546001600160a01b031633145b610c7257600080fd5b610c7f8686868686611da5565b9695505050505050565b60408051632433260b60e11b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b6003546001600160a01b03163314610d0957600080fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610d5357600080fd5b505afa158015610d67573d6000803e3d6000fd5b505050506040513d6020811015610d7d57600080fd5b5051600354909150610da2906001600160a01b0384811691168363ffffffff61205b16565b5050565b60015490565b6000610dc782610dbb856120f5565b9063ffffffff61214616565b9392505050565b60075460009060ff1680610dec57506003546001600160a01b031633145b610df557600080fd5b610e00848484612234565b949350505050565b6003546001600160a01b03163314610e1f57600080fd5b6003546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051839283169163f2fde38b91602480830192600092919082900301818387803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b505050505050565b601281565b6003546000906001600160a01b03163314610ea857600080fd5b600354600160a01b900460ff1615610ebf57600080fd5b600154610ed2908363ffffffff61239716565b6001556001600160a01b038316600090815260208190526040902054610efe908363ffffffff61239716565b6001600160a01b03841660008181526020818152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805183815290516001600160a01b038516916000916000805160206127c38339815191529181900360200190a350600192915050565b60075460ff1681565b60408051630b2711af60e31b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60006001600160a01b03851661100d57600080fd5b6004866040518082805190602001908083835b6020831061103f5780518252601f199092019160209182019101611020565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061107c905057600080fd5b600061108b3087878787611d3c565b905060006110998289610dac565b90506001600160a01b0381166110ae57600080fd5b6001600160a01b038082166000818152600260209081526040808320948c1683529381528382208a90559181529081905220546110f1908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054611123908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b6020831061117f5780518252601f199092019160209182019101611160565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908716946000805160206127e38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a3336001600160a01b0316876001600160a01b0316826001600160a01b03167f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb8989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054808311156112d6573360009081526002602090815260408083206001600160a01b038816845290915281205561130b565b6112e6818463ffffffff6123a416565b3360009081526002602090815260408083206001600160a01b03891684529091529020555b3360008181526002602090815260408083206001600160a01b0389168085529083529281902054815190815290519293926000805160206127e3833981519152929181900390910190a35060019392505050565b6001600160a01b031660009081526020819052604090205490565b6003546001600160a01b0316331461139157600080fd5b6003546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600380546001600160a01b0319169055565b6003546000906001600160a01b031633146113f557600080fd5b600354600160a01b900460ff161561140c57600080fd5b6003805460ff60a01b1916600160a01b1790556040517fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0890600090a150600190565b60006001600160a01b03851661146357600080fd5b6004866040518082805190602001908083835b602083106114955780518252601f199092019160209182019101611476565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506114d2905057600080fd5b60006114e13087878787610f8f565b905060006114ef8289610dac565b90506001600160a01b03811661150457600080fd5b6001600160a01b038082166000908152600260209081526040808320938b16835292905220548087111561155f576001600160a01b038083166000908152600260209081526040808320938c16835292905290812055611596565b61156f818863ffffffff6123a416565b6001600160a01b038084166000908152600260209081526040808320938d16835292905220555b6001600160a01b0382166000908152602081905260409020546115bf908763ffffffff6123a416565b6001600160a01b0383166000908152602081905260408082209290925533815220546115f1908763ffffffff61239716565b600080336001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160048a6040518082805190602001908083835b6020831061164d5780518252601f19909201916020918201910161162e565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558b845293516001600160a01b038d811695908816946000805160206127e38339815191529450829003019150a360408051878152905133916001600160a01b038516916000805160206127c38339815191529181900360200190a36001600160a01b038281166000818152600260209081526040808320948d16808452948252918290205482519081529081018a90528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a450600198975050505050505050565b6003546001600160a01b031681565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bee5780601f10610bc357610100808354040283529160200191610bee565b6003546001600160a01b031633146117d757600080fd5b6003546040516001600160a01b0390911690303180156108fc02916000818181858888f19350505050158015611811573d6000803e3d6000fd5b50565b6003546001600160a01b0316331461182b57600080fd5b6007805460ff1916911515919091179055565b6040805163a45f71ff60e01b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60075460009060ff16806118c557506003546001600160a01b031633145b6118ce57600080fd5b610dc783836123b6565b60006001600160a01b0385166118ed57600080fd5b6004866040518082805190602001908083835b6020831061191f5780518252601f199092019160209182019101611900565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061195c905057600080fd5b600061196b308787878761183e565b905060006119798289610dac565b90506001600160a01b03811661198e57600080fd5b6001600160a01b038082166000908152600260209081526040808320938b16835292905220546119c4908763ffffffff61239716565b6001600160a01b038083166000818152600260209081526040808320948d1683529381528382209490945590815291829052902054611a09908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054611a3b908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b60208310611a975780518252601f199092019160209182019101611a78565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095556001600160a01b03868116600081815260028452878120928f1680825292845287902054865295519095946000805160206127e383398151915294508190039091019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a36001600160a01b038181166000818152600260209081526040808320948c16808452948252918290205482519081529081018990528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a4506001979650505050505050565b6040805163b7656dc560e01b6020808301919091526001600160601b03196060998a1b8116602484015297891b8816603883015295881b909616604c87015295850192909252608084015260a0808401919091528351808403909101815260c0909201909252805191012090565b60075460009060ff1680611c4357506003546001600160a01b031633145b611c4c57600080fd5b611c5a878787878787612483565b979650505050505050565b600080fd5b3360009081526002602090815260408083206001600160a01b0386168452909152812054611c9e908363ffffffff61239716565b3360008181526002602090815260408083206001600160a01b0389168085529083529281902085905580519485525191936000805160206127e3833981519152929081900390910190a350600192915050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6003546001600160a01b03163314611d3357600080fd5b61181181612753565b60408051637bd64e1760e11b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60006001600160a01b038516611dba57600080fd5b6004866040518082805190602001908083835b60208310611dec5780518252601f199092019160209182019101611dcd565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611e29905057600080fd5b6000611e383087878787610c89565b90506000611e468289610dac565b90506001600160a01b038116611e5b57600080fd5b6001600160a01b038116600090815260208190526040902054611e96908690611e8a908963ffffffff6123a416565b9063ffffffff6123a416565b6001600160a01b038083166000908152602081905260408082209390935590891681522054611ecb908763ffffffff61239716565b6001600160a01b038816600090815260208190526040808220929092553381522054611efd908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b60208310611f595780518252601f199092019160209182019101611f3a565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908716946000805160206127c38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a3336001600160a01b0316876001600160a01b0316826001600160a01b03167fec5a73fd1f178be20c1bca1b406cbf4b5c20d833b66e582fc122fb4baa0fc2a48989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050506040513d60208110156120e557600080fd5b50516120f057600080fd5b505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461215957506000610c45565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561219f5760009350505050610c45565b8060ff16601b141580156121b757508060ff16601c14155b156121c85760009350505050610c45565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa15801561221f573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b03831661224957600080fd5b6001600160a01b03841660009081526020819052604090205482111561226e57600080fd5b6001600160a01b038416600090815260026020908152604080832033845290915290205482111561229e57600080fd5b6001600160a01b0384166000908152602081905260409020546122c7908363ffffffff6123a416565b6001600160a01b0380861660009081526020819052604080822093909355908516815220546122fc908363ffffffff61239716565b6001600160a01b0380851660009081526020818152604080832094909455918716815260028252828120338252909152205461233e908363ffffffff6123a416565b6001600160a01b03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391926000805160206127c3833981519152929181900390910190a35060019392505050565b81810182811015610c4557fe5b6000828211156123b057fe5b50900390565b60006001600160a01b0383166123cb57600080fd5b336000908152602081905260409020548211156123e757600080fd5b33600090815260208190526040902054612407908363ffffffff6123a416565b33600090815260208190526040808220929092556001600160a01b03851681522054612439908363ffffffff61239716565b6001600160a01b038416600081815260208181526040918290209390935580518581529051919233926000805160206127c38339815191529281900390910190a350600192915050565b60006001600160a01b03851661249857600080fd5b6004876040518082805190602001908083835b602083106124ca5780518252601f1990920191602091820191016124ab565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150612507905057600080fd5b6000612517308888888888611bb7565b90506000612525828a610dac565b90506001600160a01b03811661253a57600080fd5b6001600160a01b038816600090815260208190526040902054612563908763ffffffff6123a416565b6001600160a01b03808a166000908152602081905260408082209390935590891681522054612598908763ffffffff61239716565b6001600160a01b03808916600090815260208181526040808320949094558b831682526002815283822092851682529190915220546125dd908763ffffffff6123a416565b6001600160a01b03808a1660009081526002602090815260408083209386168352928152828220939093559182905290205461261f908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054612651908663ffffffff61239716565b600080336001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160048a6040518082805190602001908083835b602083106126ad5780518252601f19909201916020918201910161268e565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908e16946000805160206127c38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a350600198975050505050505050565b6001600160a01b03811661276657600080fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b039290921691909117905556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a265627a7a7230582022558afb59017a1f10d920bd4c55d8a8c1ecd7a7353ff3c36262adf34e12f08764736f6c634300050a0032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a578063a9059cbb116100ad578063c0ee0b8a1161007c578063c0ee0b8a14610a13578063d73dd62314610a96578063dd62ed3e14610ac2578063f2fde38b14610af0578063f7ac9c2e14610b1657610206565b8063a9059cbb1461081b578063adb8249e14610847578063b7656dc514610905578063bca505151461094d57610206565b806395d89b41116100e957806395d89b41146107aa5780639f727c27146107b25780639fe9f623146107ba578063a45f71ff146107d957610206565b8063715018a6146106d45780637d64bcb4146106dc5780638be52783146106e45780638da5cb5b146107a257610206565b806323b872dd1161019d5780634cd412d51161016c5780634cd412d51461057a57806359388d7814610582578063617b390b146105c4578063661884631461068257806370a08231146106ae57610206565b806323b872dd146104d45780632aed7f3f1461050a578063313ce5671461053057806340c10f191461054e57610206565b806315420b71116101d957806315420b711461038b57806317ffc320146103df57806318160ddd1461040557806319045a251461040d57610206565b806305d2035b1461020857806306fdde0314610224578063095ea7b3146102a15780631296830d146102cd575b005b610210610b58565b604080519115158252519081900360200190f35b61022c610b68565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026657818101518382015260200161024e565b50505050905090810190601f1680156102935780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610210600480360360408110156102b757600080fd5b506001600160a01b038135169060200135610bf6565b610210600480360360a08110156102e357600080fd5b810190602081018135600160201b8111156102fd57600080fd5b82018360208201111561030f57600080fd5b803590602001918460018302840111600160201b8311171561033057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060208101359060408101359060600135610c4b565b6103cd600480360360a08110156103a157600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610c89565b60408051918252519081900360200190f35b610206600480360360208110156103f557600080fd5b50356001600160a01b0316610cf2565b6103cd610da6565b6104b86004803603604081101561042357600080fd5b81359190810190604081016020820135600160201b81111561044457600080fd5b82018360208201111561045657600080fd5b803590602001918460018302840111600160201b8311171561047757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610dac945050505050565b604080516001600160a01b039092168252519081900360200190f35b610210600480360360608110156104ea57600080fd5b506001600160a01b03813581169160208101359091169060400135610dce565b6102066004803603602081101561052057600080fd5b50356001600160a01b0316610e08565b610538610e89565b6040805160ff9092168252519081900360200190f35b6102106004803603604081101561056457600080fd5b506001600160a01b038135169060200135610e8e565b610210610f86565b6103cd600480360360a081101561059857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610f8f565b610210600480360360a08110156105da57600080fd5b810190602081018135600160201b8111156105f457600080fd5b82018360208201111561060657600080fd5b803590602001918460018302840111600160201b8311171561062757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060208101359060408101359060600135610ff8565b6102106004803603604081101561069857600080fd5b506001600160a01b038135169060200135611281565b6103cd600480360360208110156106c457600080fd5b50356001600160a01b031661135f565b61020661137a565b6102106113db565b610210600480360360a08110156106fa57600080fd5b810190602081018135600160201b81111561071457600080fd5b82018360208201111561072657600080fd5b803590602001918460018302840111600160201b8311171561074757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b03833516935050506020810135906040810135906060013561144e565b6104b8611756565b61022c611765565b6102066117c0565b610206600480360360208110156107d057600080fd5b50351515611814565b6103cd600480360360a08110156107ef57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561183e565b6102106004803603604081101561083157600080fd5b506001600160a01b0381351690602001356118a7565b610210600480360360a081101561085d57600080fd5b810190602081018135600160201b81111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460018302840111600160201b831117156108aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602081013590604081013590606001356118d8565b6103cd600480360360c081101561091b57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a00135611bb7565b610210600480360360c081101561096357600080fd5b810190602081018135600160201b81111561097d57600080fd5b82018360208201111561098f57600080fd5b803590602001918460018302840111600160201b831117156109b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401351692604081013592506060810135915060800135611c25565b61020660048036036060811015610a2957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610a5857600080fd5b820183602082011115610a6a57600080fd5b803590602001918460018302840111600160201b83111715610a8b57600080fd5b509092509050611c65565b61021060048036036040811015610aac57600080fd5b506001600160a01b038135169060200135611c6a565b6103cd60048036036040811015610ad857600080fd5b506001600160a01b0381358116916020013516611cf1565b61020660048036036020811015610b0657600080fd5b50356001600160a01b0316611d1c565b6103cd600480360360a0811015610b2c57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135611d3c565b600354600160a01b900460ff1681565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b505050505081565b3360008181526002602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390926000805160206127e3833981519152928290030190a35060015b92915050565b60075460009060ff1680610c6957506003546001600160a01b031633145b610c7257600080fd5b610c7f8686868686611da5565b9695505050505050565b60408051632433260b60e11b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b6003546001600160a01b03163314610d0957600080fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610d5357600080fd5b505afa158015610d67573d6000803e3d6000fd5b505050506040513d6020811015610d7d57600080fd5b5051600354909150610da2906001600160a01b0384811691168363ffffffff61205b16565b5050565b60015490565b6000610dc782610dbb856120f5565b9063ffffffff61214616565b9392505050565b60075460009060ff1680610dec57506003546001600160a01b031633145b610df557600080fd5b610e00848484612234565b949350505050565b6003546001600160a01b03163314610e1f57600080fd5b6003546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051839283169163f2fde38b91602480830192600092919082900301818387803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b505050505050565b601281565b6003546000906001600160a01b03163314610ea857600080fd5b600354600160a01b900460ff1615610ebf57600080fd5b600154610ed2908363ffffffff61239716565b6001556001600160a01b038316600090815260208190526040902054610efe908363ffffffff61239716565b6001600160a01b03841660008181526020818152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805183815290516001600160a01b038516916000916000805160206127c38339815191529181900360200190a350600192915050565b60075460ff1681565b60408051630b2711af60e31b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60006001600160a01b03851661100d57600080fd5b6004866040518082805190602001908083835b6020831061103f5780518252601f199092019160209182019101611020565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061107c905057600080fd5b600061108b3087878787611d3c565b905060006110998289610dac565b90506001600160a01b0381166110ae57600080fd5b6001600160a01b038082166000818152600260209081526040808320948c1683529381528382208a90559181529081905220546110f1908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054611123908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b6020831061117f5780518252601f199092019160209182019101611160565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908716946000805160206127e38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a3336001600160a01b0316876001600160a01b0316826001600160a01b03167f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb8989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054808311156112d6573360009081526002602090815260408083206001600160a01b038816845290915281205561130b565b6112e6818463ffffffff6123a416565b3360009081526002602090815260408083206001600160a01b03891684529091529020555b3360008181526002602090815260408083206001600160a01b0389168085529083529281902054815190815290519293926000805160206127e3833981519152929181900390910190a35060019392505050565b6001600160a01b031660009081526020819052604090205490565b6003546001600160a01b0316331461139157600080fd5b6003546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600380546001600160a01b0319169055565b6003546000906001600160a01b031633146113f557600080fd5b600354600160a01b900460ff161561140c57600080fd5b6003805460ff60a01b1916600160a01b1790556040517fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0890600090a150600190565b60006001600160a01b03851661146357600080fd5b6004866040518082805190602001908083835b602083106114955780518252601f199092019160209182019101611476565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506114d2905057600080fd5b60006114e13087878787610f8f565b905060006114ef8289610dac565b90506001600160a01b03811661150457600080fd5b6001600160a01b038082166000908152600260209081526040808320938b16835292905220548087111561155f576001600160a01b038083166000908152600260209081526040808320938c16835292905290812055611596565b61156f818863ffffffff6123a416565b6001600160a01b038084166000908152600260209081526040808320938d16835292905220555b6001600160a01b0382166000908152602081905260409020546115bf908763ffffffff6123a416565b6001600160a01b0383166000908152602081905260408082209290925533815220546115f1908763ffffffff61239716565b600080336001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160048a6040518082805190602001908083835b6020831061164d5780518252601f19909201916020918201910161162e565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558b845293516001600160a01b038d811695908816946000805160206127e38339815191529450829003019150a360408051878152905133916001600160a01b038516916000805160206127c38339815191529181900360200190a36001600160a01b038281166000818152600260209081526040808320948d16808452948252918290205482519081529081018a90528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a450600198975050505050505050565b6003546001600160a01b031681565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bee5780601f10610bc357610100808354040283529160200191610bee565b6003546001600160a01b031633146117d757600080fd5b6003546040516001600160a01b0390911690303180156108fc02916000818181858888f19350505050158015611811573d6000803e3d6000fd5b50565b6003546001600160a01b0316331461182b57600080fd5b6007805460ff1916911515919091179055565b6040805163a45f71ff60e01b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60075460009060ff16806118c557506003546001600160a01b031633145b6118ce57600080fd5b610dc783836123b6565b60006001600160a01b0385166118ed57600080fd5b6004866040518082805190602001908083835b6020831061191f5780518252601f199092019160209182019101611900565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061195c905057600080fd5b600061196b308787878761183e565b905060006119798289610dac565b90506001600160a01b03811661198e57600080fd5b6001600160a01b038082166000908152600260209081526040808320938b16835292905220546119c4908763ffffffff61239716565b6001600160a01b038083166000818152600260209081526040808320948d1683529381528382209490945590815291829052902054611a09908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054611a3b908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b60208310611a975780518252601f199092019160209182019101611a78565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095556001600160a01b03868116600081815260028452878120928f1680825292845287902054865295519095946000805160206127e383398151915294508190039091019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a36001600160a01b038181166000818152600260209081526040808320948c16808452948252918290205482519081529081018990528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a4506001979650505050505050565b6040805163b7656dc560e01b6020808301919091526001600160601b03196060998a1b8116602484015297891b8816603883015295881b909616604c87015295850192909252608084015260a0808401919091528351808403909101815260c0909201909252805191012090565b60075460009060ff1680611c4357506003546001600160a01b031633145b611c4c57600080fd5b611c5a878787878787612483565b979650505050505050565b600080fd5b3360009081526002602090815260408083206001600160a01b0386168452909152812054611c9e908363ffffffff61239716565b3360008181526002602090815260408083206001600160a01b0389168085529083529281902085905580519485525191936000805160206127e3833981519152929081900390910190a350600192915050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6003546001600160a01b03163314611d3357600080fd5b61181181612753565b60408051637bd64e1760e11b6020808301919091526001600160601b0319606089811b8216602485015288901b166038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201909252805191012095945050505050565b60006001600160a01b038516611dba57600080fd5b6004866040518082805190602001908083835b60208310611dec5780518252601f199092019160209182019101611dcd565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611e29905057600080fd5b6000611e383087878787610c89565b90506000611e468289610dac565b90506001600160a01b038116611e5b57600080fd5b6001600160a01b038116600090815260208190526040902054611e96908690611e8a908963ffffffff6123a416565b9063ffffffff6123a416565b6001600160a01b038083166000908152602081905260408082209390935590891681522054611ecb908763ffffffff61239716565b6001600160a01b038816600090815260208190526040808220929092553381522054611efd908663ffffffff61239716565b600080336001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004896040518082805190602001908083835b60208310611f595780518252601f199092019160209182019101611f3a565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908716946000805160206127c38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a3336001600160a01b0316876001600160a01b0316826001600160a01b03167fec5a73fd1f178be20c1bca1b406cbf4b5c20d833b66e582fc122fb4baa0fc2a48989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050506040513d60208110156120e557600080fd5b50516120f057600080fd5b505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461215957506000610c45565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561219f5760009350505050610c45565b8060ff16601b141580156121b757508060ff16601c14155b156121c85760009350505050610c45565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa15801561221f573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b03831661224957600080fd5b6001600160a01b03841660009081526020819052604090205482111561226e57600080fd5b6001600160a01b038416600090815260026020908152604080832033845290915290205482111561229e57600080fd5b6001600160a01b0384166000908152602081905260409020546122c7908363ffffffff6123a416565b6001600160a01b0380861660009081526020819052604080822093909355908516815220546122fc908363ffffffff61239716565b6001600160a01b0380851660009081526020818152604080832094909455918716815260028252828120338252909152205461233e908363ffffffff6123a416565b6001600160a01b03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391926000805160206127c3833981519152929181900390910190a35060019392505050565b81810182811015610c4557fe5b6000828211156123b057fe5b50900390565b60006001600160a01b0383166123cb57600080fd5b336000908152602081905260409020548211156123e757600080fd5b33600090815260208190526040902054612407908363ffffffff6123a416565b33600090815260208190526040808220929092556001600160a01b03851681522054612439908363ffffffff61239716565b6001600160a01b038416600081815260208181526040918290209390935580518581529051919233926000805160206127c38339815191529281900390910190a350600192915050565b60006001600160a01b03851661249857600080fd5b6004876040518082805190602001908083835b602083106124ca5780518252601f1990920191602091820191016124ab565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150612507905057600080fd5b6000612517308888888888611bb7565b90506000612525828a610dac565b90506001600160a01b03811661253a57600080fd5b6001600160a01b038816600090815260208190526040902054612563908763ffffffff6123a416565b6001600160a01b03808a166000908152602081905260408082209390935590891681522054612598908763ffffffff61239716565b6001600160a01b03808916600090815260208181526040808320949094558b831682526002815283822092851682529190915220546125dd908763ffffffff6123a416565b6001600160a01b03808a1660009081526002602090815260408083209386168352928152828220939093559182905290205461261f908663ffffffff6123a416565b6001600160a01b038216600090815260208190526040808220929092553381522054612651908663ffffffff61239716565b600080336001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160048a6040518082805190602001908083835b602083106126ad5780518252601f19909201916020918201910161268e565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a845293516001600160a01b038c811695908e16946000805160206127c38339815191529450829003019150a360408051868152905133916001600160a01b038416916000805160206127c38339815191529181900360200190a350600198975050505050505050565b6001600160a01b03811661276657600080fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b039290921691909117905556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a265627a7a7230582022558afb59017a1f10d920bd4c55d8a8c1ecd7a7353ff3c36262adf34e12f08764736f6c634300050a0032

Deployed Bytecode Sourcemap

33811:1511:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33811:1511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10435:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;33910:37;;;:::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;33910:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5966:192;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5966:192:0;;;;;;;;:::i;34640:317::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;34640:317:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;34640:317:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34640:317:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34640:317:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34640:317:0;;-1:-1:-1;;;;;;;34640:317:0;;;;-1:-1:-1;;;34640:317:0;;;;;;;;;;;;;;:::i;29202:432::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;29202:432:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13964:161;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13964:161:0;-1:-1:-1;;;;;13964:161:0;;:::i;2792:85::-;;;:::i;33657:147::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33657:147:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;33657:147:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33657:147:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33657:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33657:147:0;;-1:-1:-1;33657:147:0;;-1:-1:-1;;;;;33657:147:0:i;:::-;;;;-1:-1:-1;;;;;33657:147:0;;;;;;;;;;;;;;34468:164;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34468:164:0;;;;;;;;;;;;;;;;;:::i;15324:167::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15324:167:0;-1:-1:-1;;;;;15324:167:0;;:::i;33954:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10872:326;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10872:326:0;;;;;;;;:::i;33998:27::-;;;:::i;31897:470::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;31897:470:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23212:904::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;23212:904:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;23212:904:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23212:904:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;23212:904:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;23212:904:0;;-1:-1:-1;;;;;;;23212:904:0;;;;-1:-1:-1;;;23212:904:0;;;;;;;;;;;;;;:::i;7885:446::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7885:446:0;;;;;;;;:::i;3576:101::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3576:101:0;-1:-1:-1;;;;;3576:101:0;;:::i;9360:114::-;;;:::i;11318:144::-;;;:::i;26074:1162::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;26074:1162:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;26074:1162:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26074:1162:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;26074:1162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;26074:1162:0;;-1:-1:-1;;;;;;;26074:1162:0;;;;-1:-1:-1;;;26074:1162:0;;;;;;;;;;;;;;:::i;8557:28::-;;;:::i;33875:::-;;;:::i;12639:93::-;;;:::i;34107:101::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34107:101:0;;;;:::i;30960:460::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;30960:460:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34328:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34328:134:0;;;;;;;;:::i;24593:1000::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;24593:1000:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;24593:1000:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;24593:1000:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;24593:1000:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;24593:1000:0;;-1:-1:-1;;;;;;;24593:1000:0;;;;-1:-1:-1;;;24593:1000:0;;;;;;;;;;;;;;:::i;32888:471::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;32888:471:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34963:356::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;34963:356:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;34963:356:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34963:356:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34963:356:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34963:356:0;;-1:-1:-1;;;;;;;34963:356:0;;;;;-1:-1:-1;34963:356:0;;;;;;;;;;;-1:-1:-1;34963:356:0;;;;;-1:-1:-1;34963:356:0;;;;:::i;14726:148::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;14726:148:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14726:148:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14726:148:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;14726:148:0;;-1:-1:-1;14726:148:0;-1:-1:-1;14726:148:0;:::i;7110:307::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7110:307:0;;;;;;;;:::i;6485:162::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6485:162:0;;;;;;;;;;:::i;9642:113::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9642:113:0;-1:-1:-1;;;;;9642:113:0;;:::i;30064:432::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;30064:432:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10435:35::-;;;-1:-1:-1;;;10435:35:0;;;;;:::o;33910:37::-;;;;;;;;;;;;;;;-1:-1:-1;;33910:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5966:192::-;6054:10;6033:4;6046:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6046:29:0;;;;;;;;;;;:38;;;6096;;;;;;;6033:4;;6046:29;;6054:10;;-1:-1:-1;;;;;;;;;;;6096:38:0;;;;;;;-1:-1:-1;6148:4:0;5966:192;;;;;:::o;34640:317::-;34257:15;;34858:4;;34257:15;;;:38;;-1:-1:-1;34290:5:0;;-1:-1:-1;;;;;34290:5:0;34276:10;:19;34257:38;34248:48;;;;;;34887:62;34911:10;34923:3;34928:6;34936:4;34942:6;34887:23;:62::i;:::-;34880:69;34640:317;-1:-1:-1;;;;;;34640:317:0:o;29202:432::-;29554:71;;;-1:-1:-1;;;29554:71:0;;;;;;;;-1:-1:-1;;;;;;29554:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;29554:71:0;;;;;;;29544:82;;;;;29202:432;;;;;;;:::o;13964:161::-;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;14048:30;;;-1:-1:-1;;;14048:30:0;;14072:4;14048:30;;;;;;14030:15;;-1:-1:-1;;;;;14048:15:0;;;;;:30;;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;14048:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14048:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14048:30:0;14104:5;;14048:30;;-1:-1:-1;14085:34:0;;-1:-1:-1;;;;;14085:18:0;;;;14104:5;14048:30;14085:34;:18;:34;:::i;:::-;9081:1;13964:161;:::o;2792:85::-;2859:12;;2792:85;:::o;33657:147::-;33727:7;33754:42;33792:3;33754:29;:4;:27;:29::i;:::-;:37;:42;:37;:42;:::i;:::-;33747:49;33657:147;-1:-1:-1;;;33657:147:0:o;34468:164::-;34257:15;;34562:4;;34257:15;;;:38;;-1:-1:-1;34290:5:0;;-1:-1:-1;;;;;34290:5:0;34276:10;:19;34257:38;34248:48;;;;;;34586:38;34605:5;34612:3;34617:6;34586:18;:38::i;:::-;34579:45;34468:164;-1:-1:-1;;;;34468:164:0:o;15324:167::-;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;15479:5;;15448:37;;;-1:-1:-1;;;15448:37:0;;-1:-1:-1;;;;;15479:5:0;;;15448:37;;;;;;15428:12;;15448:30;;;;;:37;;;;;15397:20;;15448:37;;;;;;;15397:20;15448:30;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;15448:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15448:37:0;;;;9081:1;15324:167;:::o;33954:35::-;33987:2;33954:35;:::o;10872:326::-;10608:5;;10993:4;;-1:-1:-1;;;;;10608:5:0;10594:10;:19;10586:28;;;;;;10514:15;;-1:-1:-1;;;10514:15:0;;;;10513:16;10505:25;;;;;;11024:12;;:25;;11041:7;11024:25;:16;:25;:::i;:::-;11009:12;:40;-1:-1:-1;;;;;11072:13:0;;:8;:13;;;;;;;;;;;:26;;11090:7;11072:26;:17;:26;:::i;:::-;-1:-1:-1;;;;;11056:13:0;;:8;:13;;;;;;;;;;;;:42;;;;11110:18;;;;;;;11056:13;;11110:18;;;;;;;;;11140:34;;;;;;;;-1:-1:-1;;;;;11140:34:0;;;11157:1;;-1:-1:-1;;;;;;;;;;;11140:34:0;;;;;;;;-1:-1:-1;11188:4:0;10872:326;;;;:::o;33998:27::-;;;;;;:::o;31897:470::-;32272:86;;;-1:-1:-1;;;32272:86:0;;;;;;;;-1:-1:-1;;;;;;32272:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;32272:86:0;;;;;;;32262:97;;;;;31897:470;;;;;;;:::o;23212:904::-;23413:4;-1:-1:-1;;;;;23443:22:0;;23435:31;;;;;;23485:10;23496;23485:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;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;;23485:22:0;;;;;-1:-1:-1;23485:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;23477:40:0;;-1:-1:-1;23477:40:0;;;;;23530:16;23549:70;23581:4;23588:8;23598:6;23606:4;23612:6;23549:23;:70::i;:::-;23530:89;;23630:12;23645:29;23653:8;23663:10;23645:7;:29::i;:::-;23630:44;-1:-1:-1;;;;;;23693:18:0;;23685:27;;;;;;-1:-1:-1;;;;;23725:13:0;;;;;;;:7;:13;;;;;;;;:23;;;;;;;;;;;:32;;;23785:14;;;;;;;;;:24;;23804:4;23785:24;:18;:24;:::i;:::-;-1:-1:-1;;;;;23768:14:0;;:8;:14;;;;;;;;;;;:41;;;;23852:10;23843:20;;;;:30;;23868:4;23843:30;:24;:30;:::i;:::-;23820:8;:20;23829:10;-1:-1:-1;;;;;23820:20:0;-1:-1:-1;;;;;23820:20:0;;;;;;;;;;;;:53;;;;23909:4;23884:10;23895;23884:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;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;;23884:22:0;;;;;-1:-1:-1;23884:22:0;;;;;;;;;;;:29;;-1:-1:-1;;23884:29:0;;;;;;;;;;;23931:32;;;;;-1:-1:-1;;;;;23931:32:0;;;;;;;;-1:-1:-1;;;;;;;;;;;23931:32:0;-1:-1:-1;23931:32:0;;;;;-1:-1:-1;23931:32:0;23979;;;;;;;;23994:10;;-1:-1:-1;;;;;23979:32:0;;;-1:-1:-1;;;;;;;;;;;23979:32:0;;;;;;;;24061:10;-1:-1:-1;;;;;24027:59:0;24051:8;-1:-1:-1;;;;;24027:59:0;24045:4;-1:-1:-1;;;;;24027:59:0;;24073:6;24081:4;24027:59;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24104:4:0;;23212:904;-1:-1:-1;;;;;;;23212:904:0:o;7885:446::-;8039:10;7996:4;8031:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;8031:29:0;;;;;;;;;;8071:27;;;8067:168;;;8117:10;8141:1;8109:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;8109:29:0;;;;;;;;;:33;8067:168;;;8197:30;:8;8210:16;8197:30;:12;:30;:::i;:::-;8173:10;8165:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;8165:29:0;;;;;;;;;:62;8067:168;8255:10;8277:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;8246:61:0;;8277:29;;;;;;;;;;;8246:61;;;;;;;;;8255:10;-1:-1:-1;;;;;;;;;;;8246:61:0;;;;;;;;;;-1:-1:-1;8321:4:0;;7885:446;-1:-1:-1;;;7885:446:0:o;3576:101::-;-1:-1:-1;;;;;3655:16:0;3632:7;3655:16;;;;;;;;;;;;3576:101::o;9360:114::-;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;9437:5;;9418:25;;-1:-1:-1;;;;;9437:5:0;;;;9418:25;;9437:5;;9418:25;9450:5;:18;;-1:-1:-1;;;;;;9450:18:0;;;9360:114::o;11318:144::-;9068:5;;11377:4;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;10514:15;;-1:-1:-1;;;10514:15:0;;;;10513:16;10505:25;;;;;;11390:15;:22;;-1:-1:-1;;;;11390:22:0;-1:-1:-1;;;11390:22:0;;;11424:14;;;;11390:22;;11424:14;-1:-1:-1;11452:4:0;11318:144;:::o;26074:1162::-;26294:4;-1:-1:-1;;;;;26324:22:0;;26316:31;;;;;;26366:10;26377;26366:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;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;;26366:22:0;;;;;-1:-1:-1;26366:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;26358:40:0;;-1:-1:-1;26358:40:0;;;;;26411:16;26430:89;26471:4;26478:8;26488:16;26506:4;26512:6;26430:32;:89::i;:::-;26411:108;;26530:12;26545:29;26553:8;26563:10;26545:7;:29::i;:::-;26530:44;-1:-1:-1;;;;;;26593:18:0;;26585:27;;;;;;-1:-1:-1;;;;;26641:13:0;;;26625;26641;;;:7;:13;;;;;;;;:23;;;;;;;;;;26679:27;;;26675:176;;;-1:-1:-1;;;;;26723:13:0;;;26749:1;26723:13;;;:7;:13;;;;;;;;:23;;;;;;;;;;;:27;26675:176;;;26809:30;:8;26822:16;26809:30;:12;:30;:::i;:::-;-1:-1:-1;;;;;26783:13:0;;;;;;;:7;:13;;;;;;;;:23;;;;;;;;;:56;26675:176;-1:-1:-1;;;;;26878:14:0;;:8;:14;;;;;;;;;;;:24;;26897:4;26878:24;:18;:24;:::i;:::-;-1:-1:-1;;;;;26861:14:0;;:8;:14;;;;;;;;;;;:41;;;;26945:10;26936:20;;;;:30;;26961:4;26936:30;:24;:30;:::i;:::-;26913:8;:20;26922:10;-1:-1:-1;;;;;26913:20:0;-1:-1:-1;;;;;26913:20:0;;;;;;;;;;;;:53;;;;27002:4;26977:10;26988;26977:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;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;;26977:22:0;;;;;-1:-1:-1;26977:22:0;;;;;;;;;;;:29;;-1:-1:-1;;26977:29:0;;;;;;;;;;;27024:42;;;;;-1:-1:-1;;;;;27024:42:0;;;;;;;;-1:-1:-1;;;;;;;;;;;27024:42:0;-1:-1:-1;27024:42:0;;;;;-1:-1:-1;27024:42:0;27082:32;;;;;;;;27097:10;;-1:-1:-1;;;;;27082:32:0;;;-1:-1:-1;;;;;;;;;;;27082:32:0;;;;;;;;-1:-1:-1;;;;;27130:76:0;;;27176:13;;;;:7;:13;;;;;;;;27130:76;;;27176:23;;;;;;;;;;;27130:76;;;;;;;;;;;;;27164:10;;27130:76;;;;;;;;;;-1:-1:-1;27224:4:0;;26074:1162;-1:-1:-1;;;;;;;;26074:1162:0:o;8557:28::-;;;-1:-1:-1;;;;;8557:28:0;;:::o;33875:::-;;;;;;;;;;;;;;;-1:-1:-1;;33875:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12639:93;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;12689:5;;:37;;-1:-1:-1;;;;;12689:5:0;;;;12712:4;12704:21;12689:37;;;;;:5;:37;:5;:37;12704:21;12689:5;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12689:37:0;12639:93::o;34107:101::-;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;34176:15;:24;;-1:-1:-1;;34176:24:0;;;;;;;;;;34107:101::o;30960:460::-;31330:81;;;-1:-1:-1;;;31330:81:0;;;;;;;;-1:-1:-1;;;;;;31330:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;31330:81:0;;;;;;;31320:92;;;;;30960:460;;;;;;;:::o;34328:134::-;34257:15;;34403:4;;34257:15;;;:38;;-1:-1:-1;34290:5:0;;-1:-1:-1;;;;;34290:5:0;34276:10;:19;34257:38;34248:48;;;;;;34427:27;34442:3;34447:6;34427:14;:27::i;24593:1000::-;24808:4;-1:-1:-1;;;;;24838:22:0;;24830:31;;;;;;24880:10;24891;24880:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;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;;24880:22:0;;;;;-1:-1:-1;24880:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;24872:40:0;;-1:-1:-1;24872:40:0;;;;;24925:16;24944:84;24985:4;24992:8;25002:11;25015:4;25021:6;24944:32;:84::i;:::-;24925:103;;25039:12;25054:29;25062:8;25072:10;25054:7;:29::i;:::-;25039:44;-1:-1:-1;;;;;;25102:18:0;;25094:27;;;;;;-1:-1:-1;;;;;25160:13:0;;;;;;;:7;:13;;;;;;;;:23;;;;;;;;;;:40;;25188:11;25160:40;:27;:40;:::i;:::-;-1:-1:-1;;;;;25134:13:0;;;;;;;:7;:13;;;;;;;;:23;;;;;;;;;;;:66;;;;25228:14;;;;;;;;;;:24;;25247:4;25228:24;:18;:24;:::i;:::-;-1:-1:-1;;;;;25211:14:0;;:8;:14;;;;;;;;;;;:41;;;;25295:10;25286:20;;;;:30;;25311:4;25286:30;:24;:30;:::i;:::-;25263:8;:20;25272:10;-1:-1:-1;;;;;25263:20:0;-1:-1:-1;;;;;25263:20:0;;;;;;;;;;;;:53;;;;25352:4;25327:10;25338;25327:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;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;;25327:22:0;;;;;-1:-1:-1;25327:22:0;;;;;;;;;;;:29;;-1:-1:-1;;25327:29:0;;;;;;;;;;;-1:-1:-1;;;;;25374:49:0;;;-1:-1:-1;25399:13:0;;;:7;:13;;;;;25374:49;;;25399:23;;;;;;;;;;25374:49;;;;;;;-1:-1:-1;;;;;;;;;;;25374:49:0;-1:-1:-1;25374:49:0;;;;;;;-1:-1:-1;25374:49:0;25439:32;;;;;;;;25454:10;;-1:-1:-1;;;;;25439:32:0;;;-1:-1:-1;;;;;;;;;;;25439:32:0;;;;;;;;-1:-1:-1;;;;;25487:76:0;;;25533:13;;;;:7;:13;;;;;;;;25487:76;;;25533:23;;;;;;;;;;;25487:76;;;;;;;;;;;;;25521:10;;25487:76;;;;;;;;;;-1:-1:-1;25581:4:0;;24593:1000;-1:-1:-1;;;;;;;24593:1000:0:o;32888:471::-;33272:78;;;-1:-1:-1;;;33272:78:0;;;;;;;;-1:-1:-1;;;;;;33272:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;33272:78:0;;;;;;;33262:89;;;;;;32888:471::o;34963:356::-;34257:15;;35209:4;;34257:15;;;:38;;-1:-1:-1;34290:5:0;;-1:-1:-1;;;;;34290:5:0;34276:10;:19;34257:38;34248:48;;;;;;35238:73;35266:10;35278:5;35285:3;35290:6;35298:4;35304:6;35238:27;:73::i;:::-;35231:80;34963:356;-1:-1:-1;;;;;;;34963:356:0:o;14726:148::-;14860:8;;;7110:307;7281:10;7216:4;7273:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;7273:29:0;;;;;;;;;;:46;;7307:11;7273:46;:33;:46;:::i;:::-;7240:10;7232:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;7232:29:0;;;;;;;;;;;;:88;;;7332:61;;;;;;7232:29;;-1:-1:-1;;;;;;;;;;;7332:61:0;;;;;;;;;;-1:-1:-1;7407:4:0;7110:307;;;;:::o;6485:162::-;-1:-1:-1;;;;;6616:15:0;;;6590:7;6616:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;6485:162::o;9642:113::-;9068:5;;-1:-1:-1;;;;;9068:5:0;9054:10;:19;9046:28;;;;;;9720:29;9739:9;9720:18;:29::i;30064:432::-;30411:76;;;-1:-1:-1;;;30411:76:0;;;;;;;;-1:-1:-1;;;;;;30411:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;30411:76:0;;;;;;;30401:87;;;;;30064:432;;;;;;;:::o;21894:904::-;22091:4;-1:-1:-1;;;;;22121:17:0;;22113:26;;;;;;22158:10;22169;22158:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;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;;22158:22:0;;;;;-1:-1:-1;22158:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;22150:40:0;;-1:-1:-1;22150:40:0;;;;;22203:16;22222:66;22255:4;22262:3;22267:6;22275:4;22281:6;22222:24;:66::i;:::-;22203:85;;22301:12;22316:29;22324:8;22334:10;22316:7;:29::i;:::-;22301:44;-1:-1:-1;;;;;;22364:18:0;;22356:27;;;;;;-1:-1:-1;;;;;22413:14:0;;:8;:14;;;;;;;;;;;:36;;22444:4;;22413:26;;22432:6;22413:26;:18;:26;:::i;:::-;:30;:36;:30;:36;:::i;:::-;-1:-1:-1;;;;;22396:14:0;;;:8;:14;;;;;;;;;;;:53;;;;22476:13;;;;;;;:25;;22494:6;22476:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;22460:13:0;;:8;:13;;;;;;;;;;;:41;;;;22544:10;22535:20;;;;:30;;22560:4;22535:30;:24;:30;:::i;:::-;22512:8;:20;22521:10;-1:-1:-1;;;;;22512:20:0;-1:-1:-1;;;;;22512:20:0;;;;;;;;;;;;:53;;;;22601:4;22576:10;22587;22576:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;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;;22576:22:0;;;;;-1:-1:-1;22576:22:0;;;;;;;;;;;:29;;-1:-1:-1;;22576:29:0;;;;;;;;;;;22623:27;;;;;-1:-1:-1;;;;;22623:27:0;;;;;;;;-1:-1:-1;;;;;;;;;;;22623:27:0;-1:-1:-1;22623:27:0;;;;;-1:-1:-1;22623:27:0;22666:32;;;;;;;;22681:10;;-1:-1:-1;;;;;22666:32:0;;;-1:-1:-1;;;;;;;;;;;22666:32:0;;;;;;;;22743:10;-1:-1:-1;;;;;22714:54:0;22738:3;-1:-1:-1;;;;;22714:54:0;22732:4;-1:-1:-1;;;;;22714:54:0;;22755:6;22763:4;22714:54;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22786:4:0;;21894:904;-1:-1:-1;;;;;;;21894:904:0:o;13037:123::-;13128:5;-1:-1:-1;;;;;13128:14:0;;13143:2;13147:5;13128:25;;;;;;;;;;;;;-1:-1:-1;;;;;13128:25:0;-1:-1:-1;;;;;13128:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13128:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13128:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13128:25:0;13120:34;;;;;;13037:123;;;:::o;20613:269::-;20815:58;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20815:58:0;;;;;;;20805:69;;;;;;20613:269::o;18407:1930::-;18485:7;18548:9;:16;18568:2;18548:22;18544:74;;-1:-1:-1;18603:1:0;18587:19;;18544:74;18979:4;18964:20;;18958:27;19025:4;19010:20;;19004:27;19079:4;19064:20;;19058:27;18687:9;19050:36;20009:66;19996:79;;19992:129;;;20107:1;20092:17;;;;;;;19992:129;20137:1;:7;;20142:2;20137:7;;:18;;;;;20148:1;:7;;20153:2;20148:7;;20137:18;20133:68;;;20187:1;20172:17;;;;;;;20133:68;20305:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20305:24:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;20305:24:0;;-1:-1:-1;;20305:24:0;;;18407:1930;-1:-1:-1;;;;;;;18407:1930:0:o;4850:487::-;4962:4;-1:-1:-1;;;;;4986:17:0;;4978:26;;;;;;-1:-1:-1;;;;;5029:15:0;;:8;:15;;;;;;;;;;;5019:25;;;5011:34;;;;;;-1:-1:-1;;;;;5070:14:0;;;;;;:7;:14;;;;;;;;5085:10;5070:26;;;;;;;;5060:36;;;5052:45;;;;;;-1:-1:-1;;;;;5124:15:0;;:8;:15;;;;;;;;;;;:27;;5144:6;5124:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;5106:15:0;;;:8;:15;;;;;;;;;;;:45;;;;5174:13;;;;;;;:25;;5192:6;5174:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;5158:13:0;;;:8;:13;;;;;;;;;;;:41;;;;5235:14;;;;;:7;:14;;;;;5250:10;5235:26;;;;;;;:38;;5266:6;5235:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;5206:14:0;;;;;;;:7;:14;;;;;;;;5221:10;5206:26;;;;;;;;:67;;;;5285:28;;;;;;;;;;;5206:14;;-1:-1:-1;;;;;;;;;;;5285:28:0;;;;;;;;;;-1:-1:-1;5327:4:0;4850:487;;;;;:::o;2363:127::-;2443:5;;;2462:6;;;;2455:14;;;2183:113;2241:7;2269:1;2264;:6;;2257:14;;;;-1:-1:-1;2285:5:0;;;2183:113::o;3038:329::-;3101:4;-1:-1:-1;;;;;3122:17:0;;3114:26;;;;;;3174:10;3165:8;:20;;;;;;;;;;;3155:30;;;3147:39;;;;;;3227:10;3218:8;:20;;;;;;;;;;;:32;;3243:6;3218:32;:24;:32;:::i;:::-;3204:10;3195:8;:20;;;;;;;;;;;:55;;;;-1:-1:-1;;;;;3273:13:0;;;;;;:25;;3291:6;3273:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;3257:13:0;;:8;:13;;;;;;;;;;;;:41;;;;3310:33;;;;;;;3257:13;;3319:10;;-1:-1:-1;;;;;;;;;;;3310:33:0;;;;;;;;;-1:-1:-1;3357:4:0;3038:329;;;;:::o;27754:1007::-;27979:4;-1:-1:-1;;;;;28009:17:0;;28001:26;;;;;;28046:10;28057;28046:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;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;;28046:22:0;;;;;-1:-1:-1;28046:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;28038:40:0;;-1:-1:-1;28038:40:0;;;;;28091:16;28110:77;28147:4;28154:5;28161:3;28166:6;28174:4;28180:6;28110:28;:77::i;:::-;28091:96;;28200:15;28218:29;28226:8;28236:10;28218:7;:29::i;:::-;28200:47;-1:-1:-1;;;;;;28266:21:0;;28258:30;;;;;;-1:-1:-1;;;;;28319:15:0;;:8;:15;;;;;;;;;;;:27;;28339:6;28319:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;28301:15:0;;;:8;:15;;;;;;;;;;;:45;;;;28373:13;;;;;;;:25;;28391:6;28373:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;28357:13:0;;;:8;:13;;;;;;;;;;;:41;;;;28435:14;;;;;:7;:14;;;;;:23;;;;;;;;;;;:35;;28463:6;28435:35;:27;:35;:::i;:::-;-1:-1:-1;;;;;28409:14:0;;;;;;;:7;:14;;;;;;;;:23;;;;;;;;;;;:61;;;;28503:17;;;;;;;:27;;28525:4;28503:27;:21;:27;:::i;:::-;-1:-1:-1;;;;;28483:17:0;;:8;:17;;;;;;;;;;;:47;;;;28573:10;28564:20;;;;:30;;28589:4;28564:30;:24;:30;:::i;:::-;28541:8;:20;28550:10;-1:-1:-1;;;;;28541:20:0;-1:-1:-1;;;;;28541:20:0;;;;;;;;;;;;:53;;;;28630:4;28605:10;28616;28605:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;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;;28605:22:0;;;;;-1:-1:-1;28605:22:0;;;;;;;;;;;:29;;-1:-1:-1;;28605:29:0;;;;;;;;;;;28652:28;;;;;-1:-1:-1;;;;;28652:28:0;;;;;;;;-1:-1:-1;;;;;;;;;;;28652:28:0;-1:-1:-1;28652:28:0;;;;;-1:-1:-1;28652:28:0;28696:35;;;;;;;;28714:10;;-1:-1:-1;;;;;28696:35:0;;;-1:-1:-1;;;;;;;;;;;28696:35:0;;;;;;;;-1:-1:-1;28749:4:0;;27754:1007;-1:-1:-1;;;;;;;;27754:1007:0:o;9896:183::-;-1:-1:-1;;;;;9975:23:0;;9967:32;;;;;;10032:5;;10011:38;;-1:-1:-1;;;;;10011:38:0;;;;10032:5;;10011:38;;10032:5;;10011:38;10056:5;:17;;-1:-1:-1;;;;;;10056:17:0;-1:-1:-1;;;;;10056:17:0;;;;;;;;;;9896:183::o

Swarm Source

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