ETH Price: $2,966.28 (+3.54%)
Gas: 2 Gwei

The Heist Characters (HEIST)
 

Overview

TokenID

2270

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

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

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TokenCharacter

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 7 : TokenCharacter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

/*


▄▄▄█████▓ ██░ ██ ▓█████     ██░ ██ ▓█████  ██▓  ██████ ▄▄▄█████▓
▓  ██▒ ▓▒▓██░ ██▒▓█   ▀    ▓██░ ██▒▓█   ▀ ▓██▒▒██    ▒ ▓  ██▒ ▓▒
▒ ▓██░ ▒░▒██▀▀██░▒███      ▒██▀▀██░▒███   ▒██▒░ ▓██▄   ▒ ▓██░ ▒░
░ ▓██▓ ░ ░▓█ ░██ ▒▓█  ▄    ░▓█ ░██ ▒▓█  ▄ ░██░  ▒   ██▒░ ▓██▓ ░ 
  ▒██▒ ░ ░▓█▒░██▓░▒████▒   ░▓█▒░██▓░▒████▒░██░▒██████▒▒  ▒██▒ ░ 
  ▒ ░░    ▒ ░░▒░▒░░ ▒░ ░    ▒ ░░▒░▒░░ ▒░ ░░▓  ▒ ▒▓▒ ▒ ░  ▒ ░░   
    ░     ▒ ░▒░ ░ ░ ░  ░    ▒ ░▒░ ░ ░ ░  ░ ▒ ░░ ░▒  ░ ░    ░    
  ░       ░  ░░ ░   ░       ░  ░░ ░   ░    ▒ ░░  ░  ░    ░      
          ░  ░  ░   ░  ░    ░  ░  ░   ░  ░ ░        ░           
                                                                

            ;`.                       ,'/
            |`.`-.      _____      ,-;,'|
            |  `-.\__,-'     `-.__//'   |
            |     `|               \ ,  |
            `.  ```                 ,  .'
              \_`      \     /      `_/
                \    ^  \   /   ^   /
                 |   X   ____   X  |
                 |     ,'    `.    |
                 |    (  O' O  )   |
                 `.    \__,.__/   ,'
                   `-._  `--'  _,'
                       `------'

created with curiosity by .pwa group 2021.

    gm. wgmi.

            if you're reading this, you are early.

*/

import "./ERC721Custom.sol";        //Custom ERC721 implementation
import "./Base/Pausable.sol";       //Pause critical functions

contract TokenCharacter is Pausable, ERC721 {

    uint16 public constant MAX_CHARACTERS = 15000; //The hard limit. We may create less than this.

    constructor() ERC721(
        "The Heist Characters",
        "HEIST",
        MAX_CHARACTERS)
    {
        //gm
    }

    function Mint(uint8 amount, address to) external onlyControllers whenNotPaused {
        for (uint256 i = 0; i < amount; i++ ){
            _mint(to, _totalMinted + 1); //start at tokenID = 1
        }
    }

}

File 2 of 7 : ERC721Custom.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

//Custom ERC721 implemention for lower minting.
//We stand on the shoulders of giants.
// -8C30

import "./Base/Controllable.sol";
import "../Interfaces/I_MetadataHandler.sol";

