ETH Price: $3,386.02 (+2.76%)

Token

Nibbles (NIBBLE)
 

Overview

Max Total Supply

0 NIBBLE

Holders

1,719

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x205698ce308ac7dd4bf2cda5926836dcb0316e19
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:
Nibbles

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : Nibbles.sol
// SPDX-License-Identifier: Unlicense
pragma solidity 0.8.12;

import "./Interfaces.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

contract Nibbles is IERC1155 {
  
  /***********************************|
    |        Variables and Events       |
    |__________________________________*/

  // onReceive function signatures
  bytes4 internal constant ERC1155_RECEIVED_VALUE = 0xf23a6e61;
  bytes4 internal constant ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81;

  mapping(address => mapping(uint256 => uint256)) internal balances;
  mapping(address => bool) public auth;
  mapping(address => mapping(address => bool)) internal operators;
  string public ratsLair;
  address admin;
  bool initialized;

  /****************************************|
  |            Minting Functions           |
  |_______________________________________*/

  function name() external pure returns (string memory) {
    return "Nibbles";
  }

  function symbol() external pure returns (string memory) {
    return "NIBBLE";
  }

  function initialize() public {
    require(!initialized, "Already initialized");
    admin = msg.sender;
    auth[msg.sender] = true;
    initialized = true;
    ratsLair = "https://api.ratrace.wtf/api/nibbles/";
  }  

  function mint(uint256 quantity, uint256 tokenId) external {
    onlyOperator();
    _mint(msg.sender, tokenId, quantity);
  }

  function freebie(address ratKeeper, uint256 _nibble) external {
    onlyOperator();

    uint256 rand = (uint16(_randomize(_rand(), "he", _nibble)) % 100);
    uint256 nibble = (rand < 50) ? 0 : (rand > 50 && rand < 75)
      ? 1
      : (rand > 75 && rand < 95)
      ? 2
      : 3;
    if (nibble > 0) {
      _mint(ratKeeper, nibble, 1);
    }
  }

  function reserve(address to, uint256 quantity, uint256 tokenId) external {
    onlyOwner();
    _mint(to, tokenId, quantity);
  }

  function burn(
    address from,
    uint256 id,
    uint256 value
  ) external {
    require(auth[msg.sender], "FORBIDDEN TO BURN");
    _burn(from, id, value);
  }

  function _mint(
    address _to,
    uint256 _id,
    uint256 _amount
  ) internal {
    balances[_to][_id] += _amount;
    emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount);
  }

  function _burn(
    address _from,
    uint256 _id,
    uint256 _amount
  ) internal {
    balances[_from][_id] -= _amount;
    emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount);
  }

  //ADMIN

  function onlyOwner() internal view {
    require(admin == msg.sender);
  }

  function onlyOperator() internal view {
    require(auth[msg.sender] == true, "not Authorized");
  }

  function setAuth(address[] calldata adds_, bool status) public {
    onlyOwner();

    for (uint256 index = 0; index < adds_.length; index++) {
      auth[adds_[index]] = status;
    }
  }

  function getTokenURI(uint256 _id) public view returns (string memory) {
    return string(abi.encodePacked(ratsLair, Strings.toString(_id)));
  }

  function setRatsLair(string memory _ratsLair) public {
    onlyOwner();
    ratsLair = _ratsLair;
  }

  /***********************************|
    |     Randomness Functions          |
    |__________________________________*/

  function _randomize(
    uint256 ran,
    string memory dom,
    uint256 ness
  ) internal pure returns (uint256) {
    return uint256(keccak256(abi.encode(ran, dom, ness)));
  }

  function _rand() internal view returns (uint256) {
    return
      uint256(
        keccak256(
          abi.encodePacked(
            msg.sender,
            block.difficulty,
            block.timestamp,
            block.basefee
          )
        )
      );
  }

  /***********************************|
    |     Public Transfer Functions     |
    |__________________________________*/

  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _id,
    uint256 _amount,
    bytes memory _data
  ) public override {
    require(
      (msg.sender == _from) || isApprovedForAll(_from, msg.sender),
      "ERC1155#safeTransferFrom: INVALID_OPERATOR"
    );
    require(_to != address(0), "ERC1155#safeTransferFrom: INVALID_RECIPIENT");

    _safeTransferFrom(_from, _to, _id, _amount);
    _callonERC1155Received(_from, _to, _id, _amount, gasleft(), _data);
  }

  function safeBatchTransferFrom(
    address _from,
    address _to,
    uint256[] memory _ids,
    uint256[] memory _amounts,
    bytes memory _data
  ) public override {
    // Requirements
    require(
      (msg.sender == _from) || isApprovedForAll(_from, msg.sender),
      "ERC1155#safeBatchTransferFrom: INVALID_OPERATOR"
    );
    require(
      _to != address(0),
      "ERC1155#safeBatchTransferFrom: INVALID_RECIPIENT"
    );

    _safeBatchTransferFrom(_from, _to, _ids, _amounts);
    _callonERC1155BatchReceived(_from, _to, _ids, _amounts, gasleft(), _data);
  }

  /***********************************|
    |    Internal Transfer Functions    |
    |__________________________________*/

  function _safeTransferFrom(
    address _from,
    address _to,
    uint256 _id,
    uint256 _amount
  ) internal {
    // Update balances
    balances[_from][_id] -= _amount;
    balances[_to][_id] += _amount;

    // Emit event
    emit TransferSingle(msg.sender, _from, _to, _id, _amount);
  }

  /**
   * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...)
   */
  function _callonERC1155Received(
    address _from,
    address _to,
    uint256 _id,
    uint256 _amount,
    uint256 _gasLimit,
    bytes memory _data
  ) internal {
    // Check if recipient is contract
    if (_to.code.length != 0) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received{
        gas: _gasLimit
      }(msg.sender, _from, _id, _amount, _data);
      require(
        retval == ERC1155_RECEIVED_VALUE,
        "ERC1155#_callonERC1155Received: INVALID_ON_RECEIVE_MESSAGE"
      );
    }
  }

  function _safeBatchTransferFrom(
    address _from,
    address _to,
    uint256[] memory _ids,
    uint256[] memory _amounts
  ) internal {
    require(
      _ids.length == _amounts.length,
      "ERC1155#_safeBatchTransferFrom: INVALID_ARRAYS_LENGTH"
    );

    // Number of transfer to execute
    uint256 nTransfer = _ids.length;

    // Executing all transfers
    for (uint256 i = 0; i < nTransfer; i++) {
      balances[_from][_ids[i]] -= _amounts[i];
      balances[_to][_ids[i]] += _amounts[i];
    }

    // Emit event
    emit TransferBatch(msg.sender, _from, _to, _ids, _amounts);
  }

  /**
   * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...)
   */
  function _callonERC1155BatchReceived(
    address _from,
    address _to,
    uint256[] memory _ids,
    uint256[] memory _amounts,
    uint256 _gasLimit,
    bytes memory _data
  ) internal {
    // Pass data if recipient is contract
    if (_to.code.length != 0) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived{
        gas: _gasLimit
      }(msg.sender, _from, _ids, _amounts, _data);
      require(
        retval == ERC1155_BATCH_RECEIVED_VALUE,
        "ERC1155#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE"
      );
    }
  }

  /***********************************|
    |         Operator Functions        |
    |__________________________________*/

  function setApprovalForAll(address _operator, bool _approved)
    external
    override
  {
    // Update operator status
    operators[msg.sender][_operator] = _approved;
    emit ApprovalForAll(msg.sender, _operator, _approved);
  }

  function isApprovedForAll(address _owner, address _operator)
    public
    view
    override
    returns (bool isOperator)
  {
    return operators[_owner][_operator];
  }

  /***********************************|
    |         Balance Functions         |
    |__________________________________*/

  function balanceOf(address _owner, uint256 _id)
    public
    view
    override
    returns (uint256)
  {
    return balances[_owner][_id];
  }

  function balanceOfBatch(address[] memory _owners, uint256[] memory _ids)
    public
    view
    override
    returns (uint256[] memory)
  {
    require(
      _owners.length == _ids.length,
      "ERC1155#balanceOfBatch: INVALID_ARRAY_LENGTH"
    );

    // Variables
    uint256[] memory batchBalances = new uint256[](_owners.length);

    // Iterate over each owner and token ID
    for (uint256 i = 0; i < _owners.length; i++) {
      batchBalances[i] = balances[_owners[i]][_ids[i]];
    }

    return batchBalances;
  }

  function uri(uint256 _id) public view returns (string memory) {
    return getTokenURI(_id);
  }

  function owner() external view returns (address own_) {
    own_ = admin;
  }

  /***********************************|
    |          ERC165 Functions         |
    |__________________________________*/

  function supportsInterface(bytes4 _interfaceID)
    public
    pure
    override
    returns (bool)
  {
    if (_interfaceID == type(IERC1155).interfaceId) {
      return true;
    }
    if (_interfaceID == type(IERC1155Metadata).interfaceId) {
      return true;
    }
    return _interfaceID == this.supportsInterface.selector;
  }
}

