Token

SONIC (Sonic)

Overview

Max Total Supply

1,000,000,000 Sonic

Holders

16

Market

Price

-

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000515398516584 Sonic

Value
$0.00
0x4f8708bccbbdafa83a611175e14cd9a9fc451ece
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x658C7e8D...9Dd04f15B
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Token

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 9999 runs

Other Settings:
cancun EvmVersion, MIT license
File 1 of 2 : Token.sol
/*

 █▀ █▀█ █▄░█ █ █▀▀ █▀▀ ▄▀█ █▀▀ ▀█▀ █▀█ █▀█ █▄█
 ▄█ █▄█ █░▀█ █ █▄▄ █▀░ █▀█ █▄▄ ░█░ █▄█ █▀▄ ░█░

  Trade on SonicFactory and have fun!
  Web:      https://sonicfactory.fun/

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.24;

import "./ERC20.sol";

contract Token is ERC20 {
  address private immutable _creator;
  address private _owner;
  address private _router;
  address private _pair;

  bool private _escaped;
  bool private _initialized;
  uint24 private _maxBalance;
  uint24 private _tax;
  uint32 private _launch;

  mapping(address => bool) private _unauthorized;

  struct HolderView {
    address holder;
    uint256 balance;
  }

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

  error ErrorUnauthorized(address sender);
  error ErrorAlreadyInitialized();
  error ErrorUnapprovable();
  error ErrorMaxBalanceExceeded();
  error ErrorInvalidRecipient(address to);
  error ErrorInvalidRange();

  modifier onlyOwner() {
    if (msg.sender != _owner) { revert ErrorUnauthorized(msg.sender); }

    _;
  }

  constructor(address _owner_, address _creator_, string memory _name_, string memory _symbol_, uint8 _decimals_, uint256 _totalSupply_) ERC20(_name_, _symbol_, _decimals_) payable {
    _creator = _creator_;
    _owner = _owner_;
    _mint(_owner_, _totalSupply_);
  }

  function initialize(address _router_, address _pair_, uint24 _maxBalance_, uint24 _tax_, uint32 _launch_, address[] calldata _unauthorized_) external onlyOwner {
    if (_initialized) { revert ErrorAlreadyInitialized(); }

    unchecked {
      uint256 cnt = _unauthorized_.length;

      for (uint256 i; i < cnt; i++) { _unauthorized[_unauthorized_[i]] = true; }
    }

    _router = _router_;
    _pair = _pair_;
    _maxBalance = _maxBalance_;
    _tax = _tax_;
    _launch = _launch_;
    _initialized = true;
  }

  function owner() external view returns (address) {
    return _owner;
  }

  /// @notice Returns the creator address
  function creator() external view returns (address) {
    return _creator;
  }

  function approve(address spender, uint256 value) public override returns (bool) {
    if (!_escaped && spender != _router) { revert ErrorUnapprovable(); }

    return super.approve(spender, value);
  }

  function permit(address owner_, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public override {
    if (!_escaped && spender != _router) { revert ErrorUnapprovable(); }

    super.permit(owner_, spender, value, deadline, v, r, s);
  }

  function _transferCheck(address from, address to, uint256 value) private view {
    if (_escaped || ((from == _owner && to == _pair) || ((!_escaped && to == _owner) || value == 0 || to == address(0xdEaD) || to == _router || to == _pair))) { return; }

    if (!_escaped) {
      if (_unauthorized[to]) { revert ErrorInvalidRecipient(to); }

      unchecked {
        if (_maxBalance == 100_000 || _balance[to] + value <= _percentage(_totalSupply, uint256(_maxBalance))) { return; }
      }
    }

    revert ErrorMaxBalanceExceeded();
  }

  function transfer(address to, uint256 value) external virtual override returns (bool) {
    _transfer(msg.sender, to, value);

    return true;
  }

  function _transfer(address from, address to, uint256 value) internal virtual override {
    _transferCheck(from, to, value);

    super._transfer(from, to, value);
  }

  function transferFrom(address from, address to, uint256 value) public override returns (bool) {
    if (!_escaped && msg.sender == _router && to == _pair && _allowance[from][_router] != type(uint256).max) { super._approve(from, _router, type(uint256).max, false); }

    _transferCheck(from, to, value);

    return super.transferFrom(from, to, value);
  }

  function totalHolders() external view returns (uint24 total) {
    return _totalHolders;
  }

  function holders(uint256 offset, uint256 limit) public view returns (HolderView[] memory) {
    if (offset >= _totalHolders) { revert ErrorInvalidRange(); }

    unchecked {
      if (offset + limit > _totalHolders) { limit = _totalHolders - offset; }
    }

    HolderView[] memory list = new HolderView[](limit);

    unchecked {
      uint256 j;

      for (uint256 i = offset; j < limit; i++) {
        address holder = _holders[i];

        if (holder == address(0xdEaD) || _balance[holder] == 0) { continue; }

        list[j].holder = holder;
        list[j].balance = _balance[holder];

        ++j;
      }
    }

    return list;
  }

  function maxBalance() external view returns (uint24) {
    return _maxBalance;
  }

  function tax() external view returns (uint24) {
    return _tax;
  }

  function launch() external view returns (uint32) {
    return _launch;
  }

  /// @notice Returns True if token has reached the target MC and is now tradeable on a public DEX
  function escaped() external view returns (bool) {
    return _escaped;
  }

  function escape() external onlyOwner {
    if (_escaped) { revert ErrorUnauthorized(msg.sender); }
    if (_maxBalance < 100_000) { _maxBalance = 100_000; } // 100%

    address _previousOwner = _owner;

    delete _tax;
    delete _owner;
    delete _router;
    delete _pair;

    _escaped = true;

    emit OwnershipTransferred(_previousOwner, _owner);
  }

  function _percentage(uint256 value, uint256 bps) private pure returns (uint256) {
    unchecked {
      return (value * bps) / 100_000;
    }
  }

  function _timestamp() private view returns (uint32) {
    unchecked {
      return uint32(block.timestamp % 2**32);
    }
  }
}

File 2 of 2 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.24;

abstract contract ERC20 {
  uint8 private immutable _decimals;
  uint24 internal _totalHolders;
  uint256 internal _totalSupply;

  string private _name;
  string private _symbol;
  bytes32 public immutable DOMAIN_SEPARATOR;
  bytes32 private constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

  address[] internal _holders;

  mapping(address => uint256) private _nonces;
  mapping(address => uint256) internal _balance;
  mapping(address => mapping(address => uint256)) internal _allowance;
  mapping(address => bool) internal _holderData;

  event Approval(address indexed owner, address indexed spender, uint256 value);
  event Transfer(address indexed from, address indexed to, uint256 value);

  error ERC20InvalidApprover(address owner);
  error ERC20InvalidSpender(address spender);
  error ERC20InvalidSender(address sender);
  error ERC20InvalidReceiver(address to);
  error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 value);
  error ERC20InsufficientBalance(address owner, uint256 balance, uint256 value);
  error ERC2612ExpiredSignature(uint256 deadline);
  error ERC2612InvalidSigner(address signer, address owner);

  constructor(string memory _name_, string memory _symbol_, uint8 _decimals_) {
    _name = _name_;
    _symbol = _symbol_;
    _decimals = _decimals_;

    DOMAIN_SEPARATOR = keccak256(abi.encode(keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(_name)), keccak256(bytes("1")), block.chainid, address(this)));
  }

  function name() external view returns (string memory) {
    return _name;
  }

  function symbol() external view returns (string memory) {
    return _symbol;
  }

  function decimals() external view returns (uint8) {
    return _decimals;
  }

  function totalSupply() external view returns (uint256) {
    return _totalSupply;
  }

  function balanceOf(address account) external view returns (uint256) {
    return _balance[account];
  }

  function allowance(address owner, address spender) public view returns (uint256) {
    return _allowance[owner][spender];
  }

  function approve(address spender, uint256 value) public virtual returns (bool) {
    _approve(msg.sender, spender, value, true);

    return true;
  }

  function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public virtual {
    if (block.timestamp > deadline) { revert ERC2612ExpiredSignature(deadline); }

    unchecked {
      address signer = ecrecover(keccak256(abi.encodePacked(hex"1901", DOMAIN_SEPARATOR, keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, _nonces[owner]++, deadline)))), v, r, s);

      if (signer != owner) { revert ERC2612InvalidSigner(signer, owner); }
    }

    _approve(owner, spender, value, true);
  }

  function nonces(address owner) external view returns (uint256) {
    return _nonces[owner];
  }

  function transfer(address to, uint256 value) external virtual returns (bool) {
    _transfer(msg.sender, to, value);

    return true;
  }

  function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
    if (value > 0) {
      address spender = msg.sender;
      uint256 allowed = allowance(from, spender);

      if (allowed < value) { revert ERC20InsufficientAllowance(to, allowed, value); }

      if (allowed != type(uint256).max) {
        unchecked {
          _approve(from, spender, allowed - value, false);
        }
      }
    }

    _transfer(from, to, value);

    return true;
  }

  function burn(uint256 value) external returns (bool) {
    _transfer(msg.sender, address(0xdEaD), value);

    return true;
  }

  function _approve(address owner, address spender, uint256 value, bool emitEvent) internal {
    if (owner == address(0)) { revert ERC20InvalidApprover(owner); }
    if (spender == address(0)) { revert ERC20InvalidSpender(spender); }

    _allowance[owner][spender] = value;

    if (emitEvent) { emit Approval(owner, spender, value); }
  }

  function _transfer(address from, address to, uint256 value) internal virtual {
    if (from == address(0)) { revert ERC20InvalidSender(from); }
    if (to == address(0) || to == address(this)) { revert ERC20InvalidReceiver(to); }
    if (_balance[from] < value) { revert ERC20InsufficientBalance(from, _balance[from], value); }

    if (value > 0) {
      unchecked {
        _balance[from] -= value;

        if (_balance[from] == 0) { --_totalHolders; }

        if (to == address(0xdEaD)) {
          _totalSupply -= value;
        } else {
          if (_balance[to] == 0) { ++_totalHolders; }

          _balance[to] += value;

          if (!_holderData[to]) {
            _holderData[to] = true;
            _holders.push(to);
          }
        }
      }
    }

    emit Transfer(from, to, value);
  }

  function _mint(address to, uint256 value) internal {
    if (to == address(0) || to == address(0xdEaD)) { revert ERC20InvalidReceiver(to); }

    unchecked {
      if (_balance[to] == 0) { ++_totalHolders; }

      _totalSupply += value;
      _balance[to] += value;

      if (!_holderData[to]) {
        _holderData[to] = true;
        _holders.push(to);
      }
    }

    emit Transfer(address(0), to, value);
  }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 9999
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "remappings": [],
  "evmVersion": "cancun"
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner_","type":"address"},{"internalType":"address","name":"_creator_","type":"address"},{"internalType":"string","name":"_name_","type":"string"},{"internalType":"string","name":"_symbol_","type":"string"},{"internalType":"uint8","name":"_decimals_","type":"uint8"},{"internalType":"uint256","name":"_totalSupply_","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[],"name":"ErrorAlreadyInitialized","type":"error"},{"inputs":[],"name":"ErrorInvalidRange","type":"error"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"ErrorInvalidRecipient","type":"error"},{"inputs":[],"name":"ErrorMaxBalanceExceeded","type":"error"},{"inputs":[],"name":"ErrorUnapprovable","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ErrorUnauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"escape","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"escaped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"holders","outputs":[{"components":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"}],"internalType":"struct Token.HolderView[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router_","type":"address"},{"internalType":"address","name":"_pair_","type":"address"},{"internalType":"uint24","name":"_maxBalance_","type":"uint24"},{"internalType":"uint24","name":"_tax_","type":"uint24"},{"internalType":"uint32","name":"_launch_","type":"uint32"},{"internalType":"address[]","name":"_unauthorized_","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launch","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalance","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHolders","outputs":[{"internalType":"uint24","name":"total","type":"uint24"}],"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":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60e0604052604051611fc4380380611fc48339810160408190526100229161034e565b83838360026100318482610479565b50600361003e8382610479565b5060ff81166080526040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9061007790600290610533565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051808303601f19018152919052805160209091012060a0525050506001600160a01b0385811660c052600980546001600160a01b0319169188169190911790556101268682610131565b5050505050506105a4565b6001600160a01b038216158061015157506001600160a01b03821661dead145b1561017e5760405163ec442f0560e01b81526001600160a01b038316600482015260240160405180910390fd5b6001600160a01b0382165f9081526006602052604081205490036101b6575f805462ffffff8082166001011662ffffff199091161790555b60018054820190556001600160a01b0382165f908152600660209081526040808320805485019055600890915290205460ff16610252576001600160a01b0382165f818152600860205260408120805460ff191660019081179091556004805491820181559091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790555b6040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b80516001600160a01b03811681146102ac575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126102d4575f5ffd5b81516001600160401b038111156102ed576102ed6102b1565b604051601f8201601f19908116603f011681016001600160401b038111828210171561031b5761031b6102b1565b604052818152838201602001851015610332575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f5f5f60c08789031215610363575f5ffd5b61036c87610296565b955061037a60208801610296565b60408801519095506001600160401b03811115610395575f5ffd5b6103a189828a016102c5565b606089015190955090506001600160401b038111156103be575f5ffd5b6103ca89828a016102c5565b935050608087015160ff811681146103e0575f5ffd5b8092505060a087015190509295509295509295565b600181811c9082168061040957607f821691505b60208210810361042757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561047457805f5260205f20601f840160051c810160208510156104525750805b601f840160051c820191505b81811015610471575f815560010161045e565b50505b505050565b81516001600160401b03811115610492576104926102b1565b6104a6816104a084546103f5565b8461042d565b6020601f8211600181146104d8575f83156104c15750848201515b5f19600385901b1c1916600184901b178455610471565b5f84815260208120601f198516915b8281101561050757878501518255602094850194600190920191016104e7565b508482101561052457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f8354610540816103f5565b600182168015610557576001811461056c57610599565b60ff1983168652811515820286019350610599565b865f5260205f205f5b8381101561059157815488820152600190910190602001610575565b505081860193505b509195945050505050565b60805160a05160c0516119ef6105d55f395f6101cd01525f818161029801526111c201525f61026901526119ef5ff3fe608060405234801561000f575f5ffd5b5060043610610184575f3560e01c806370a08231116100dd578063a9059cbb11610088578063d180667d11610063578063d180667d1461040e578063d505accf14610416578063dd62ed3e14610429575f5ffd5b8063a9059cbb146103c6578063ae0ffca8146103d9578063aed6176e146103ee575f5ffd5b80638da5cb5b116100b85780638da5cb5b1461038357806395d89b411461039457806399c8d5561461039c575f5ffd5b806370a082311461030c57806373ad468a146103345780637ecebe001461035b575f5ffd5b806323b872dd1161013d57806342966c681161011857806342966c68146102ba5780634c346e72146102cd57806353d74fdf146102f0575f5ffd5b806323b872dd1461024f578063313ce567146102625780633644e51514610293575f5ffd5b806306fdde031161016d57806306fdde0314610205578063095ea7b31461021a57806318160ddd1461023d575f5ffd5b806301339c211461018857806302d05d3f146101cb575b5f5ffd5b600b547c0100000000000000000000000000000000000000000000000000000000900463ffffffff1660405163ffffffff90911681526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016101c2565b61020d610461565b6040516101c2919061161a565b61022d610228366004611688565b6104f1565b60405190151581526020016101c2565b6001545b6040519081526020016101c2565b61022d61025d3660046116b0565b610574565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c2565b6102417f000000000000000000000000000000000000000000000000000000000000000081565b61022d6102c83660046116ea565b610635565b600b5474010000000000000000000000000000000000000000900460ff1661022d565b5f5462ffffff165b60405162ffffff90911681526020016101c2565b61024161031a366004611701565b6001600160a01b03165f9081526006602052604090205490565b600b54760100000000000000000000000000000000000000000000900462ffffff166102f8565b610241610369366004611701565b6001600160a01b03165f9081526005602052604090205490565b6009546001600160a01b03166101ed565b61020d61064b565b600b54790100000000000000000000000000000000000000000000000000900462ffffff166102f8565b61022d6103d4366004611688565b61065a565b6103ec6103e736600461172c565b61066f565b005b6104016103fc3660046117f9565b6108e7565b6040516101c29190611819565b6103ec610a87565b6103ec610424366004611870565b610c47565b6102416104373660046118dd565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b6060600280546104709061190e565b80601f016020809104026020016040519081016040528092919081815260200182805461049c9061190e565b80156104e75780601f106104be576101008083540402835291602001916104e7565b820191905f5260205f20905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b600b545f9074010000000000000000000000000000000000000000900460ff1615801561052c5750600a546001600160a01b03848116911614155b15610563576040517f86b1a17f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61056d8383610ccf565b9392505050565b600b545f9074010000000000000000000000000000000000000000900460ff161580156105ab5750600a546001600160a01b031633145b80156105c45750600b546001600160a01b038481169116145b80156105f857506001600160a01b038085165f908152600760209081526040808320600a54909416835292905220545f1914155b1561061757600a546106179085906001600160a01b03165f195f610cd9565b610622848484610df0565b61062d84848461100d565b949350505050565b5f6106433361dead846110b9565b506001919050565b6060600380546104709061190e565b5f6106663384846110b9565b50600192915050565b6009546001600160a01b031633146106ba576040517fa11a9a410000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b600b547501000000000000000000000000000000000000000000900460ff1615610710576040517f66a02dea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f5b81811015610794576001600c5f8686858181106107325761073261195f565b90506020020160208101906107479190611701565b6001600160a01b0316815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610713565b5050600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039889161790555050600b80547501000000000000000000000000000000000000000000959096167fffffffffffffff000000ffff00000000000000000000000000000000000000009096169590951776010000000000000000000000000000000000000000000062ffffff948516021778ffffffffffffffffffffffffffffffffffffffffffffffffff1679010000000000000000000000000000000000000000000000000092909316919091027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000063ffffffff9290921691909102177fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16179055565b5f5460609062ffffff168310610929576040517f52acd57900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5462ffffff168383011115610946575f5462ffffff1683900391505b5f8267ffffffffffffffff8111156109605761096061198c565b6040519080825280602002602001820160405280156109a457816020015b604080518082019091525f808252602082015281526020019060019003908161097e5790505b5090505f845b84821015610a7d575f600482815481106109c6576109c661195f565b5f918252602090912001546001600160a01b0316905061dead811480610a0157506001600160a01b0381165f90815260066020526040902054155b15610a0c5750610a75565b80848481518110610a1f57610a1f61195f565b6020908102919091018101516001600160a01b0392831690529082165f908152600690915260409020548451859085908110610a5d57610a5d61195f565b60200260200101516020018181525050826001019250505b6001016109aa565b5090949350505050565b6009546001600160a01b03163314610acd576040517fa11a9a410000000000000000000000000000000000000000000000000000000081523360048201526024016106b1565b600b5474010000000000000000000000000000000000000000900460ff1615610b24576040517fa11a9a410000000000000000000000000000000000000000000000000000000081523360048201526024016106b1565b600b54620186a076010000000000000000000000000000000000000000000090910462ffffff161015610b9557600b80547fffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffff16780186a0000000000000000000000000000000000000000000001790555b60098054600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000808416909455600a80549094169093557fffffffff000000ffffffff00000000000000000000000000000000000000000090921674010000000000000000000000000000000000000000179091556040516001600160a01b03909116905f9082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b600b5474010000000000000000000000000000000000000000900460ff16158015610c805750600a546001600160a01b03878116911614155b15610cb7576040517f86b1a17f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc6878787878787876110d4565b50505050505050565b5f61066633848460015b6001600160a01b038416610d24576040517fe602df050000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016106b1565b6001600160a01b038316610d6f576040517f94280d620000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016106b1565b6001600160a01b038085165f9081526007602090815260408083209387168352929052208290558015610dea57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610de191815260200190565b60405180910390a35b50505050565b600b5474010000000000000000000000000000000000000000900460ff1680610eca57506009546001600160a01b038481169116148015610e3e5750600b546001600160a01b038381169116145b80610eca5750600b5474010000000000000000000000000000000000000000900460ff16158015610e7c57506009546001600160a01b038381169116145b80610e85575080155b80610e9a57506001600160a01b03821661dead145b80610eb25750600a546001600160a01b038381169116145b80610eca5750600b546001600160a01b038381169116145b15610ed457505050565b600b5474010000000000000000000000000000000000000000900460ff16610fdb576001600160a01b0382165f908152600c602052604090205460ff1615610f53576040517f342be1ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016106b1565b600b54760100000000000000000000000000000000000000000000900462ffffff16620186a01480610fd15750600154600b54610fb49190760100000000000000000000000000000000000000000000900462ffffff16620186a091020490565b6001600160a01b0383165f90815260066020526040902054820111155b15610fdb57505050565b6040517f9bd6a5a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81156110a4576001600160a01b0384165f908152600760209081526040808320338085529252909120548381101561108b576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101829052604481018590526064016106b1565b5f1981146110a1576110a186838684035f610cd9565b50505b6110af8484846110b9565b5060019392505050565b6110c4838383610df0565b6110cf8383836112e4565b505050565b83421115611111576040517f62791302000000000000000000000000000000000000000000000000000000008152600481018590526024016106b1565b6001600160a01b038781165f8181526005602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a085019590955260c08085018a90528151808603909101815260e0850190915280519101207f19010000000000000000000000000000000000000000000000000000000000006101008401527f0000000000000000000000000000000000000000000000000000000000000000610102840152610122830152919061014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa15801561126c573d5f5f3e3d5ffd5b505050602060405103519050876001600160a01b0316816001600160a01b0316146112d6576040517f4b800e460000000000000000000000000000000000000000000000000000000081526001600160a01b038083166004830152891660248201526044016106b1565b50610cc68787876001610cd9565b6001600160a01b03831661132f576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016106b1565b6001600160a01b038216158061134d57506001600160a01b03821630145b1561138f576040517fec442f050000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016106b1565b6001600160a01b0383165f90815260066020526040902054811115611409576001600160a01b0383165f81815260066020526040908190205490517fe450d38c00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016106b1565b80156115c8576001600160a01b0383165f908152600660205260408120805483900390819055900361146c575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000811662ffffff9182165f19019091161790555b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038316016114aa576001805482900390556115c8565b6001600160a01b0382165f9081526006602052604081205490036114fe575f805462ffffff808216600101167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009091161790555b6001600160a01b0382165f908152600660209081526040808320805485019055600890915290205460ff166115c8576001600160a01b0382165f81815260086020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161160d91815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b80356001600160a01b0381168114611683575f5ffd5b919050565b5f5f60408385031215611699575f5ffd5b6116a28361166d565b946020939093013593505050565b5f5f5f606084860312156116c2575f5ffd5b6116cb8461166d565b92506116d96020850161166d565b929592945050506040919091013590565b5f602082840312156116fa575f5ffd5b5035919050565b5f60208284031215611711575f5ffd5b61056d8261166d565b803562ffffff81168114611683575f5ffd5b5f5f5f5f5f5f5f60c0888a031215611742575f5ffd5b61174b8861166d565b96506117596020890161166d565b95506117676040890161171a565b94506117756060890161171a565b9350608088013563ffffffff8116811461178d575f5ffd5b925060a088013567ffffffffffffffff8111156117a8575f5ffd5b8801601f81018a136117b8575f5ffd5b803567ffffffffffffffff8111156117ce575f5ffd5b8a60208260051b84010111156117e2575f5ffd5b602082019350809250505092959891949750929550565b5f5f6040838503121561180a575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561186557835180516001600160a01b031684526020908101518185015290930192604090920191600101611832565b509095945050505050565b5f5f5f5f5f5f5f60e0888a031215611886575f5ffd5b61188f8861166d565b965061189d6020890161166d565b95506040880135945060608801359350608088013560ff811681146118c0575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156118ee575f5ffd5b6118f78361166d565b91506119056020840161166d565b90509250929050565b600181811c9082168061192257607f821691505b602082108103611959577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffdfea2646970667358221220688214a33c697126760eeed157514a03e7bf0b8444ccad98749000ac1be5d87764736f6c634300081c003300000000000000000000000043eafbb9c8c4d91fd8d501e45b19c38da2fd0988000000000000000000000000b8f8a463a725502b5e0642bb0dc55ca8d167543400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000001410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f5ffd5b5060043610610184575f3560e01c806370a08231116100dd578063a9059cbb11610088578063d180667d11610063578063d180667d1461040e578063d505accf14610416578063dd62ed3e14610429575f5ffd5b8063a9059cbb146103c6578063ae0ffca8146103d9578063aed6176e146103ee575f5ffd5b80638da5cb5b116100b85780638da5cb5b1461038357806395d89b411461039457806399c8d5561461039c575f5ffd5b806370a082311461030c57806373ad468a146103345780637ecebe001461035b575f5ffd5b806323b872dd1161013d57806342966c681161011857806342966c68146102ba5780634c346e72146102cd57806353d74fdf146102f0575f5ffd5b806323b872dd1461024f578063313ce567146102625780633644e51514610293575f5ffd5b806306fdde031161016d57806306fdde0314610205578063095ea7b31461021a57806318160ddd1461023d575f5ffd5b806301339c211461018857806302d05d3f146101cb575b5f5ffd5b600b547c0100000000000000000000000000000000000000000000000000000000900463ffffffff1660405163ffffffff90911681526020015b60405180910390f35b7f000000000000000000000000b8f8a463a725502b5e0642bb0dc55ca8d16754345b6040516001600160a01b0390911681526020016101c2565b61020d610461565b6040516101c2919061161a565b61022d610228366004611688565b6104f1565b60405190151581526020016101c2565b6001545b6040519081526020016101c2565b61022d61025d3660046116b0565b610574565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000121681526020016101c2565b6102417f900979fd55e14bab2d0da3446aff05c75aca9b96973877652af864a0cd0dd24781565b61022d6102c83660046116ea565b610635565b600b5474010000000000000000000000000000000000000000900460ff1661022d565b5f5462ffffff165b60405162ffffff90911681526020016101c2565b61024161031a366004611701565b6001600160a01b03165f9081526006602052604090205490565b600b54760100000000000000000000000000000000000000000000900462ffffff166102f8565b610241610369366004611701565b6001600160a01b03165f9081526005602052604090205490565b6009546001600160a01b03166101ed565b61020d61064b565b600b54790100000000000000000000000000000000000000000000000000900462ffffff166102f8565b61022d6103d4366004611688565b61065a565b6103ec6103e736600461172c565b61066f565b005b6104016103fc3660046117f9565b6108e7565b6040516101c29190611819565b6103ec610a87565b6103ec610424366004611870565b610c47565b6102416104373660046118dd565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b6060600280546104709061190e565b80601f016020809104026020016040519081016040528092919081815260200182805461049c9061190e565b80156104e75780601f106104be576101008083540402835291602001916104e7565b820191905f5260205f20905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b600b545f9074010000000000000000000000000000000000000000900460ff1615801561052c5750600a546001600160a01b03848116911614155b15610563576040517f86b1a17f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61056d8383610ccf565b9392505050565b600b545f9074010000000000000000000000000000000000000000900460ff161580156105ab5750600a546001600160a01b031633145b80156105c45750600b546001600160a01b038481169116145b80156105f857506001600160a01b038085165f908152600760209081526040808320600a54909416835292905220545f1914155b1561061757600a546106179085906001600160a01b03165f195f610cd9565b610622848484610df0565b61062d84848461100d565b949350505050565b5f6106433361dead846110b9565b506001919050565b6060600380546104709061190e565b5f6106663384846110b9565b50600192915050565b6009546001600160a01b031633146106ba576040517fa11a9a410000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b600b547501000000000000000000000000000000000000000000900460ff1615610710576040517f66a02dea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f5b81811015610794576001600c5f8686858181106107325761073261195f565b90506020020160208101906107479190611701565b6001600160a01b0316815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610713565b5050600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039889161790555050600b80547501000000000000000000000000000000000000000000959096167fffffffffffffff000000ffff00000000000000000000000000000000000000009096169590951776010000000000000000000000000000000000000000000062ffffff948516021778ffffffffffffffffffffffffffffffffffffffffffffffffff1679010000000000000000000000000000000000000000000000000092909316919091027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000063ffffffff9290921691909102177fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16179055565b5f5460609062ffffff168310610929576040517f52acd57900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5462ffffff168383011115610946575f5462ffffff1683900391505b5f8267ffffffffffffffff8111156109605761096061198c565b6040519080825280602002602001820160405280156109a457816020015b604080518082019091525f808252602082015281526020019060019003908161097e5790505b5090505f845b84821015610a7d575f600482815481106109c6576109c661195f565b5f918252602090912001546001600160a01b0316905061dead811480610a0157506001600160a01b0381165f90815260066020526040902054155b15610a0c5750610a75565b80848481518110610a1f57610a1f61195f565b6020908102919091018101516001600160a01b0392831690529082165f908152600690915260409020548451859085908110610a5d57610a5d61195f565b60200260200101516020018181525050826001019250505b6001016109aa565b5090949350505050565b6009546001600160a01b03163314610acd576040517fa11a9a410000000000000000000000000000000000000000000000000000000081523360048201526024016106b1565b600b5474010000000000000000000000000000000000000000900460ff1615610b24576040517fa11a9a410000000000000000000000000000000000000000000000000000000081523360048201526024016106b1565b600b54620186a076010000000000000000000000000000000000000000000090910462ffffff161015610b9557600b80547fffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffff16780186a0000000000000000000000000000000000000000000001790555b60098054600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000808416909455600a80549094169093557fffffffff000000ffffffff00000000000000000000000000000000000000000090921674010000000000000000000000000000000000000000179091556040516001600160a01b03909116905f9082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b600b5474010000000000000000000000000000000000000000900460ff16158015610c805750600a546001600160a01b03878116911614155b15610cb7576040517f86b1a17f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc6878787878787876110d4565b50505050505050565b5f61066633848460015b6001600160a01b038416610d24576040517fe602df050000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016106b1565b6001600160a01b038316610d6f576040517f94280d620000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016106b1565b6001600160a01b038085165f9081526007602090815260408083209387168352929052208290558015610dea57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610de191815260200190565b60405180910390a35b50505050565b600b5474010000000000000000000000000000000000000000900460ff1680610eca57506009546001600160a01b038481169116148015610e3e5750600b546001600160a01b038381169116145b80610eca5750600b5474010000000000000000000000000000000000000000900460ff16158015610e7c57506009546001600160a01b038381169116145b80610e85575080155b80610e9a57506001600160a01b03821661dead145b80610eb25750600a546001600160a01b038381169116145b80610eca5750600b546001600160a01b038381169116145b15610ed457505050565b600b5474010000000000000000000000000000000000000000900460ff16610fdb576001600160a01b0382165f908152600c602052604090205460ff1615610f53576040517f342be1ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016106b1565b600b54760100000000000000000000000000000000000000000000900462ffffff16620186a01480610fd15750600154600b54610fb49190760100000000000000000000000000000000000000000000900462ffffff16620186a091020490565b6001600160a01b0383165f90815260066020526040902054820111155b15610fdb57505050565b6040517f9bd6a5a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81156110a4576001600160a01b0384165f908152600760209081526040808320338085529252909120548381101561108b576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101829052604481018590526064016106b1565b5f1981146110a1576110a186838684035f610cd9565b50505b6110af8484846110b9565b5060019392505050565b6110c4838383610df0565b6110cf8383836112e4565b505050565b83421115611111576040517f62791302000000000000000000000000000000000000000000000000000000008152600481018590526024016106b1565b6001600160a01b038781165f8181526005602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a085019590955260c08085018a90528151808603909101815260e0850190915280519101207f19010000000000000000000000000000000000000000000000000000000000006101008401527f900979fd55e14bab2d0da3446aff05c75aca9b96973877652af864a0cd0dd247610102840152610122830152919061014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa15801561126c573d5f5f3e3d5ffd5b505050602060405103519050876001600160a01b0316816001600160a01b0316146112d6576040517f4b800e460000000000000000000000000000000000000000000000000000000081526001600160a01b038083166004830152891660248201526044016106b1565b50610cc68787876001610cd9565b6001600160a01b03831661132f576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016106b1565b6001600160a01b038216158061134d57506001600160a01b03821630145b1561138f576040517fec442f050000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016106b1565b6001600160a01b0383165f90815260066020526040902054811115611409576001600160a01b0383165f81815260066020526040908190205490517fe450d38c00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016106b1565b80156115c8576001600160a01b0383165f908152600660205260408120805483900390819055900361146c575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000811662ffffff9182165f19019091161790555b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038316016114aa576001805482900390556115c8565b6001600160a01b0382165f9081526006602052604081205490036114fe575f805462ffffff808216600101167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009091161790555b6001600160a01b0382165f908152600660209081526040808320805485019055600890915290205460ff166115c8576001600160a01b0382165f81815260086020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161160d91815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b80356001600160a01b0381168114611683575f5ffd5b919050565b5f5f60408385031215611699575f5ffd5b6116a28361166d565b946020939093013593505050565b5f5f5f606084860312156116c2575f5ffd5b6116cb8461166d565b92506116d96020850161166d565b929592945050506040919091013590565b5f602082840312156116fa575f5ffd5b5035919050565b5f60208284031215611711575f5ffd5b61056d8261166d565b803562ffffff81168114611683575f5ffd5b5f5f5f5f5f5f5f60c0888a031215611742575f5ffd5b61174b8861166d565b96506117596020890161166d565b95506117676040890161171a565b94506117756060890161171a565b9350608088013563ffffffff8116811461178d575f5ffd5b925060a088013567ffffffffffffffff8111156117a8575f5ffd5b8801601f81018a136117b8575f5ffd5b803567ffffffffffffffff8111156117ce575f5ffd5b8a60208260051b84010111156117e2575f5ffd5b602082019350809250505092959891949750929550565b5f5f6040838503121561180a575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561186557835180516001600160a01b031684526020908101518185015290930192604090920191600101611832565b509095945050505050565b5f5f5f5f5f5f5f60e0888a031215611886575f5ffd5b61188f8861166d565b965061189d6020890161166d565b95506040880135945060608801359350608088013560ff811681146118c0575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156118ee575f5ffd5b6118f78361166d565b91506119056020840161166d565b90509250929050565b600181811c9082168061192257607f821691505b602082108103611959577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffdfea2646970667358221220688214a33c697126760eeed157514a03e7bf0b8444ccad98749000ac1be5d87764736f6c634300081c0033

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