ETH Price: $3,387.70 (-1.57%)
Gas: 2 Gwei

Token

GnomZ (GNOMZ)
 

Overview

Max Total Supply

5,555 GNOMZ

Holders

2,597

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 GNOMZ
0x7e0c1d963b4c8d017950c9bc8070bccb2ad9560e
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:
GnomZ

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

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

pragma solidity >=0.8.9 <0.9.0;

import "./ERC721A.sol";
import "./Ownable.sol";
import "./ReentrancyGuard.sol";
import "./Strings.sol";           

contract GnomZ is ERC721A, Ownable, ReentrancyGuard {
  using Strings for uint256;

  string public uriPrefix = '';
  string public uriSuffix = '.json';
  string public hiddenMetadataUri;

  uint256 public cost = 0.0055 ether;
  uint256 public maxSupply = 5555;
  uint256 public maxMintAmount = 10;
  uint256 public maxFreeMintPerWalletAmount = 1;

  bool public revealed = true;
  bool public paused = true;

  constructor(
    string memory _tokenName,
    string memory _tokenSymbol,
    string memory _hiddenMetadataUri
  ) ERC721A(_tokenName, _tokenSymbol) {
    setHiddenMetadataUri(_hiddenMetadataUri);
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(!paused, "The contract is paused!");
    require(totalSupply() + _mintAmount <= maxSupply, "Max supply exceeded!");
    require(tx.origin == msg.sender, "The caller is another contract");
    require(
      _mintAmount > 0 && numberMinted(msg.sender) + _mintAmount <= maxMintAmount,
       "Invalid mint amount!"
    );
    _;
  }

  modifier mintPriceCompliance(uint256 _mintAmount) {
    uint256 costToSubtract = 0;
    
    if (numberMinted(msg.sender) < maxFreeMintPerWalletAmount) {
      uint256 freeMintsLeft = maxFreeMintPerWalletAmount - numberMinted(msg.sender);
      costToSubtract = cost * freeMintsLeft;
    }
   
    require(msg.value >= cost * _mintAmount - costToSubtract, "Insufficient funds!");
    _;
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
    _safeMint(_msgSender(), _mintAmount);
  }
  
  function mintForAddress(uint256 _mintAmount, address _receiver) public onlyOwner {
    require(totalSupply() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _safeMint(_receiver, _mintAmount);
  }

  function _startTokenId() internal view virtual override returns (uint256) {
    return 1;
  }

  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token");

    if (revealed == false) {
      return hiddenMetadataUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
        : '';
  }

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setMaxMintAmount(uint256 _maxMintAmount) public onlyOwner {
    maxMintAmount = _maxMintAmount;
  }

  function setmaxFreeMintPerWalletAmount(uint256 _maxFreeMintPerWalletAmount) public onlyOwner {
    maxFreeMintPerWalletAmount = _maxFreeMintPerWalletAmount;
  }

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

   function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function withdraw() public onlyOwner nonReentrant {
    uint256 artistPayment = address(this).balance * 43 / 100;
    uint256 marketerPayment = address(this).balance * 43 / 100;

    (bool artistSuccess, ) = payable(0xE17f470F2E6Fb137815959809eEaF082A927c361).call{value: artistPayment}('');
    require(artistSuccess);

    (bool marketerSuccess, ) = payable(0x0dfa2abD152fcc466f58ECfa772d9EDF9EF55F0a).call{value: marketerPayment}('');
    require(marketerSuccess);

    (bool devSuccess, ) = payable(0x728283D08eFB53f7314cB2c425090B43927A32ad).call{value: address(this).balance}('');
    require(devSuccess);
  }

  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }
}

File 1 of 7: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 2 of 7: ERC721A.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

import './IERC721A.sol';

/**
 * @dev ERC721 token receiver interface.
 */
interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is IERC721A {
    // Mask of an entry in packed address data.
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant BITMASK_BURNED = 1 << 224;
    
    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;

    // The tokenId of the next token to be minted.
    uint256 private _currentIndex;

    // The number of tokens burned.
    uint256 private _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned.
    // See `_packedOwnershipOf` implementation for details.
    //
    // Bits Layout:
    // - [0..159]   `addr`
    // - [160..223] `startTimestamp`
    // - [224]      `burned`
    // - [225]      `nextInitialized`
    mapping(uint256 => uint256) private _packedOwnerships;

    // Mapping owner address to address data.
    //
    // Bits Layout:
    // - [0..63]    `balance`
    // - [64..127]  `numberMinted`
    // - [128..191] `numberBurned`
    // - [192..255] `aux`
    mapping(address => uint256) private _packedAddressData;

    // Mapping from token ID to approved address.
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * @dev Returns the starting token ID. 
     * To change the starting token ID, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Returns the next token ID to be minted.
     */
    function _nextTokenId() internal view returns (uint256) {
        return _currentIndex;
    }

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count. 
     * To get the total number of tokens minted, please see `_totalMinted`.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * @dev Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to `_startTokenId()`
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @dev Returns the total number of tokens burned.
     */
    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        // The interface IDs are constants representing the first 4 bytes of the XOR of
        // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
        // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> BITPOS_AUX);
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly { // Cast aux without masking.
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    /**
     * Returns the packed ownership data of `tokenId`.
     */
    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & BITMASK_BURNED == 0) {
                        // Invariant:
                        // There will always be an ownership that has an address and is not burned
                        // before an ownership that does not have an address and is not burned.
                        // Hence, curr will not underflow.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed is zero.
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * Returns the unpacked `TokenOwnership` struct from `packed`.
     */
    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP);
        ownership.burned = packed & BITMASK_BURNED != 0;
    }

    /**
     * Returns the unpacked `TokenOwnership` struct at `index`.
     */
    function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    /**
     * @dev Initializes the ownership slot minted at `index` for efficiency purposes.
     */
    function _initializeOwnershipAt(uint256 index) internal {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev Casts the address to uint256 without masking.
     */
    function _addressToUint256(address value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    /**
     * @dev Casts the boolean to uint256 without branching.
     */
    function _boolToUint256(bool value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = address(uint160(_packedOwnershipOf(tokenId)));
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();

        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.code.length != 0) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
            isApprovedForAll(from, _msgSenderERC721A()) ||
            getApproved(tokenId) == _msgSenderERC721A());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
                isApprovedForAll(from, _msgSenderERC721A()) ||
                getApproved(tokenId) == _msgSenderERC721A());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;

            // Updates:
            // - `address` to the last owner.
            // - `startTimestamp` to the timestamp of burning.
            // - `burned` to `true`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(from) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_BURNED | 
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Returns the message sender (defaults to `msg.sender`).
     *
     * If you are writing GSN compatible contracts, you need to override this function.
     */
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit), 
            // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
            // We will need 1 32-byte word to store the length, 
            // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
            ptr := add(mload(0x40), 128)
            // Update the free memory pointer to allocate.
            mstore(0x40, ptr)

            // Cache the end of the memory to calculate the length later.
            let end := ptr

            // We write the string from the rightmost digit to the leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // Costs a bit more than early returning for the zero case,
            // but cheaper in terms of deployment and overall runtime costs.
            for { 
                // Initialize and perform the first pass without check.
                let temp := value
                // Move the pointer 1 byte leftwards to point to an empty character slot.
                ptr := sub(ptr, 1)
                // Write the character to the pointer. 48 is the ASCII index of '0'.
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp { 
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
            } { // Body of the for loop.
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }
            
            let length := sub(end, ptr)
            // Move the pointer 32 bytes leftwards to make room for the length.
            ptr := sub(ptr, 32)
            // Store the length.
            mstore(ptr, length)
        }
    }
}