/// @title Base64
/// @author Brecht Devos - <[email protected]>
/// @notice Provides a function for encoding some bytes in base64
/// @notice NOT BUILT BY ETHERNAL ELVES TEAM.
library Base64 {
  string internal constant TABLE =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  function encode(bytes memory data) internal pure returns (string memory) {
    if (data.length == 0) return "";

    // load the table into memory
    string memory table = TABLE;

    // multiply by 4/3 rounded up
    uint256 encodedLen = 4 * ((data.length + 2) / 3);

    // add some extra buffer at the end required for the writing
    string memory result = new string(encodedLen + 32);

    assembly {
      // set the actual output length
      mstore(result, encodedLen)

      // prepare the lookup table
      let tablePtr := add(table, 1)

      // input ptr
      let dataPtr := data
      let endPtr := add(dataPtr, mload(data))

      // result ptr, jump over length
      let resultPtr := add(result, 32)

      // run over the input, 3 bytes at a time
      for {

      } lt(dataPtr, endPtr) {

      } {
        dataPtr := add(dataPtr, 3)

        // read 3 bytes
        let input := mload(dataPtr)

        // write 4 characters
        mstore(
          resultPtr,
          shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))
        )
        resultPtr := add(resultPtr, 1)
        mstore(
          resultPtr,
          shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))
        )
        resultPtr := add(resultPtr, 1)
        mstore(
          resultPtr,
          shl(248, mload(add(tablePtr, and(shr(6, input), 0x3F))))
        )
        resultPtr := add(resultPtr, 1)
        mstore(resultPtr, shl(248, mload(add(tablePtr, and(input, 0x3F)))))
        resultPtr := add(resultPtr, 1)
      }

      // padding with '='
      switch mod(mload(data), 3)
      case 1 {
        mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
      }
      case 2 {
        mstore(sub(resultPtr, 1), shl(248, 0x3d))
      }
    }

    return result;
  }
}