contract ERC721 is Controllable {

    //ERC721 events
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenID);
    event Approval(address indexed owner, address indexed spender, uint256 indexed tokenID);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    
    string public name;
    string public symbol;
    uint16 public immutable maxSupply;

    //we only have 15k max tokens, so we're using uint16 for slight gas saving on gameplay functions
    //but keeping uint256 interfaces for compatibility

    uint16 public _totalMinted; //if contract allows burning, then # of minted can be > supply
    uint16 public _totalSupply16;
    
    mapping(uint16 => address) public _ownerOf16;
    mapping(uint16 => address) public getApproved;
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    I_MetadataHandler metaDataHandler;

    constructor(
        string memory _name,
        string memory _symbol,
        uint16 _maxSupply
    ) {
        name = _name;
        symbol = _symbol;
        maxSupply = _maxSupply;
    }
    
    //Explicit version returning uint256 to fit with the EIP 721 specification
    function totalSupply() view external returns (uint256) {
        return uint256(_totalSupply16);
    }

    //Explicit version returning uint256 to fit with the EIP 721 specification
    function ownerOf(uint256 tokenID) view external returns (address) {
        return _ownerOf16[uint16(tokenID)];
    }
    
    function supportsInterface(bytes4 interfaceId) external pure returns (bool supported) {
        supported = interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f; // || interfaceId == 0x780e9d63;
    }
    
    function approve(address spender, uint256 tokenID) external {
        uint16 _tokenID = uint16(tokenID);
        address owner_ = _ownerOf16[_tokenID];
        require(msg.sender == owner_ || isApprovedForAll[owner_][msg.sender], "ERC721: Not approved");
        
        getApproved[_tokenID] = spender;
        emit Approval(owner_, spender, tokenID); 
    }
    
    function setApprovalForAll(address operator, bool approved) external {
        isApprovedForAll[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    //called by the user who owns it
    function transfer_16(address to, uint16 tokenID) external {
        require(msg.sender == _ownerOf16[tokenID], "ERC721: Not owner");
        _transfer(msg.sender, to, tokenID);
    }

    //called by the user who owns it
    function transfer(address to, uint256 tokenID) external {
        uint16 _tokenID = uint16(tokenID);
        require(msg.sender == _ownerOf16[_tokenID], "ERC721: Not owner");
        _transfer(msg.sender, to, _tokenID);
    }

    function transferFrom(address owner_, address to, uint256 tokenID) public {        
        uint16 _tokenID = uint16(tokenID);
        require(
            msg.sender == owner_ 
            || controllers[msg.sender]
            || msg.sender == getApproved[_tokenID]
            || isApprovedForAll[owner_][msg.sender], 
            "ERC721: Not approved"
        );
        
        _transfer(owner_, to, _tokenID);
    }
    
    function safeTransferFrom(address, address to, uint256 tokenID) external {
        safeTransferFrom(address(0), to, tokenID, "");
    }
    
    function safeTransferFrom(address, address to, uint256 tokenID, bytes memory data) public {
        transferFrom(address(0), to, tokenID); 
        
        if (to.code.length != 0) {
            (, bytes memory returned) = to.staticcall(abi.encodeWithSelector(0x150b7a02,
                msg.sender, address(0), tokenID, data));
                
            bytes4 selector = abi.decode(returned, (bytes4));
            
            require(selector == 0x150b7a02, "ERC721: Address cannot receive");
        }
    }

    //metadata
    function setMetadataHandler(address newHandlerAddress) external onlyOwner {
        metaDataHandler = I_MetadataHandler(newHandlerAddress);
    }

    function tokenURI(uint256 tokenID) external view returns (string memory) {
        uint16 _tokenID = uint16(tokenID);
        require(_ownerOf16[_tokenID] != address(0), "ERC721: Nonexistent token");
        require(address(metaDataHandler) != address(0),"ERC721: No metadata handler set");

        return metaDataHandler.tokenURI(tokenID); 
    }
    
    //internal
    function _transfer(address from, address to, uint16 tokenID) internal {
        require(_ownerOf16[tokenID] == from, "ERC721: Not owner");
        
        delete getApproved[tokenID];
        
        _ownerOf16[tokenID] = to;
        emit Transfer(from, to, tokenID); 

    }

    //specific tokenID allows ressurection after burning in the future if desired
    function _mint(address to, uint16 tokenID) internal { 
        require(_ownerOf16[tokenID] == address(0), "ERC721: Token already minted");
        require(_totalSupply16 < maxSupply, "ERC721: Reached Max Supply");    

        _ownerOf16[tokenID] = to;
        _totalMinted++;
        _totalSupply16++;

        emit Transfer(address(0), to, tokenID); 
    }
    
    function _burn(uint16 tokenID) internal {
        address owner_ = _ownerOf16[tokenID];
        
        require(owner_ != address(0), "ERC721: Nonexistent token");
        
        _totalSupply16--;
        
        delete _ownerOf16[tokenID];
                
        emit Transfer(owner_, address(0), tokenID); 
    }

    //We do not require balance for any logic contracts, so this view is only used by UI 
    function balanceOf(address owner_) public view returns (uint256) {
        require(owner_ != address(0), "ERC721: Non-existant address");

        uint count = 0;
        for(uint16 i = 1; i < _totalSupply16 + 1; i++) {
            if(owner_ == _ownerOf16[i])
            count++;
        }
        return count;
    }

    //ERC-721 Enumerable
    function tokenOfOwnerByIndex(address owner_, uint256 index) public view returns (uint256 tokenId) {
        require(index < balanceOf(owner_), "ERC721: Index greater than owner balance");

        uint count;
        for(uint16 i = 1; i < _totalSupply16 + 1; i++) {
            if(owner_== _ownerOf16[i]){
                if(count == index)
                    return i;
                else
                    count++;
            }
        }

        require(false, "ERC721Enumerable: owner index out of bounds");
    }

    /*
    function tokenByIndex(uint256 _index) external view returns (uint256){
        require(_index > 0, "ERC721Enumerable: Invalid index");
        require(_index < _totalSupply16, "ERC721Enumerable: Invalid index");
        return _index;
    }
    */
}

File 3 of 7 : Pausable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "@openzeppelin/contracts/access/Ownable.sol";


//allows pausing of critical functions in the contract
contract Pausable is Ownable {

    bool public paused = false; //start unpaused

    event Paused();
    event Unpaused();

    modifier whenNotPaused() {
        require(!paused,"Contract is paused");
        _;
    }

    modifier whenPaused() {
        require(paused,"Contract is not paused");
        _;
    }

    function Pause() onlyOwner whenNotPaused external {
        paused = true;
        emit Paused();
    }

    function Unpause() onlyOwner whenPaused external {
        paused = false;
        emit Unpaused();
    }
}

File 4 of 7 : Controllable.sol
// SPDX-License-Identifier: CC0
pragma solidity ^0.8.7;

import "@openzeppelin/contracts/access/Ownable.sol";

//Simple way of allowing authorized controllers to perform privileged functions
contract Controllable is Ownable {

    mapping(address => bool) controllers; //authorized addresses

    modifier onlyControllers() {
        require(controllers[msg.sender], "Controllable: Authorized controllers only.");
        _;
    }

    function addController(address newController) external onlyOwner {
        controllers[newController] = true;
    }

    function addControllers(address[] calldata newControllers) external onlyOwner {
        for (uint i=0; i < newControllers.length; i++) {
            controllers[newControllers[i]] = true;
        }
    }

    function removeController(address toDelete) external onlyOwner {
        controllers[toDelete] = false; //same as del
    }

}

File 5 of 7 : I_MetadataHandler.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

interface I_MetadataHandler {

    function tokenURI(uint256 tokenID) external view returns (string memory); //our implementation may even be pure

}

File 6 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 7 of 7 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_CHARACTERS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"address","name":"to","type":"address"}],"name":"Mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"_ownerOf16","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalMinted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply16","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newController","type":"address"}],"name":"addController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newControllers","type":"address[]"}],"name":"addControllers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toDelete","type":"address"}],"name":"removeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newHandlerAddress","type":"address"}],"name":"setMetadataHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"supported","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint16","name":"tokenID","type":"uint16"}],"name":"transfer_16","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040526000805460ff60a01b191690553480156200001e57600080fd5b506040518060400160405280601481526020017f54686520486569737420436861726163746572730000000000000000000000008152506040518060400160405280600581526020016412115254d560da1b815250613a98620000906200008a620000d560201b60201c565b620000d9565b8251620000a590600290602086019062000129565b508151620000bb90600390602085019062000129565b5060f01b6001600160f01b031916608052506200020c9050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200013790620001cf565b90600052602060002090601f0160209004810192826200015b5760008555620001a6565b82601f106200017657805160ff1916838001178555620001a6565b82800160010185558215620001a6579182015b82811115620001a657825182559160200191906001019062000189565b50620001b4929150620001b8565b5090565b5b80821115620001b45760008155600101620001b9565b600181811c90821680620001e457607f821691505b602082108114156200020657634e487b7160e01b600052602260045260246000fd5b50919050565b60805160f01c611d95620002326000396000818161045801526115600152611d956000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806380b5dcb31161012a578063b88d4fde116100bd578063d639f7ba1161008c578063f2fde38b11610071578063f2fde38b146104d1578063f6a74ed7146104e4578063fe762024146104f757600080fd5b8063d639f7ba1461047a578063e985e9c5146104a357600080fd5b8063b88d4fde1461041a578063c87b56dd1461042d578063d2a1ba9114610440578063d5abeb011461045357600080fd5b806395d89b41116100f957806395d89b41146103d9578063a22cb465146103e1578063a7fc7a07146103f4578063a9059cbb1461040757600080fd5b806380b5dcb3146103825780638660e48e146103965780638da5cb5b1461039f57806393b871f2146103b057600080fd5b80635c975abb116101a2578063715018a611610171578063715018a61461033e578063736bf5911461034657806376eb4044146103675780637805862f1461037a57600080fd5b80635c975abb146102ca5780636352211e146102de5780636985a0221461032357806370a082311461032b57600080fd5b806318160ddd116101de57806318160ddd1461027557806323b872dd146102915780632f745c59146102a457806342842e0e146102b757600080fd5b806301ffc9a7146102105780630276e5a41461023857806306fdde031461024d578063095ea7b314610262575b600080fd5b61022361021e366004611a44565b61050a565b60405190151581526020015b60405180910390f35b61024b610246366004611b29565b610573565b005b610255610699565b60405161022f9190611bd1565b61024b6102703660046119a5565b610727565b60045462010000900461ffff165b60405190815260200161022f565b61024b61029f366004611858565b610825565b6102836102b23660046119a5565b6108fd565b61024b6102c5366004611858565b610a73565b60005461022390600160a01b900460ff1681565b61030b6102ec366004611b10565b61ffff166000908152600560205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161022f565b61024b610a8f565b61028361033936600461180a565b610b7f565b61024b610c51565b6004546103549061ffff1681565b60405161ffff909116815260200161022f565b61024b61037536600461197b565b610cb7565b61024b610d25565b6004546103549062010000900461ffff1681565b610354613a9881565b6000546001600160a01b031661030b565b61030b6103be366004611af5565b6006602052600090815260409020546001600160a01b031681565b610255610e0e565b61024b6103ef36600461193f565b610e1b565b61024b61040236600461180a565b610e87565b61024b6104153660046119a5565b610f08565b61024b610428366004611894565b610f74565b61025561043b366004611b10565b6110e4565b61024b61044e3660046119cf565b61124a565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b61030b610488366004611af5565b6005602052600090815260409020546001600160a01b031681565b6102236104b1366004611825565b600760209081526000928352604080842090915290825290205460ff1681565b61024b6104df36600461180a565b611315565b61024b6104f236600461180a565b6113f7565b61024b61050536600461180a565b611472565b60007f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061056d57507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b3360009081526001602052604090205460ff166105fd5760405162461bcd60e51b815260206004820152602a60248201527f436f6e74726f6c6c61626c653a20417574686f72697a656420636f6e74726f6c60448201527f6c657273206f6e6c792e0000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600054600160a01b900460ff16156106575760405162461bcd60e51b815260206004820152601260248201527f436f6e747261637420697320706175736564000000000000000000000000000060448201526064016105f4565b60005b8260ff168110156106945760045461068290839061067d9061ffff166001611c3d565b6114ee565b8061068c81611cec565b91505061065a565b505050565b600280546106a690611c8f565b80601f01602080910402602001604051908101604052809291908181526020018280546106d290611c8f565b801561071f5780601f106106f45761010080835404028352916020019161071f565b820191906000526020600020905b81548152906001019060200180831161070257829003601f168201915b505050505081565b61ffff811660009081526005602052604090205481906001600160a01b03163381148061077757506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b6107c35760405162461bcd60e51b815260206004820152601460248201527f4552433732313a204e6f7420617070726f76656400000000000000000000000060448201526064016105f4565b61ffff821660009081526006602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b80336001600160a01b038516148061084c57503360009081526001602052604090205460ff165b80610872575061ffff81166000908152600660205260409020546001600160a01b031633145b806108a057506001600160a01b038416600090815260076020908152604080832033845290915290205460ff165b6108ec5760405162461bcd60e51b815260206004820152601460248201527f4552433732313a204e6f7420617070726f76656400000000000000000000000060448201526064016105f4565b6108f78484836116b5565b50505050565b600061090883610b7f565b821061097c5760405162461bcd60e51b815260206004820152602860248201527f4552433732313a20496e6465782067726561746572207468616e206f776e657260448201527f2062616c616e636500000000000000000000000000000000000000000000000060648201526084016105f4565b600060015b6004546109999062010000900461ffff166001611c3d565b61ffff168161ffff161015610a045761ffff81166000908152600560205260409020546001600160a01b03868116911614156109f257838214156109e45761ffff16915061056d9050565b816109ee81611cec565b9250505b806109fc81611cca565b915050610981565b5060405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084016105f4565b6106946000838360405180602001604052806000815250610f74565b6000546001600160a01b03163314610ae95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b600054600160a01b900460ff1615610b435760405162461bcd60e51b815260206004820152601260248201527f436f6e747261637420697320706175736564000000000000000000000000000060448201526064016105f4565b6000805460ff60a01b1916600160a01b1781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b60006001600160a01b038216610bd75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a204e6f6e2d6578697374616e7420616464726573730000000060448201526064016105f4565b600060015b600454610bf49062010000900461ffff166001611c3d565b61ffff168161ffff161015610c4a5761ffff81166000908152600560205260409020546001600160a01b0385811691161415610c385781610c3481611cec565b9250505b80610c4281611cca565b915050610bdc565b5092915050565b6000546001600160a01b03163314610cab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b610cb5600061178c565b565b61ffff81166000908152600560205260409020546001600160a01b03163314610d165760405162461bcd60e51b815260206004820152601160248201527022a9219b99189d102737ba1037bbb732b960791b60448201526064016105f4565b610d213383836116b5565b5050565b6000546001600160a01b03163314610d7f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b600054600160a01b900460ff16610dd85760405162461bcd60e51b815260206004820152601660248201527f436f6e7472616374206973206e6f74207061757365640000000000000000000060448201526064016105f4565b6000805460ff60a01b191681556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d169339190a1565b600380546106a690611c8f565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b03163314610ee15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61ffff811660009081526005602052604090205481906001600160a01b03163314610f695760405162461bcd60e51b815260206004820152601160248201527022a9219b99189d102737ba1037bbb732b960791b60448201526064016105f4565b6106943384836116b5565b610f8060008484610825565b6001600160a01b0383163b156108f7576000836001600160a01b031663150b7a023360008686604051602401610fb99493929190611b95565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516110079190611b79565b600060405180830381855afa9150503d8060008114611042576040519150601f19603f3d011682016040523d82523d6000602084013e611047565b606091505b509150506000818060200190518101906110619190611a61565b90507f150b7a02000000000000000000000000000000000000000000000000000000006001600160e01b03198216146110dc5760405162461bcd60e51b815260206004820152601e60248201527f4552433732313a20416464726573732063616e6e6f742072656365697665000060448201526064016105f4565b505050505050565b61ffff811660009081526005602052604090205460609082906001600160a01b03166111525760405162461bcd60e51b815260206004820152601960248201527f4552433732313a204e6f6e6578697374656e7420746f6b656e0000000000000060448201526064016105f4565b6008546001600160a01b03166111aa5760405162461bcd60e51b815260206004820152601f60248201527f4552433732313a204e6f206d657461646174612068616e646c6572207365740060448201526064016105f4565b6008546040517fc87b56dd000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169063c87b56dd9060240160006040518083038186803b15801561120757600080fd5b505afa15801561121b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112439190810190611a7e565b9392505050565b6000546001600160a01b031633146112a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b60005b818110156106945760018060008585858181106112c6576112c6611d1d565b90506020020160208101906112db919061180a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061130d81611cec565b9150506112a7565b6000546001600160a01b0316331461136f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b6001600160a01b0381166113eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105f4565b6113f48161178c565b50565b6000546001600160a01b031633146114515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146114cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61ffff81166000908152600560205260409020546001600160a01b0316156115585760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20546f6b656e20616c7265616479206d696e7465640000000060448201526064016105f4565b60045461ffff7f000000000000000000000000000000000000000000000000000000000000000081166201000090920416106115d65760405162461bcd60e51b815260206004820152601a60248201527f4552433732313a2052656163686564204d617820537570706c7900000000000060448201526064016105f4565b61ffff818116600090815260056020526040812080546001600160a01b0319166001600160a01b03861617905560048054909216919061161583611cca565b91906101000a81548161ffff021916908361ffff160217905550506004600281819054906101000a900461ffff168092919061165090611cca565b91906101000a81548161ffff021916908361ffff160217905550508061ffff16826001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61ffff81166000908152600560205260409020546001600160a01b038481169116146117175760405162461bcd60e51b815260206004820152601160248201527022a9219b99189d102737ba1037bbb732b960791b60448201526064016105f4565b61ffff8116600081815260066020908152604080832080546001600160a01b0319908116909155600590925280832080546001600160a01b0388811691909416811790915590519092918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146117f357600080fd5b919050565b803561ffff811681146117f357600080fd5b60006020828403121561181c57600080fd5b611243826117dc565b6000806040838503121561183857600080fd5b611841836117dc565b915061184f602084016117dc565b90509250929050565b60008060006060848603121561186d57600080fd5b611876846117dc565b9250611884602085016117dc565b9150604084013590509250925092565b600080600080608085870312156118aa57600080fd5b6118b3856117dc565b93506118c1602086016117dc565b925060408501359150606085013567ffffffffffffffff8111156118e457600080fd5b8501601f810187136118f557600080fd5b803561190861190382611c15565b611be4565b81815288602083850101111561191d57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561195257600080fd5b61195b836117dc565b91506020830135801515811461197057600080fd5b809150509250929050565b6000806040838503121561198e57600080fd5b611997836117dc565b915061184f602084016117f8565b600080604083850312156119b857600080fd5b6119c1836117dc565b946020939093013593505050565b600080602083850312156119e257600080fd5b823567ffffffffffffffff808211156119fa57600080fd5b818501915085601f830112611a0e57600080fd5b813581811115611a1d57600080fd5b8660208260051b8501011115611a3257600080fd5b60209290920196919550909350505050565b600060208284031215611a5657600080fd5b813561124381611d49565b600060208284031215611a7357600080fd5b815161124381611d49565b600060208284031215611a9057600080fd5b815167ffffffffffffffff811115611aa757600080fd5b8201601f81018413611ab857600080fd5b8051611ac661190382611c15565b818152856020838501011115611adb57600080fd5b611aec826020830160208601611c63565b95945050505050565b600060208284031215611b0757600080fd5b611243826117f8565b600060208284031215611b2257600080fd5b5035919050565b60008060408385031215611b3c57600080fd5b823560ff8116811461184157600080fd5b60008151808452611b65816020860160208601611c63565b601f01601f19169290920160200192915050565b60008251611b8b818460208701611c63565b9190910192915050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611bc76080830184611b4d565b9695505050505050565b6020815260006112436020830184611b4d565b604051601f8201601f1916810167ffffffffffffffff81118282101715611c0d57611c0d611d33565b604052919050565b600067ffffffffffffffff821115611c2f57611c2f611d33565b50601f01601f191660200190565b600061ffff808316818516808303821115611c5a57611c5a611d07565b01949350505050565b60005b83811015611c7e578181015183820152602001611c66565b838111156108f75750506000910152565b600181811c90821680611ca357607f821691505b60208210811415611cc457634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff80831681811415611ce257611ce2611d07565b6001019392505050565b6000600019821415611d0057611d00611d07565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146113f457600080fdfea2646970667358221220fc0ba31cdf61218c51e20919127a0b09623389916051d0de2a213bd9cf4a700564736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061020b5760003560e01c806380b5dcb31161012a578063b88d4fde116100bd578063d639f7ba1161008c578063f2fde38b11610071578063f2fde38b146104d1578063f6a74ed7146104e4578063fe762024146104f757600080fd5b8063d639f7ba1461047a578063e985e9c5146104a357600080fd5b8063b88d4fde1461041a578063c87b56dd1461042d578063d2a1ba9114610440578063d5abeb011461045357600080fd5b806395d89b41116100f957806395d89b41146103d9578063a22cb465146103e1578063a7fc7a07146103f4578063a9059cbb1461040757600080fd5b806380b5dcb3146103825780638660e48e146103965780638da5cb5b1461039f57806393b871f2146103b057600080fd5b80635c975abb116101a2578063715018a611610171578063715018a61461033e578063736bf5911461034657806376eb4044146103675780637805862f1461037a57600080fd5b80635c975abb146102ca5780636352211e146102de5780636985a0221461032357806370a082311461032b57600080fd5b806318160ddd116101de57806318160ddd1461027557806323b872dd146102915780632f745c59146102a457806342842e0e146102b757600080fd5b806301ffc9a7146102105780630276e5a41461023857806306fdde031461024d578063095ea7b314610262575b600080fd5b61022361021e366004611a44565b61050a565b60405190151581526020015b60405180910390f35b61024b610246366004611b29565b610573565b005b610255610699565b60405161022f9190611bd1565b61024b6102703660046119a5565b610727565b60045462010000900461ffff165b60405190815260200161022f565b61024b61029f366004611858565b610825565b6102836102b23660046119a5565b6108fd565b61024b6102c5366004611858565b610a73565b60005461022390600160a01b900460ff1681565b61030b6102ec366004611b10565b61ffff166000908152600560205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161022f565b61024b610a8f565b61028361033936600461180a565b610b7f565b61024b610c51565b6004546103549061ffff1681565b60405161ffff909116815260200161022f565b61024b61037536600461197b565b610cb7565b61024b610d25565b6004546103549062010000900461ffff1681565b610354613a9881565b6000546001600160a01b031661030b565b61030b6103be366004611af5565b6006602052600090815260409020546001600160a01b031681565b610255610e0e565b61024b6103ef36600461193f565b610e1b565b61024b61040236600461180a565b610e87565b61024b6104153660046119a5565b610f08565b61024b610428366004611894565b610f74565b61025561043b366004611b10565b6110e4565b61024b61044e3660046119cf565b61124a565b6103547f0000000000000000000000000000000000000000000000000000000000003a9881565b61030b610488366004611af5565b6005602052600090815260409020546001600160a01b031681565b6102236104b1366004611825565b600760209081526000928352604080842090915290825290205460ff1681565b61024b6104df36600461180a565b611315565b61024b6104f236600461180a565b6113f7565b61024b61050536600461180a565b611472565b60007f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061056d57507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b3360009081526001602052604090205460ff166105fd5760405162461bcd60e51b815260206004820152602a60248201527f436f6e74726f6c6c61626c653a20417574686f72697a656420636f6e74726f6c60448201527f6c657273206f6e6c792e0000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600054600160a01b900460ff16156106575760405162461bcd60e51b815260206004820152601260248201527f436f6e747261637420697320706175736564000000000000000000000000000060448201526064016105f4565b60005b8260ff168110156106945760045461068290839061067d9061ffff166001611c3d565b6114ee565b8061068c81611cec565b91505061065a565b505050565b600280546106a690611c8f565b80601f01602080910402602001604051908101604052809291908181526020018280546106d290611c8f565b801561071f5780601f106106f45761010080835404028352916020019161071f565b820191906000526020600020905b81548152906001019060200180831161070257829003601f168201915b505050505081565b61ffff811660009081526005602052604090205481906001600160a01b03163381148061077757506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b6107c35760405162461bcd60e51b815260206004820152601460248201527f4552433732313a204e6f7420617070726f76656400000000000000000000000060448201526064016105f4565b61ffff821660009081526006602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b80336001600160a01b038516148061084c57503360009081526001602052604090205460ff165b80610872575061ffff81166000908152600660205260409020546001600160a01b031633145b806108a057506001600160a01b038416600090815260076020908152604080832033845290915290205460ff165b6108ec5760405162461bcd60e51b815260206004820152601460248201527f4552433732313a204e6f7420617070726f76656400000000000000000000000060448201526064016105f4565b6108f78484836116b5565b50505050565b600061090883610b7f565b821061097c5760405162461bcd60e51b815260206004820152602860248201527f4552433732313a20496e6465782067726561746572207468616e206f776e657260448201527f2062616c616e636500000000000000000000000000000000000000000000000060648201526084016105f4565b600060015b6004546109999062010000900461ffff166001611c3d565b61ffff168161ffff161015610a045761ffff81166000908152600560205260409020546001600160a01b03868116911614156109f257838214156109e45761ffff16915061056d9050565b816109ee81611cec565b9250505b806109fc81611cca565b915050610981565b5060405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084016105f4565b6106946000838360405180602001604052806000815250610f74565b6000546001600160a01b03163314610ae95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b600054600160a01b900460ff1615610b435760405162461bcd60e51b815260206004820152601260248201527f436f6e747261637420697320706175736564000000000000000000000000000060448201526064016105f4565b6000805460ff60a01b1916600160a01b1781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b60006001600160a01b038216610bd75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a204e6f6e2d6578697374616e7420616464726573730000000060448201526064016105f4565b600060015b600454610bf49062010000900461ffff166001611c3d565b61ffff168161ffff161015610c4a5761ffff81166000908152600560205260409020546001600160a01b0385811691161415610c385781610c3481611cec565b9250505b80610c4281611cca565b915050610bdc565b5092915050565b6000546001600160a01b03163314610cab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b610cb5600061178c565b565b61ffff81166000908152600560205260409020546001600160a01b03163314610d165760405162461bcd60e51b815260206004820152601160248201527022a9219b99189d102737ba1037bbb732b960791b60448201526064016105f4565b610d213383836116b5565b5050565b6000546001600160a01b03163314610d7f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b600054600160a01b900460ff16610dd85760405162461bcd60e51b815260206004820152601660248201527f436f6e7472616374206973206e6f74207061757365640000000000000000000060448201526064016105f4565b6000805460ff60a01b191681556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d169339190a1565b600380546106a690611c8f565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b03163314610ee15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61ffff811660009081526005602052604090205481906001600160a01b03163314610f695760405162461bcd60e51b815260206004820152601160248201527022a9219b99189d102737ba1037bbb732b960791b60448201526064016105f4565b6106943384836116b5565b610f8060008484610825565b6001600160a01b0383163b156108f7576000836001600160a01b031663150b7a023360008686604051602401610fb99493929190611b95565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516110079190611b79565b600060405180830381855afa9150503d8060008114611042576040519150601f19603f3d011682016040523d82523d6000602084013e611047565b606091505b509150506000818060200190518101906110619190611a61565b90507f150b7a02000000000000000000000000000000000000000000000000000000006001600160e01b03198216146110dc5760405162461bcd60e51b815260206004820152601e60248201527f4552433732313a20416464726573732063616e6e6f742072656365697665000060448201526064016105f4565b505050505050565b61ffff811660009081526005602052604090205460609082906001600160a01b03166111525760405162461bcd60e51b815260206004820152601960248201527f4552433732313a204e6f6e6578697374656e7420746f6b656e0000000000000060448201526064016105f4565b6008546001600160a01b03166111aa5760405162461bcd60e51b815260206004820152601f60248201527f4552433732313a204e6f206d657461646174612068616e646c6572207365740060448201526064016105f4565b6008546040517fc87b56dd000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169063c87b56dd9060240160006040518083038186803b15801561120757600080fd5b505afa15801561121b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112439190810190611a7e565b9392505050565b6000546001600160a01b031633146112a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b60005b818110156106945760018060008585858181106112c6576112c6611d1d565b90506020020160208101906112db919061180a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061130d81611cec565b9150506112a7565b6000546001600160a01b0316331461136f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b6001600160a01b0381166113eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105f4565b6113f48161178c565b50565b6000546001600160a01b031633146114515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146114cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61ffff81166000908152600560205260409020546001600160a01b0316156115585760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20546f6b656e20616c7265616479206d696e7465640000000060448201526064016105f4565b60045461ffff7f0000000000000000000000000000000000000000000000000000000000003a9881166201000090920416106115d65760405162461bcd60e51b815260206004820152601a60248201527f4552433732313a2052656163686564204d617820537570706c7900000000000060448201526064016105f4565b61ffff818116600090815260056020526040812080546001600160a01b0319166001600160a01b03861617905560048054909216919061161583611cca565b91906101000a81548161ffff021916908361ffff160217905550506004600281819054906101000a900461ffff168092919061165090611cca565b91906101000a81548161ffff021916908361ffff160217905550508061ffff16826001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61ffff81166000908152600560205260409020546001600160a01b038481169116146117175760405162461bcd60e51b815260206004820152601160248201527022a9219b99189d102737ba1037bbb732b960791b60448201526064016105f4565b61ffff8116600081815260066020908152604080832080546001600160a01b0319908116909155600590925280832080546001600160a01b0388811691909416811790915590519092918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146117f357600080fd5b919050565b803561ffff811681146117f357600080fd5b60006020828403121561181c57600080fd5b611243826117dc565b6000806040838503121561183857600080fd5b611841836117dc565b915061184f602084016117dc565b90509250929050565b60008060006060848603121561186d57600080fd5b611876846117dc565b9250611884602085016117dc565b9150604084013590509250925092565b600080600080608085870312156118aa57600080fd5b6118b3856117dc565b93506118c1602086016117dc565b925060408501359150606085013567ffffffffffffffff8111156118e457600080fd5b8501601f810187136118f557600080fd5b803561190861190382611c15565b611be4565b81815288602083850101111561191d57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561195257600080fd5b61195b836117dc565b91506020830135801515811461197057600080fd5b809150509250929050565b6000806040838503121561198e57600080fd5b611997836117dc565b915061184f602084016117f8565b600080604083850312156119b857600080fd5b6119c1836117dc565b946020939093013593505050565b600080602083850312156119e257600080fd5b823567ffffffffffffffff808211156119fa57600080fd5b818501915085601f830112611a0e57600080fd5b813581811115611a1d57600080fd5b8660208260051b8501011115611a3257600080fd5b60209290920196919550909350505050565b600060208284031215611a5657600080fd5b813561124381611d49565b600060208284031215611a7357600080fd5b815161124381611d49565b600060208284031215611a9057600080fd5b815167ffffffffffffffff811115611aa757600080fd5b8201601f81018413611ab857600080fd5b8051611ac661190382611c15565b818152856020838501011115611adb57600080fd5b611aec826020830160208601611c63565b95945050505050565b600060208284031215611b0757600080fd5b611243826117f8565b600060208284031215611b2257600080fd5b5035919050565b60008060408385031215611b3c57600080fd5b823560ff8116811461184157600080fd5b60008151808452611b65816020860160208601611c63565b601f01601f19169290920160200192915050565b60008251611b8b818460208701611c63565b9190910192915050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611bc76080830184611b4d565b9695505050505050565b6020815260006112436020830184611b4d565b604051601f8201601f1916810167ffffffffffffffff81118282101715611c0d57611c0d611d33565b604052919050565b600067ffffffffffffffff821115611c2f57611c2f611d33565b50601f01601f191660200190565b600061ffff808316818516808303821115611c5a57611c5a611d07565b01949350505050565b60005b83811015611c7e578181015183820152602001611c66565b838111156108f75750506000910152565b600181811c90821680611ca357607f821691505b60208210811415611cc457634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff80831681811415611ce257611ce2611d07565b6001019392505050565b6000600019821415611d0057611d00611d07565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146113f457600080fdfea2646970667358221220fc0ba31cdf61218c51e20919127a0b09623389916051d0de2a213bd9cf4a700564736f6c63430008070033

Loading...
Loading
Loading...
Loading
[ 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.