File 4 of 7: IERC721A.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     *
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);

    // ==============================
    //            IERC165
    // ==============================

    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    // ==============================
    //            IERC721
    // ==============================

    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    // ==============================
    //        IERC721Metadata
    // ==============================

    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 5 of 7: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 6 of 7: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMintPerWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFreeMintPerWalletAmount","type":"uint256"}],"name":"setmaxFreeMintPerWalletAmount","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":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600a90805190602001906200002b92919062000338565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200007992919062000338565b5066138a388a43c000600d556115b3600e55600a600f5560016010556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff021916908315150217905550348015620000d857600080fd5b506040516200439c3803806200439c8339818101604052810190620000fe919062000585565b828281600290805190602001906200011892919062000338565b5080600390805190602001906200013192919062000338565b50620001426200018c60201b60201c565b60008190555050506200016a6200015e6200019560201b60201c565b6200019d60201b60201c565b600160098190555062000183816200026360201b60201c565b50505062000726565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002736200019560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002996200030e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e9906200069f565b60405180910390fd5b80600c90805190602001906200030a92919062000338565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034690620006f0565b90600052602060002090601f0160209004810192826200036a5760008555620003b6565b82601f106200038557805160ff1916838001178555620003b6565b82800160010185558215620003b6579182015b82811115620003b557825182559160200191906001019062000398565b5b509050620003c59190620003c9565b5090565b5b80821115620003e4576000816000905550600101620003ca565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004518262000406565b810181811067ffffffffffffffff8211171562000473576200047262000417565b5b80604052505050565b600062000488620003e8565b905062000496828262000446565b919050565b600067ffffffffffffffff821115620004b957620004b862000417565b5b620004c48262000406565b9050602081019050919050565b60005b83811015620004f1578082015181840152602081019050620004d4565b8381111562000501576000848401525b50505050565b60006200051e62000518846200049b565b6200047c565b9050828152602081018484840111156200053d576200053c62000401565b5b6200054a848285620004d1565b509392505050565b600082601f8301126200056a5762000569620003fc565b5b81516200057c84826020860162000507565b91505092915050565b600080600060608486031215620005a157620005a0620003f2565b5b600084015167ffffffffffffffff811115620005c257620005c1620003f7565b5b620005d08682870162000552565b935050602084015167ffffffffffffffff811115620005f457620005f3620003f7565b5b620006028682870162000552565b925050604084015167ffffffffffffffff811115620006265762000625620003f7565b5b620006348682870162000552565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620006876020836200063e565b915062000694826200064f565b602082019050919050565b60006020820190508181036000830152620006ba8162000678565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200070957607f821691505b6020821081141562000720576200071f620006c1565b5b50919050565b613c6680620007366000396000f3fe6080604052600436106102255760003560e01c806362b99ad411610123578063a22cb465116100ab578063dc33e6811161006f578063dc33e681146107c0578063e0a80853146107fd578063e985e9c514610826578063efbd73f414610863578063f2fde38b1461088c57610225565b8063a22cb465146106db578063a45ba8e714610704578063b88d4fde1461072f578063c87b56dd14610758578063d5abeb011461079557610225565b80637ec4a659116100f25780637ec4a659146106175780638da5cb5b1461064057806391ae45341461066b57806395d89b4114610694578063a0712d68146106bf57610225565b806362b99ad41461055b5780636352211e1461058657806370a08231146105c3578063715018a61461060057610225565b806318160ddd116101b157806344a0d68a1161017557806344a0d68a146104885780634fdd43cb146104b157806351830227146104da5780635503a0e8146105055780635c975abb1461053057610225565b806318160ddd146103c9578063239c70ae146103f457806323b872dd1461041f5780633ccfd60b1461044857806342842e0e1461045f57610225565b8063095ea7b3116101f8578063095ea7b3146102f8578063126fa6a91461032157806313faede61461034c57806316ba10e01461037757806316c38b3c146103a057610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063088a4ed0146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612cc3565b6108b5565b60405161025e9190612d0b565b60405180910390f35b34801561027357600080fd5b5061027c610947565b6040516102899190612dbf565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190612e17565b6109d9565b6040516102c69190612e85565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190612e17565b610a55565b005b34801561030457600080fd5b5061031f600480360381019061031a9190612ecc565b610adb565b005b34801561032d57600080fd5b50610336610c82565b6040516103439190612f1b565b60405180910390f35b34801561035857600080fd5b50610361610c88565b60405161036e9190612f1b565b60405180910390f35b34801561038357600080fd5b5061039e6004803603810190610399919061306b565b610c8e565b005b3480156103ac57600080fd5b506103c760048036038101906103c291906130e0565b610d24565b005b3480156103d557600080fd5b506103de610dbd565b6040516103eb9190612f1b565b60405180910390f35b34801561040057600080fd5b50610409610dd4565b6040516104169190612f1b565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061310d565b610dda565b005b34801561045457600080fd5b5061045d610dea565b005b34801561046b57600080fd5b506104866004803603810190610481919061310d565b61109b565b005b34801561049457600080fd5b506104af60048036038101906104aa9190612e17565b6110bb565b005b3480156104bd57600080fd5b506104d860048036038101906104d3919061306b565b611141565b005b3480156104e657600080fd5b506104ef6111d7565b6040516104fc9190612d0b565b60405180910390f35b34801561051157600080fd5b5061051a6111ea565b6040516105279190612dbf565b60405180910390f35b34801561053c57600080fd5b50610545611278565b6040516105529190612d0b565b60405180910390f35b34801561056757600080fd5b5061057061128b565b60405161057d9190612dbf565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a89190612e17565b611319565b6040516105ba9190612e85565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190613160565b61132b565b6040516105f79190612f1b565b60405180910390f35b34801561060c57600080fd5b506106156113e4565b005b34801561062357600080fd5b5061063e6004803603810190610639919061306b565b61146c565b005b34801561064c57600080fd5b50610655611502565b6040516106629190612e85565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d9190612e17565b61152c565b005b3480156106a057600080fd5b506106a96115b2565b6040516106b69190612dbf565b60405180910390f35b6106d960048036038101906106d49190612e17565b611644565b005b3480156106e757600080fd5b5061070260048036038101906106fd919061318d565b611871565b005b34801561071057600080fd5b506107196119e9565b6040516107269190612dbf565b60405180910390f35b34801561073b57600080fd5b506107566004803603810190610751919061326e565b611a77565b005b34801561076457600080fd5b5061077f600480360381019061077a9190612e17565b611aea565b60405161078c9190612dbf565b60405180910390f35b3480156107a157600080fd5b506107aa611c43565b6040516107b79190612f1b565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190613160565b611c49565b6040516107f49190612f1b565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906130e0565b611c5b565b005b34801561083257600080fd5b5061084d600480360381019061084891906132f1565b611cf4565b60405161085a9190612d0b565b60405180910390f35b34801561086f57600080fd5b5061088a60048036038101906108859190613331565b611d88565b005b34801561089857600080fd5b506108b360048036038101906108ae9190613160565b611e69565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091057506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109405750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610956906133a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610982906133a0565b80156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b5050505050905090565b60006109e482611f61565b610a1a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610a5d611fc0565b73ffffffffffffffffffffffffffffffffffffffff16610a7b611502565b73ffffffffffffffffffffffffffffffffffffffff1614610ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac89061341e565b60405180910390fd5b80600f8190555050565b6000610ae682611fc8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6d612096565b73ffffffffffffffffffffffffffffffffffffffff1614610bd057610b9981610b94612096565b611cf4565b610bcf576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60105481565b600d5481565b610c96611fc0565b73ffffffffffffffffffffffffffffffffffffffff16610cb4611502565b73ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d019061341e565b60405180910390fd5b80600b9080519060200190610d20929190612bb4565b5050565b610d2c611fc0565b73ffffffffffffffffffffffffffffffffffffffff16610d4a611502565b73ffffffffffffffffffffffffffffffffffffffff1614610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d979061341e565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b6000610dc761209e565b6001546000540303905090565b600f5481565b610de58383836120a7565b505050565b610df2611fc0565b73ffffffffffffffffffffffffffffffffffffffff16610e10611502565b73ffffffffffffffffffffffffffffffffffffffff1614610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d9061341e565b60405180910390fd5b60026009541415610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea39061348a565b60405180910390fd5b600260098190555060006064602b47610ec591906134d9565b610ecf9190613562565b905060006064602b47610ee291906134d9565b610eec9190613562565b9050600073e17f470f2e6fb137815959809eeaf082a927c36173ffffffffffffffffffffffffffffffffffffffff1683604051610f28906135c4565b60006040518083038185875af1925050503d8060008114610f65576040519150601f19603f3d011682016040523d82523d6000602084013e610f6a565b606091505b5050905080610f7857600080fd5b6000730dfa2abd152fcc466f58ecfa772d9edf9ef55f0a73ffffffffffffffffffffffffffffffffffffffff1683604051610fb2906135c4565b60006040518083038185875af1925050503d8060008114610fef576040519150601f19603f3d011682016040523d82523d6000602084013e610ff4565b606091505b505090508061100257600080fd5b600073728283d08efb53f7314cb2c425090b43927a32ad73ffffffffffffffffffffffffffffffffffffffff164760405161103c906135c4565b60006040518083038185875af1925050503d8060008114611079576040519150601f19603f3d011682016040523d82523d6000602084013e61107e565b606091505b505090508061108c57600080fd5b50505050506001600981905550565b6110b683838360405180602001604052806000815250611a77565b505050565b6110c3611fc0565b73ffffffffffffffffffffffffffffffffffffffff166110e1611502565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e9061341e565b60405180910390fd5b80600d8190555050565b611149611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611167611502565b73ffffffffffffffffffffffffffffffffffffffff16146111bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b49061341e565b60405180910390fd5b80600c90805190602001906111d3929190612bb4565b5050565b601160009054906101000a900460ff1681565b600b80546111f7906133a0565b80601f0160208091040260200160405190810160405280929190818152602001828054611223906133a0565b80156112705780601f1061124557610100808354040283529160200191611270565b820191906000526020600020905b81548152906001019060200180831161125357829003601f168201915b505050505081565b601160019054906101000a900460ff1681565b600a8054611298906133a0565b80601f01602080910402602001604051908101604052809291908181526020018280546112c4906133a0565b80156113115780601f106112e657610100808354040283529160200191611311565b820191906000526020600020905b8154815290600101906020018083116112f457829003601f168201915b505050505081565b600061132482611fc8565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611393576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6113ec611fc0565b73ffffffffffffffffffffffffffffffffffffffff1661140a611502565b73ffffffffffffffffffffffffffffffffffffffff1614611460576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114579061341e565b60405180910390fd5b61146a6000612451565b565b611474611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611492611502565b73ffffffffffffffffffffffffffffffffffffffff16146114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df9061341e565b60405180910390fd5b80600a90805190602001906114fe929190612bb4565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611534611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611552611502565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f9061341e565b60405180910390fd5b8060108190555050565b6060600380546115c1906133a0565b80601f01602080910402602001604051908101604052809291908181526020018280546115ed906133a0565b801561163a5780601f1061160f5761010080835404028352916020019161163a565b820191906000526020600020905b81548152906001019060200180831161161d57829003601f168201915b5050505050905090565b80601160019054906101000a900460ff1615611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90613625565b60405180910390fd5b600e54816116a1610dbd565b6116ab9190613645565b11156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e3906136e7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190613753565b60405180910390fd5b60008111801561177f5750600f548161177233611c49565b61177c9190613645565b11155b6117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b5906137bf565b60405180910390fd5b8160006010546117cd33611c49565b10156117ff5760006117de33611c49565b6010546117eb91906137df565b905080600d546117fb91906134d9565b9150505b8082600d5461180e91906134d9565b61181891906137df565b34101561185a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118519061385f565b60405180910390fd5b61186b611865611fc0565b85612517565b50505050565b611879612096565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118de576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006118eb612096565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611998612096565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119dd9190612d0b565b60405180910390a35050565b600c80546119f6906133a0565b80601f0160208091040260200160405190810160405280929190818152602001828054611a22906133a0565b8015611a6f5780601f10611a4457610100808354040283529160200191611a6f565b820191906000526020600020905b815481529060010190602001808311611a5257829003601f168201915b505050505081565b611a828484846120a7565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611ae457611aad84848484612535565b611ae3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060611af582611f61565b611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b906138f1565b60405180910390fd5b60001515601160009054906101000a900460ff1615151415611be257600c8054611b5d906133a0565b80601f0160208091040260200160405190810160405280929190818152602001828054611b89906133a0565b8015611bd65780601f10611bab57610100808354040283529160200191611bd6565b820191906000526020600020905b815481529060010190602001808311611bb957829003601f168201915b50505050509050611c3e565b6000611bec612695565b90506000815111611c0c5760405180602001604052806000815250611c3a565b80611c1684612727565b600b604051602001611c2a939291906139e1565b6040516020818303038152906040525b9150505b919050565b600e5481565b6000611c5482612888565b9050919050565b611c63611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611c81611502565b73ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce9061341e565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d90611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611dae611502565b73ffffffffffffffffffffffffffffffffffffffff1614611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb9061341e565b60405180910390fd5b600e5482611e10610dbd565b611e1a9190613645565b1115611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e52906136e7565b60405180910390fd5b611e658183612517565b5050565b611e71611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611e8f611502565b73ffffffffffffffffffffffffffffffffffffffff1614611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc9061341e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90613a84565b60405180910390fd5b611f5e81612451565b50565b600081611f6c61209e565b11158015611f7b575060005482105b8015611fb9575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60008082905080611fd761209e565b1161205f5760005481101561205e5760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216141561205c575b6000811415612052576004600083600190039350838152602001908152602001600020549050612027565b8092505050612091565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b60006001905090565b60006120b282611fc8565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612119576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661213a612096565b73ffffffffffffffffffffffffffffffffffffffff161480612169575061216885612163612096565b611cf4565b5b806121ae5750612177612096565b73ffffffffffffffffffffffffffffffffffffffff16612196846109d9565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806121e7576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561224e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61225b85858560016128df565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b612358866128e5565b1717600460008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831614156123e25760006001840190506000600460008381526020019081526020016000205414156123e05760005481146123df578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461244a85858560016128ef565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125318282604051806020016040528060008152506128f5565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261255b612096565b8786866040518563ffffffff1660e01b815260040161257d9493929190613af9565b602060405180830381600087803b15801561259757600080fd5b505af19250505080156125c857506040513d601f19601f820116820180604052508101906125c59190613b5a565b60015b612642573d80600081146125f8576040519150601f19603f3d011682016040523d82523d6000602084013e6125fd565b606091505b5060008151141561263a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a80546126a4906133a0565b80601f01602080910402602001604051908101604052809291908181526020018280546126d0906133a0565b801561271d5780601f106126f25761010080835404028352916020019161271d565b820191906000526020600020905b81548152906001019060200180831161270057829003601f168201915b5050505050905090565b6060600082141561276f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612883565b600082905060005b600082146127a157808061278a90613b87565b915050600a8261279a9190613562565b9150612777565b60008167ffffffffffffffff8111156127bd576127bc612f40565b5b6040519080825280601f01601f1916602001820160405280156127ef5781602001600182028036833780820191505090505b5090505b6000851461287c5760018261280891906137df565b9150600a856128179190613bd0565b60306128239190613645565b60f81b81838151811061283957612838613c01565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128759190613562565b94506127f3565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612962576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141561299d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129aa60008583866128df565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612a0f60018514612baa565b901b60a042901b612a1f866128e5565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612b23575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ad36000878480600101955087612535565b612b09576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612a64578260005414612b1e57600080fd5b612b8e565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612b24575b816000819055505050612ba460008583866128ef565b50505050565b6000819050919050565b828054612bc0906133a0565b90600052602060002090601f016020900481019282612be25760008555612c29565b82601f10612bfb57805160ff1916838001178555612c29565b82800160010185558215612c29579182015b82811115612c28578251825591602001919060010190612c0d565b5b509050612c369190612c3a565b5090565b5b80821115612c53576000816000905550600101612c3b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ca081612c6b565b8114612cab57600080fd5b50565b600081359050612cbd81612c97565b92915050565b600060208284031215612cd957612cd8612c61565b5b6000612ce784828501612cae565b91505092915050565b60008115159050919050565b612d0581612cf0565b82525050565b6000602082019050612d206000830184612cfc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d60578082015181840152602081019050612d45565b83811115612d6f576000848401525b50505050565b6000601f19601f8301169050919050565b6000612d9182612d26565b612d9b8185612d31565b9350612dab818560208601612d42565b612db481612d75565b840191505092915050565b60006020820190508181036000830152612dd98184612d86565b905092915050565b6000819050919050565b612df481612de1565b8114612dff57600080fd5b50565b600081359050612e1181612deb565b92915050565b600060208284031215612e2d57612e2c612c61565b5b6000612e3b84828501612e02565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e6f82612e44565b9050919050565b612e7f81612e64565b82525050565b6000602082019050612e9a6000830184612e76565b92915050565b612ea981612e64565b8114612eb457600080fd5b50565b600081359050612ec681612ea0565b92915050565b60008060408385031215612ee357612ee2612c61565b5b6000612ef185828601612eb7565b9250506020612f0285828601612e02565b9150509250929050565b612f1581612de1565b82525050565b6000602082019050612f306000830184612f0c565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f7882612d75565b810181811067ffffffffffffffff82111715612f9757612f96612f40565b5b80604052505050565b6000612faa612c57565b9050612fb68282612f6f565b919050565b600067ffffffffffffffff821115612fd657612fd5612f40565b5b612fdf82612d75565b9050602081019050919050565b82818337600083830152505050565b600061300e61300984612fbb565b612fa0565b90508281526020810184848401111561302a57613029612f3b565b5b613035848285612fec565b509392505050565b600082601f83011261305257613051612f36565b5b8135613062848260208601612ffb565b91505092915050565b60006020828403121561308157613080612c61565b5b600082013567ffffffffffffffff81111561309f5761309e612c66565b5b6130ab8482850161303d565b91505092915050565b6130bd81612cf0565b81146130c857600080fd5b50565b6000813590506130da816130b4565b92915050565b6000602082840312156130f6576130f5612c61565b5b6000613104848285016130cb565b91505092915050565b60008060006060848603121561312657613125612c61565b5b600061313486828701612eb7565b935050602061314586828701612eb7565b925050604061315686828701612e02565b9150509250925092565b60006020828403121561317657613175612c61565b5b600061318484828501612eb7565b91505092915050565b600080604083850312156131a4576131a3612c61565b5b60006131b285828601612eb7565b92505060206131c3858286016130cb565b9150509250929050565b600067ffffffffffffffff8211156131e8576131e7612f40565b5b6131f182612d75565b9050602081019050919050565b600061321161320c846131cd565b612fa0565b90508281526020810184848401111561322d5761322c612f3b565b5b613238848285612fec565b509392505050565b600082601f83011261325557613254612f36565b5b81356132658482602086016131fe565b91505092915050565b6000806000806080858703121561328857613287612c61565b5b600061329687828801612eb7565b94505060206132a787828801612eb7565b93505060406132b887828801612e02565b925050606085013567ffffffffffffffff8111156132d9576132d8612c66565b5b6132e587828801613240565b91505092959194509250565b6000806040838503121561330857613307612c61565b5b600061331685828601612eb7565b925050602061332785828601612eb7565b9150509250929050565b6000806040838503121561334857613347612c61565b5b600061335685828601612e02565b925050602061336785828601612eb7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133b857607f821691505b602082108114156133cc576133cb613371565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613408602083612d31565b9150613413826133d2565b602082019050919050565b60006020820190508181036000830152613437816133fb565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613474601f83612d31565b915061347f8261343e565b602082019050919050565b600060208201905081810360008301526134a381613467565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134e482612de1565b91506134ef83612de1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613528576135276134aa565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061356d82612de1565b915061357883612de1565b92508261358857613587613533565b5b828204905092915050565b600081905092915050565b50565b60006135ae600083613593565b91506135b98261359e565b600082019050919050565b60006135cf826135a1565b9150819050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b600061360f601783612d31565b915061361a826135d9565b602082019050919050565b6000602082019050818103600083015261363e81613602565b9050919050565b600061365082612de1565b915061365b83612de1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136905761368f6134aa565b5b828201905092915050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006136d1601483612d31565b91506136dc8261369b565b602082019050919050565b60006020820190508181036000830152613700816136c4565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b600061373d601e83612d31565b915061374882613707565b602082019050919050565b6000602082019050818103600083015261376c81613730565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006137a9601483612d31565b91506137b482613773565b602082019050919050565b600060208201905081810360008301526137d88161379c565b9050919050565b60006137ea82612de1565b91506137f583612de1565b925082821015613808576138076134aa565b5b828203905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6000613849601383612d31565b915061385482613813565b602082019050919050565b600060208201905081810360008301526138788161383c565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006138db602f83612d31565b91506138e68261387f565b604082019050919050565b6000602082019050818103600083015261390a816138ce565b9050919050565b600081905092915050565b600061392782612d26565b6139318185613911565b9350613941818560208601612d42565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461396f816133a0565b6139798186613911565b9450600182166000811461399457600181146139a5576139d8565b60ff198316865281860193506139d8565b6139ae8561394d565b60005b838110156139d0578154818901526001820191506020810190506139b1565b838801955050505b50505092915050565b60006139ed828661391c565b91506139f9828561391c565b9150613a058284613962565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a6e602683612d31565b9150613a7982613a12565b604082019050919050565b60006020820190508181036000830152613a9d81613a61565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613acb82613aa4565b613ad58185613aaf565b9350613ae5818560208601612d42565b613aee81612d75565b840191505092915050565b6000608082019050613b0e6000830187612e76565b613b1b6020830186612e76565b613b286040830185612f0c565b8181036060830152613b3a8184613ac0565b905095945050505050565b600081519050613b5481612c97565b92915050565b600060208284031215613b7057613b6f612c61565b5b6000613b7e84828501613b45565b91505092915050565b6000613b9282612de1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc557613bc46134aa565b5b600182019050919050565b6000613bdb82612de1565b9150613be683612de1565b925082613bf657613bf5613533565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220d818a4ff1a5a917907bd3b7bbf16241d1fb879d9a914f562357836dff7753e9164736f6c63430008090033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005476e6f6d5a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005474e4f4d5a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e697066733a2f2f626166796265696137727267636c70656135666e73337670676f6d6661626b7761666f356975796d776f77326c72356d363370667a6c35376369752f68696464656e2e6a736f6e000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102255760003560e01c806362b99ad411610123578063a22cb465116100ab578063dc33e6811161006f578063dc33e681146107c0578063e0a80853146107fd578063e985e9c514610826578063efbd73f414610863578063f2fde38b1461088c57610225565b8063a22cb465146106db578063a45ba8e714610704578063b88d4fde1461072f578063c87b56dd14610758578063d5abeb011461079557610225565b80637ec4a659116100f25780637ec4a659146106175780638da5cb5b1461064057806391ae45341461066b57806395d89b4114610694578063a0712d68146106bf57610225565b806362b99ad41461055b5780636352211e1461058657806370a08231146105c3578063715018a61461060057610225565b806318160ddd116101b157806344a0d68a1161017557806344a0d68a146104885780634fdd43cb146104b157806351830227146104da5780635503a0e8146105055780635c975abb1461053057610225565b806318160ddd146103c9578063239c70ae146103f457806323b872dd1461041f5780633ccfd60b1461044857806342842e0e1461045f57610225565b8063095ea7b3116101f8578063095ea7b3146102f8578063126fa6a91461032157806313faede61461034c57806316ba10e01461037757806316c38b3c146103a057610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063088a4ed0146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612cc3565b6108b5565b60405161025e9190612d0b565b60405180910390f35b34801561027357600080fd5b5061027c610947565b6040516102899190612dbf565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190612e17565b6109d9565b6040516102c69190612e85565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190612e17565b610a55565b005b34801561030457600080fd5b5061031f600480360381019061031a9190612ecc565b610adb565b005b34801561032d57600080fd5b50610336610c82565b6040516103439190612f1b565b60405180910390f35b34801561035857600080fd5b50610361610c88565b60405161036e9190612f1b565b60405180910390f35b34801561038357600080fd5b5061039e6004803603810190610399919061306b565b610c8e565b005b3480156103ac57600080fd5b506103c760048036038101906103c291906130e0565b610d24565b005b3480156103d557600080fd5b506103de610dbd565b6040516103eb9190612f1b565b60405180910390f35b34801561040057600080fd5b50610409610dd4565b6040516104169190612f1b565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061310d565b610dda565b005b34801561045457600080fd5b5061045d610dea565b005b34801561046b57600080fd5b506104866004803603810190610481919061310d565b61109b565b005b34801561049457600080fd5b506104af60048036038101906104aa9190612e17565b6110bb565b005b3480156104bd57600080fd5b506104d860048036038101906104d3919061306b565b611141565b005b3480156104e657600080fd5b506104ef6111d7565b6040516104fc9190612d0b565b60405180910390f35b34801561051157600080fd5b5061051a6111ea565b6040516105279190612dbf565b60405180910390f35b34801561053c57600080fd5b50610545611278565b6040516105529190612d0b565b60405180910390f35b34801561056757600080fd5b5061057061128b565b60405161057d9190612dbf565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a89190612e17565b611319565b6040516105ba9190612e85565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190613160565b61132b565b6040516105f79190612f1b565b60405180910390f35b34801561060c57600080fd5b506106156113e4565b005b34801561062357600080fd5b5061063e6004803603810190610639919061306b565b61146c565b005b34801561064c57600080fd5b50610655611502565b6040516106629190612e85565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d9190612e17565b61152c565b005b3480156106a057600080fd5b506106a96115b2565b6040516106b69190612dbf565b60405180910390f35b6106d960048036038101906106d49190612e17565b611644565b005b3480156106e757600080fd5b5061070260048036038101906106fd919061318d565b611871565b005b34801561071057600080fd5b506107196119e9565b6040516107269190612dbf565b60405180910390f35b34801561073b57600080fd5b506107566004803603810190610751919061326e565b611a77565b005b34801561076457600080fd5b5061077f600480360381019061077a9190612e17565b611aea565b60405161078c9190612dbf565b60405180910390f35b3480156107a157600080fd5b506107aa611c43565b6040516107b79190612f1b565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190613160565b611c49565b6040516107f49190612f1b565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906130e0565b611c5b565b005b34801561083257600080fd5b5061084d600480360381019061084891906132f1565b611cf4565b60405161085a9190612d0b565b60405180910390f35b34801561086f57600080fd5b5061088a60048036038101906108859190613331565b611d88565b005b34801561089857600080fd5b506108b360048036038101906108ae9190613160565b611e69565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091057506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109405750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610956906133a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610982906133a0565b80156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b5050505050905090565b60006109e482611f61565b610a1a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610a5d611fc0565b73ffffffffffffffffffffffffffffffffffffffff16610a7b611502565b73ffffffffffffffffffffffffffffffffffffffff1614610ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac89061341e565b60405180910390fd5b80600f8190555050565b6000610ae682611fc8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6d612096565b73ffffffffffffffffffffffffffffffffffffffff1614610bd057610b9981610b94612096565b611cf4565b610bcf576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60105481565b600d5481565b610c96611fc0565b73ffffffffffffffffffffffffffffffffffffffff16610cb4611502565b73ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d019061341e565b60405180910390fd5b80600b9080519060200190610d20929190612bb4565b5050565b610d2c611fc0565b73ffffffffffffffffffffffffffffffffffffffff16610d4a611502565b73ffffffffffffffffffffffffffffffffffffffff1614610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d979061341e565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b6000610dc761209e565b6001546000540303905090565b600f5481565b610de58383836120a7565b505050565b610df2611fc0565b73ffffffffffffffffffffffffffffffffffffffff16610e10611502565b73ffffffffffffffffffffffffffffffffffffffff1614610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d9061341e565b60405180910390fd5b60026009541415610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea39061348a565b60405180910390fd5b600260098190555060006064602b47610ec591906134d9565b610ecf9190613562565b905060006064602b47610ee291906134d9565b610eec9190613562565b9050600073e17f470f2e6fb137815959809eeaf082a927c36173ffffffffffffffffffffffffffffffffffffffff1683604051610f28906135c4565b60006040518083038185875af1925050503d8060008114610f65576040519150601f19603f3d011682016040523d82523d6000602084013e610f6a565b606091505b5050905080610f7857600080fd5b6000730dfa2abd152fcc466f58ecfa772d9edf9ef55f0a73ffffffffffffffffffffffffffffffffffffffff1683604051610fb2906135c4565b60006040518083038185875af1925050503d8060008114610fef576040519150601f19603f3d011682016040523d82523d6000602084013e610ff4565b606091505b505090508061100257600080fd5b600073728283d08efb53f7314cb2c425090b43927a32ad73ffffffffffffffffffffffffffffffffffffffff164760405161103c906135c4565b60006040518083038185875af1925050503d8060008114611079576040519150601f19603f3d011682016040523d82523d6000602084013e61107e565b606091505b505090508061108c57600080fd5b50505050506001600981905550565b6110b683838360405180602001604052806000815250611a77565b505050565b6110c3611fc0565b73ffffffffffffffffffffffffffffffffffffffff166110e1611502565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e9061341e565b60405180910390fd5b80600d8190555050565b611149611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611167611502565b73ffffffffffffffffffffffffffffffffffffffff16146111bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b49061341e565b60405180910390fd5b80600c90805190602001906111d3929190612bb4565b5050565b601160009054906101000a900460ff1681565b600b80546111f7906133a0565b80601f0160208091040260200160405190810160405280929190818152602001828054611223906133a0565b80156112705780601f1061124557610100808354040283529160200191611270565b820191906000526020600020905b81548152906001019060200180831161125357829003601f168201915b505050505081565b601160019054906101000a900460ff1681565b600a8054611298906133a0565b80601f01602080910402602001604051908101604052809291908181526020018280546112c4906133a0565b80156113115780601f106112e657610100808354040283529160200191611311565b820191906000526020600020905b8154815290600101906020018083116112f457829003601f168201915b505050505081565b600061132482611fc8565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611393576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6113ec611fc0565b73ffffffffffffffffffffffffffffffffffffffff1661140a611502565b73ffffffffffffffffffffffffffffffffffffffff1614611460576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114579061341e565b60405180910390fd5b61146a6000612451565b565b611474611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611492611502565b73ffffffffffffffffffffffffffffffffffffffff16146114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df9061341e565b60405180910390fd5b80600a90805190602001906114fe929190612bb4565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611534611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611552611502565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f9061341e565b60405180910390fd5b8060108190555050565b6060600380546115c1906133a0565b80601f01602080910402602001604051908101604052809291908181526020018280546115ed906133a0565b801561163a5780601f1061160f5761010080835404028352916020019161163a565b820191906000526020600020905b81548152906001019060200180831161161d57829003601f168201915b5050505050905090565b80601160019054906101000a900460ff1615611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90613625565b60405180910390fd5b600e54816116a1610dbd565b6116ab9190613645565b11156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e3906136e7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190613753565b60405180910390fd5b60008111801561177f5750600f548161177233611c49565b61177c9190613645565b11155b6117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b5906137bf565b60405180910390fd5b8160006010546117cd33611c49565b10156117ff5760006117de33611c49565b6010546117eb91906137df565b905080600d546117fb91906134d9565b9150505b8082600d5461180e91906134d9565b61181891906137df565b34101561185a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118519061385f565b60405180910390fd5b61186b611865611fc0565b85612517565b50505050565b611879612096565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118de576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006118eb612096565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611998612096565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119dd9190612d0b565b60405180910390a35050565b600c80546119f6906133a0565b80601f0160208091040260200160405190810160405280929190818152602001828054611a22906133a0565b8015611a6f5780601f10611a4457610100808354040283529160200191611a6f565b820191906000526020600020905b815481529060010190602001808311611a5257829003601f168201915b505050505081565b611a828484846120a7565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611ae457611aad84848484612535565b611ae3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060611af582611f61565b611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b906138f1565b60405180910390fd5b60001515601160009054906101000a900460ff1615151415611be257600c8054611b5d906133a0565b80601f0160208091040260200160405190810160405280929190818152602001828054611b89906133a0565b8015611bd65780601f10611bab57610100808354040283529160200191611bd6565b820191906000526020600020905b815481529060010190602001808311611bb957829003601f168201915b50505050509050611c3e565b6000611bec612695565b90506000815111611c0c5760405180602001604052806000815250611c3a565b80611c1684612727565b600b604051602001611c2a939291906139e1565b6040516020818303038152906040525b9150505b919050565b600e5481565b6000611c5482612888565b9050919050565b611c63611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611c81611502565b73ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce9061341e565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d90611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611dae611502565b73ffffffffffffffffffffffffffffffffffffffff1614611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb9061341e565b60405180910390fd5b600e5482611e10610dbd565b611e1a9190613645565b1115611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e52906136e7565b60405180910390fd5b611e658183612517565b5050565b611e71611fc0565b73ffffffffffffffffffffffffffffffffffffffff16611e8f611502565b73ffffffffffffffffffffffffffffffffffffffff1614611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc9061341e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90613a84565b60405180910390fd5b611f5e81612451565b50565b600081611f6c61209e565b11158015611f7b575060005482105b8015611fb9575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60008082905080611fd761209e565b1161205f5760005481101561205e5760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216141561205c575b6000811415612052576004600083600190039350838152602001908152602001600020549050612027565b8092505050612091565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b60006001905090565b60006120b282611fc8565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612119576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661213a612096565b73ffffffffffffffffffffffffffffffffffffffff161480612169575061216885612163612096565b611cf4565b5b806121ae5750612177612096565b73ffffffffffffffffffffffffffffffffffffffff16612196846109d9565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806121e7576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561224e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61225b85858560016128df565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b612358866128e5565b1717600460008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831614156123e25760006001840190506000600460008381526020019081526020016000205414156123e05760005481146123df578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461244a85858560016128ef565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125318282604051806020016040528060008152506128f5565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261255b612096565b8786866040518563ffffffff1660e01b815260040161257d9493929190613af9565b602060405180830381600087803b15801561259757600080fd5b505af19250505080156125c857506040513d601f19601f820116820180604052508101906125c59190613b5a565b60015b612642573d80600081146125f8576040519150601f19603f3d011682016040523d82523d6000602084013e6125fd565b606091505b5060008151141561263a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a80546126a4906133a0565b80601f01602080910402602001604051908101604052809291908181526020018280546126d0906133a0565b801561271d5780601f106126f25761010080835404028352916020019161271d565b820191906000526020600020905b81548152906001019060200180831161270057829003601f168201915b5050505050905090565b6060600082141561276f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612883565b600082905060005b600082146127a157808061278a90613b87565b915050600a8261279a9190613562565b9150612777565b60008167ffffffffffffffff8111156127bd576127bc612f40565b5b6040519080825280601f01601f1916602001820160405280156127ef5781602001600182028036833780820191505090505b5090505b6000851461287c5760018261280891906137df565b9150600a856128179190613bd0565b60306128239190613645565b60f81b81838151811061283957612838613c01565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128759190613562565b94506127f3565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612962576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141561299d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129aa60008583866128df565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612a0f60018514612baa565b901b60a042901b612a1f866128e5565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612b23575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ad36000878480600101955087612535565b612b09576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612a64578260005414612b1e57600080fd5b612b8e565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612b24575b816000819055505050612ba460008583866128ef565b50505050565b6000819050919050565b828054612bc0906133a0565b90600052602060002090601f016020900481019282612be25760008555612c29565b82601f10612bfb57805160ff1916838001178555612c29565b82800160010185558215612c29579182015b82811115612c28578251825591602001919060010190612c0d565b5b509050612c369190612c3a565b5090565b5b80821115612c53576000816000905550600101612c3b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ca081612c6b565b8114612cab57600080fd5b50565b600081359050612cbd81612c97565b92915050565b600060208284031215612cd957612cd8612c61565b5b6000612ce784828501612cae565b91505092915050565b60008115159050919050565b612d0581612cf0565b82525050565b6000602082019050612d206000830184612cfc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d60578082015181840152602081019050612d45565b83811115612d6f576000848401525b50505050565b6000601f19601f8301169050919050565b6000612d9182612d26565b612d9b8185612d31565b9350612dab818560208601612d42565b612db481612d75565b840191505092915050565b60006020820190508181036000830152612dd98184612d86565b905092915050565b6000819050919050565b612df481612de1565b8114612dff57600080fd5b50565b600081359050612e1181612deb565b92915050565b600060208284031215612e2d57612e2c612c61565b5b6000612e3b84828501612e02565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e6f82612e44565b9050919050565b612e7f81612e64565b82525050565b6000602082019050612e9a6000830184612e76565b92915050565b612ea981612e64565b8114612eb457600080fd5b50565b600081359050612ec681612ea0565b92915050565b60008060408385031215612ee357612ee2612c61565b5b6000612ef185828601612eb7565b9250506020612f0285828601612e02565b9150509250929050565b612f1581612de1565b82525050565b6000602082019050612f306000830184612f0c565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f7882612d75565b810181811067ffffffffffffffff82111715612f9757612f96612f40565b5b80604052505050565b6000612faa612c57565b9050612fb68282612f6f565b919050565b600067ffffffffffffffff821115612fd657612fd5612f40565b5b612fdf82612d75565b9050602081019050919050565b82818337600083830152505050565b600061300e61300984612fbb565b612fa0565b90508281526020810184848401111561302a57613029612f3b565b5b613035848285612fec565b509392505050565b600082601f83011261305257613051612f36565b5b8135613062848260208601612ffb565b91505092915050565b60006020828403121561308157613080612c61565b5b600082013567ffffffffffffffff81111561309f5761309e612c66565b5b6130ab8482850161303d565b91505092915050565b6130bd81612cf0565b81146130c857600080fd5b50565b6000813590506130da816130b4565b92915050565b6000602082840312156130f6576130f5612c61565b5b6000613104848285016130cb565b91505092915050565b60008060006060848603121561312657613125612c61565b5b600061313486828701612eb7565b935050602061314586828701612eb7565b925050604061315686828701612e02565b9150509250925092565b60006020828403121561317657613175612c61565b5b600061318484828501612eb7565b91505092915050565b600080604083850312156131a4576131a3612c61565b5b60006131b285828601612eb7565b92505060206131c3858286016130cb565b9150509250929050565b600067ffffffffffffffff8211156131e8576131e7612f40565b5b6131f182612d75565b9050602081019050919050565b600061321161320c846131cd565b612fa0565b90508281526020810184848401111561322d5761322c612f3b565b5b613238848285612fec565b509392505050565b600082601f83011261325557613254612f36565b5b81356132658482602086016131fe565b91505092915050565b6000806000806080858703121561328857613287612c61565b5b600061329687828801612eb7565b94505060206132a787828801612eb7565b93505060406132b887828801612e02565b925050606085013567ffffffffffffffff8111156132d9576132d8612c66565b5b6132e587828801613240565b91505092959194509250565b6000806040838503121561330857613307612c61565b5b600061331685828601612eb7565b925050602061332785828601612eb7565b9150509250929050565b6000806040838503121561334857613347612c61565b5b600061335685828601612e02565b925050602061336785828601612eb7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133b857607f821691505b602082108114156133cc576133cb613371565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613408602083612d31565b9150613413826133d2565b602082019050919050565b60006020820190508181036000830152613437816133fb565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613474601f83612d31565b915061347f8261343e565b602082019050919050565b600060208201905081810360008301526134a381613467565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134e482612de1565b91506134ef83612de1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613528576135276134aa565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061356d82612de1565b915061357883612de1565b92508261358857613587613533565b5b828204905092915050565b600081905092915050565b50565b60006135ae600083613593565b91506135b98261359e565b600082019050919050565b60006135cf826135a1565b9150819050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b600061360f601783612d31565b915061361a826135d9565b602082019050919050565b6000602082019050818103600083015261363e81613602565b9050919050565b600061365082612de1565b915061365b83612de1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136905761368f6134aa565b5b828201905092915050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006136d1601483612d31565b91506136dc8261369b565b602082019050919050565b60006020820190508181036000830152613700816136c4565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b600061373d601e83612d31565b915061374882613707565b602082019050919050565b6000602082019050818103600083015261376c81613730565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006137a9601483612d31565b91506137b482613773565b602082019050919050565b600060208201905081810360008301526137d88161379c565b9050919050565b60006137ea82612de1565b91506137f583612de1565b925082821015613808576138076134aa565b5b828203905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6000613849601383612d31565b915061385482613813565b602082019050919050565b600060208201905081810360008301526138788161383c565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006138db602f83612d31565b91506138e68261387f565b604082019050919050565b6000602082019050818103600083015261390a816138ce565b9050919050565b600081905092915050565b600061392782612d26565b6139318185613911565b9350613941818560208601612d42565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461396f816133a0565b6139798186613911565b9450600182166000811461399457600181146139a5576139d8565b60ff198316865281860193506139d8565b6139ae8561394d565b60005b838110156139d0578154818901526001820191506020810190506139b1565b838801955050505b50505092915050565b60006139ed828661391c565b91506139f9828561391c565b9150613a058284613962565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a6e602683612d31565b9150613a7982613a12565b604082019050919050565b60006020820190508181036000830152613a9d81613a61565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613acb82613aa4565b613ad58185613aaf565b9350613ae5818560208601612d42565b613aee81612d75565b840191505092915050565b6000608082019050613b0e6000830187612e76565b613b1b6020830186612e76565b613b286040830185612f0c565b8181036060830152613b3a8184613ac0565b905095945050505050565b600081519050613b5481612c97565b92915050565b600060208284031215613b7057613b6f612c61565b5b6000613b7e84828501613b45565b91505092915050565b6000613b9282612de1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc557613bc46134aa565b5b600182019050919050565b6000613bdb82612de1565b9150613be683612de1565b925082613bf657613bf5613533565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220d818a4ff1a5a917907bd3b7bbf16241d1fb879d9a914f562357836dff7753e9164736f6c63430008090033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005476e6f6d5a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005474e4f4d5a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e697066733a2f2f626166796265696137727267636c70656135666e73337670676f6d6661626b7761666f356975796d776f77326c72356d363370667a6c35376369752f68696464656e2e6a736f6e000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _tokenName (string): GnomZ