File 2 of 3 : Interfaces.sol
// SPDX-License-Identifier: Unlicense
pragma solidity 0.8.12;

interface IERC20Lite {
    
    function transfer(address to, uint256 value) external returns (bool);
    function burn(address from, uint256 value) external;
    function mint(address to, uint256 value) external; 
    function approve(address spender, uint256 value) external returns (bool); 
    function balanceOf(address account) external returns (uint256); 
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

}

interface IElfMetaDataHandler {    
function getTokenURI(uint16 id_, uint256 sentinel) external view returns (string memory);
}

interface ICampaigns {
function gameEngine(uint256 _campId, uint256 _sector, uint256 _level, uint256 _attackPoints, uint256 _healthPoints, uint256 _inventory, bool _useItem) external 
returns(uint256 level, uint256 rewards, uint256 timestamp, uint256 inventory);
}

interface IElves {    
    function prismBridge(uint256[] calldata id, uint256[] calldata sentinel, address owner) external;    
    function exitElf(uint256[] calldata ids, address owner) external;
    function setAccountBalance(address _owner, uint256 _amount, bool _subtract, uint256 _index) external;
}

interface IERC721Lite {
    function transferFrom(address from, address to, uint256 id) external;   
    function transfer(address to, uint256 id) external;
    function ownerOf(uint256 id) external returns (address owner);
    function mint(address to, uint256 tokenid) external;
}

interface IERC1155Lite {
    function burn(address from,uint256 id, uint256 value) external;
    function freebie(address ratKeeper, uint256 nibble) external;
    function balanceOf(address _owner, uint256 _id) external returns (uint256); 
}

 
//1155
interface IERC165 {
    function supportsInterface(bytes4 _interfaceId) external view returns (bool);
}

interface IERC1155 is IERC165 {
  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external;
  function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external;
  function balanceOf(address _owner, uint256 _id) external view returns (uint256);
  function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);
  function setApprovalForAll(address _operator, bool _approved) external;
  function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator);
}

interface IERC1155Metadata {
  event URI(string _uri, uint256 indexed _id);
  function uri(uint256 _id) external view returns (string memory);
}

interface IERC1155TokenReceiver {
  function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4);
  function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4);
}

File 3 of 3 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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

Contract Security Audit

Contract ABI

