ETH Price: $3,396.68 (+1.94%)

Token

TAHU Brand (NFTAHU)
 

Overview

Max Total Supply

1,151 NFTAHU

Holders

1,105

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x076D272bA5295fDD2153D09abfd56Ede8eF9B3C9
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:
TAHUNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-29
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

abstract contract Ownable {
  address private owner;
  
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  constructor () internal {
    owner = msg.sender;
    emit OwnershipTransferred(address(0), owner);
  }

  modifier onlyOwner() {
    require(msg.sender == owner, "Ownable#onlyOwner: SENDER_IS_NOT_OWNER");
    _;
  }

  function transferOwnership(address _newOwner) public onlyOwner {
    require(_newOwner != address(0), "Ownable#transferOwnership: INVALID_ADDRESS");
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }

  function getOwner() public view returns (address) {
    return owner;
  }

}

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

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);
  function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

interface IERC1155 {
  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);
  event URI(string _amount, uint256 indexed _id);

  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);
}

library Address {

  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract,
   * as the code is not actually created until after the constructor finishes.
   * @param account address of the account to check
   * @return whether the target address is a contract
   */
  function isContract(address account) internal view returns (bool) {
    bytes32 codehash;
    bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;

    // XXX Currently there is no better way to check if there is a contract in an address
    // than to check the size of the code at that address.
    // See https://ethereum.stackexchange.com/a/14016/36603
    // for more details about how this works.
    // TODO Check this again before the Serenity release, because all addresses will be
    // contracts then.
    assembly { codehash := extcodehash(account) }
    return (codehash != 0x0 && codehash != accountHash);
  }

}

abstract contract ERC1155 is IERC165 {
  using Address for address;


  /***********************************|
  |        Variables and Events       |
  |__________________________________*/

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

  // Objects balances
  mapping (address => mapping(uint256 => uint256)) internal balances;

  // Operator Functions
  mapping (address => mapping(address => bool)) internal operators;

  mapping (address => uint256[]) private ownershipOfs;

  // Events
  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);
  event URI(string _uri, uint256 indexed _id);

  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
    public
  {
    require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeTransferFrom: INVALID_OPERATOR");
    require(_to != address(0),"ERC1155#safeTransferFrom: INVALID_RECIPIENT");
    // require(_amount >= balances[_from][_id]) is not necessary since checked with safemath operations

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

  function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    public
  {
    // 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, _data);
  }

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

    // update ownership
    ownershipOfs[_to].push(_id);

    // 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, bytes memory _data)
    internal
  {
    // Check if recipient is contract
    if (_to.isContract()) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received(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++) {
      // Update storage balance of previous bin
      balances[_from][_ids[i]] = balances[_from][_ids[i]] - _amounts[i];
      balances[_to][_ids[i]] = balances[_to][_ids[i]] + _amounts[i];

      // update ownership
        ownershipOfs[_to].push(_ids[i]);
    }

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

  function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    internal
  {
    // Pass data if recipient is contract
    if (_to.isContract()) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived(msg.sender, _from, _ids, _amounts, _data);
      require(retval == ERC1155_BATCH_RECEIVED_VALUE, "ERC1155#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE");
    }
  }

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

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

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

  function balanceOfBatch(address[] memory _owners, uint256[] memory _ids)
    public view 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;
  }

  bytes4 constant private INTERFACE_SIGNATURE_ERC165 = 0x01ffc9a7;

  bytes4 constant private INTERFACE_SIGNATURE_ERC1155 = 0xd9b67a26;

  function supportsInterface(bytes4 _interfaceID) external view override returns (bool) {
    if (_interfaceID == INTERFACE_SIGNATURE_ERC165 ||
        _interfaceID == INTERFACE_SIGNATURE_ERC1155) {
      return true;
    }
    return false;
  }

  function ownershipOf(address _address) external view returns (uint256[] memory) {
    uint256[] memory IDs = new uint256[](ownershipOfs[_address].length);
    uint counter;
    for(uint i=0; i<ownershipOfs[_address].length; i++) {
        if ( balanceOf( _address, ownershipOfs[_address][i] ) > 0 ) {
            IDs[counter] = ownershipOfs[_address][i];
            counter++;
        }
    }
    return IDs;
  }

}

abstract contract ERC1155MintBurn is ERC1155 {

  function _mint(address _to, uint256 _id, uint256 _amount, bytes memory _data)
    internal
  {
    // Add _amount
    balances[_to][_id] = balances[_to][_id] + _amount;

    // Emit event
    emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount);

    // Calling onReceive method if recipient is contract
    _callonERC1155Received(address(0x0), _to, _id, _amount, _data);
  }

  function _batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155MintBurn#batchMint: INVALID_ARRAYS_LENGTH");

    // Number of mints to execute
    uint256 nMint = _ids.length;

     // Executing all minting
    for (uint256 i = 0; i < nMint; i++) {
      // Update storage balance
      balances[_to][_ids[i]] = balances[_to][_ids[i]] + _amounts[i];
    }

    // Emit batch mint event
    emit TransferBatch(msg.sender, address(0x0), _to, _ids, _amounts);

    // Calling onReceive method if recipient is contract
    _callonERC1155BatchReceived(address(0x0), _to, _ids, _amounts, _data);
  }

  function _burn(address _from, uint256 _id, uint256 _amount)
    internal
  {
    //Substract _amount
    balances[_from][_id] = balances[_from][_id] - _amount;

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

  function _batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155MintBurn#batchBurn: INVALID_ARRAYS_LENGTH");

    // Number of mints to execute
    uint256 nBurn = _ids.length;

     // Executing all minting
    for (uint256 i = 0; i < nBurn; i++) {
      // Update storage balance
      balances[_from][_ids[i]] = balances[_from][_ids[i]] - _amounts[i];
    }

    // Emit batch mint event
    emit TransferBatch(msg.sender, _from, address(0x0), _ids, _amounts);
  }

}

contract OwnableDelegateProxy { }

contract ProxyRegistry {
  mapping(address => OwnableDelegateProxy) public proxies;
}

/**
 * @title ERC1155Tradable
 * ERC1155Tradable - ERC1155 contract that whitelists an operator address, has create and mint functionality, and supports useful standards from OpenZeppelin,
  like _exists(), name(), symbol(), and totalSupply()
 */