Arg [1] : _tokenSymbol (string): GNOMZ
Arg [2] : _hiddenMetadataUri (string): ipfs://bafybeia7rrgclpea5fns3vpgomfabkwafo5iuymwow2lr5m63pfzl57ciu/hidden.json

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 476e6f6d5a000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 474e4f4d5a000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000004e
Arg [8] : 697066733a2f2f626166796265696137727267636c70656135666e7333767067
Arg [9] : 6f6d6661626b7761666f356975796d776f77326c72356d363370667a6c353763
Arg [10] : 69752f68696464656e2e6a736f6e000000000000000000000000000000000000


Deployed Bytecode Sourcemap

182:3996:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4880:607:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9768:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11769:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2569:108:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11245:463:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;483:45:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;373:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3165:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3267:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3963:309:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;446:33:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12629:164:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3346:615:2;;;;;;;;;;;;;:::i;:::-;;12859:179:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2493:72:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2929:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;533:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;300:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;564:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;268:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9564:142:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5546:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:4;;;;;;;;;;;;;:::i;:::-;;3063:98:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1029:85:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2681:160:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9930:102:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1586:158:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12036:303:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;337:31:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13104:385:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2055:434:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;411:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3965:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2845:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12405:162:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1750:204:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1911:198:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4880:607:1;4965:4;5275:10;5260:25;;:11;:25;;;;:101;;;;5351:10;5336:25;;:11;:25;;;;5260:101;:177;;;;5427:10;5412:25;;:11;:25;;;;5260:177;5241:196;;4880:607;;;:::o;9768:98::-;9822:13;9854:5;9847:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9768:98;:::o;11769:200::-;11837:7;11861:16;11869:7;11861;:16::i;:::-;11856:64;;11886:34;;;;;;;;;;;;;;11856:64;11938:15;:24;11954:7;11938:24;;;;;;;;;;;;;;;;;;;;;11931:31;;11769:200;;;:::o;2569:108:2:-;1252:12:4;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2658:14:2::1;2642:13;:30;;;;2569:108:::0;:::o;11245:463:1:-;11317:13;11349:27;11368:7;11349:18;:27::i;:::-;11317:61;;11398:5;11392:11;;:2;:11;;;11388:48;;;11412:24;;;;;;;;;;;;;;11388:48;11474:5;11451:28;;:19;:17;:19::i;:::-;:28;;;11447:172;;11498:44;11515:5;11522:19;:17;:19::i;:::-;11498:16;:44::i;:::-;11493:126;;11569:35;;;;;;;;;;;;;;11493:126;11447:172;11656:2;11629:15;:24;11645:7;11629:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11693:7;11689:2;11673:28;;11682:5;11673:28;;;;;;;;;;;;11307:401;11245:463;;:::o;483:45:2:-;;;;:::o;373:34::-;;;;:::o;3165:98::-;1252:12:4;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3248:10:2::1;3236:9;:22;;;;;;;;;;;;:::i;:::-;;3165:98:::0;:::o;3267:75::-;1252:12:4;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3331:6:2::1;3322;;:15;;;;;;;;;;;;;;;;;;3267:75:::0;:::o;3963:309:1:-;4016:7;4240:15;:13;:15::i;:::-;4225:12;;4209:13;;:28;:46;4202:53;;3963:309;:::o;446:33:2:-;;;;:::o;12629:164:1:-;12758:28;12768:4;12774:2;12778:7;12758:9;:28::i;:::-;12629:164;;;:::o;3346:615:2:-;1252:12:4;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:5::1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;3402:21:2::2;3455:3;3450:2;3426:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;3402:56;;3464:23;3519:3;3514:2;3490:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;3464:58;;3530:18;3562:42;3554:56;;3618:13;3554:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3529:107;;;3650:13;3642:22;;;::::0;::::2;;3672:20;3706:42;3698:56;;3762:15;3698:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3671:111;;;3796:15;3788:24;;;::::0;::::2;;3820:15;3849:42;3841:56;;3905:21;3841:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3819:112;;;3945:10;3937:19;;;::::0;::::2;;3396:565;;;;;1701:1:5::1;2628:7;:22;;;;3346:615:2:o:0;12859:179:1:-;12992:39;13009:4;13015:2;13019:7;12992:39;;;;;;;;;;;;:16;:39::i;:::-;12859:179;;;:::o;2493:72:2:-;1252:12:4;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2555:5:2::1;2548:4;:12;;;;2493:72:::0;:::o;2929:130::-;1252:12:4;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3036:18:2::1;3016:17;:38;;;;;;;;;;;;:::i;:::-;;2929:130:::0;:::o;533:27::-;;;;;;;;;;;;;:::o;300:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;564:25::-;;;;;;;;;;;;;:::o;268:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9564:142:1:-;9628:7;9670:27;9689:7;9670:18;:27::i;:::-;9647:52;;9564:142;;;:::o;5546:221::-;5610:7;5650:1;5633:19;;:5;:19;;;5629:60;;;5661:28;;;;;;;;;;;;;;5629:60;1017:13;5706:18;:25;5725:5;5706:25;;;;;;;;;;;;;;;;:54;5699:61;;5546:221;;;:::o;1661:101:4:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;3063:98:2:-;1252:12:4;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3146:10:2::1;3134:9;:22;;;;;;;;;;;;:::i;:::-;;3063:98:::0;:::o;1029:85:4:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2681:160:2:-;1252:12:4;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2809:27:2::1;2780:26;:56;;;;2681:160:::0;:::o;9930:102:1:-;9986:13;10018:7;10011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9930:102;:::o;1586:158:2:-;1651:11;859:6;;;;;;;;;;;858:7;850:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;938:9;;923:11;907:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;899:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;999:10;986:23;;:9;:23;;;978:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1079:1;1065:11;:15;:74;;;;;1126:13;;1111:11;1084:24;1097:10;1084:12;:24::i;:::-;:38;;;;:::i;:::-;:55;;1065:74;1050:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;1684:11:::1;1248:22;1316:26;;1289:24;1302:10;1289:12;:24::i;:::-;:53;1285:196;;;1352:21;1405:24;1418:10;1405:12;:24::i;:::-;1376:26;;:53;;;;:::i;:::-;1352:77;;1461:13;1454:4;;:20;;;;:::i;:::-;1437:37;;1344:137;1285:196;1532:14;1518:11;1511:4;;:18;;;;:::i;:::-;:35;;;;:::i;:::-;1498:9;:48;;1490:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;1703:36:::2;1713:12;:10;:12::i;:::-;1727:11;1703:9;:36::i;:::-;1242:340:::1;1182:1;1586:158:::0;;:::o;12036:303:1:-;12146:19;:17;:19::i;:::-;12134:31;;:8;:31;;;12130:61;;;12174:17;;;;;;;;;;;;;;12130:61;12254:8;12202:18;:39;12221:19;:17;:19::i;:::-;12202:39;;;;;;;;;;;;;;;:49;12242:8;12202:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;12313:8;12277:55;;12292:19;:17;:19::i;:::-;12277:55;;;12323:8;12277:55;;;;;;:::i;:::-;;;;;;;;12036:303;;:::o;337:31:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13104:385:1:-;13265:28;13275:4;13281:2;13285:7;13265:9;:28::i;:::-;13325:1;13307:2;:14;;;:19;13303:180;;13345:56;13376:4;13382:2;13386:7;13395:5;13345:30;:56::i;:::-;13340:143;;13428:40;;;;;;;;;;;;;;13340:143;13303:180;13104:385;;;;:::o;2055:434:2:-;2129:13;2158:17;2166:8;2158:7;:17::i;:::-;2150:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2250:5;2238:17;;:8;;;;;;;;;;;:17;;;2234:62;;;2272:17;2265:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2234:62;2302:28;2333:10;:8;:10::i;:::-;2302:41;;2387:1;2362:14;2356:28;:32;:128;;;;;;;;;;;;;;;;;2423:14;2439:19;:8;:17;:19::i;:::-;2460:9;2406:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2356:128;2349:135;;;2055:434;;;;:::o;411:31::-;;;;:::o;3965:105::-;4023:7;4045:20;4059:5;4045:13;:20::i;:::-;4038:27;;3965:105;;;:::o;2845:79::-;1252:12:4;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2913:6:2::1;2902:8;;:17;;;;;;;;;;;;;;;;;;2845:79:::0;:::o;12405:162:1:-;12502:4;12525:18;:25;12544:5;12525:25;;;;;;;;;;;;;;;:35;12551:8;12525:35;;;;;;;;;;;;;;;;;;;;;;;;;12518:42;;12405:162;;;;:::o;1750:204:2:-;1252:12:4;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1876:9:2::1;;1861:11;1845:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;1837:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1916:33;1926:9;1937:11;1916:9;:33::i;:::-;1750:204:::0;;:::o;1911:198:4:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;13735:268:1:-;13792:4;13846:7;13827:15;:13;:15::i;:::-;:26;;:65;;;;;13879:13;;13869:7;:23;13827:65;:150;;;;;13976:1;1769:8;13929:17;:26;13947:7;13929:26;;;;;;;;;;;;:43;:48;13827:150;13808:169;;13735:268;;;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;7141:1105:1:-;7208:7;7227:12;7242:7;7227:22;;7307:4;7288:15;:13;:15::i;:::-;:23;7284:898;;7340:13;;7333:4;:20;7329:853;;;7377:14;7394:17;:23;7412:4;7394:23;;;;;;;;;;;;7377:40;;7508:1;1769:8;7481:6;:23;:28;7477:687;;;7992:111;8009:1;7999:6;:11;7992:111;;;8051:17;:25;8069:6;;;;;;;8051:25;;;;;;;;;;;;8042:34;;7992:111;;;8135:6;8128:13;;;;;;7477:687;7355:827;7329:853;7284:898;8208:31;;;;;;;;;;;;;;7141:1105;;;;:::o;27360:103::-;27420:7;27446:10;27439:17;;27360:103;:::o;1958:93:2:-;2023:7;2045:1;2038:8;;1958:93;:::o;18835:2460:1:-;18945:27;18975;18994:7;18975:18;:27::i;:::-;18945:57;;19058:4;19017:45;;19033:19;19017:45;;;19013:86;;19071:28;;;;;;;;;;;;;;19013:86;19110:22;19159:4;19136:27;;:19;:17;:19::i;:::-;:27;;;:86;;;;19179:43;19196:4;19202:19;:17;:19::i;:::-;19179:16;:43::i;:::-;19136:86;:145;;;;19262:19;:17;:19::i;:::-;19238:43;;:20;19250:7;19238:11;:20::i;:::-;:43;;;19136:145;19110:172;;19298:17;19293:66;;19324:35;;;;;;;;;;;;;;19293:66;19387:1;19373:16;;:2;:16;;;19369:52;;;19398:23;;;;;;;;;;;;;;19369:52;19432:43;19454:4;19460:2;19464:7;19473:1;19432:21;:43::i;:::-;19545:15;:24;19561:7;19545:24;;;;;;;;;;;;19538:31;;;;;;;;;;;19930:18;:24;19949:4;19930:24;;;;;;;;;;;;;;;;19928:26;;;;;;;;;;;;19998:18;:22;20017:2;19998:22;;;;;;;;;;;;;;;;19996:24;;;;;;;;;;;2045:8;1656:3;20370:15;:41;;20329:21;20347:2;20329:17;:21::i;:::-;:83;:126;20284:17;:26;20302:7;20284:26;;;;;;;;;;;:171;;;;20622:1;2045:8;20572:19;:46;:51;20568:616;;;20643:19;20675:1;20665:7;:11;20643:33;;20830:1;20796:17;:30;20814:11;20796:30;;;;;;;;;;;;:35;20792:378;;;20932:13;;20917:11;:28;20913:239;;21110:19;21077:17;:30;21095:11;21077:30;;;;;;;;;;;:52;;;;20913:239;20792:378;20625:559;20568:616;21228:7;21224:2;21209:27;;21218:4;21209:27;;;;;;;;;;;;21246:42;21267:4;21273:2;21277:7;21286:1;21246:20;:42::i;:::-;18935:2360;;18835:2460;;;:::o;2263:187:4:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;14082:102:1:-;14150:27;14160:2;14164:8;14150:27;;;;;;;;;;;;:9;:27::i;:::-;14082:102;;:::o;24900:697::-;25058:4;25103:2;25078:45;;;25124:19;:17;:19::i;:::-;25145:4;25151:7;25160:5;25078:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25074:517;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25373:1;25356:6;:13;:18;25352:229;;;25401:40;;;;;;;;;;;;;;25352:229;25541:6;25535:13;25526:6;25522:2;25518:15;25511:38;25074:517;25244:54;;;25234:64;;;:6;:64;;;;25227:71;;;24900:697;;;;;;:::o;4074:102:2:-;4134:13;4162:9;4155:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4074:102;:::o;328:703:6:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;5844:174:1:-;5905:7;1017:13;1151:2;5932:18;:25;5951:5;5932:25;;;;;;;;;;;;;;;;:49;;5931:80;5924:87;;5844:174;;;:::o;26228:154::-;;;;;:::o;10824:144::-;10888:14;10947:5;10937:15;;10824:144;;;:::o;27023:153::-;;;;;:::o;14544:2184::-;14662:20;14685:13;;14662:36;;14726:1;14712:16;;:2;:16;;;14708:48;;;14737:19;;;;;;;;;;;;;;14708:48;14782:1;14770:8;:13;14766:44;;;14792:18;;;;;;;;;;;;;;14766:44;14821:61;14851:1;14855:2;14859:12;14873:8;14821:21;:61::i;:::-;15414:1;1151:2;15385:1;:25;;15384:31;15372:8;:44;15346:18;:22;15365:2;15346:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;1913:3;15805:29;15832:1;15820:8;:13;15805:14;:29::i;:::-;:56;;1656:3;15743:15;:41;;15702:21;15720:2;15702:17;:21::i;:::-;:83;:160;15652:17;:31;15670:12;15652:31;;;;;;;;;;;:210;;;;15877:20;15900:12;15877:35;;15926:11;15955:8;15940:12;:23;15926:37;;16000:1;15982:2;:14;;;:19;15978:622;;16021:308;16076:12;16072:2;16051:38;;16068:1;16051:38;;;;;;;;;;;;16116:69;16155:1;16159:2;16163:14;;;;;;16179:5;16116:30;:69::i;:::-;16111:172;;16220:40;;;;;;;;;;;;;;16111:172;16324:3;16309:12;:18;16021:308;;16408:12;16391:13;;:29;16387:43;;16422:8;;;16387:43;15978:622;;;16469:117;16524:14;;;;;;16520:2;16499:40;;16516:1;16499:40;;;;;;;;;;;;16581:3;16566:12;:18;16469:117;;15978:622;16629:12;16613:13;:28;;;;15129:1523;;16661:60;16690:1;16694:2;16698:12;16712:8;16661:20;:60::i;:::-;14652:2076;14544:2184;;;:::o;11050:138::-;11108:14;11167:5;11157:15;;11050:138;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:7:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:117::-;5399:1;5396;5389:12;5413:117;5522:1;5519;5512:12;5536:180;5584:77;5581:1;5574:88;5681:4;5678:1;5671:15;5705:4;5702:1;5695:15;5722:281;5805:27;5827:4;5805:27;:::i;:::-;5797:6;5793:40;5935:6;5923:10;5920:22;5899:18;5887:10;5884:34;5881:62;5878:88;;;5946:18;;:::i;:::-;5878:88;5986:10;5982:2;5975:22;5765:238;5722:281;;:::o;6009:129::-;6043:6;6070:20;;:::i;:::-;6060:30;;6099:33;6127:4;6119:6;6099:33;:::i;:::-;6009:129;;;:::o;6144:308::-;6206:4;6296:18;6288:6;6285:30;6282:56;;;6318:18;;:::i;:::-;6282:56;6356:29;6378:6;6356:29;:::i;:::-;6348:37;;6440:4;6434;6430:15;6422:23;;6144:308;;;:::o;6458:154::-;6542:6;6537:3;6532;6519:30;6604:1;6595:6;6590:3;6586:16;6579:27;6458:154;;;:::o;6618:412::-;6696:5;6721:66;6737:49;6779:6;6737:49;:::i;:::-;6721:66;:::i;:::-;6712:75;;6810:6;6803:5;6796:21;6848:4;6841:5;6837:16;6886:3;6877:6;6872:3;6868:16;6865:25;6862:112;;;6893:79;;:::i;:::-;6862:112;6983:41;7017:6;7012:3;7007;6983:41;:::i;:::-;6702:328;6618:412;;;;;:::o;7050:340::-;7106:5;7155:3;7148:4;7140:6;7136:17;7132:27;7122:122;;7163:79;;:::i;:::-;7122:122;7280:6;7267:20;7305:79;7380:3;7372:6;7365:4;7357:6;7353:17;7305:79;:::i;:::-;7296:88;;7112:278;7050:340;;;;:::o;7396:509::-;7465:6;7514:2;7502:9;7493:7;7489:23;7485:32;7482:119;;;7520:79;;:::i;:::-;7482:119;7668:1;7657:9;7653:17;7640:31;7698:18;7690:6;7687:30;7684:117;;;7720:79;;:::i;:::-;7684:117;7825:63;7880:7;7871:6;7860:9;7856:22;7825:63;:::i;:::-;7815:73;;7611:287;7396:509;;;;:::o;7911:116::-;7981:21;7996:5;7981:21;:::i;:::-;7974:5;7971:32;7961:60;;8017:1;8014;8007:12;7961:60;7911:116;:::o;8033:133::-;8076:5;8114:6;8101:20;8092:29;;8130:30;8154:5;8130:30;:::i;:::-;8033:133;;;;:::o;8172:323::-;8228:6;8277:2;8265:9;8256:7;8252:23;8248:32;8245:119;;;8283:79;;:::i;:::-;8245:119;8403:1;8428:50;8470:7;8461:6;8450:9;8446:22;8428:50;:::i;:::-;8418:60;;8374:114;8172:323;;;;:::o;8501:619::-;8578:6;8586;8594;8643:2;8631:9;8622:7;8618:23;8614:32;8611:119;;;8649:79;;:::i;:::-;8611:119;8769:1;8794:53;8839:7;8830:6;8819:9;8815:22;8794:53;:::i;:::-;8784:63;;8740:117;8896:2;8922:53;8967:7;8958:6;8947:9;8943:22;8922:53;:::i;:::-;8912:63;;8867:118;9024:2;9050:53;9095:7;9086:6;9075:9;9071:22;9050:53;:::i;:::-;9040:63;;8995:118;8501:619;;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:307::-;9996:4;10086:18;10078:6;10075:30;10072:56;;;10108:18;;:::i;:::-;10072:56;10146:29;10168:6;10146:29;:::i;:::-;10138:37;;10230:4;10224;10220:15;10212:23;;9935:307;;;:::o;10248:410::-;10325:5;10350:65;10366:48;10407:6;10366:48;:::i;:::-;10350:65;:::i;:::-;10341:74;;10438:6;10431:5;10424:21;10476:4;10469:5;10465:16;10514:3;10505:6;10500:3;10496:16;10493:25;10490:112;;;10521:79;;:::i;:::-;10490:112;10611:41;10645:6;10640:3;10635;10611:41;:::i;:::-;10331:327;10248:410;;;;;:::o;10677:338::-;10732:5;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10906:6;10893:20;10931:78;11005:3;10997:6;10990:4;10982:6;10978:17;10931:78;:::i;:::-;10922:87;;10738:277;10677:338;;;;:::o;11021:943::-;11116:6;11124;11132;11140;11189:3;11177:9;11168:7;11164:23;11160:33;11157:120;;;11196:79;;:::i;:::-;11157:120;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11727:2;11716:9;11712:18;11699:32;11758:18;11750:6;11747:30;11744:117;;;11780:79;;:::i;:::-;11744:117;11885:62;11939:7;11930:6;11919:9;11915:22;11885:62;:::i;:::-;11875:72;;11670:287;11021:943;;;;;;;:::o;11970:474::-;12038:6;12046;12095:2;12083:9;12074:7;12070:23;12066:32;12063:119;;;12101:79;;:::i;:::-;12063:119;12221:1;12246:53;12291:7;12282:6;12271:9;12267:22;12246:53;:::i;:::-;12236:63;;12192:117;12348:2;12374:53;12419:7;12410:6;12399:9;12395:22;12374:53;:::i;:::-;12364:63;;12319:118;11970:474;;;;;:::o;12450:::-;12518:6;12526;12575:2;12563:9;12554:7;12550:23;12546:32;12543:119;;;12581:79;;:::i;:::-;12543:119;12701:1;12726:53;12771:7;12762:6;12751:9;12747:22;12726:53;:::i;:::-;12716:63;;12672:117;12828:2;12854:53;12899:7;12890:6;12879:9;12875:22;12854:53;:::i;:::-;12844:63;;12799:118;12450:474;;;;;:::o;12930:180::-;12978:77;12975:1;12968:88;13075:4;13072:1;13065:15;13099:4;13096:1;13089:15;13116:320;13160:6;13197:1;13191:4;13187:12;13177:22;;13244:1;13238:4;13234:12;13265:18;13255:81;;13321:4;13313:6;13309:17;13299:27;;13255:81;13383:2;13375:6;13372:14;13352:18;13349:38;13346:84;;;13402:18;;:::i;:::-;13346:84;13167:269;13116:320;;;:::o;13442:182::-;13582:34;13578:1;13570:6;13566:14;13559:58;13442:182;:::o;13630:366::-;13772:3;13793:67;13857:2;13852:3;13793:67;:::i;:::-;13786:74;;13869:93;13958:3;13869:93;:::i;:::-;13987:2;13982:3;13978:12;13971:19;;13630:366;;;:::o;14002:419::-;14168:4;14206:2;14195:9;14191:18;14183:26;;14255:9;14249:4;14245:20;14241:1;14230:9;14226:17;14219:47;14283:131;14409:4;14283:131;:::i;:::-;14275:139;;14002:419;;;:::o;14427:181::-;14567:33;14563:1;14555:6;14551:14;14544:57;14427:181;:::o;14614:366::-;14756:3;14777:67;14841:2;14836:3;14777:67;:::i;:::-;14770:74;;14853:93;14942:3;14853:93;:::i;:::-;14971:2;14966:3;14962:12;14955:19;;14614:366;;;:::o;14986:419::-;15152:4;15190:2;15179:9;15175:18;15167:26;;15239:9;15233:4;15229:20;15225:1;15214:9;15210:17;15203:47;15267:131;15393:4;15267:131;:::i;:::-;15259:139;;14986:419;;;:::o;15411:180::-;15459:77;15456:1;15449:88;15556:4;15553:1;15546:15;15580:4;15577:1;15570:15;15597:348;15637:7;15660:20;15678:1;15660:20;:::i;:::-;15655:25;;15694:20;15712:1;15694:20;:::i;:::-;15689:25;;15882:1;15814:66;15810:74;15807:1;15804:81;15799:1;15792:9;15785:17;15781:105;15778:131;;;15889:18;;:::i;:::-;15778:131;15937:1;15934;15930:9;15919:20;;15597:348;;;;:::o;15951:180::-;15999:77;15996:1;15989:88;16096:4;16093:1;16086:15;16120:4;16117:1;16110:15;16137:185;16177:1;16194:20;16212:1;16194:20;:::i;:::-;16189:25;;16228:20;16246:1;16228:20;:::i;:::-;16223:25;;16267:1;16257:35;;16272:18;;:::i;:::-;16257:35;16314:1;16311;16307:9;16302:14;;16137:185;;;;:::o;16328:147::-;16429:11;16466:3;16451:18;;16328:147;;;;:::o;16481:114::-;;:::o;16601:398::-;16760:3;16781:83;16862:1;16857:3;16781:83;:::i;:::-;16774:90;;16873:93;16962:3;16873:93;:::i;:::-;16991:1;16986:3;16982:11;16975:18;;16601:398;;;:::o;17005:379::-;17189:3;17211:147;17354:3;17211:147;:::i;:::-;17204:154;;17375:3;17368:10;;17005:379;;;:::o;17390:173::-;17530:25;17526:1;17518:6;17514:14;17507:49;17390:173;:::o;17569:366::-;17711:3;17732:67;17796:2;17791:3;17732:67;:::i;:::-;17725:74;;17808:93;17897:3;17808:93;:::i;:::-;17926:2;17921:3;17917:12;17910:19;;17569:366;;;:::o;17941:419::-;18107:4;18145:2;18134:9;18130:18;18122:26;;18194:9;18188:4;18184:20;18180:1;18169:9;18165:17;18158:47;18222:131;18348:4;18222:131;:::i;:::-;18214:139;;17941:419;;;:::o;18366:305::-;18406:3;18425:20;18443:1;18425:20;:::i;:::-;18420:25;;18459:20;18477:1;18459:20;:::i;:::-;18454:25;;18613:1;18545:66;18541:74;18538:1;18535:81;18532:107;;;18619:18;;:::i;:::-;18532:107;18663:1;18660;18656:9;18649:16;;18366:305;;;;:::o;18677:170::-;18817:22;18813:1;18805:6;18801:14;18794:46;18677:170;:::o;18853:366::-;18995:3;19016:67;19080:2;19075:3;19016:67;:::i;:::-;19009:74;;19092:93;19181:3;19092:93;:::i;:::-;19210:2;19205:3;19201:12;19194:19;;18853:366;;;:::o;19225:419::-;19391:4;19429:2;19418:9;19414:18;19406:26;;19478:9;19472:4;19468:20;19464:1;19453:9;19449:17;19442:47;19506:131;19632:4;19506:131;:::i;:::-;19498:139;;19225:419;;;:::o;19650:180::-;19790:32;19786:1;19778:6;19774:14;19767:56;19650:180;:::o;19836:366::-;19978:3;19999:67;20063:2;20058:3;19999:67;:::i;:::-;19992:74;;20075:93;20164:3;20075:93;:::i;:::-;20193:2;20188:3;20184:12;20177:19;;19836:366;;;:::o;20208:419::-;20374:4;20412:2;20401:9;20397:18;20389:26;;20461:9;20455:4;20451:20;20447:1;20436:9;20432:17;20425:47;20489:131;20615:4;20489:131;:::i;:::-;20481:139;;20208:419;;;:::o;20633:170::-;20773:22;20769:1;20761:6;20757:14;20750:46;20633:170;:::o;20809:366::-;20951:3;20972:67;21036:2;21031:3;20972:67;:::i;:::-;20965:74;;21048:93;21137:3;21048:93;:::i;:::-;21166:2;21161:3;21157:12;21150:19;;20809:366;;;:::o;21181:419::-;21347:4;21385:2;21374:9;21370:18;21362:26;;21434:9;21428:4;21424:20;21420:1;21409:9;21405:17;21398:47;21462:131;21588:4;21462:131;:::i;:::-;21454:139;;21181:419;;;:::o;21606:191::-;21646:4;21666:20;21684:1;21666:20;:::i;:::-;21661:25;;21700:20;21718:1;21700:20;:::i;:::-;21695:25;;21739:1;21736;21733:8;21730:34;;;21744:18;;:::i;:::-;21730:34;21789:1;21786;21782:9;21774:17;;21606:191;;;;:::o;21803:169::-;21943:21;21939:1;21931:6;21927:14;21920:45;21803:169;:::o;21978:366::-;22120:3;22141:67;22205:2;22200:3;22141:67;:::i;:::-;22134:74;;22217:93;22306:3;22217:93;:::i;:::-;22335:2;22330:3;22326:12;22319:19;;21978:366;;;:::o;22350:419::-;22516:4;22554:2;22543:9;22539:18;22531:26;;22603:9;22597:4;22593:20;22589:1;22578:9;22574:17;22567:47;22631:131;22757:4;22631:131;:::i;:::-;22623:139;;22350:419;;;:::o;22775:234::-;22915:34;22911:1;22903:6;22899:14;22892:58;22984:17;22979:2;22971:6;22967:15;22960:42;22775:234;:::o;23015:366::-;23157:3;23178:67;23242:2;23237:3;23178:67;:::i;:::-;23171:74;;23254:93;23343:3;23254:93;:::i;:::-;23372:2;23367:3;23363:12;23356:19;;23015:366;;;:::o;23387:419::-;23553:4;23591:2;23580:9;23576:18;23568:26;;23640:9;23634:4;23630:20;23626:1;23615:9;23611:17;23604:47;23668:131;23794:4;23668:131;:::i;:::-;23660:139;;23387:419;;;:::o;23812:148::-;23914:11;23951:3;23936:18;;23812:148;;;;:::o;23966:377::-;24072:3;24100:39;24133:5;24100:39;:::i;:::-;24155:89;24237:6;24232:3;24155:89;:::i;:::-;24148:96;;24253:52;24298:6;24293:3;24286:4;24279:5;24275:16;24253:52;:::i;:::-;24330:6;24325:3;24321:16;24314:23;;24076:267;23966:377;;;;:::o;24349:141::-;24398:4;24421:3;24413:11;;24444:3;24441:1;24434:14;24478:4;24475:1;24465:18;24457:26;;24349:141;;;:::o;24520:845::-;24623:3;24660:5;24654:12;24689:36;24715:9;24689:36;:::i;:::-;24741:89;24823:6;24818:3;24741:89;:::i;:::-;24734:96;;24861:1;24850:9;24846:17;24877:1;24872:137;;;;25023:1;25018:341;;;;24839:520;;24872:137;24956:4;24952:9;24941;24937:25;24932:3;24925:38;24992:6;24987:3;24983:16;24976:23;;24872:137;;25018:341;25085:38;25117:5;25085:38;:::i;:::-;25145:1;25159:154;25173:6;25170:1;25167:13;25159:154;;;25247:7;25241:14;25237:1;25232:3;25228:11;25221:35;25297:1;25288:7;25284:15;25273:26;;25195:4;25192:1;25188:12;25183:17;;25159:154;;;25342:6;25337:3;25333:16;25326:23;;25025:334;;24839:520;;24627:738;;24520:845;;;;:::o;25371:589::-;25596:3;25618:95;25709:3;25700:6;25618:95;:::i;:::-;25611:102;;25730:95;25821:3;25812:6;25730:95;:::i;:::-;25723:102;;25842:92;25930:3;25921:6;25842:92;:::i;:::-;25835:99;;25951:3;25944:10;;25371:589;;;;;;:::o;25966:225::-;26106:34;26102:1;26094:6;26090:14;26083:58;26175:8;26170:2;26162:6;26158:15;26151:33;25966:225;:::o;26197:366::-;26339:3;26360:67;26424:2;26419:3;26360:67;:::i;:::-;26353:74;;26436:93;26525:3;26436:93;:::i;:::-;26554:2;26549:3;26545:12;26538:19;;26197:366;;;:::o;26569:419::-;26735:4;26773:2;26762:9;26758:18;26750:26;;26822:9;26816:4;26812:20;26808:1;26797:9;26793:17;26786:47;26850:131;26976:4;26850:131;:::i;:::-;26842:139;;26569:419;;;:::o;26994:98::-;27045:6;27079:5;27073:12;27063:22;;26994:98;;;:::o;27098:168::-;27181:11;27215:6;27210:3;27203:19;27255:4;27250:3;27246:14;27231:29;;27098:168;;;;:::o;27272:360::-;27358:3;27386:38;27418:5;27386:38;:::i;:::-;27440:70;27503:6;27498:3;27440:70;:::i;:::-;27433:77;;27519:52;27564:6;27559:3;27552:4;27545:5;27541:16;27519:52;:::i;:::-;27596:29;27618:6;27596:29;:::i;:::-;27591:3;27587:39;27580:46;;27362:270;27272:360;;;;:::o;27638:640::-;27833:4;27871:3;27860:9;27856:19;27848:27;;27885:71;27953:1;27942:9;27938:17;27929:6;27885:71;:::i;:::-;27966:72;28034:2;28023:9;28019:18;28010:6;27966:72;:::i;:::-;28048;28116:2;28105:9;28101:18;28092:6;28048:72;:::i;:::-;28167:9;28161:4;28157:20;28152:2;28141:9;28137:18;28130:48;28195:76;28266:4;28257:6;28195:76;:::i;:::-;28187:84;;27638:640;;;;;;;:::o;28284:141::-;28340:5;28371:6;28365:13;28356:22;;28387:32;28413:5;28387:32;:::i;:::-;28284:141;;;;:::o;28431:349::-;28500:6;28549:2;28537:9;28528:7;28524:23;28520:32;28517:119;;;28555:79;;:::i;:::-;28517:119;28675:1;28700:63;28755:7;28746:6;28735:9;28731:22;28700:63;:::i;:::-;28690:73;;28646:127;28431:349;;;;:::o;28786:233::-;28825:3;28848:24;28866:5;28848:24;:::i;:::-;28839:33;;28894:66;28887:5;28884:77;28881:103;;;28964:18;;:::i;:::-;28881:103;29011:1;29004:5;29000:13;28993:20;;28786:233;;;:::o;29025:176::-;29057:1;29074:20;29092:1;29074:20;:::i;:::-;29069:25;;29108:20;29126:1;29108:20;:::i;:::-;29103:25;;29147:1;29137:35;;29152:18;;:::i;:::-;29137:35;29193:1;29190;29186:9;29181:14;;29025:176;;;;:::o;29207:180::-;29255:77;29252:1;29245:88;29352:4;29349:1;29342:15;29376:4;29373:1;29366:15

Swarm Source

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