[{"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":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ratKeeper","type":"address"},{"internalType":"uint256","name":"_nibble","type":"uint256"}],"name":"freebie","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"own_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ratsLair","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","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":"adds_","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_ratsLair","type":"string"}],"name":"setRatsLair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50611ccb806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638129fc1c116100b8578063a22cb4651161007c578063a22cb465146102d0578063b8e5a6d8146102e3578063cd5d2118146102eb578063e985e9c51461030e578063f242432a14610321578063f5298aca1461033457600080fd5b80638129fc1c14610265578063820270991461026d5780638da5cb5b1461028057806395d89b411461029b5780639e29dd36146102bd57600080fd5b80632eb2c2d6116100ff5780632eb2c2d6146101f95780633bb3a24d1461020c5780634576da471461021f5780634e1273f4146102325780635d1bfcf51461025257600080fd5b8062fdd58e1461013b57806301ffc9a71461018257806306fdde03146101a55780630e89341c146101d15780631b2ef1ca146101e4575b600080fd5b61016f610149366004611393565b6001600160a01b0391909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b6101956101903660046113d3565b610347565b6040519015158152602001610179565b6040805180820190915260078152664e6962626c657360c81b60208201525b604051610179919061144f565b6101c46101df366004611462565b6103a2565b6101f76101f236600461147b565b6103b3565b005b6101f76102073660046115eb565b6103ca565b6101c461021a366004611462565b6104df565b6101f761022d3660046116a5565b610513565b610245610240366004611729565b610592565b6040516101799190611824565b6101f7610260366004611393565b6106ed565b6101f76107e2565b6101f761027b366004611837565b6108a4565b6004546040516001600160a01b039091168152602001610179565b6040805180820190915260068152654e4942424c4560d01b60208201526101c4565b6101f76102cb366004611880565b6108bf565b6101f76102de3660046118b3565b6108d7565b6101c4610943565b6101956102f93660046118e6565b60016020526000908152604090205460ff1681565b61019561031c366004611901565b6109d1565b6101f761032f36600461192b565b6109ff565b6101f7610342366004611880565b610afe565b60006001600160e01b03198216636cdb3d1360e11b141561036a57506001919050565b6001600160e01b031982166303a24d0760e21b141561038b57506001919050565b506001600160e01b0319166301ffc9a760e01b1490565b60606103ad826104df565b92915050565b6103bb610b5c565b6103c6338284610bb4565b5050565b336001600160a01b03861614806103e657506103e685336109d1565b61044f5760405162461bcd60e51b815260206004820152602f60248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526e272b20a624a22fa7a822a920aa27a960891b60648201526084015b60405180910390fd5b6001600160a01b0384166104be5760405162461bcd60e51b815260206004820152603060248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526f13959053125117d49150d2541251539560821b6064820152608401610446565b6104ca85858585610c39565b6104d8858585855a86610e21565b5050505050565b606060036104ec83610f3e565b6040516020016104fd9291906119e7565b6040516020818303038152906040529050919050565b61051b611044565b60005b8281101561058c57816001600086868581811061053d5761053d611a8e565b905060200201602081019061055291906118e6565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061058481611aba565b91505061051e565b50505050565b606081518351146105fa5760405162461bcd60e51b815260206004820152602c60248201527f455243313135352362616c616e63654f6642617463683a20494e56414c49445f60448201526b082a4a482b2be988a9c8ea8960a31b6064820152608401610446565b6000835167ffffffffffffffff8111156106165761061661149d565b60405190808252806020026020018201604052801561063f578160200160208202803683370190505b50905060005b84518110156106e55760008086838151811061066357610663611a8e565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085838151811061069f5761069f611a8e565b60200260200101518152602001908152602001600020548282815181106106c8576106c8611a8e565b6020908102919091010152806106dd81611aba565b915050610645565b509392505050565b6106f5610b5c565b600060646107716107506040516bffffffffffffffffffffffff193360601b1660208201524460348201524260548201524860748201526000906094016040516020818303038152906040528051906020012060001c905090565b60405180604001604052806002815260200161686560f01b8152508561105b565b61077b9190611aeb565b61ffff1690506000603282106107c85760328211801561079b5750604b82105b6107c157604b821180156107af5750605f82105b6107ba5760036107cb565b60026107cb565b60016107cb565b60005b60ff169050801561058c5761058c84826001610bb4565b600454600160a01b900460ff16156108325760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610446565b600480546001600160a01b031916339081178255600090815260016020818152604092839020805460ff1916909217909155825460ff60a01b1916600160a01b1790925580516060810190915260248082529091611c729083013980516108a1916003916020909101906112de565b50565b6108ac611044565b80516103c69060039060208401906112de565b6108c7611044565b6108d2838284610bb4565b505050565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6003805461095090611990565b80601f016020809104026020016040519081016040528092919081815260200182805461097c90611990565b80156109c95780601f1061099e576101008083540402835291602001916109c9565b820191906000526020600020905b8154815290600101906020018083116109ac57829003601f168201915b505050505081565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b336001600160a01b0386161480610a1b5750610a1b85336109d1565b610a7a5760405162461bcd60e51b815260206004820152602a60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c49604482015269222fa7a822a920aa27a960b11b6064820152608401610446565b6001600160a01b038416610ae45760405162461bcd60e51b815260206004820152602b60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c4960448201526a1117d49150d2541251539560aa1b6064820152608401610446565b610af085858585611092565b6104d8858585855a8661114f565b3360009081526001602052604090205460ff16610b515760405162461bcd60e51b81526020600482015260116024820152702327a92124a22222a7102a2790212aa92760791b6044820152606401610446565b6108d2838383611262565b3360009081526001602081905260409091205460ff16151514610bb25760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08105d5d1a1bdc9a5e995960921b6044820152606401610446565b565b6001600160a01b03831660009081526020818152604080832085845290915281208054839290610be5908490611b0c565b909155505060408051838152602081018390526001600160a01b0385169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b8051825114610ca85760405162461bcd60e51b815260206004820152603560248201527f45524331313535235f7361666542617463685472616e7366657246726f6d3a206044820152740929cac82989288be82a4a482b2a6be988a9c8ea89605b1b6064820152608401610446565b815160005b81811015610dc257828181518110610cc757610cc7611a8e565b6020026020010151600080886001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610d0757610d07611a8e565b602002602001015181526020019081526020016000206000828254610d2c9190611b24565b92505081905550828181518110610d4557610d45611a8e565b6020026020010151600080876001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610d8557610d85611a8e565b602002602001015181526020019081526020016000206000828254610daa9190611b0c565b90915550819050610dba81611aba565b915050610cad565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610e12929190611b3b565b60405180910390a45050505050565b6001600160a01b0385163b15610f36576000856001600160a01b031663bc197c8184338a8989886040518763ffffffff1660e01b8152600401610e68959493929190611b60565b60206040518083038160008887f1158015610e87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610eac9190611bbe565b90506001600160e01b0319811663bc197c8160e01b14610f345760405162461bcd60e51b815260206004820152603f60248201527f45524331313535235f63616c6c6f6e455243313135354261746368526563656960448201527f7665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745006064820152608401610446565b505b505050505050565b606081610f625750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610f8c5780610f7681611aba565b9150610f859050600a83611bdb565b9150610f66565b60008167ffffffffffffffff811115610fa757610fa761149d565b6040519080825280601f01601f191660200182016040528015610fd1576020820181803683370190505b5090505b841561103c57610fe6600183611b24565b9150610ff3600a86611bef565b610ffe906030611b0c565b60f81b81838151811061101357611013611a8e565b60200101906001600160f81b031916908160001a905350611035600a86611bdb565b9450610fd5565b949350505050565b6004546001600160a01b03163314610bb257600080fd5b600083838360405160200161107293929190611c03565b60408051601f198184030181529190528051602090910120949350505050565b6001600160a01b038416600090815260208181526040808320858452909152812080548392906110c3908490611b24565b90915550506001600160a01b038316600090815260208181526040808320858452909152812080548392906110f9908490611b0c565b909155505060408051838152602081018390526001600160a01b03808616929087169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b6001600160a01b0385163b15610f36576000856001600160a01b031663f23a6e6184338a8989886040518763ffffffff1660e01b8152600401611196959493929190611c2c565b60206040518083038160008887f11580156111b5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111da9190611bbe565b90506001600160e01b0319811663f23a6e6160e01b14610f345760405162461bcd60e51b815260206004820152603a60248201527f45524331313535235f63616c6c6f6e4552433131353552656365697665643a2060448201527f494e56414c49445f4f4e5f524543454956455f4d4553534147450000000000006064820152608401610446565b6001600160a01b03831660009081526020818152604080832085845290915281208054839290611293908490611b24565b909155505060408051838152602081018390526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101610c2c565b8280546112ea90611990565b90600052602060002090601f01602090048101928261130c5760008555611352565b82601f1061132557805160ff1916838001178555611352565b82800160010185558215611352579182015b82811115611352578251825591602001919060010190611337565b5061135e929150611362565b5090565b5b8082111561135e5760008155600101611363565b80356001600160a01b038116811461138e57600080fd5b919050565b600080604083850312156113a657600080fd5b6113af83611377565b946020939093013593505050565b6001600160e01b0319811681146108a157600080fd5b6000602082840312156113e557600080fd5b81356113f0816113bd565b9392505050565b60005b838110156114125781810151838201526020016113fa565b8381111561058c5750506000910152565b6000815180845261143b8160208601602086016113f7565b601f01601f19169290920160200192915050565b6020815260006113f06020830184611423565b60006020828403121561147457600080fd5b5035919050565b6000806040838503121561148e57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156114dc576114dc61149d565b604052919050565b600067ffffffffffffffff8211156114fe576114fe61149d565b5060051b60200190565b600082601f83011261151957600080fd5b8135602061152e611529836114e4565b6114b3565b82815260059290921b8401810191818101908684111561154d57600080fd5b8286015b848110156115685780358352918301918301611551565b509695505050505050565b600067ffffffffffffffff83111561158d5761158d61149d565b6115a0601f8401601f19166020016114b3565b90508281528383830111156115b457600080fd5b828260208301376000602084830101529392505050565b600082601f8301126115dc57600080fd5b6113f083833560208501611573565b600080600080600060a0868803121561160357600080fd5b61160c86611377565b945061161a60208701611377565b9350604086013567ffffffffffffffff8082111561163757600080fd5b61164389838a01611508565b9450606088013591508082111561165957600080fd5b61166589838a01611508565b9350608088013591508082111561167b57600080fd5b50611688888289016115cb565b9150509295509295909350565b8035801515811461138e57600080fd5b6000806000604084860312156116ba57600080fd5b833567ffffffffffffffff808211156116d257600080fd5b818601915086601f8301126116e657600080fd5b8135818111156116f557600080fd5b8760208260051b850101111561170a57600080fd5b6020928301955093506117209186019050611695565b90509250925092565b6000806040838503121561173c57600080fd5b823567ffffffffffffffff8082111561175457600080fd5b818501915085601f83011261176857600080fd5b81356020611778611529836114e4565b82815260059290921b8401810191818101908984111561179757600080fd5b948201945b838610156117bc576117ad86611377565b8252948201949082019061179c565b965050860135925050808211156117d257600080fd5b506117df85828601611508565b9150509250929050565b600081518084526020808501945080840160005b83811015611819578151875295820195908201906001016117fd565b509495945050505050565b6020815260006113f060208301846117e9565b60006020828403121561184957600080fd5b813567ffffffffffffffff81111561186057600080fd5b8201601f8101841361187157600080fd5b61103c84823560208401611573565b60008060006060848603121561189557600080fd5b61189e84611377565b95602085013595506040909401359392505050565b600080604083850312156118c657600080fd5b6118cf83611377565b91506118dd60208401611695565b90509250929050565b6000602082840312156118f857600080fd5b6113f082611377565b6000806040838503121561191457600080fd5b61191d83611377565b91506118dd60208401611377565b600080600080600060a0868803121561194357600080fd5b61194c86611377565b945061195a60208701611377565b93506040860135925060608601359150608086013567ffffffffffffffff81111561198457600080fd5b611688888289016115cb565b600181811c908216806119a457607f821691505b602082108114156119c557634e487b7160e01b600052602260045260246000fd5b50919050565b600081516119dd8185602086016113f7565b9290920192915050565b600080845481600182811c915080831680611a0357607f831692505b6020808410821415611a2357634e487b7160e01b86526022600452602486fd5b818015611a375760018114611a4857611a75565b60ff19861689528489019650611a75565b60008b81526020902060005b86811015611a6d5781548b820152908501908301611a54565b505084890196505b505050505050611a8581856119cb565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611ace57611ace611aa4565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600061ffff80841680611b0057611b00611ad5565b92169190910692915050565b60008219821115611b1f57611b1f611aa4565b500190565b600082821015611b3657611b36611aa4565b500390565b604081526000611b4e60408301856117e9565b8281036020840152611a8581856117e9565b6001600160a01b0386811682528516602082015260a060408201819052600090611b8c908301866117e9565b8281036060840152611b9e81866117e9565b90508281036080840152611bb28185611423565b98975050505050505050565b600060208284031215611bd057600080fd5b81516113f0816113bd565b600082611bea57611bea611ad5565b500490565b600082611bfe57611bfe611ad5565b500690565b838152606060208201526000611c1c6060830185611423565b9050826040830152949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611c6690830184611423565b97965050505050505056fe68747470733a2f2f6170692e726174726163652e7774662f6170692f6e6962626c65732fa2646970667358221220f9786e3c761e12e58e5b28876585218d0a631239c561fd45d60f124817313f7b64736f6c634300080c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101365760003560e01c80638129fc1c116100b8578063a22cb4651161007c578063a22cb465146102d0578063b8e5a6d8146102e3578063cd5d2118146102eb578063e985e9c51461030e578063f242432a14610321578063f5298aca1461033457600080fd5b80638129fc1c14610265578063820270991461026d5780638da5cb5b1461028057806395d89b411461029b5780639e29dd36146102bd57600080fd5b80632eb2c2d6116100ff5780632eb2c2d6146101f95780633bb3a24d1461020c5780634576da471461021f5780634e1273f4146102325780635d1bfcf51461025257600080fd5b8062fdd58e1461013b57806301ffc9a71461018257806306fdde03146101a55780630e89341c146101d15780631b2ef1ca146101e4575b600080fd5b61016f610149366004611393565b6001600160a01b0391909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b6101956101903660046113d3565b610347565b6040519015158152602001610179565b6040805180820190915260078152664e6962626c657360c81b60208201525b604051610179919061144f565b6101c46101df366004611462565b6103a2565b6101f76101f236600461147b565b6103b3565b005b6101f76102073660046115eb565b6103ca565b6101c461021a366004611462565b6104df565b6101f761022d3660046116a5565b610513565b610245610240366004611729565b610592565b6040516101799190611824565b6101f7610260366004611393565b6106ed565b6101f76107e2565b6101f761027b366004611837565b6108a4565b6004546040516001600160a01b039091168152602001610179565b6040805180820190915260068152654e4942424c4560d01b60208201526101c4565b6101f76102cb366004611880565b6108bf565b6101f76102de3660046118b3565b6108d7565b6101c4610943565b6101956102f93660046118e6565b60016020526000908152604090205460ff1681565b61019561031c366004611901565b6109d1565b6101f761032f36600461192b565b6109ff565b6101f7610342366004611880565b610afe565b60006001600160e01b03198216636cdb3d1360e11b141561036a57506001919050565b6001600160e01b031982166303a24d0760e21b141561038b57506001919050565b506001600160e01b0319166301ffc9a760e01b1490565b60606103ad826104df565b92915050565b6103bb610b5c565b6103c6338284610bb4565b5050565b336001600160a01b03861614806103e657506103e685336109d1565b61044f5760405162461bcd60e51b815260206004820152602f60248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526e272b20a624a22fa7a822a920aa27a960891b60648201526084015b60405180910390fd5b6001600160a01b0384166104be5760405162461bcd60e51b815260206004820152603060248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526f13959053125117d49150d2541251539560821b6064820152608401610446565b6104ca85858585610c39565b6104d8858585855a86610e21565b5050505050565b606060036104ec83610f3e565b6040516020016104fd9291906119e7565b6040516020818303038152906040529050919050565b61051b611044565b60005b8281101561058c57816001600086868581811061053d5761053d611a8e565b905060200201602081019061055291906118e6565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061058481611aba565b91505061051e565b50505050565b606081518351146105fa5760405162461bcd60e51b815260206004820152602c60248201527f455243313135352362616c616e63654f6642617463683a20494e56414c49445f60448201526b082a4a482b2be988a9c8ea8960a31b6064820152608401610446565b6000835167ffffffffffffffff8111156106165761061661149d565b60405190808252806020026020018201604052801561063f578160200160208202803683370190505b50905060005b84518110156106e55760008086838151811061066357610663611a8e565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085838151811061069f5761069f611a8e565b60200260200101518152602001908152602001600020548282815181106106c8576106c8611a8e565b6020908102919091010152806106dd81611aba565b915050610645565b509392505050565b6106f5610b5c565b600060646107716107506040516bffffffffffffffffffffffff193360601b1660208201524460348201524260548201524860748201526000906094016040516020818303038152906040528051906020012060001c905090565b60405180604001604052806002815260200161686560f01b8152508561105b565b61077b9190611aeb565b61ffff1690506000603282106107c85760328211801561079b5750604b82105b6107c157604b821180156107af5750605f82105b6107ba5760036107cb565b60026107cb565b60016107cb565b60005b60ff169050801561058c5761058c84826001610bb4565b600454600160a01b900460ff16156108325760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610446565b600480546001600160a01b031916339081178255600090815260016020818152604092839020805460ff1916909217909155825460ff60a01b1916600160a01b1790925580516060810190915260248082529091611c729083013980516108a1916003916020909101906112de565b50565b6108ac611044565b80516103c69060039060208401906112de565b6108c7611044565b6108d2838284610bb4565b505050565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6003805461095090611990565b80601f016020809104026020016040519081016040528092919081815260200182805461097c90611990565b80156109c95780601f1061099e576101008083540402835291602001916109c9565b820191906000526020600020905b8154815290600101906020018083116109ac57829003601f168201915b505050505081565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b336001600160a01b0386161480610a1b5750610a1b85336109d1565b610a7a5760405162461bcd60e51b815260206004820152602a60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c49604482015269222fa7a822a920aa27a960b11b6064820152608401610446565b6001600160a01b038416610ae45760405162461bcd60e51b815260206004820152602b60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c4960448201526a1117d49150d2541251539560aa1b6064820152608401610446565b610af085858585611092565b6104d8858585855a8661114f565b3360009081526001602052604090205460ff16610b515760405162461bcd60e51b81526020600482015260116024820152702327a92124a22222a7102a2790212aa92760791b6044820152606401610446565b6108d2838383611262565b3360009081526001602081905260409091205460ff16151514610bb25760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08105d5d1a1bdc9a5e995960921b6044820152606401610446565b565b6001600160a01b03831660009081526020818152604080832085845290915281208054839290610be5908490611b0c565b909155505060408051838152602081018390526001600160a01b0385169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b8051825114610ca85760405162461bcd60e51b815260206004820152603560248201527f45524331313535235f7361666542617463685472616e7366657246726f6d3a206044820152740929cac82989288be82a4a482b2a6be988a9c8ea89605b1b6064820152608401610446565b815160005b81811015610dc257828181518110610cc757610cc7611a8e565b6020026020010151600080886001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610d0757610d07611a8e565b602002602001015181526020019081526020016000206000828254610d2c9190611b24565b92505081905550828181518110610d4557610d45611a8e565b6020026020010151600080876001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610d8557610d85611a8e565b602002602001015181526020019081526020016000206000828254610daa9190611b0c565b90915550819050610dba81611aba565b915050610cad565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610e12929190611b3b565b60405180910390a45050505050565b6001600160a01b0385163b15610f36576000856001600160a01b031663bc197c8184338a8989886040518763ffffffff1660e01b8152600401610e68959493929190611b60565b60206040518083038160008887f1158015610e87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610eac9190611bbe565b90506001600160e01b0319811663bc197c8160e01b14610f345760405162461bcd60e51b815260206004820152603f60248201527f45524331313535235f63616c6c6f6e455243313135354261746368526563656960448201527f7665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745006064820152608401610446565b505b505050505050565b606081610f625750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610f8c5780610f7681611aba565b9150610f859050600a83611bdb565b9150610f66565b60008167ffffffffffffffff811115610fa757610fa761149d565b6040519080825280601f01601f191660200182016040528015610fd1576020820181803683370190505b5090505b841561103c57610fe6600183611b24565b9150610ff3600a86611bef565b610ffe906030611b0c565b60f81b81838151811061101357611013611a8e565b60200101906001600160f81b031916908160001a905350611035600a86611bdb565b9450610fd5565b949350505050565b6004546001600160a01b03163314610bb257600080fd5b600083838360405160200161107293929190611c03565b60408051601f198184030181529190528051602090910120949350505050565b6001600160a01b038416600090815260208181526040808320858452909152812080548392906110c3908490611b24565b90915550506001600160a01b038316600090815260208181526040808320858452909152812080548392906110f9908490611b0c565b909155505060408051838152602081018390526001600160a01b03808616929087169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b6001600160a01b0385163b15610f36576000856001600160a01b031663f23a6e6184338a8989886040518763ffffffff1660e01b8152600401611196959493929190611c2c565b60206040518083038160008887f11580156111b5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111da9190611bbe565b90506001600160e01b0319811663f23a6e6160e01b14610f345760405162461bcd60e51b815260206004820152603a60248201527f45524331313535235f63616c6c6f6e4552433131353552656365697665643a2060448201527f494e56414c49445f4f4e5f524543454956455f4d4553534147450000000000006064820152608401610446565b6001600160a01b03831660009081526020818152604080832085845290915281208054839290611293908490611b24565b909155505060408051838152602081018390526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101610c2c565b8280546112ea90611990565b90600052602060002090601f01602090048101928261130c5760008555611352565b82601f1061132557805160ff1916838001178555611352565b82800160010185558215611352579182015b82811115611352578251825591602001919060010190611337565b5061135e929150611362565b5090565b5b8082111561135e5760008155600101611363565b80356001600160a01b038116811461138e57600080fd5b919050565b600080604083850312156113a657600080fd5b6113af83611377565b946020939093013593505050565b6001600160e01b0319811681146108a157600080fd5b6000602082840312156113e557600080fd5b81356113f0816113bd565b9392505050565b60005b838110156114125781810151838201526020016113fa565b8381111561058c5750506000910152565b6000815180845261143b8160208601602086016113f7565b601f01601f19169290920160200192915050565b6020815260006113f06020830184611423565b60006020828403121561147457600080fd5b5035919050565b6000806040838503121561148e57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156114dc576114dc61149d565b604052919050565b600067ffffffffffffffff8211156114fe576114fe61149d565b5060051b60200190565b600082601f83011261151957600080fd5b8135602061152e611529836114e4565b6114b3565b82815260059290921b8401810191818101908684111561154d57600080fd5b8286015b848110156115685780358352918301918301611551565b509695505050505050565b600067ffffffffffffffff83111561158d5761158d61149d565b6115a0601f8401601f19166020016114b3565b90508281528383830111156115b457600080fd5b828260208301376000602084830101529392505050565b600082601f8301126115dc57600080fd5b6113f083833560208501611573565b600080600080600060a0868803121561160357600080fd5b61160c86611377565b945061161a60208701611377565b9350604086013567ffffffffffffffff8082111561163757600080fd5b61164389838a01611508565b9450606088013591508082111561165957600080fd5b61166589838a01611508565b9350608088013591508082111561167b57600080fd5b50611688888289016115cb565b9150509295509295909350565b8035801515811461138e57600080fd5b6000806000604084860312156116ba57600080fd5b833567ffffffffffffffff808211156116d257600080fd5b818601915086601f8301126116e657600080fd5b8135818111156116f557600080fd5b8760208260051b850101111561170a57600080fd5b6020928301955093506117209186019050611695565b90509250925092565b6000806040838503121561173c57600080fd5b823567ffffffffffffffff8082111561175457600080fd5b818501915085601f83011261176857600080fd5b81356020611778611529836114e4565b82815260059290921b8401810191818101908984111561179757600080fd5b948201945b838610156117bc576117ad86611377565b8252948201949082019061179c565b965050860135925050808211156117d257600080fd5b506117df85828601611508565b9150509250929050565b600081518084526020808501945080840160005b83811015611819578151875295820195908201906001016117fd565b509495945050505050565b6020815260006113f060208301846117e9565b60006020828403121561184957600080fd5b813567ffffffffffffffff81111561186057600080fd5b8201601f8101841361187157600080fd5b61103c84823560208401611573565b60008060006060848603121561189557600080fd5b61189e84611377565b95602085013595506040909401359392505050565b600080604083850312156118c657600080fd5b6118cf83611377565b91506118dd60208401611695565b90509250929050565b6000602082840312156118f857600080fd5b6113f082611377565b6000806040838503121561191457600080fd5b61191d83611377565b91506118dd60208401611377565b600080600080600060a0868803121561194357600080fd5b61194c86611377565b945061195a60208701611377565b93506040860135925060608601359150608086013567ffffffffffffffff81111561198457600080fd5b611688888289016115cb565b600181811c908216806119a457607f821691505b602082108114156119c557634e487b7160e01b600052602260045260246000fd5b50919050565b600081516119dd8185602086016113f7565b9290920192915050565b600080845481600182811c915080831680611a0357607f831692505b6020808410821415611a2357634e487b7160e01b86526022600452602486fd5b818015611a375760018114611a4857611a75565b60ff19861689528489019650611a75565b60008b81526020902060005b86811015611a6d5781548b820152908501908301611a54565b505084890196505b505050505050611a8581856119cb565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611ace57611ace611aa4565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600061ffff80841680611b0057611b00611ad5565b92169190910692915050565b60008219821115611b1f57611b1f611aa4565b500190565b600082821015611b3657611b36611aa4565b500390565b604081526000611b4e60408301856117e9565b8281036020840152611a8581856117e9565b6001600160a01b0386811682528516602082015260a060408201819052600090611b8c908301866117e9565b8281036060840152611b9e81866117e9565b90508281036080840152611bb28185611423565b98975050505050505050565b600060208284031215611bd057600080fd5b81516113f0816113bd565b600082611bea57611bea611ad5565b500490565b600082611bfe57611bfe611ad5565b500690565b838152606060208201526000611c1c6060830185611423565b9050826040830152949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611c6690830184611423565b97965050505050505056fe68747470733a2f2f6170692e726174726163652e7774662f6170692f6e6962626c65732fa2646970667358221220f9786e3c761e12e58e5b28876585218d0a631239c561fd45d60f124817313f7b64736f6c634300080c0033

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.