contract ERC1155Tradable is ERC1155, ERC1155MintBurn, Ownable {

  address proxyRegistryAddress;
  uint256 private _currentTokenID = 0;
  mapping (uint256 => address) public creators;
  mapping (uint256 => uint256) public tokenSupply;
  mapping (uint256 => string) public URIs;
  mapping (address => bool) public minters;

  // Contract name
  string public name;
  // Contract symbol
  string public symbol;

  /**
   * @dev Require msg.sender to be the creator of the token id
   */
  modifier creatorOnly(uint256 _id) {
    require(creators[_id] == msg.sender, "ERC1155Tradable#creatorOnly: ONLY_CREATOR_ALLOWED");
    _;
  }

  /**
   * @dev Require msg.sender to own more than 0 of the token id
   */
  modifier ownersOnly(uint256 _id) {
    require(balances[msg.sender][_id] > 0, "ERC1155Tradable#ownersOnly: ONLY_OWNERS_ALLOWED");
    _;
  }

  constructor(
    string memory _name,
    string memory _symbol,
    address _proxyRegistryAddress
  ) public {
    name = _name;
    symbol = _symbol;
    proxyRegistryAddress = _proxyRegistryAddress;
    minters[msg.sender] = true;
  }

  function uri(
    uint256 _id
  ) public view returns (string memory) {
    require(_exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
    return URIs[_id];
  }


  function totalSupply(
    uint256 _id
  ) public view returns (uint256) {
    return tokenSupply[_id];
  }

  function create(
    address _to,
    address _creator,
    uint256 _id,
    uint256 _initialSupply,
    string calldata _uri,
    bytes calldata _data
  ) external returns (uint256) {
    require(minters[msg.sender], "Minter role is required.");

    creators[_id] = _creator;
    URIs[_id] = _uri;

    _mint(_to, _id, _initialSupply, _data);
    tokenSupply[_id] = _initialSupply;
    return _id;
  }

  function batchCreate(
    address[] calldata _tos,
    address[] calldata _creators,
    uint256[] calldata _ids,
    uint256[] calldata _initialSupplys,
    string[] calldata _uris,
    bytes calldata _data
  ) external {
    require(minters[msg.sender], "Minter role is required.");
    require(_tos.length == _ids.length, "Invalid array length.");
    for(uint i=0; i<_tos.length; i++) {
        creators[_ids[i]] = _creators[i];
        URIs[_ids[i]] = _uris[i];

        _mint(_tos[i], _ids[i], _initialSupplys[i], _data);
        tokenSupply[_ids[i]] = _initialSupplys[i];
    }

  }


  function mint(
    address _to,
    uint256 _id,
    uint256 _quantity,
    bytes memory _data
  ) public {
    require(minters[msg.sender], "Minter role is required.");
    _mint(_to, _id, _quantity, _data);
    tokenSupply[_id] = tokenSupply[_id] + _quantity;
  }

  function batchMint(
    address _to,
    uint256[] memory _ids,
    uint256[] memory _quantities,
    bytes memory _data
  ) public {
    require(minters[msg.sender], "Minter role is required.");
    for (uint256 i = 0; i < _ids.length; i++) {
      uint256 _id = _ids[i];
      uint256 quantity = _quantities[i];
      tokenSupply[_id] = tokenSupply[_id] + quantity;
    }
    _batchMint(_to, _ids, _quantities, _data);
  }

  function setCreator(
    address _to,
    uint256[] memory _ids
  ) public {
    require(_to != address(0), "ERC1155Tradable#setCreator: INVALID_ADDRESS.");
    for (uint256 i = 0; i < _ids.length; i++) {
      uint256 id = _ids[i];
      _setCreator(_to, id);
    }
  }

  /**
   * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-free listings.
   */
  function isApprovedForAll(
    address _owner,
    address _operator
  ) public view override returns (bool isOperator) {
    // Whitelist OpenSea proxy contract for easy trading.
    ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
    if (address(proxyRegistry.proxies(_owner)) == _operator) {
      return true;
    }

    return ERC1155.isApprovedForAll(_owner, _operator);
  }

  function _setCreator(address _to, uint256 _id) internal creatorOnly(_id)
  {
      creators[_id] = _to;
  }

  function _exists(
    uint256 _id
  ) internal view returns (bool) {
    return creators[_id] != address(0);
  }



  function setMinterRole(address _address, bool _permission) external onlyOwner {
    minters[_address] = _permission;
  }

  function setBatchURI(uint256[] calldata _ids, string calldata _uri) external {
    require(minters[msg.sender], "Minter role is required.");
    for(uint i=0; i<_ids.length; i++) {
        URIs[_ids[i]] = _uri;
    }
  }

  function setURI(uint256 _id, string calldata _uri) external {
    require(minters[msg.sender], "Minter role is required.");
    URIs[_id] = _uri;
  }

}

contract TAHUNFT is ERC1155Tradable {

  constructor(address _proxyRegistryAddress)
  ERC1155Tradable(
    "TAHU Brand",
    "NFTAHU",
    _proxyRegistryAddress
  ) public {

  }

  function contractURI() public view returns (string memory) {
    return "https://metadata.tahu.digital/c/ethereum/mainnet/tahu-brand";
  }
  
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"URIs","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"_tos","type":"address[]"},{"internalType":"address[]","name":"_creators","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_initialSupplys","type":"uint256[]"},{"internalType":"string[]","name":"_uris","type":"string[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchCreate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantities","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"ownershipOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","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":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setBatchURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"setCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_permission","type":"bool"}],"name":"setMinterRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405260006005553480156200001657600080fd5b5060405162002c1738038062002c178339810160408190526200003991620001d4565b604080518082018252600a8152691510521548109c985b9960b21b6020808301919091528251808401845260068152654e465441485560d01b91810191909152600380546001600160a01b031916339081179091559251919290918491906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38251620000d490600a9060208601906200012e565b508151620000ea90600b9060208501906200012e565b50600480546001600160a01b0319166001600160a01b03929092169190911790555050336000908152600960205260409020805460ff191660011790555062000243565b8280546200013c9062000206565b90600052602060002090601f016020900481019282620001605760008555620001ab565b82601f106200017b57805160ff1916838001178555620001ab565b82800160010185558215620001ab579182015b82811115620001ab5782518255916020019190600101906200018e565b50620001b9929150620001bd565b5090565b5b80821115620001b95760008155600101620001be565b600060208284031215620001e757600080fd5b81516001600160a01b0381168114620001ff57600080fd5b9392505050565b600181811c908216806200021b57607f821691505b602082108114156200023d57634e487b7160e01b600052602260045260246000fd5b50919050565b6129c480620002536000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c806395d89b41116100f9578063cd53d08e11610097578063e985e9c511610071578063e985e9c5146103c2578063f242432a146103d5578063f2fde38b146103e8578063f46eccc4146103fb57600080fd5b8063cd53d08e1461037e578063d2a6b51a146103a7578063e8a3d485146103ba57600080fd5b8063b021ed00116100d3578063b021ed0014610325578063b48ab8b614610338578063bd85b0391461034b578063cb177b1e1461036b57600080fd5b806395d89b41146102f7578063a0ffafd1146102ff578063a22cb4651461031257600080fd5b80634a2b061911610166578063862440e211610140578063862440e214610299578063893d20e8146102ac57806393922ab1146102d1578063953f97aa146102e457600080fd5b80634a2b0619146102535780634e1273f414610266578063731133e91461028657600080fd5b8062fdd58e146101ad57806301ffc9a7146101d357806306fdde03146101f65780630e89341c1461020b5780632693ebf21461021e5780632eb2c2d61461023e575b600080fd5b6101c06101bb366004612226565b61041e565b6040519081526020015b60405180910390f35b6101e66101e136600461250e565b610447565b60405190151581526020016101ca565b6101fe61048d565b6040516101ca9190612735565b6101fe610219366004612565565b61051b565b6101c061022c366004612565565b60076020526000908152604090205481565b61025161024c366004611f4e565b610633565b005b6102516102613660046122a8565b610742565b6102796102743660046123e5565b610998565b6040516101ca91906126f4565b610251610294366004612252565b610af2565b6102516102a736600461257e565b610b5f565b6003546001600160a01b03165b6040516001600160a01b0390911681526020016101ca565b6102516102df3660046124a3565b610bad565b6101fe6102f2366004612565565b610c34565b6101fe610c4d565b61027961030d366004611ef1565b610c5a565b6102516103203660046121f3565b610d9f565b6101c0610333366004612063565b610e0b565b610251610346366004612159565b610ed7565b6101c0610359366004612565565b60009081526007602052604090205490565b6102516103793660046121f3565b610fa0565b6102b961038c366004612565565b6006602052600090815260409020546001600160a01b031681565b6102516103b536600461210a565b610ff5565b6101fe6110ac565b6101e66103d0366004611f15565b6110cc565b6102516103e3366004611ffb565b61119f565b6102516103f6366004611ef1565b61129d565b6101e6610409366004611ef1565b60096020526000908152604090205460ff1681565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b60006001600160e01b031982166301ffc9a760e01b148061047857506001600160e01b03198216636cdb3d1360e11b145b1561048557506001919050565b506000919050565b600a805461049a9061288d565b80601f01602080910402602001604051908101604052809291908181526020018280546104c69061288d565b80156105135780601f106104e857610100808354040283529160200191610513565b820191906000526020600020905b8154815290600101906020018083116104f657829003601f168201915b505050505081565b6000818152600660205260409020546060906001600160a01b03166105955760405162461bcd60e51b815260206004820152602560248201527f4552433732315472616461626c65237572693a204e4f4e4558495354454e545f6044820152642a27a5a2a760d91b60648201526084015b60405180910390fd5b600082815260086020526040902080546105ae9061288d565b80601f01602080910402602001604051908101604052809291908181526020018280546105da9061288d565b80156106275780601f106105fc57610100808354040283529160200191610627565b820191906000526020600020905b81548152906001019060200180831161060a57829003601f168201915b50505050509050919050565b336001600160a01b038616148061064f575061064f85336110cc565b6106b35760405162461bcd60e51b815260206004820152602f60248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526e272b20a624a22fa7a822a920aa27a960891b606482015260840161058c565b6001600160a01b0384166107225760405162461bcd60e51b815260206004820152603060248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526f13959053125117d49150d2541251539560821b606482015260840161058c565b61072e8585858561138c565b61073b8585858585611659565b5050505050565b3360009081526009602052604090205460ff166107715760405162461bcd60e51b815260040161058c90612748565b8a87146107b85760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21030b93930bc903632b733ba341760591b604482015260640161058c565b60005b8b811015610989578a8a828181106107d5576107d56128f9565b90506020020160208101906107ea9190611ef1565b600660008b8b85818110610800576108006128f9565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555084848281811061084b5761084b6128f9565b905060200281019061085d91906127c5565b600860008c8c86818110610873576108736128f9565b9050602002013581526020019081526020016000209190610895929190611ceb565b5061092e8d8d838181106108ab576108ab6128f9565b90506020020160208101906108c09190611ef1565b8a8a848181106108d2576108d26128f9565b905060200201358989858181106108eb576108eb6128f9565b9050602002013586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061178992505050565b868682818110610940576109406128f9565b90506020020135600760008b8b8581811061095d5761095d6128f9565b905060200201358152602001908152602001600020819055508080610981906128c8565b9150506107bb565b50505050505050505050505050565b60608151835114610a005760405162461bcd60e51b815260206004820152602c60248201527f455243313135352362616c616e63654f6642617463683a20494e56414c49445f60448201526b082a4a482b2be988a9c8ea8960a31b606482015260840161058c565b600083516001600160401b03811115610a1b57610a1b61290f565b604051908082528060200260200182016040528015610a44578160200160208202803683370190505b50905060005b8451811015610aea57600080868381518110610a6857610a686128f9565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110610aa457610aa46128f9565b6020026020010151815260200190815260200160002054828281518110610acd57610acd6128f9565b602090810291909101015280610ae2816128c8565b915050610a4a565b509392505050565b3360009081526009602052604090205460ff16610b215760405162461bcd60e51b815260040161058c90612748565b610b2d84848484611789565b600083815260076020526040902054610b4790839061285e565b60009384526007602052604090932092909255505050565b3360009081526009602052604090205460ff16610b8e5760405162461bcd60e51b815260040161058c90612748565b6000838152600860205260409020610ba7908383611ceb565b50505050565b3360009081526009602052604090205460ff16610bdc5760405162461bcd60e51b815260040161058c90612748565b60005b8381101561073b57828260086000888886818110610bff57610bff6128f9565b9050602002013581526020019081526020016000209190610c21929190611ceb565b5080610c2c816128c8565b915050610bdf565b6008602052600090815260409020805461049a9061288d565b600b805461049a9061288d565b6001600160a01b038116600090815260026020526040812054606091906001600160401b03811115610c8e57610c8e61290f565b604051908082528060200260200182016040528015610cb7578160200160208202803683370190505b5090506000805b6001600160a01b038516600090815260026020526040902054811015610d96576001600160a01b03851660009081526002602052604081208054610d1e91889185908110610d0e57610d0e6128f9565b906000526020600020015461041e565b1115610d84576001600160a01b0385166000908152600260205260409020805482908110610d4e57610d4e6128f9565b9060005260206000200154838381518110610d6b57610d6b6128f9565b602090810291909101015281610d80816128c8565b9250505b80610d8e816128c8565b915050610cbe565b50909392505050565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3360009081526009602052604081205460ff16610e3a5760405162461bcd60e51b815260040161058c90612748565b600087815260066020908152604080832080546001600160a01b0319166001600160a01b038d1617905560089091529020610e76908686611ceb565b50610eb989888886868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061178992505050565b50505060008481526007602052604090209290925550909392505050565b3360009081526009602052604090205460ff16610f065760405162461bcd60e51b815260040161058c90612748565b60005b8351811015610f93576000848281518110610f2657610f266128f9565b602002602001015190506000848381518110610f4457610f446128f9565b60200260200101519050806007600084815260200190815260200160002054610f6d919061285e565b600092835260076020526040909220919091555080610f8b816128c8565b915050610f09565b50610ba784848484611825565b6003546001600160a01b03163314610fca5760405162461bcd60e51b815260040161058c9061277f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b0382166110605760405162461bcd60e51b815260206004820152602c60248201527f455243313135355472616461626c652373657443726561746f723a20494e564160448201526b2624a22fa0a2222922a9a99760a11b606482015260840161058c565b60005b81518110156110a7576000828281518110611080576110806128f9565b6020026020010151905061109484826119db565b508061109f816128c8565b915050611063565b505050565b60606040518060600160405280603b8152602001612954603b9139905090565b6004805460405163c455279160e01b81526001600160a01b038581169382019390935260009291821691841690829063c45527919060240160206040518083038186803b15801561111c57600080fd5b505afa158015611130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111549190612548565b6001600160a01b0316141561116d576001915050610441565b6001600160a01b0380851660009081526001602090815260408083209387168352929052205460ff165b949350505050565b336001600160a01b03861614806111bb57506111bb85336110cc565b61121a5760405162461bcd60e51b815260206004820152602a60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c49604482015269222fa7a822a920aa27a960b11b606482015260840161058c565b6001600160a01b0384166112845760405162461bcd60e51b815260206004820152602b60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c4960448201526a1117d49150d2541251539560aa1b606482015260840161058c565b61129085858585611a8c565b61073b8585858585611b8c565b6003546001600160a01b031633146112c75760405162461bcd60e51b815260040161058c9061277f565b6001600160a01b0381166113305760405162461bcd60e51b815260206004820152602a60248201527f4f776e61626c65237472616e736665724f776e6572736869703a20494e56414c60448201526949445f4144445245535360b01b606482015260840161058c565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b80518251146113fb5760405162461bcd60e51b815260206004820152603560248201527f45524331313535235f7361666542617463685472616e7366657246726f6d3a206044820152740929cac82989288be82a4a482b2a6be988a9c8ea89605b1b606482015260840161058c565b815160005b818110156115fa5782818151811061141a5761141a6128f9565b6020026020010151600080886001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061145a5761145a6128f9565b602002602001015181526020019081526020016000205461147b9190612876565b600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008684815181106114b3576114b36128f9565b60200260200101518152602001908152602001600020819055508281815181106114df576114df6128f9565b6020026020010151600080876001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061151f5761151f6128f9565b6020026020010151815260200190815260200160002054611540919061285e565b600080876001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110611578576115786128f9565b602002602001015181526020019081526020016000208190555060026000866001600160a01b03166001600160a01b031681526020019081526020016000208482815181106115c9576115c96128f9565b60209081029190910181015182546001810184556000938452919092200155806115f2816128c8565b915050611400565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161164a929190612707565b60405180910390a45050505050565b61166b846001600160a01b0316611cb4565b1561073b5760405163bc197c8160e01b81526000906001600160a01b0386169063bc197c81906116a79033908a90899089908990600401612651565b602060405180830381600087803b1580156116c157600080fd5b505af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f9919061252b565b90506001600160e01b0319811663bc197c8160e01b146117815760405162461bcd60e51b815260206004820152603f60248201527f45524331313535235f63616c6c6f6e455243313135354261746368526563656960448201527f7665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474500606482015260840161058c565b505050505050565b6001600160a01b0384166000908152602081815260408083208684529091529020546117b690839061285e565b6001600160a01b03851660008181526020818152604080832088845282528083209490945583518781529081018690529192909133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610ba7600085858585611b8c565b815183511461188f5760405162461bcd60e51b815260206004820152603060248201527f455243313135354d696e744275726e2362617463684d696e743a20494e56414c60448201526f09288be82a4a482b2a6be988a9c8ea8960831b606482015260840161058c565b825160005b81811015611974578381815181106118ae576118ae6128f9565b6020026020010151600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008784815181106118ee576118ee6128f9565b602002602001015181526020019081526020016000205461190f919061285e565b600080886001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110611947576119476128f9565b6020026020010151815260200190815260200160002081905550808061196c906128c8565b915050611894565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119c5929190612707565b60405180910390a461073b600086868686611659565b60008181526006602052604090205481906001600160a01b03163314611a5d5760405162461bcd60e51b815260206004820152603160248201527f455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c6044820152701657d0d491505513d497d0531313d5d151607a1b606482015260840161058c565b50600090815260066020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038416600090815260208181526040808320858452909152902054611ab9908290612876565b6001600160a01b0380861660009081526020818152604080832087845282528083209490945591861681528082528281208582529091522054611afd90829061285e565b6001600160a01b0380851660008181526020818152604080832088845282528083209590955582825260028152848220805460018101825590835291200185905591519086169033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290611b7e9087908790918252602082015260400190565b60405180910390a450505050565b611b9e846001600160a01b0316611cb4565b1561073b5760405163f23a6e6160e01b81526000906001600160a01b0386169063f23a6e6190611bda9033908a908990899089906004016126af565b602060405180830381600087803b158015611bf457600080fd5b505af1158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c919061252b565b90506001600160e01b0319811663f23a6e6160e01b146117815760405162461bcd60e51b815260206004820152603a60248201527f45524331313535235f63616c6c6f6e4552433131353552656365697665643a2060448201527f494e56414c49445f4f4e5f524543454956455f4d455353414745000000000000606482015260840161058c565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906111975750141592915050565b828054611cf79061288d565b90600052602060002090601f016020900481019282611d195760008555611d5f565b82601f10611d325782800160ff19823516178555611d5f565b82800160010185558215611d5f579182015b82811115611d5f578235825591602001919060010190611d44565b50611d6b929150611d6f565b5090565b5b80821115611d6b5760008155600101611d70565b60008083601f840112611d9657600080fd5b5081356001600160401b03811115611dad57600080fd5b6020830191508360208260051b8501011115611dc857600080fd5b9250929050565b600082601f830112611de057600080fd5b81356020611df5611df08361283b565b61280b565b80838252828201915082860187848660051b8901011115611e1557600080fd5b60005b85811015611e3457813584529284019290840190600101611e18565b5090979650505050505050565b60008083601f840112611e5357600080fd5b5081356001600160401b03811115611e6a57600080fd5b602083019150836020828501011115611dc857600080fd5b600082601f830112611e9357600080fd5b81356001600160401b03811115611eac57611eac61290f565b611ebf601f8201601f191660200161280b565b818152846020838601011115611ed457600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611f0357600080fd5b8135611f0e81612925565b9392505050565b60008060408385031215611f2857600080fd5b8235611f3381612925565b91506020830135611f4381612925565b809150509250929050565b600080600080600060a08688031215611f6657600080fd5b8535611f7181612925565b94506020860135611f8181612925565b935060408601356001600160401b0380821115611f9d57600080fd5b611fa989838a01611dcf565b94506060880135915080821115611fbf57600080fd5b611fcb89838a01611dcf565b93506080880135915080821115611fe157600080fd5b50611fee88828901611e82565b9150509295509295909350565b600080600080600060a0868803121561201357600080fd5b853561201e81612925565b9450602086013561202e81612925565b9350604086013592506060860135915060808601356001600160401b0381111561205757600080fd5b611fee88828901611e82565b60008060008060008060008060c0898b03121561207f57600080fd5b883561208a81612925565b9750602089013561209a81612925565b9650604089013595506060890135945060808901356001600160401b03808211156120c457600080fd5b6120d08c838d01611e41565b909650945060a08b01359150808211156120e957600080fd5b506120f68b828c01611e41565b999c989b5096995094979396929594505050565b6000806040838503121561211d57600080fd5b823561212881612925565b915060208301356001600160401b0381111561214357600080fd5b61214f85828601611dcf565b9150509250929050565b6000806000806080858703121561216f57600080fd5b843561217a81612925565b935060208501356001600160401b038082111561219657600080fd5b6121a288838901611dcf565b945060408701359150808211156121b857600080fd5b6121c488838901611dcf565b935060608701359150808211156121da57600080fd5b506121e787828801611e82565b91505092959194509250565b6000806040838503121561220657600080fd5b823561221181612925565b915060208301358015158114611f4357600080fd5b6000806040838503121561223957600080fd5b823561224481612925565b946020939093013593505050565b6000806000806080858703121561226857600080fd5b843561227381612925565b9350602085013592506040850135915060608501356001600160401b0381111561229c57600080fd5b6121e787828801611e82565b60008060008060008060008060008060008060c08d8f0312156122ca57600080fd5b6001600160401b038d3511156122df57600080fd5b6122ec8e8e358f01611d84565b909c509a506001600160401b0360208e0135111561230957600080fd5b6123198e60208f01358f01611d84565b909a5098506001600160401b0360408e0135111561233657600080fd5b6123468e60408f01358f01611d84565b90985096506001600160401b0360608e0135111561236357600080fd5b6123738e60608f01358f01611d84565b90965094506001600160401b0360808e0135111561239057600080fd5b6123a08e60808f01358f01611d84565b90945092506001600160401b0360a08e013511156123bd57600080fd5b6123cd8e60a08f01358f01611e41565b81935080925050509295989b509295989b509295989b565b600080604083850312156123f857600080fd5b82356001600160401b038082111561240f57600080fd5b818501915085601f83011261242357600080fd5b81356020612433611df08361283b565b8083825282820191508286018a848660051b890101111561245357600080fd5b600096505b8487101561247f57803561246b81612925565b835260019690960195918301918301612458565b509650508601359250508082111561249657600080fd5b5061214f85828601611dcf565b600080600080604085870312156124b957600080fd5b84356001600160401b03808211156124d057600080fd5b6124dc88838901611d84565b909650945060208701359150808211156124f557600080fd5b5061250287828801611e41565b95989497509550505050565b60006020828403121561252057600080fd5b8135611f0e8161293d565b60006020828403121561253d57600080fd5b8151611f0e8161293d565b60006020828403121561255a57600080fd5b8151611f0e81612925565b60006020828403121561257757600080fd5b5035919050565b60008060006040848603121561259357600080fd5b8335925060208401356001600160401b038111156125b057600080fd5b6125bc86828701611e41565b9497909650939450505050565b600081518084526020808501945080840160005b838110156125f9578151875295820195908201906001016125dd565b509495945050505050565b6000815180845260005b8181101561262a5760208185018101518683018201520161260e565b8181111561263c576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061267d908301866125c9565b828103606084015261268f81866125c9565b905082810360808401526126a38185612604565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906126e990830184612604565b979650505050505050565b602081526000611f0e60208301846125c9565b60408152600061271a60408301856125c9565b828103602084015261272c81856125c9565b95945050505050565b602081526000611f0e6020830184612604565b60208082526018908201527f4d696e74657220726f6c652069732072657175697265642e0000000000000000604082015260600190565b60208082526026908201527f4f776e61626c65236f6e6c794f776e65723a2053454e4445525f49535f4e4f546040820152652fa7aba722a960d11b606082015260800190565b6000808335601e198436030181126127dc57600080fd5b8301803591506001600160401b038211156127f657600080fd5b602001915036819003821315611dc857600080fd5b604051601f8201601f191681016001600160401b03811182821017156128335761283361290f565b604052919050565b60006001600160401b038211156128545761285461290f565b5060051b60200190565b60008219821115612871576128716128e3565b500190565b600082821015612888576128886128e3565b500390565b600181811c908216806128a157607f821691505b602082108114156128c257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128dc576128dc6128e3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461293a57600080fd5b50565b6001600160e01b03198116811461293a57600080fdfe68747470733a2f2f6d657461646174612e746168752e6469676974616c2f632f657468657265756d2f6d61696e6e65742f746168752d6272616e64a264697066735822122076bf1bfc0b7d973c0b2ae5c9324a626bd9eb6112b3807a9d861e5379e82e874d64736f6c63430008070033000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a85760003560e01c806395d89b41116100f9578063cd53d08e11610097578063e985e9c511610071578063e985e9c5146103c2578063f242432a146103d5578063f2fde38b146103e8578063f46eccc4146103fb57600080fd5b8063cd53d08e1461037e578063d2a6b51a146103a7578063e8a3d485146103ba57600080fd5b8063b021ed00116100d3578063b021ed0014610325578063b48ab8b614610338578063bd85b0391461034b578063cb177b1e1461036b57600080fd5b806395d89b41146102f7578063a0ffafd1146102ff578063a22cb4651461031257600080fd5b80634a2b061911610166578063862440e211610140578063862440e214610299578063893d20e8146102ac57806393922ab1146102d1578063953f97aa146102e457600080fd5b80634a2b0619146102535780634e1273f414610266578063731133e91461028657600080fd5b8062fdd58e146101ad57806301ffc9a7146101d357806306fdde03146101f65780630e89341c1461020b5780632693ebf21461021e5780632eb2c2d61461023e575b600080fd5b6101c06101bb366004612226565b61041e565b6040519081526020015b60405180910390f35b6101e66101e136600461250e565b610447565b60405190151581526020016101ca565b6101fe61048d565b6040516101ca9190612735565b6101fe610219366004612565565b61051b565b6101c061022c366004612565565b60076020526000908152604090205481565b61025161024c366004611f4e565b610633565b005b6102516102613660046122a8565b610742565b6102796102743660046123e5565b610998565b6040516101ca91906126f4565b610251610294366004612252565b610af2565b6102516102a736600461257e565b610b5f565b6003546001600160a01b03165b6040516001600160a01b0390911681526020016101ca565b6102516102df3660046124a3565b610bad565b6101fe6102f2366004612565565b610c34565b6101fe610c4d565b61027961030d366004611ef1565b610c5a565b6102516103203660046121f3565b610d9f565b6101c0610333366004612063565b610e0b565b610251610346366004612159565b610ed7565b6101c0610359366004612565565b60009081526007602052604090205490565b6102516103793660046121f3565b610fa0565b6102b961038c366004612565565b6006602052600090815260409020546001600160a01b031681565b6102516103b536600461210a565b610ff5565b6101fe6110ac565b6101e66103d0366004611f15565b6110cc565b6102516103e3366004611ffb565b61119f565b6102516103f6366004611ef1565b61129d565b6101e6610409366004611ef1565b60096020526000908152604090205460ff1681565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b60006001600160e01b031982166301ffc9a760e01b148061047857506001600160e01b03198216636cdb3d1360e11b145b1561048557506001919050565b506000919050565b600a805461049a9061288d565b80601f01602080910402602001604051908101604052809291908181526020018280546104c69061288d565b80156105135780601f106104e857610100808354040283529160200191610513565b820191906000526020600020905b8154815290600101906020018083116104f657829003601f168201915b505050505081565b6000818152600660205260409020546060906001600160a01b03166105955760405162461bcd60e51b815260206004820152602560248201527f4552433732315472616461626c65237572693a204e4f4e4558495354454e545f6044820152642a27a5a2a760d91b60648201526084015b60405180910390fd5b600082815260086020526040902080546105ae9061288d565b80601f01602080910402602001604051908101604052809291908181526020018280546105da9061288d565b80156106275780601f106105fc57610100808354040283529160200191610627565b820191906000526020600020905b81548152906001019060200180831161060a57829003601f168201915b50505050509050919050565b336001600160a01b038616148061064f575061064f85336110cc565b6106b35760405162461bcd60e51b815260206004820152602f60248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526e272b20a624a22fa7a822a920aa27a960891b606482015260840161058c565b6001600160a01b0384166107225760405162461bcd60e51b815260206004820152603060248201527f45524331313535237361666542617463685472616e7366657246726f6d3a204960448201526f13959053125117d49150d2541251539560821b606482015260840161058c565b61072e8585858561138c565b61073b8585858585611659565b5050505050565b3360009081526009602052604090205460ff166107715760405162461bcd60e51b815260040161058c90612748565b8a87146107b85760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21030b93930bc903632b733ba341760591b604482015260640161058c565b60005b8b811015610989578a8a828181106107d5576107d56128f9565b90506020020160208101906107ea9190611ef1565b600660008b8b85818110610800576108006128f9565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555084848281811061084b5761084b6128f9565b905060200281019061085d91906127c5565b600860008c8c86818110610873576108736128f9565b9050602002013581526020019081526020016000209190610895929190611ceb565b5061092e8d8d838181106108ab576108ab6128f9565b90506020020160208101906108c09190611ef1565b8a8a848181106108d2576108d26128f9565b905060200201358989858181106108eb576108eb6128f9565b9050602002013586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061178992505050565b868682818110610940576109406128f9565b90506020020135600760008b8b8581811061095d5761095d6128f9565b905060200201358152602001908152602001600020819055508080610981906128c8565b9150506107bb565b50505050505050505050505050565b60608151835114610a005760405162461bcd60e51b815260206004820152602c60248201527f455243313135352362616c616e63654f6642617463683a20494e56414c49445f60448201526b082a4a482b2be988a9c8ea8960a31b606482015260840161058c565b600083516001600160401b03811115610a1b57610a1b61290f565b604051908082528060200260200182016040528015610a44578160200160208202803683370190505b50905060005b8451811015610aea57600080868381518110610a6857610a686128f9565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110610aa457610aa46128f9565b6020026020010151815260200190815260200160002054828281518110610acd57610acd6128f9565b602090810291909101015280610ae2816128c8565b915050610a4a565b509392505050565b3360009081526009602052604090205460ff16610b215760405162461bcd60e51b815260040161058c90612748565b610b2d84848484611789565b600083815260076020526040902054610b4790839061285e565b60009384526007602052604090932092909255505050565b3360009081526009602052604090205460ff16610b8e5760405162461bcd60e51b815260040161058c90612748565b6000838152600860205260409020610ba7908383611ceb565b50505050565b3360009081526009602052604090205460ff16610bdc5760405162461bcd60e51b815260040161058c90612748565b60005b8381101561073b57828260086000888886818110610bff57610bff6128f9565b9050602002013581526020019081526020016000209190610c21929190611ceb565b5080610c2c816128c8565b915050610bdf565b6008602052600090815260409020805461049a9061288d565b600b805461049a9061288d565b6001600160a01b038116600090815260026020526040812054606091906001600160401b03811115610c8e57610c8e61290f565b604051908082528060200260200182016040528015610cb7578160200160208202803683370190505b5090506000805b6001600160a01b038516600090815260026020526040902054811015610d96576001600160a01b03851660009081526002602052604081208054610d1e91889185908110610d0e57610d0e6128f9565b906000526020600020015461041e565b1115610d84576001600160a01b0385166000908152600260205260409020805482908110610d4e57610d4e6128f9565b9060005260206000200154838381518110610d6b57610d6b6128f9565b602090810291909101015281610d80816128c8565b9250505b80610d8e816128c8565b915050610cbe565b50909392505050565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3360009081526009602052604081205460ff16610e3a5760405162461bcd60e51b815260040161058c90612748565b600087815260066020908152604080832080546001600160a01b0319166001600160a01b038d1617905560089091529020610e76908686611ceb565b50610eb989888886868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061178992505050565b50505060008481526007602052604090209290925550909392505050565b3360009081526009602052604090205460ff16610f065760405162461bcd60e51b815260040161058c90612748565b60005b8351811015610f93576000848281518110610f2657610f266128f9565b602002602001015190506000848381518110610f4457610f446128f9565b60200260200101519050806007600084815260200190815260200160002054610f6d919061285e565b600092835260076020526040909220919091555080610f8b816128c8565b915050610f09565b50610ba784848484611825565b6003546001600160a01b03163314610fca5760405162461bcd60e51b815260040161058c9061277f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b0382166110605760405162461bcd60e51b815260206004820152602c60248201527f455243313135355472616461626c652373657443726561746f723a20494e564160448201526b2624a22fa0a2222922a9a99760a11b606482015260840161058c565b60005b81518110156110a7576000828281518110611080576110806128f9565b6020026020010151905061109484826119db565b508061109f816128c8565b915050611063565b505050565b60606040518060600160405280603b8152602001612954603b9139905090565b6004805460405163c455279160e01b81526001600160a01b038581169382019390935260009291821691841690829063c45527919060240160206040518083038186803b15801561111c57600080fd5b505afa158015611130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111549190612548565b6001600160a01b0316141561116d576001915050610441565b6001600160a01b0380851660009081526001602090815260408083209387168352929052205460ff165b949350505050565b336001600160a01b03861614806111bb57506111bb85336110cc565b61121a5760405162461bcd60e51b815260206004820152602a60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c49604482015269222fa7a822a920aa27a960b11b606482015260840161058c565b6001600160a01b0384166112845760405162461bcd60e51b815260206004820152602b60248201527f4552433131353523736166655472616e7366657246726f6d3a20494e56414c4960448201526a1117d49150d2541251539560aa1b606482015260840161058c565b61129085858585611a8c565b61073b8585858585611b8c565b6003546001600160a01b031633146112c75760405162461bcd60e51b815260040161058c9061277f565b6001600160a01b0381166113305760405162461bcd60e51b815260206004820152602a60248201527f4f776e61626c65237472616e736665724f776e6572736869703a20494e56414c60448201526949445f4144445245535360b01b606482015260840161058c565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b80518251146113fb5760405162461bcd60e51b815260206004820152603560248201527f45524331313535235f7361666542617463685472616e7366657246726f6d3a206044820152740929cac82989288be82a4a482b2a6be988a9c8ea89605b1b606482015260840161058c565b815160005b818110156115fa5782818151811061141a5761141a6128f9565b6020026020010151600080886001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061145a5761145a6128f9565b602002602001015181526020019081526020016000205461147b9190612876565b600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008684815181106114b3576114b36128f9565b60200260200101518152602001908152602001600020819055508281815181106114df576114df6128f9565b6020026020010151600080876001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061151f5761151f6128f9565b6020026020010151815260200190815260200160002054611540919061285e565b600080876001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110611578576115786128f9565b602002602001015181526020019081526020016000208190555060026000866001600160a01b03166001600160a01b031681526020019081526020016000208482815181106115c9576115c96128f9565b60209081029190910181015182546001810184556000938452919092200155806115f2816128c8565b915050611400565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161164a929190612707565b60405180910390a45050505050565b61166b846001600160a01b0316611cb4565b1561073b5760405163bc197c8160e01b81526000906001600160a01b0386169063bc197c81906116a79033908a90899089908990600401612651565b602060405180830381600087803b1580156116c157600080fd5b505af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f9919061252b565b90506001600160e01b0319811663bc197c8160e01b146117815760405162461bcd60e51b815260206004820152603f60248201527f45524331313535235f63616c6c6f6e455243313135354261746368526563656960448201527f7665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474500606482015260840161058c565b505050505050565b6001600160a01b0384166000908152602081815260408083208684529091529020546117b690839061285e565b6001600160a01b03851660008181526020818152604080832088845282528083209490945583518781529081018690529192909133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610ba7600085858585611b8c565b815183511461188f5760405162461bcd60e51b815260206004820152603060248201527f455243313135354d696e744275726e2362617463684d696e743a20494e56414c60448201526f09288be82a4a482b2a6be988a9c8ea8960831b606482015260840161058c565b825160005b81811015611974578381815181106118ae576118ae6128f9565b6020026020010151600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008784815181106118ee576118ee6128f9565b602002602001015181526020019081526020016000205461190f919061285e565b600080886001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110611947576119476128f9565b6020026020010151815260200190815260200160002081905550808061196c906128c8565b915050611894565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119c5929190612707565b60405180910390a461073b600086868686611659565b60008181526006602052604090205481906001600160a01b03163314611a5d5760405162461bcd60e51b815260206004820152603160248201527f455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c6044820152701657d0d491505513d497d0531313d5d151607a1b606482015260840161058c565b50600090815260066020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038416600090815260208181526040808320858452909152902054611ab9908290612876565b6001600160a01b0380861660009081526020818152604080832087845282528083209490945591861681528082528281208582529091522054611afd90829061285e565b6001600160a01b0380851660008181526020818152604080832088845282528083209590955582825260028152848220805460018101825590835291200185905591519086169033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290611b7e9087908790918252602082015260400190565b60405180910390a450505050565b611b9e846001600160a01b0316611cb4565b1561073b5760405163f23a6e6160e01b81526000906001600160a01b0386169063f23a6e6190611bda9033908a908990899089906004016126af565b602060405180830381600087803b158015611bf457600080fd5b505af1158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c919061252b565b90506001600160e01b0319811663f23a6e6160e01b146117815760405162461bcd60e51b815260206004820152603a60248201527f45524331313535235f63616c6c6f6e4552433131353552656365697665643a2060448201527f494e56414c49445f4f4e5f524543454956455f4d455353414745000000000000606482015260840161058c565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906111975750141592915050565b828054611cf79061288d565b90600052602060002090601f016020900481019282611d195760008555611d5f565b82601f10611d325782800160ff19823516178555611d5f565b82800160010185558215611d5f579182015b82811115611d5f578235825591602001919060010190611d44565b50611d6b929150611d6f565b5090565b5b80821115611d6b5760008155600101611d70565b60008083601f840112611d9657600080fd5b5081356001600160401b03811115611dad57600080fd5b6020830191508360208260051b8501011115611dc857600080fd5b9250929050565b600082601f830112611de057600080fd5b81356020611df5611df08361283b565b61280b565b80838252828201915082860187848660051b8901011115611e1557600080fd5b60005b85811015611e3457813584529284019290840190600101611e18565b5090979650505050505050565b60008083601f840112611e5357600080fd5b5081356001600160401b03811115611e6a57600080fd5b602083019150836020828501011115611dc857600080fd5b600082601f830112611e9357600080fd5b81356001600160401b03811115611eac57611eac61290f565b611ebf601f8201601f191660200161280b565b818152846020838601011115611ed457600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611f0357600080fd5b8135611f0e81612925565b9392505050565b60008060408385031215611f2857600080fd5b8235611f3381612925565b91506020830135611f4381612925565b809150509250929050565b600080600080600060a08688031215611f6657600080fd5b8535611f7181612925565b94506020860135611f8181612925565b935060408601356001600160401b0380821115611f9d57600080fd5b611fa989838a01611dcf565b94506060880135915080821115611fbf57600080fd5b611fcb89838a01611dcf565b93506080880135915080821115611fe157600080fd5b50611fee88828901611e82565b9150509295509295909350565b600080600080600060a0868803121561201357600080fd5b853561201e81612925565b9450602086013561202e81612925565b9350604086013592506060860135915060808601356001600160401b0381111561205757600080fd5b611fee88828901611e82565b60008060008060008060008060c0898b03121561207f57600080fd5b883561208a81612925565b9750602089013561209a81612925565b9650604089013595506060890135945060808901356001600160401b03808211156120c457600080fd5b6120d08c838d01611e41565b909650945060a08b01359150808211156120e957600080fd5b506120f68b828c01611e41565b999c989b5096995094979396929594505050565b6000806040838503121561211d57600080fd5b823561212881612925565b915060208301356001600160401b0381111561214357600080fd5b61214f85828601611dcf565b9150509250929050565b6000806000806080858703121561216f57600080fd5b843561217a81612925565b935060208501356001600160401b038082111561219657600080fd5b6121a288838901611dcf565b945060408701359150808211156121b857600080fd5b6121c488838901611dcf565b935060608701359150808211156121da57600080fd5b506121e787828801611e82565b91505092959194509250565b6000806040838503121561220657600080fd5b823561221181612925565b915060208301358015158114611f4357600080fd5b6000806040838503121561223957600080fd5b823561224481612925565b946020939093013593505050565b6000806000806080858703121561226857600080fd5b843561227381612925565b9350602085013592506040850135915060608501356001600160401b0381111561229c57600080fd5b6121e787828801611e82565b60008060008060008060008060008060008060c08d8f0312156122ca57600080fd5b6001600160401b038d3511156122df57600080fd5b6122ec8e8e358f01611d84565b909c509a506001600160401b0360208e0135111561230957600080fd5b6123198e60208f01358f01611d84565b909a5098506001600160401b0360408e0135111561233657600080fd5b6123468e60408f01358f01611d84565b90985096506001600160401b0360608e0135111561236357600080fd5b6123738e60608f01358f01611d84565b90965094506001600160401b0360808e0135111561239057600080fd5b6123a08e60808f01358f01611d84565b90945092506001600160401b0360a08e013511156123bd57600080fd5b6123cd8e60a08f01358f01611e41565b81935080925050509295989b509295989b509295989b565b600080604083850312156123f857600080fd5b82356001600160401b038082111561240f57600080fd5b818501915085601f83011261242357600080fd5b81356020612433611df08361283b565b8083825282820191508286018a848660051b890101111561245357600080fd5b600096505b8487101561247f57803561246b81612925565b835260019690960195918301918301612458565b509650508601359250508082111561249657600080fd5b5061214f85828601611dcf565b600080600080604085870312156124b957600080fd5b84356001600160401b03808211156124d057600080fd5b6124dc88838901611d84565b909650945060208701359150808211156124f557600080fd5b5061250287828801611e41565b95989497509550505050565b60006020828403121561252057600080fd5b8135611f0e8161293d565b60006020828403121561253d57600080fd5b8151611f0e8161293d565b60006020828403121561255a57600080fd5b8151611f0e81612925565b60006020828403121561257757600080fd5b5035919050565b60008060006040848603121561259357600080fd5b8335925060208401356001600160401b038111156125b057600080fd5b6125bc86828701611e41565b9497909650939450505050565b600081518084526020808501945080840160005b838110156125f9578151875295820195908201906001016125dd565b509495945050505050565b6000815180845260005b8181101561262a5760208185018101518683018201520161260e565b8181111561263c576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061267d908301866125c9565b828103606084015261268f81866125c9565b905082810360808401526126a38185612604565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906126e990830184612604565b979650505050505050565b602081526000611f0e60208301846125c9565b60408152600061271a60408301856125c9565b828103602084015261272c81856125c9565b95945050505050565b602081526000611f0e6020830184612604565b60208082526018908201527f4d696e74657220726f6c652069732072657175697265642e0000000000000000604082015260600190565b60208082526026908201527f4f776e61626c65236f6e6c794f776e65723a2053454e4445525f49535f4e4f546040820152652fa7aba722a960d11b606082015260800190565b6000808335601e198436030181126127dc57600080fd5b8301803591506001600160401b038211156127f657600080fd5b602001915036819003821315611dc857600080fd5b604051601f8201601f191681016001600160401b03811182821017156128335761283361290f565b604052919050565b60006001600160401b038211156128545761285461290f565b5060051b60200190565b60008219821115612871576128716128e3565b500190565b600082821015612888576128886128e3565b500390565b600181811c908216806128a157607f821691505b602082108114156128c257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128dc576128dc6128e3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461293a57600080fd5b50565b6001600160e01b03198116811461293a57600080fdfe68747470733a2f2f6d657461646174612e746168752e6469676974616c2f632f657468657265756d2f6d61696e6e65742f746168752d6272616e64a264697066735822122076bf1bfc0b7d973c0b2ae5c9324a626bd9eb6112b3807a9d861e5379e82e874d64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1


Deployed Bytecode Sourcemap

16830:340:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8178:127;;;;;;:::i;:::-;;:::i;:::-;;;24128:25:1;;;24116:2;24101:18;8178:127:0;;;;;;;;8958:249;;;;;;:::i;:::-;;:::i;:::-;;;17206:14:1;;17199:22;17181:41;;17169:2;17154:18;8958:249:0;17041:187:1;12412:18:0;;;:::i;:::-;;;;;;;:::i;13192:170::-;;;;;;:::i;:::-;;:::i;12249:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;5040:511;;;;;;:::i;:::-;;:::i;:::-;;13911:607;;;;;;:::i;:::-;;:::i;8311:500::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14526:274::-;;;;;;:::i;:::-;;:::i;16669:152::-;;;;;;:::i;:::-;;:::i;675:75::-;739:5;;-1:-1:-1;;;;;739:5:0;675:75;;;-1:-1:-1;;;;;14865:32:1;;;14847:51;;14835:2;14820:18;675:75:0;14701:203:1;16438:225:0;;;;;;:::i;:::-;;:::i;12301:39::-;;;;;;:::i;:::-;;:::i;12457:20::-;;;:::i;9213:423::-;;;;;;:::i;:::-;;:::i;7776:227::-;;;;;;:::i;:::-;;:::i;13486:419::-;;;;;;:::i;:::-;;:::i;14806:437::-;;;;;;:::i;:::-;;:::i;13370:110::-;;;;;;:::i;:::-;13435:7;13458:16;;;:11;:16;;;;;;;13370:110;16310:122;;;;;;:::i;:::-;;:::i;12200:44::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12200:44:0;;;15249:279;;;;;;:::i;:::-;;:::i;17023:140::-;;;:::i;15652:410::-;;;;;;:::i;:::-;;:::i;4489:545::-;;;;;;:::i;:::-;;:::i;441:228::-;;;;;;:::i;:::-;;:::i;12345:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8178:127;-1:-1:-1;;;;;8278:16:0;;8252:7;8278:16;;;;;;;;;;;:21;;;;;;;;;8178:127;;;;;:::o;8958:249::-;9038:4;-1:-1:-1;;;;;;9055:42:0;;-1:-1:-1;;;9055:42:0;;:98;;-1:-1:-1;;;;;;;9110:43:0;;-1:-1:-1;;;9110:43:0;9055:98;9051:132;;;-1:-1:-1;9171:4:0;;8958:249;-1:-1:-1;8958:249:0:o;9051:132::-;-1:-1:-1;9196:5:0;;8958:249;-1:-1:-1;8958:249:0:o;12412:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13192:170::-;16247:4;16267:13;;;:8;:13;;;;;;13249;;-1:-1:-1;;;;;16267:13:0;13271:62;;;;-1:-1:-1;;;13271:62:0;;20435:2:1;13271:62:0;;;20417:21:1;20474:2;20454:18;;;20447:30;20513:34;20493:18;;;20486:62;-1:-1:-1;;;20564:18:1;;;20557:35;20609:19;;13271:62:0;;;;;;;;;13347:9;;;;:4;:9;;;;;13340:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13192:170;;;:::o;5040:511::-;5221:10;-1:-1:-1;;;;;5221:19:0;;;;5220:60;;;5245:35;5262:5;5269:10;5245:16;:35::i;:::-;5212:120;;;;-1:-1:-1;;;5212:120:0;;21254:2:1;5212:120:0;;;21236:21:1;21293:2;21273:18;;;21266:30;21332:34;21312:18;;;21305:62;-1:-1:-1;;;21383:18:1;;;21376:45;21438:19;;5212:120:0;21052:411:1;5212:120:0;-1:-1:-1;;;;;5347:17:0;;5339:78;;;;-1:-1:-1;;;5339:78:0;;20018:2:1;5339:78:0;;;20000:21:1;20057:2;20037:18;;;20030:30;20096:34;20076:18;;;20069:62;-1:-1:-1;;;20147:18:1;;;20140:46;20203:19;;5339:78:0;19816:412:1;5339:78:0;5426:50;5449:5;5456:3;5461:4;5467:8;5426:22;:50::i;:::-;5483:62;5511:5;5518:3;5523:4;5529:8;5539:5;5483:27;:62::i;:::-;5040:511;;;;;:::o;13911:607::-;14162:10;14154:19;;;;:7;:19;;;;;;;;14146:56;;;;-1:-1:-1;;;14146:56:0;;;;;;;:::i;:::-;14217:26;;;14209:60;;;;-1:-1:-1;;;14209:60:0;;19668:2:1;14209:60:0;;;19650:21:1;19707:2;19687:18;;;19680:30;-1:-1:-1;;;19726:18:1;;;19719:51;19787:18;;14209:60:0;19466:345:1;14209:60:0;14280:6;14276:235;14290:13;;;14276:235;;;14341:9;;14351:1;14341:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;14321:8;:17;14330:4;;14335:1;14330:7;;;;;;;:::i;:::-;;;;;;;14321:17;;;;;;;;;;;;:32;;;;;-1:-1:-1;;;;;14321:32:0;;;;;-1:-1:-1;;;;;14321:32:0;;;;;;14380:5;;14386:1;14380:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;14364:4;:13;14369:4;;14374:1;14369:7;;;;;;;:::i;:::-;;;;;;;14364:13;;;;;;;;;;;:24;;;;;;;:::i;:::-;;14401:50;14407:4;;14412:1;14407:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;14416:4;;14421:1;14416:7;;;;;;;:::i;:::-;;;;;;;14425:15;;14441:1;14425:18;;;;;;;:::i;:::-;;;;;;;14445:5;;14401:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14401:5:0;;-1:-1:-1;;;14401:50:0:i;:::-;14485:15;;14501:1;14485:18;;;;;;;:::i;:::-;;;;;;;14462:11;:20;14474:4;;14479:1;14474:7;;;;;;;:::i;:::-;;;;;;;14462:20;;;;;;;;;;;:41;;;;14305:3;;;;;:::i;:::-;;;;14276:235;;;;13911:607;;;;;;;;;;;;:::o;8311:500::-;8410:16;8464:4;:11;8446:7;:14;:29;8438:86;;;;-1:-1:-1;;;8438:86:0;;20841:2:1;8438:86:0;;;20823:21:1;20880:2;20860:18;;;20853:30;20919:34;20899:18;;;20892:62;-1:-1:-1;;;20970:18:1;;;20963:42;21022:19;;8438:86:0;20639:408:1;8438:86:0;8551:30;8598:7;:14;-1:-1:-1;;;;;8584:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8584:29:0;;8551:62;;8672:9;8667:110;8691:7;:14;8687:1;:18;8667:110;;;8740:8;:20;8749:7;8757:1;8749:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8740:20:0;-1:-1:-1;;;;;8740:20:0;;;;;;;;;;;;:29;8761:4;8766:1;8761:7;;;;;;;;:::i;:::-;;;;;;;8740:29;;;;;;;;;;;;8721:13;8735:1;8721:16;;;;;;;;:::i;:::-;;;;;;;;;;:48;8707:3;;;;:::i;:::-;;;;8667:110;;;-1:-1:-1;8792:13:0;8311:500;-1:-1:-1;;;8311:500:0:o;14526:274::-;14660:10;14652:19;;;;:7;:19;;;;;;;;14644:56;;;;-1:-1:-1;;;14644:56:0;;;;;;;:::i;:::-;14707:33;14713:3;14718;14723:9;14734:5;14707;:33::i;:::-;14766:16;;;;:11;:16;;;;;;:28;;14785:9;;14766:28;:::i;:::-;14747:16;;;;:11;:16;;;;;;:47;;;;-1:-1:-1;;;14526:274:0:o;16669:152::-;16752:10;16744:19;;;;:7;:19;;;;;;;;16736:56;;;;-1:-1:-1;;;16736:56:0;;;;;;;:::i;:::-;16799:9;;;;:4;:9;;;;;:16;;16811:4;;16799:16;:::i;:::-;;16669:152;;;:::o;16438:225::-;16538:10;16530:19;;;;:7;:19;;;;;;;;16522:56;;;;-1:-1:-1;;;16522:56:0;;;;;;;:::i;:::-;16589:6;16585:73;16599:13;;;16585:73;;;16646:4;;16630;:13;16635:4;;16640:1;16635:7;;;;;;;:::i;:::-;;;;;;;16630:13;;;;;;;;;;;:20;;;;;;;:::i;:::-;-1:-1:-1;16614:3:0;;;;:::i;:::-;;;;16585:73;;12301:39;;;;;;;;;;;;;;;;:::i;12457:20::-;;;;;;;:::i;9213:423::-;-1:-1:-1;;;;;9337:22:0;;9300:20;9337:22;;;:12;:22;;;;;:29;9275:16;;9300:20;-1:-1:-1;;;;;9323:44:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9323:44:0;-1:-1:-1;9300:67:0;-1:-1:-1;9374:12:0;;9393:221;-1:-1:-1;;;;;9409:22:0;;;;;;:12;:22;;;;;:29;9407:31;;9393:221;;;-1:-1:-1;;;;;9482:22:0;;9512:1;9482:22;;;:12;:22;;;;;:25;;9461:48;;9472:8;;9505:1;;9482:25;;;;;;:::i;:::-;;;;;;;;;9461:9;:48::i;:::-;:52;9456:151;;;-1:-1:-1;;;;;9546:22:0;;;;;;:12;:22;;;;;:25;;9569:1;;9546:25;;;;;;:::i;:::-;;;;;;;;;9531:3;9535:7;9531:12;;;;;;;;:::i;:::-;;;;;;;;;;:40;9586:9;;;;:::i;:::-;;;;9456:151;9440:3;;;;:::i;:::-;;;;9393:221;;;-1:-1:-1;9627:3:0;;9213:423;-1:-1:-1;;;9213:423:0:o;7776:227::-;7903:10;7893:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;7893:32:0;;;;;;;;;;;;:44;;-1:-1:-1;;7893:44:0;;;;;;;;;;7949:48;;17181:41:1;;;7893:32:0;;7903:10;7949:48;;17154:18:1;7949:48:0;;;;;;;7776:227;;:::o;13486:419::-;13699:10;13667:7;13691:19;;;:7;:19;;;;;;;;13683:56;;;;-1:-1:-1;;;13683:56:0;;;;;;;:::i;:::-;13748:13;;;;:8;:13;;;;;;;;:24;;-1:-1:-1;;;;;;13748:24:0;-1:-1:-1;;;;;13748:24:0;;;;;13779:4;:9;;;;;:16;;13791:4;;13779:16;:::i;:::-;;13804:38;13810:3;13815;13820:14;13836:5;;13804:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13804:5:0;;-1:-1:-1;;;13804:38:0:i;:::-;-1:-1:-1;;;13849:16:0;;;;:11;:16;;;;;:33;;;;-1:-1:-1;13849:16:0;;13486:419;-1:-1:-1;;;13486:419:0:o;14806:437::-;14966:10;14958:19;;;;:7;:19;;;;;;;;14950:56;;;;-1:-1:-1;;;14950:56:0;;;;;;;:::i;:::-;15018:9;15013:177;15037:4;:11;15033:1;:15;15013:177;;;15064:11;15078:4;15083:1;15078:7;;;;;;;;:::i;:::-;;;;;;;15064:21;;15094:16;15113:11;15125:1;15113:14;;;;;;;;:::i;:::-;;;;;;;15094:33;;15174:8;15155:11;:16;15167:3;15155:16;;;;;;;;;;;;:27;;;;:::i;:::-;15136:16;;;;:11;:16;;;;;;:46;;;;-1:-1:-1;15050:3:0;;;;:::i;:::-;;;;15013:177;;;;15196:41;15207:3;15212:4;15218:11;15231:5;15196:10;:41::i;16310:122::-;373:5;;-1:-1:-1;;;;;373:5:0;359:10;:19;351:70;;;;-1:-1:-1;;;351:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16395:17:0;;;::::1;;::::0;;;:7:::1;:17;::::0;;;;:31;;-1:-1:-1;;16395:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16310:122::o;15249:279::-;-1:-1:-1;;;;;15342:17:0;;15334:74;;;;-1:-1:-1;;;15334:74:0;;23353:2:1;15334:74:0;;;23335:21:1;23392:2;23372:18;;;23365:30;23431:34;23411:18;;;23404:62;-1:-1:-1;;;23482:18:1;;;23475:42;23534:19;;15334:74:0;23151:408:1;15334:74:0;15420:9;15415:108;15439:4;:11;15435:1;:15;15415:108;;;15466:10;15479:4;15484:1;15479:7;;;;;;;;:::i;:::-;;;;;;;15466:20;;15495;15507:3;15512:2;15495:11;:20::i;:::-;-1:-1:-1;15452:3:0;;;;:::i;:::-;;;;15415:108;;;;15249:279;;:::o;17023:140::-;17067:13;17089:68;;;;;;;;;;;;;;;;;;;17023:140;:::o;15652:410::-;15885:20;;;15925:29;;-1:-1:-1;;;15925:29:0;;-1:-1:-1;;;;;14865:32:1;;;15925:29:0;;;14847:51:1;;;;15758:15:0;;15885:20;;;;15917:51;;;15885:20;;15925:21;;14820:18:1;;15925:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15917:51:0;;15913:85;;;15986:4;15979:11;;;;;15913:85;-1:-1:-1;;;;;8138:17:0;;;8104:15;8138:17;;;:9;:17;;;;;;;;:28;;;;;;;;;;;;16013:43;16006:50;15652:410;-1:-1:-1;;;;15652:410:0:o;4489:545::-;4624:10;-1:-1:-1;;;;;4624:19:0;;;;4623:60;;;4648:35;4665:5;4672:10;4648:16;:35::i;:::-;4615:115;;;;-1:-1:-1;;;4615:115:0;;18071:2:1;4615:115:0;;;18053:21:1;18110:2;18090:18;;;18083:30;18149:34;18129:18;;;18122:62;-1:-1:-1;;;18200:18:1;;;18193:40;18250:19;;4615:115:0;17869:406:1;4615:115:0;-1:-1:-1;;;;;4745:17:0;;4737:72;;;;-1:-1:-1;;;4737:72:0;;17659:2:1;4737:72:0;;;17641:21:1;17698:2;17678:18;;;17671:30;17737:34;17717:18;;;17710:62;-1:-1:-1;;;17788:18:1;;;17781:41;17839:19;;4737:72:0;17457:407:1;4737:72:0;4923:43;4941:5;4948:3;4953;4958:7;4923:17;:43::i;:::-;4973:55;4996:5;5003:3;5008;5013:7;5022:5;4973:22;:55::i;441:228::-;373:5;;-1:-1:-1;;;;;373:5:0;359:10;:19;351:70;;;;-1:-1:-1;;;351:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;519:23:0;::::1;511:78;;;::::0;-1:-1:-1;;;511:78:0;;18904:2:1;511:78:0::1;::::0;::::1;18886:21:1::0;18943:2;18923:18;;;18916:30;18982:34;18962:18;;;18955:62;-1:-1:-1;;;19033:18:1;;;19026:40;19083:19;;511:78:0::1;18702:406:1::0;511:78:0::1;622:5;::::0;601:38:::1;::::0;-1:-1:-1;;;;;601:38:0;;::::1;::::0;622:5:::1;::::0;601:38:::1;::::0;622:5:::1;::::0;601:38:::1;646:5;:17:::0;;-1:-1:-1;;;;;;646:17:0::1;-1:-1:-1::0;;;;;646:17:0;;;::::1;::::0;;;::::1;::::0;;441:228::o;6536:752::-;6693:8;:15;6678:4;:11;:30;6670:96;;;;-1:-1:-1;;;6670:96:0;;18482:2:1;6670:96:0;;;18464:21:1;18521:2;18501:18;;;18494:30;18560:34;18540:18;;;18533:62;-1:-1:-1;;;18611:18:1;;;18604:51;18672:19;;6670:96:0;18280:417:1;6670:96:0;6833:11;;6813:17;6885:312;6909:9;6905:1;:13;6885:312;;;7037:8;7046:1;7037:11;;;;;;;;:::i;:::-;;;;;;;7010:8;:15;7019:5;-1:-1:-1;;;;;7010:15:0;-1:-1:-1;;;;;7010:15:0;;;;;;;;;;;;:24;7026:4;7031:1;7026:7;;;;;;;;:::i;:::-;;;;;;;7010:24;;;;;;;;;;;;:38;;;;:::i;:::-;6983:8;:15;6992:5;-1:-1:-1;;;;;6983:15:0;-1:-1:-1;;;;;6983:15:0;;;;;;;;;;;;:24;6999:4;7004:1;6999:7;;;;;;;;:::i;:::-;;;;;;;6983:24;;;;;;;;;;;:65;;;;7107:8;7116:1;7107:11;;;;;;;;:::i;:::-;;;;;;;7082:8;:13;7091:3;-1:-1:-1;;;;;7082:13:0;-1:-1:-1;;;;;7082:13:0;;;;;;;;;;;;:22;7096:4;7101:1;7096:7;;;;;;;;:::i;:::-;;;;;;;7082:22;;;;;;;;;;;;:36;;;;:::i;:::-;7057:8;:13;7066:3;-1:-1:-1;;;;;7057:13:0;-1:-1:-1;;;;;7057:13:0;;;;;;;;;;;;:22;7071:4;7076:1;7071:7;;;;;;;;:::i;:::-;;;;;;;7057:22;;;;;;;;;;;:61;;;;7158:12;:17;7171:3;-1:-1:-1;;;;;7158:17:0;-1:-1:-1;;;;;7158:17:0;;;;;;;;;;;;7181:4;7186:1;7181:7;;;;;;;;:::i;:::-;;;;;;;;;;;;7158:31;;;;;;;-1:-1:-1;7158:31:0;;;;;;;;;6920:3;;;;:::i;:::-;;;;6885:312;;;;7262:3;-1:-1:-1;;;;;7229:53:0;7255:5;-1:-1:-1;;;;;7229:53:0;7243:10;-1:-1:-1;;;;;7229:53:0;;7267:4;7273:8;7229:53;;;;;;;:::i;:::-;;;;;;;;6663:625;6536:752;;;;:::o;7294:476::-;7500:16;:3;-1:-1:-1;;;;;7500:14:0;;:16::i;:::-;7496:269;;;7543:91;;-1:-1:-1;;;7543:91:0;;7527:13;;-1:-1:-1;;;;;7543:49:0;;;;;:91;;7593:10;;7605:5;;7612:4;;7618:8;;7628:5;;7543:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7527:107;-1:-1:-1;;;;;;;7651:38:0;;-1:-1:-1;;;7651:38:0;7643:114;;;;-1:-1:-1;;;7643:114:0;;22087:2:1;7643:114:0;;;22069:21:1;22126:2;22106:18;;;22099:30;22165:34;22145:18;;;22138:62;22236:33;22216:18;;;22209:61;22287:19;;7643:114:0;21885:427:1;7643:114:0;7518:247;7294:476;;;;;:::o;9697:398::-;-1:-1:-1;;;;;9840:13:0;;:8;:13;;;;;;;;;;;:18;;;;;;;;;:28;;9861:7;;9840:28;:::i;:::-;-1:-1:-1;;;;;9819:13:0;;:8;:13;;;;;;;;;;;:18;;;;;;;;:49;;;;9901:59;;24338:25:1;;;24379:18;;;24372:34;;;9819:13:0;;:8;;9916:10;;9901:59;;24311:18:1;9901:59:0;;;;;;;10027:62;10058:3;10064;10069;10074:7;10083:5;10027:22;:62::i;10101:721::-;10251:8;:15;10236:4;:11;:30;10228:91;;;;-1:-1:-1;;;10228:91:0;;21670:2:1;10228:91:0;;;21652:21:1;21709:2;21689:18;;;21682:30;21748:34;21728:18;;;21721:62;-1:-1:-1;;;21799:18:1;;;21792:46;21855:19;;10228:91:0;21468:412:1;10228:91:0;10379:11;;10363:13;10430:147;10454:5;10450:1;:9;10430:147;;;10558:8;10567:1;10558:11;;;;;;;;:::i;:::-;;;;;;;10533:8;:13;10542:3;-1:-1:-1;;;;;10533:13:0;-1:-1:-1;;;;;10533:13:0;;;;;;;;;;;;:22;10547:4;10552:1;10547:7;;;;;;;;:::i;:::-;;;;;;;10533:22;;;;;;;;;;;;:36;;;;:::i;:::-;10508:8;:13;10517:3;-1:-1:-1;;;;;10508:13:0;-1:-1:-1;;;;;10508:13:0;;;;;;;;;;;;:22;10522:4;10527:1;10522:7;;;;;;;;:::i;:::-;;;;;;;10508:22;;;;;;;;;;;:61;;;;10461:3;;;;;:::i;:::-;;;;10430:147;;;;10660:3;-1:-1:-1;;;;;10620:60:0;10654:3;-1:-1:-1;;;;;10620:60:0;10634:10;-1:-1:-1;;;;;10620:60:0;;10665:4;10671:8;10620:60;;;;;;;:::i;:::-;;;;;;;;10747:69;10783:3;10789;10794:4;10800:8;10810:5;10747:27;:69::i;16068:110::-;12611:13;;;;:8;:13;;;;;;16136:3;;-1:-1:-1;;;;;12611:13:0;12628:10;12611:27;12603:89;;;;-1:-1:-1;;;12603:89:0;;23766:2:1;12603:89:0;;;23748:21:1;23805:2;23785:18;;;23778:30;23844:34;23824:18;;;23817:62;-1:-1:-1;;;23895:18:1;;;23888:47;23952:19;;12603:89:0;23564:413:1;12603:89:0;-1:-1:-1;16153:13:0::1;::::0;;;:8:::1;:13;::::0;;;;:19;;-1:-1:-1;;;;;;16153:19:0::1;-1:-1:-1::0;;;;;16153:19:0;;;::::1;::::0;;;::::1;::::0;;16068:110::o;5557:431::-;-1:-1:-1;;;;;5713:15:0;;:8;:15;;;;;;;;;;;:20;;;;;;;;;:30;;5736:7;;5713:30;:::i;:::-;-1:-1:-1;;;;;5690:15:0;;;:8;:15;;;;;;;;;;;:20;;;;;;;;:53;;;;5790:13;;;;;;;;;;;:18;;;;;;;;:28;;5811:7;;5790:28;:::i;:::-;-1:-1:-1;;;;;5769:13:0;;;:8;:13;;;;;;;;;;;:18;;;;;;;;:49;;;;5870:17;;;:12;:17;;;;;:27;;;;;;;;;;;;;;;;5930:52;;;;;;5945:10;;5930:52;;;;5783:3;;5974:7;;24338:25:1;;;24394:2;24379:18;;24372:34;24326:2;24311:18;;24164:248;5930:52:0;;;;;;;;5557:431;;;;:::o;6101:429::-;6278:16;:3;-1:-1:-1;;;;;6278:14:0;;:16::i;:::-;6274:251;;;6321:84;;-1:-1:-1;;;6321:84:0;;6305:13;;-1:-1:-1;;;;;6321:44:0;;;;;:84;;6366:10;;6378:5;;6385:3;;6390:7;;6399:5;;6321:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6305:100;-1:-1:-1;;;;;;;6422:32:0;;-1:-1:-1;;;6422:32:0;6414:103;;;;-1:-1:-1;;;6414:103:0;;22519:2:1;6414:103:0;;;22501:21:1;22558:2;22538:18;;;22531:30;22597:34;22577:18;;;22570:62;22668:28;22648:18;;;22641:56;22714:19;;6414:103:0;22317:422:1;2770:673:0;2830:4;3358:20;;2888:66;3394:15;;;;;:42;;-1:-1:-1;3413:23:0;;;3386:51;-1:-1:-1;;2770:673:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:367:1;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;-1:-1:-1;;;;;214:30:1;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:673::-;440:5;493:3;486:4;478:6;474:17;470:27;460:55;;511:1;508;501:12;460:55;547:6;534:20;573:4;597:60;613:43;653:2;613:43;:::i;:::-;597:60;:::i;:::-;679:3;703:2;698:3;691:15;731:2;726:3;722:12;715:19;;766:2;758:6;754:15;818:3;813:2;807;804:1;800:10;792:6;788:23;784:32;781:41;778:61;;;835:1;832;825:12;778:61;857:1;867:163;881:2;878:1;875:9;867:163;;;938:17;;926:30;;976:12;;;;1008;;;;899:1;892:9;867:163;;;-1:-1:-1;1048:5:1;;386:673;-1:-1:-1;;;;;;;386:673:1:o;1064:347::-;1115:8;1125:6;1179:3;1172:4;1164:6;1160:17;1156:27;1146:55;;1197:1;1194;1187:12;1146:55;-1:-1:-1;1220:20:1;;-1:-1:-1;;;;;1252:30:1;;1249:50;;;1295:1;1292;1285:12;1249:50;1332:4;1324:6;1320:17;1308:29;;1384:3;1377:4;1368:6;1360;1356:19;1352:30;1349:39;1346:59;;;1401:1;1398;1391:12;1416:530;1458:5;1511:3;1504:4;1496:6;1492:17;1488:27;1478:55;;1529:1;1526;1519:12;1478:55;1565:6;1552:20;-1:-1:-1;;;;;1587:2:1;1584:26;1581:52;;;1613:18;;:::i;:::-;1657:55;1700:2;1681:13;;-1:-1:-1;;1677:27:1;1706:4;1673:38;1657:55;:::i;:::-;1737:2;1728:7;1721:19;1783:3;1776:4;1771:2;1763:6;1759:15;1755:26;1752:35;1749:55;;;1800:1;1797;1790:12;1749:55;1865:2;1858:4;1850:6;1846:17;1839:4;1830:7;1826:18;1813:55;1913:1;1888:16;;;1906:4;1884:27;1877:38;;;;1892:7;1416:530;-1:-1:-1;;;1416:530:1:o;1951:247::-;2010:6;2063:2;2051:9;2042:7;2038:23;2034:32;2031:52;;;2079:1;2076;2069:12;2031:52;2118:9;2105:23;2137:31;2162:5;2137:31;:::i;:::-;2187:5;1951:247;-1:-1:-1;;;1951:247:1:o;2203:388::-;2271:6;2279;2332:2;2320:9;2311:7;2307:23;2303:32;2300:52;;;2348:1;2345;2338:12;2300:52;2387:9;2374:23;2406:31;2431:5;2406:31;:::i;:::-;2456:5;-1:-1:-1;2513:2:1;2498:18;;2485:32;2526:33;2485:32;2526:33;:::i;:::-;2578:7;2568:17;;;2203:388;;;;;:::o;2596:1071::-;2750:6;2758;2766;2774;2782;2835:3;2823:9;2814:7;2810:23;2806:33;2803:53;;;2852:1;2849;2842:12;2803:53;2891:9;2878:23;2910:31;2935:5;2910:31;:::i;:::-;2960:5;-1:-1:-1;3017:2:1;3002:18;;2989:32;3030:33;2989:32;3030:33;:::i;:::-;3082:7;-1:-1:-1;3140:2:1;3125:18;;3112:32;-1:-1:-1;;;;;3193:14:1;;;3190:34;;;3220:1;3217;3210:12;3190:34;3243:61;3296:7;3287:6;3276:9;3272:22;3243:61;:::i;:::-;3233:71;;3357:2;3346:9;3342:18;3329:32;3313:48;;3386:2;3376:8;3373:16;3370:36;;;3402:1;3399;3392:12;3370:36;3425:63;3480:7;3469:8;3458:9;3454:24;3425:63;:::i;:::-;3415:73;;3541:3;3530:9;3526:19;3513:33;3497:49;;3571:2;3561:8;3558:16;3555:36;;;3587:1;3584;3577:12;3555:36;;3610:51;3653:7;3642:8;3631:9;3627:24;3610:51;:::i;:::-;3600:61;;;2596:1071;;;;;;;;:::o;3672:734::-;3776:6;3784;3792;3800;3808;3861:3;3849:9;3840:7;3836:23;3832:33;3829:53;;;3878:1;3875;3868:12;3829:53;3917:9;3904:23;3936:31;3961:5;3936:31;:::i;:::-;3986:5;-1:-1:-1;4043:2:1;4028:18;;4015:32;4056:33;4015:32;4056:33;:::i;:::-;4108:7;-1:-1:-1;4162:2:1;4147:18;;4134:32;;-1:-1:-1;4213:2:1;4198:18;;4185:32;;-1:-1:-1;4268:3:1;4253:19;;4240:33;-1:-1:-1;;;;;4285:30:1;;4282:50;;;4328:1;4325;4318:12;4282:50;4351:49;4392:7;4383:6;4372:9;4368:22;4351:49;:::i;4411:1133::-;4538:6;4546;4554;4562;4570;4578;4586;4594;4647:3;4635:9;4626:7;4622:23;4618:33;4615:53;;;4664:1;4661;4654:12;4615:53;4703:9;4690:23;4722:31;4747:5;4722:31;:::i;:::-;4772:5;-1:-1:-1;4829:2:1;4814:18;;4801:32;4842:33;4801:32;4842:33;:::i;:::-;4894:7;-1:-1:-1;4948:2:1;4933:18;;4920:32;;-1:-1:-1;4999:2:1;4984:18;;4971:32;;-1:-1:-1;5054:3:1;5039:19;;5026:33;-1:-1:-1;;;;;5108:14:1;;;5105:34;;;5135:1;5132;5125:12;5105:34;5174:58;5224:7;5215:6;5204:9;5200:22;5174:58;:::i;:::-;5251:8;;-1:-1:-1;5148:84:1;-1:-1:-1;5339:3:1;5324:19;;5311:33;;-1:-1:-1;5356:16:1;;;5353:36;;;5385:1;5382;5375:12;5353:36;;5424:60;5476:7;5465:8;5454:9;5450:24;5424:60;:::i;:::-;4411:1133;;;;-1:-1:-1;4411:1133:1;;-1:-1:-1;4411:1133:1;;;;;;5503:8;-1:-1:-1;;;4411:1133:1:o;5549:483::-;5642:6;5650;5703:2;5691:9;5682:7;5678:23;5674:32;5671:52;;;5719:1;5716;5709:12;5671:52;5758:9;5745:23;5777:31;5802:5;5777:31;:::i;:::-;5827:5;-1:-1:-1;5883:2:1;5868:18;;5855:32;-1:-1:-1;;;;;5899:30:1;;5896:50;;;5942:1;5939;5932:12;5896:50;5965:61;6018:7;6009:6;5998:9;5994:22;5965:61;:::i;:::-;5955:71;;;5549:483;;;;;:::o;6037:929::-;6182:6;6190;6198;6206;6259:3;6247:9;6238:7;6234:23;6230:33;6227:53;;;6276:1;6273;6266:12;6227:53;6315:9;6302:23;6334:31;6359:5;6334:31;:::i;:::-;6384:5;-1:-1:-1;6440:2:1;6425:18;;6412:32;-1:-1:-1;;;;;6493:14:1;;;6490:34;;;6520:1;6517;6510:12;6490:34;6543:61;6596:7;6587:6;6576:9;6572:22;6543:61;:::i;:::-;6533:71;;6657:2;6646:9;6642:18;6629:32;6613:48;;6686:2;6676:8;6673:16;6670:36;;;6702:1;6699;6692:12;6670:36;6725:63;6780:7;6769:8;6758:9;6754:24;6725:63;:::i;:::-;6715:73;;6841:2;6830:9;6826:18;6813:32;6797:48;;6870:2;6860:8;6857:16;6854:36;;;6886:1;6883;6876:12;6854:36;;6909:51;6952:7;6941:8;6930:9;6926:24;6909:51;:::i;:::-;6899:61;;;6037:929;;;;;;;:::o;6971:416::-;7036:6;7044;7097:2;7085:9;7076:7;7072:23;7068:32;7065:52;;;7113:1;7110;7103:12;7065:52;7152:9;7139:23;7171:31;7196:5;7171:31;:::i;:::-;7221:5;-1:-1:-1;7278:2:1;7263:18;;7250:32;7320:15;;7313:23;7301:36;;7291:64;;7351:1;7348;7341:12;7392:315;7460:6;7468;7521:2;7509:9;7500:7;7496:23;7492:32;7489:52;;;7537:1;7534;7527:12;7489:52;7576:9;7563:23;7595:31;7620:5;7595:31;:::i;:::-;7645:5;7697:2;7682:18;;;;7669:32;;-1:-1:-1;;;7392:315:1:o;7712:592::-;7807:6;7815;7823;7831;7884:3;7872:9;7863:7;7859:23;7855:33;7852:53;;;7901:1;7898;7891:12;7852:53;7940:9;7927:23;7959:31;7984:5;7959:31;:::i;:::-;8009:5;-1:-1:-1;8061:2:1;8046:18;;8033:32;;-1:-1:-1;8112:2:1;8097:18;;8084:32;;-1:-1:-1;8167:2:1;8152:18;;8139:32;-1:-1:-1;;;;;8183:30:1;;8180:50;;;8226:1;8223;8216:12;8180:50;8249:49;8290:7;8281:6;8270:9;8266:22;8249:49;:::i;8309:2032::-;8571:6;8579;8587;8595;8603;8611;8619;8627;8635;8643;8651:7;8660;8714:3;8702:9;8693:7;8689:23;8685:33;8682:53;;;8731:1;8728;8721:12;8682:53;-1:-1:-1;;;;;8763:9:1;8750:23;8747:47;8744:67;;;8807:1;8804;8797:12;8744:67;8846:87;8925:7;8912:9;8899:23;8888:9;8884:39;8846:87;:::i;:::-;8952:8;;-1:-1:-1;8979:8:1;-1:-1:-1;;;;;;9030:2:1;9015:18;;9002:32;8999:56;8996:76;;;9068:1;9065;9058:12;8996:76;9107:96;9195:7;9188:2;9177:9;9173:18;9160:32;9149:9;9145:48;9107:96;:::i;:::-;9222:8;;-1:-1:-1;9249:8:1;-1:-1:-1;;;;;;9300:2:1;9285:18;;9272:32;9269:56;9266:76;;;9338:1;9335;9328:12;9266:76;9377:96;9465:7;9458:2;9447:9;9443:18;9430:32;9419:9;9415:48;9377:96;:::i;:::-;9492:8;;-1:-1:-1;9519:8:1;-1:-1:-1;;;;;;9570:2:1;9555:18;;9542:32;9539:56;9536:76;;;9608:1;9605;9598:12;9536:76;9647:96;9735:7;9728:2;9717:9;9713:18;9700:32;9689:9;9685:48;9647:96;:::i;:::-;9762:8;;-1:-1:-1;9789:8:1;-1:-1:-1;;;;;;9840:3:1;9825:19;;9812:33;9809:57;9806:77;;;9879:1;9876;9869:12;9806:77;9918:97;10007:7;9999:3;9988:9;9984:19;9971:33;9960:9;9956:49;9918:97;:::i;:::-;10034:8;;-1:-1:-1;10061:8:1;-1:-1:-1;;;;;;10112:3:1;10097:19;;10084:33;10081:57;10078:77;;;10151:1;10148;10141:12;10078:77;10192:85;10269:7;10261:3;10250:9;10246:19;10233:33;10222:9;10218:49;10192:85;:::i;:::-;10297:9;10286:20;;10326:9;10315:20;;;;8309:2032;;;;;;;;;;;;;;:::o;10346:1226::-;10464:6;10472;10525:2;10513:9;10504:7;10500:23;10496:32;10493:52;;;10541:1;10538;10531:12;10493:52;10581:9;10568:23;-1:-1:-1;;;;;10651:2:1;10643:6;10640:14;10637:34;;;10667:1;10664;10657:12;10637:34;10705:6;10694:9;10690:22;10680:32;;10750:7;10743:4;10739:2;10735:13;10731:27;10721:55;;10772:1;10769;10762:12;10721:55;10808:2;10795:16;10830:4;10854:60;10870:43;10910:2;10870:43;:::i;10854:60::-;10936:3;10960:2;10955:3;10948:15;10988:2;10983:3;10979:12;10972:19;;11019:2;11015;11011:11;11067:7;11062:2;11056;11053:1;11049:10;11045:2;11041:19;11037:28;11034:41;11031:61;;;11088:1;11085;11078:12;11031:61;11110:1;11101:10;;11120:238;11134:2;11131:1;11128:9;11120:238;;;11205:3;11192:17;11222:31;11247:5;11222:31;:::i;:::-;11266:18;;11152:1;11145:9;;;;;11304:12;;;;11336;;11120:238;;;-1:-1:-1;11377:5:1;-1:-1:-1;;11420:18:1;;11407:32;;-1:-1:-1;;11451:16:1;;;11448:36;;;11480:1;11477;11470:12;11448:36;;11503:63;11558:7;11547:8;11536:9;11532:24;11503:63;:::i;11577:746::-;11684:6;11692;11700;11708;11761:2;11749:9;11740:7;11736:23;11732:32;11729:52;;;11777:1;11774;11767:12;11729:52;11817:9;11804:23;-1:-1:-1;;;;;11887:2:1;11879:6;11876:14;11873:34;;;11903:1;11900;11893:12;11873:34;11942:70;12004:7;11995:6;11984:9;11980:22;11942:70;:::i;:::-;12031:8;;-1:-1:-1;11916:96:1;-1:-1:-1;12119:2:1;12104:18;;12091:32;;-1:-1:-1;12135:16:1;;;12132:36;;;12164:1;12161;12154:12;12132:36;;12203:60;12255:7;12244:8;12233:9;12229:24;12203:60;:::i;:::-;11577:746;;;;-1:-1:-1;12282:8:1;-1:-1:-1;;;;11577:746:1:o;12328:245::-;12386:6;12439:2;12427:9;12418:7;12414:23;12410:32;12407:52;;;12455:1;12452;12445:12;12407:52;12494:9;12481:23;12513:30;12537:5;12513:30;:::i;12578:249::-;12647:6;12700:2;12688:9;12679:7;12675:23;12671:32;12668:52;;;12716:1;12713;12706:12;12668:52;12748:9;12742:16;12767:30;12791:5;12767:30;:::i;12832:280::-;12931:6;12984:2;12972:9;12963:7;12959:23;12955:32;12952:52;;;13000:1;12997;12990:12;12952:52;13032:9;13026:16;13051:31;13076:5;13051:31;:::i;13117:180::-;13176:6;13229:2;13217:9;13208:7;13204:23;13200:32;13197:52;;;13245:1;13242;13235:12;13197:52;-1:-1:-1;13268:23:1;;13117:180;-1:-1:-1;13117:180:1:o;13302:478::-;13382:6;13390;13398;13451:2;13439:9;13430:7;13426:23;13422:32;13419:52;;;13467:1;13464;13457:12;13419:52;13503:9;13490:23;13480:33;;13564:2;13553:9;13549:18;13536:32;-1:-1:-1;;;;;13583:6:1;13580:30;13577:50;;;13623:1;13620;13613:12;13577:50;13662:58;13712:7;13703:6;13692:9;13688:22;13662:58;:::i;:::-;13302:478;;13739:8;;-1:-1:-1;13636:84:1;;-1:-1:-1;;;;13302:478:1:o;13785:435::-;13838:3;13876:5;13870:12;13903:6;13898:3;13891:19;13929:4;13958:2;13953:3;13949:12;13942:19;;13995:2;13988:5;13984:14;14016:1;14026:169;14040:6;14037:1;14034:13;14026:169;;;14101:13;;14089:26;;14135:12;;;;14170:15;;;;14062:1;14055:9;14026:169;;;-1:-1:-1;14211:3:1;;13785:435;-1:-1:-1;;;;;13785:435:1:o;14225:471::-;14266:3;14304:5;14298:12;14331:6;14326:3;14319:19;14356:1;14366:162;14380:6;14377:1;14374:13;14366:162;;;14442:4;14498:13;;;14494:22;;14488:29;14470:11;;;14466:20;;14459:59;14395:12;14366:162;;;14546:6;14543:1;14540:13;14537:87;;;14612:1;14605:4;14596:6;14591:3;14587:16;14583:27;14576:38;14537:87;-1:-1:-1;14678:2:1;14657:15;-1:-1:-1;;14653:29:1;14644:39;;;;14685:4;14640:50;;14225:471;-1:-1:-1;;14225:471:1:o;14909:826::-;-1:-1:-1;;;;;15306:15:1;;;15288:34;;15358:15;;15353:2;15338:18;;15331:43;15268:3;15405:2;15390:18;;15383:31;;;15231:4;;15437:57;;15474:19;;15466:6;15437:57;:::i;:::-;15542:9;15534:6;15530:22;15525:2;15514:9;15510:18;15503:50;15576:44;15613:6;15605;15576:44;:::i;:::-;15562:58;;15669:9;15661:6;15657:22;15651:3;15640:9;15636:19;15629:51;15697:32;15722:6;15714;15697:32;:::i;:::-;15689:40;14909:826;-1:-1:-1;;;;;;;;14909:826:1:o;15740:560::-;-1:-1:-1;;;;;16037:15:1;;;16019:34;;16089:15;;16084:2;16069:18;;16062:43;16136:2;16121:18;;16114:34;;;16179:2;16164:18;;16157:34;;;15999:3;16222;16207:19;;16200:32;;;15962:4;;16249:45;;16274:19;;16266:6;16249:45;:::i;:::-;16241:53;15740:560;-1:-1:-1;;;;;;;15740:560:1:o;16305:261::-;16484:2;16473:9;16466:21;16447:4;16504:56;16556:2;16545:9;16541:18;16533:6;16504:56;:::i;16571:465::-;16828:2;16817:9;16810:21;16791:4;16854:56;16906:2;16895:9;16891:18;16883:6;16854:56;:::i;:::-;16958:9;16950:6;16946:22;16941:2;16930:9;16926:18;16919:50;16986:44;17023:6;17015;16986:44;:::i;:::-;16978:52;16571:465;-1:-1:-1;;;;;16571:465:1:o;17233:219::-;17382:2;17371:9;17364:21;17345:4;17402:44;17442:2;17431:9;17427:18;17419:6;17402:44;:::i;19113:348::-;19315:2;19297:21;;;19354:2;19334:18;;;19327:30;19393:26;19388:2;19373:18;;19366:54;19452:2;19437:18;;19113:348::o;22744:402::-;22946:2;22928:21;;;22985:2;22965:18;;;22958:30;23024:34;23019:2;23004:18;;22997:62;-1:-1:-1;;;23090:2:1;23075:18;;23068:36;23136:3;23121:19;;22744:402::o;24417:522::-;24495:4;24501:6;24561:11;24548:25;24655:2;24651:7;24640:8;24624:14;24620:29;24616:43;24596:18;24592:68;24582:96;;24674:1;24671;24664:12;24582:96;24701:33;;24753:20;;;-1:-1:-1;;;;;;24785:30:1;;24782:50;;;24828:1;24825;24818:12;24782:50;24861:4;24849:17;;-1:-1:-1;24892:14:1;24888:27;;;24878:38;;24875:58;;;24929:1;24926;24919:12;24944:275;25015:2;25009:9;25080:2;25061:13;;-1:-1:-1;;25057:27:1;25045:40;;-1:-1:-1;;;;;25100:34:1;;25136:22;;;25097:62;25094:88;;;25162:18;;:::i;:::-;25198:2;25191:22;24944:275;;-1:-1:-1;24944:275:1:o;25224:183::-;25284:4;-1:-1:-1;;;;;25309:6:1;25306:30;25303:56;;;25339:18;;:::i;:::-;-1:-1:-1;25384:1:1;25380:14;25396:4;25376:25;;25224:183::o;25412:128::-;25452:3;25483:1;25479:6;25476:1;25473:13;25470:39;;;25489:18;;:::i;:::-;-1:-1:-1;25525:9:1;;25412:128::o;25545:125::-;25585:4;25613:1;25610;25607:8;25604:34;;;25618:18;;:::i;:::-;-1:-1:-1;25655:9:1;;25545:125::o;25675:380::-;25754:1;25750:12;;;;25797;;;25818:61;;25872:4;25864:6;25860:17;25850:27;;25818:61;25925:2;25917:6;25914:14;25894:18;25891:38;25888:161;;;25971:10;25966:3;25962:20;25959:1;25952:31;26006:4;26003:1;25996:15;26034:4;26031:1;26024:15;25888:161;;25675:380;;;:::o;26060:135::-;26099:3;-1:-1:-1;;26120:17:1;;26117:43;;;26140:18;;:::i;:::-;-1:-1:-1;26187:1:1;26176:13;;26060:135::o;26200:127::-;26261:10;26256:3;26252:20;26249:1;26242:31;26292:4;26289:1;26282:15;26316:4;26313:1;26306:15;26332:127;26393:10;26388:3;26384:20;26381:1;26374:31;26424:4;26421:1;26414:15;26448:4;26445:1;26438:15;26464:127;26525:10;26520:3;26516:20;26513:1;26506:31;26556:4;26553:1;26546:15;26580:4;26577:1;26570:15;26596:131;-1:-1:-1;;;;;26671:31:1;;26661:42;;26651:70;;26717:1;26714;26707:12;26651:70;26596:131;:::o;26732:::-;-1:-1:-1;;;;;;26806:32:1;;26796:43;;26786:71;;26853:1;26850;26843:12

Swarm Source

ipfs://76bf1bfc0b7d973c0b2ae5c9324a626bd9eb6112b3807a9d861e5379e82e874d
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.