ETH Price: $3,686.66 (+2.65%)

Token

wooonen (wooonen)
 

Overview

Max Total Supply

9,501 wooonen

Holders

1,057

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
146 wooonen
0x1ad07f5297fcbce183c0e26f58216c9d6047fb25
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:
Wooonen

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 13 of 13: Wooonen.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

    uint256 public constant MAX_SUPPLY = 10086;
    uint256 public constant PUBLIC_SUPPLY = 9500;
    string public baseExtension = ".json";
    string private _baseTokenURI = "";
    mapping(address => uint256) public _claimed;
    mapping(address => uint256) public _whitelistClaimed;
    address public immutable cSigner;

   constructor(string memory name, string memory symbol, string memory baseURI) ERC721A(name, symbol,100,MAX_SUPPLY) {
        setBaseURI(baseURI);
        cSigner = 0x97591D4C59b35b7A3842735c5C3E3D131aB32251;
    }

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


    function publicMint(uint256 num,uint8 v, bytes32 r, bytes32 s) external payable {
        require(totalSupply() < PUBLIC_SUPPLY, "All tokens minted");
        require(_claimed[msg.sender] == 0, "Claimed");
        bytes32 digest = sha256(abi.encodePacked(msg.sender, num.toString()));
        require(ecrecover(digest, v, r, s) == cSigner, "Invalid signer");
        _claimed[msg.sender] = 1;
        _safeMint(msg.sender, num);
    }

    function whiteMint(uint256 num) external payable {
        require(totalSupply() < MAX_SUPPLY, "All tokens minted");
        require(_whitelistClaimed[msg.sender] >= num, "failed");
        _whitelistClaimed[msg.sender] -= num;
        _safeMint(msg.sender, num);
    }

    function setWhitelist(uint256 num,address user) public onlyOwner {
        require(num > 0, " num <= 0");
        _whitelistClaimed[user] = num;
    }

    function setBaseURI(string memory val) public onlyOwner {
        _baseTokenURI = val;
    }

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


    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }
  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

    function withdraw() public payable onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

pragma solidity ^0.8.0;

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

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

File 3 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 4 of 13: ERC721A.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./IERC721Enumerable.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // 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 ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

  // Mapping owner address to address data
  mapping(address => AddressData) private _addressData;

  // 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;

  /**
   * @dev
   * `maxBatchSize` refers to how much a minter can mint at a time.
   * `collectionSize_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }

  /**
   * @dev See {IERC721Enumerable-totalSupply}.
   */
  function totalSupply() public view override returns (uint256) {
    return currentIndex;
  }

  /**
   * @dev See {IERC721Enumerable-tokenByIndex}.
   */
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  }

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

  /**
   * @dev See {IERC165-supportsInterface}.
   */
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

  /**
   * @dev See {IERC721-balanceOf}.
   */
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  }

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

  /**
   * @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)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString()))
        : "";
  }

  /**
   * @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 See {IERC721-approve}.
   */
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

    require(
      _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
      "ERC721A: approve caller is not owner nor approved for all"
    );

    _approve(to, tokenId, owner);
  }

  /**
   * @dev See {IERC721-getApproved}.
   */
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");

    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_msgSender(), 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 override {
    _transfer(from, to, tokenId);
  }

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

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  }

  /**
   * @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 tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

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

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    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 {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

    // Clear approvals from the previous owner
    _approve(address(0), tokenId, prevOwnership.addr);

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

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

  /**
   * @dev Approve `to` to operate on `tokenId`
   *
   * Emits a {Approval} event.
   */
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }

  uint256 public nextOwnerToExplicitlySet = 0;

  /**
   * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
   */
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

  /**
   * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
   * The call is not executed if the target address is not a 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 _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) private returns (bool) {
    if (to.isContract()) {
      try
        IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
      returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * 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`.
   */
  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.
   *
   * 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` and `to` are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}

File 5 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface 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);
}

File 6 of 13: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @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`, 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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 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);

    /**
     * @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;
}

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

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 8 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @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 9 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 10 of 13: Ownable.sol
// SPDX-License-Identifier: MIT

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() {
        _setOwner(_msgSender());
    }

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

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

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

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

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

File 11 of 13: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

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 make 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 12 of 13: Strings.sol
// SPDX-License-Identifier: MIT

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":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_whitelistClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","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":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"val","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"setWhitelist","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"whiteMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

5f808055600755610120604052600560e090815264173539b7b760d91b61010052600a906200002f9082620002b8565b5060408051602081019091525f8152600b906200004d9082620002b8565b503480156200005a575f80fd5b5060405162002987380380620029878339810160408190526200007d916200042a565b8282606461276662000093565b60405180910390fd5b5f8211620000f45760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b60648201526084016200008a565b6001620001028582620002b8565b506002620001118482620002b8565b5060a091909152608052505060016008556200012d3362000159565b6200013881620001aa565b50507397591d4c59b35b7a3842735c5c3e3d131ab3225160c05250620004b5565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6009546001600160a01b03163314620002065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200008a565b600b620002148282620002b8565b5050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200024157607f821691505b6020821081036200026057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002b3575f81815260208120601f850160051c810160208610156200028e5750805b601f850160051c820191505b81811015620002af578281556001016200029a565b5050505b505050565b81516001600160401b03811115620002d457620002d462000218565b620002ec81620002e584546200022c565b8462000266565b602080601f83116001811462000322575f84156200030a5750858301515b5f19600386901b1c1916600185901b178555620002af565b5f85815260208120601f198616915b82811015620003525788860151825594840194600190910190840162000331565b50858210156200037057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f82601f83011262000390575f80fd5b81516001600160401b0380821115620003ad57620003ad62000218565b604051601f8301601f19908116603f01168101908282118183101715620003d857620003d862000218565b81604052838152602092508683858801011115620003f4575f80fd5b5f91505b83821015620004175785820183015181830184015290820190620003f8565b5f93810190920192909252949350505050565b5f805f606084860312156200043d575f80fd5b83516001600160401b038082111562000454575f80fd5b620004628783880162000380565b9450602086015191508082111562000478575f80fd5b620004868783880162000380565b935060408601519150808211156200049c575f80fd5b50620004ab8682870162000380565b9150509250925092565b60805160a05160c051612495620004f25f395f81816103850152610cf301525f81816117a7015281816117d10152611ae601525f50506124955ff3fe6080604052600436106101db575f3560e01c806370a08231116100fd578063c668286211610092578063da3ef23f11610062578063da3ef23f14610522578063dd896a1c14610541578063e985e9c51461056c578063f2fde38b146105b3575f80fd5b8063c6682862146104bb578063c87b56dd146104cf578063d7224ba0146104ee578063d89da28614610503575f80fd5b80638da5cb5b116100cd5780638da5cb5b1461044c57806395d89b4114610469578063a22cb4651461047d578063b88d4fde1461049c575f80fd5b806370a08231146103d9578063715018a6146103f85780638342083a1461040c578063851a770814610421575f80fd5b80633ccfd60b1161017357806355f804b31161014357806355f804b3146103555780635760cc5d146103745780635b4ddc28146103a75780636352211e146103ba575f80fd5b80633ccfd60b146102fc57806342842e0e1461030457806347d6b593146103235780634f6ccce714610336575f80fd5b806318160ddd116101ae57806318160ddd1461028c57806323b872dd146102a95780632f745c59146102c857806332cb6b0c146102e7575f80fd5b806301ffc9a7146101df57806306fdde0314610213578063081812fc14610234578063095ea7b31461026b575b5f80fd5b3480156101ea575f80fd5b506101fe6101f9366004611d14565b6105d2565b60405190151581526020015b60405180910390f35b34801561021e575f80fd5b5061022761063e565b60405161020a9190611d7c565b34801561023f575f80fd5b5061025361024e366004611d8e565b6106ce565b6040516001600160a01b03909116815260200161020a565b348015610276575f80fd5b5061028a610285366004611dc0565b61075b565b005b348015610297575f80fd5b505f545b60405190815260200161020a565b3480156102b4575f80fd5b5061028a6102c3366004611de8565b610871565b3480156102d3575f80fd5b5061029b6102e2366004611dc0565b61087c565b3480156102f2575f80fd5b5061029b61276681565b61028a6109e5565b34801561030f575f80fd5b5061028a61031e366004611de8565b610a3f565b61028a610331366004611d8e565b610a59565b348015610341575f80fd5b5061029b610350366004611d8e565b610b1d565b348015610360575f80fd5b5061028a61036f366004611ea8565b610b7e565b34801561037f575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b61028a6103b5366004611eed565b610bb4565b3480156103c5575f80fd5b506102536103d4366004611d8e565b610dae565b3480156103e4575f80fd5b5061029b6103f3366004611f2c565b610dbf565b348015610403575f80fd5b5061028a610e4e565b348015610417575f80fd5b5061029b61251c81565b34801561042c575f80fd5b5061029b61043b366004611f2c565b600d6020525f908152604090205481565b348015610457575f80fd5b506009546001600160a01b0316610253565b348015610474575f80fd5b50610227610e83565b348015610488575f80fd5b5061028a610497366004611f45565b610e92565b3480156104a7575f80fd5b5061028a6104b6366004611f7e565b610f55565b3480156104c6575f80fd5b50610227610f8e565b3480156104da575f80fd5b506102276104e9366004611d8e565b61101a565b3480156104f9575f80fd5b5061029b60075481565b34801561050e575f80fd5b5061028a61051d366004611ff5565b6110e6565b34801561052d575f80fd5b5061028a61053c366004611ea8565b611164565b34801561054c575f80fd5b5061029b61055b366004611f2c565b600c6020525f908152604090205481565b348015610577575f80fd5b506101fe61058636600461201f565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205460ff1690565b3480156105be575f80fd5b5061028a6105cd366004611f2c565b61119a565b5f6001600160e01b031982166380ac58cd60e01b148061060257506001600160e01b03198216635b5e139f60e01b145b8061061d57506001600160e01b0319821663780e9d6360e01b145b8061063857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461064d90612047565b80601f016020809104026020016040519081016040528092919081815260200182805461067990612047565b80156106c45780601f1061069b576101008083540402835291602001916106c4565b820191905f5260205f20905b8154815290600101906020018083116106a757829003601f168201915b5050505050905090565b5f6106d9825f541190565b6107405760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b505f908152600560205260409020546001600160a01b031690565b5f61076582610dae565b9050806001600160a01b0316836001600160a01b0316036107d35760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610737565b336001600160a01b03821614806107ef57506107ef8133610586565b6108615760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610737565b61086c838383611232565b505050565b61086c83838361128d565b5f61088683610dbf565b82106108df5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610737565b5f80549080805b83811015610985575f818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff16918301919091521561093857805192505b876001600160a01b0316836001600160a01b031603610972578684036109645750935061063892505050565b8361096e81612093565b9450505b508061097d81612093565b9150506108e6565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610737565b6009546001600160a01b03163314610a0f5760405162461bcd60e51b8152600401610737906120ab565b6040514790339082156108fc029083905f818181858888f19350505050158015610a3b573d5f803e3d5ffd5b5050565b61086c83838360405180602001604052805f815250610f55565b612766610a645f5490565b10610aa55760405162461bcd60e51b8152602060048201526011602482015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b6044820152606401610737565b335f908152600d6020526040902054811115610aec5760405162461bcd60e51b815260206004820152600660248201526519985a5b195960d21b6044820152606401610737565b335f908152600d602052604081208054839290610b0a9084906120e0565b90915550610b1a9050338261160a565b50565b5f80548210610b7a5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610737565b5090565b6009546001600160a01b03163314610ba85760405162461bcd60e51b8152600401610737906120ab565b600b610a3b8282612138565b61251c610bbf5f5490565b10610c005760405162461bcd60e51b8152602060048201526011602482015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b6044820152606401610737565b335f908152600c602052604090205415610c465760405162461bcd60e51b815260206004820152600760248201526610db185a5b595960ca1b6044820152606401610737565b5f600233610c5387611623565b604051602001610c649291906121f4565b60408051601f1981840301815290829052610c7e9161222b565b602060405180830381855afa158015610c99573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cbc9190612246565b604080515f81526020810180835283905260ff87169181019190915260608101859052608081018490529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169060019060a0016020604051602081039080840390855afa158015610d3a573d5f803e3d5ffd5b505050602060405103516001600160a01b031614610d8b5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b6044820152606401610737565b335f818152600c6020526040902060019055610da7908661160a565b5050505050565b5f610db882611728565b5192915050565b5f6001600160a01b038216610e2a5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610737565b506001600160a01b03165f908152600460205260409020546001600160801b031690565b6009546001600160a01b03163314610e785760405162461bcd60e51b8152600401610737906120ab565b610e815f6118ce565b565b60606002805461064d90612047565b336001600160a01b03831603610eea5760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610737565b335f8181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f6084848461128d565b610f6c8484848461191f565b610f885760405162461bcd60e51b81526004016107379061225d565b50505050565b600a8054610f9b90612047565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc790612047565b80156110125780601f10610fe957610100808354040283529160200191611012565b820191905f5260205f20905b815481529060010190602001808311610ff557829003601f168201915b505050505081565b6060611026825f541190565b61108a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610737565b5f611093611a1c565b90505f8151116110b15760405180602001604052805f8152506110df565b806110bb84611623565b600a6040516020016110cf939291906122b0565b6040516020818303038152906040525b9392505050565b6009546001600160a01b031633146111105760405162461bcd60e51b8152600401610737906120ab565b5f821161114b5760405162461bcd60e51b81526020600482015260096024820152680206e756d203c3d20360bc1b6044820152606401610737565b6001600160a01b03165f908152600d6020526040902055565b6009546001600160a01b0316331461118e5760405162461bcd60e51b8152600401610737906120ab565b600a610a3b8282612138565b6009546001600160a01b031633146111c45760405162461bcd60e51b8152600401610737906120ab565b6001600160a01b0381166112295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610737565b610b1a816118ce565b5f8281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b5f61129782611728565b80519091505f906001600160a01b0316336001600160a01b031614806112cd5750336112c2846106ce565b6001600160a01b0316145b806112df575081516112df9033610586565b9050806113495760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610737565b846001600160a01b0316825f01516001600160a01b0316146113bc5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610737565b6001600160a01b0384166114205760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610737565b61142e5f84845f0151611232565b6001600160a01b0385165f90815260046020526040812080546001929061145f9084906001600160801b031661234b565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0386165f90815260046020526040812080546001945090926114aa91859116612372565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff42811660208085019182525f8981526003909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055611531846001612392565b5f818152600360205260409020549091506001600160a01b03166115c057611559815f541190565b156115c05760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081525f878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b610a3b828260405180602001604052805f815250611a2b565b6060815f036116495750506040805180820190915260018152600360fc1b602082015290565b815f5b8115611672578061165c81612093565b915061166b9050600a836123b9565b915061164c565b5f8167ffffffffffffffff81111561168c5761168c611e21565b6040519080825280601f01601f1916602001820160405280156116b6576020820181803683370190505b5090505b8415611720576116cb6001836120e0565b91506116d8600a866123cc565b6116e3906030612392565b60f81b8183815181106116f8576116f86123df565b60200101906001600160f81b03191690815f1a905350611719600a866123b9565b94506116ba565b949350505050565b604080518082019091525f8082526020820152611745825f541190565b6117a45760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610737565b5f7f00000000000000000000000000000000000000000000000000000000000000008310611804576117f67f0000000000000000000000000000000000000000000000000000000000000000846120e0565b611801906001612392565b90505b825b81811061186d575f818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff16918301919091521561185a57949350505050565b5080611865816123f3565b915050611806565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610737565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b0384163b15611a1157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611962903390899088908890600401612408565b6020604051808303815f875af192505050801561199c575060408051601f3d908101601f1916820190925261199991810190612444565b60015b6119f7573d8080156119c9576040519150601f19603f3d011682016040523d82523d5f602084013e6119ce565b606091505b5080515f036119ef5760405162461bcd60e51b81526004016107379061225d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611720565b506001949350505050565b6060600b805461064d90612047565b5f546001600160a01b038416611a8d5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610737565b611a97815f541190565b15611ae45760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610737565b7f0000000000000000000000000000000000000000000000000000000000000000831115611b5f5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610737565b6001600160a01b0384165f908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190611bba908790612372565b6001600160801b03168152602001858360200151611bd89190612372565b6001600160801b039081169091526001600160a01b038088165f8181526004602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015611cf55760405182906001600160a01b038916905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611cb95f88848861191f565b611cd55760405162461bcd60e51b81526004016107379061225d565b81611cdf81612093565b9250508080611ced90612093565b915050611c6e565b505f819055611602565b6001600160e01b031981168114610b1a575f80fd5b5f60208284031215611d24575f80fd5b81356110df81611cff565b5f5b83811015611d49578181015183820152602001611d31565b50505f910152565b5f8151808452611d68816020860160208601611d2f565b601f01601f19169290920160200192915050565b602081525f6110df6020830184611d51565b5f60208284031215611d9e575f80fd5b5035919050565b80356001600160a01b0381168114611dbb575f80fd5b919050565b5f8060408385031215611dd1575f80fd5b611dda83611da5565b946020939093013593505050565b5f805f60608486031215611dfa575f80fd5b611e0384611da5565b9250611e1160208501611da5565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611e4f57611e4f611e21565b604051601f8501601f19908116603f01168101908282118183101715611e7757611e77611e21565b81604052809350858152868686011115611e8f575f80fd5b858560208301375f602087830101525050509392505050565b5f60208284031215611eb8575f80fd5b813567ffffffffffffffff811115611ece575f80fd5b8201601f81018413611ede575f80fd5b61172084823560208401611e35565b5f805f8060808587031215611f00575f80fd5b84359350602085013560ff81168114611f17575f80fd5b93969395505050506040820135916060013590565b5f60208284031215611f3c575f80fd5b6110df82611da5565b5f8060408385031215611f56575f80fd5b611f5f83611da5565b915060208301358015158114611f73575f80fd5b809150509250929050565b5f805f8060808587031215611f91575f80fd5b611f9a85611da5565b9350611fa860208601611da5565b925060408501359150606085013567ffffffffffffffff811115611fca575f80fd5b8501601f81018713611fda575f80fd5b611fe987823560208401611e35565b91505092959194509250565b5f8060408385031215612006575f80fd5b8235915061201660208401611da5565b90509250929050565b5f8060408385031215612030575f80fd5b61203983611da5565b915061201660208401611da5565b600181811c9082168061205b57607f821691505b60208210810361207957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b5f600182016120a4576120a461207f565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b818103818111156106385761063861207f565b601f82111561086c575f81815260208120601f850160051c810160208610156121195750805b601f850160051c820191505b8181101561160257828155600101612125565b815167ffffffffffffffff81111561215257612152611e21565b612166816121608454612047565b846120f3565b602080601f831160018114612199575f84156121825750858301515b5f19600386901b1c1916600185901b178555611602565b5f85815260208120601f198616915b828110156121c7578886015182559484019460019091019084016121a8565b50858210156121e457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6bffffffffffffffffffffffff198360601b1681525f825161221d816014850160208701611d2f565b919091016014019392505050565b5f825161223c818460208701611d2f565b9190910192915050565b5f60208284031215612256575f80fd5b5051919050565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b5f845160206122c28285838a01611d2f565b8551918401916122d58184848a01611d2f565b85549201915f906122e581612047565b600182811680156122fd57600181146123125761233b565b60ff198416875282151583028701945061233b565b895f52855f205f5b848110156123335781548982015290830190870161231a565b505082870194505b50929a9950505050505050505050565b6001600160801b0382811682821603908082111561236b5761236b61207f565b5092915050565b6001600160801b0381811683821601908082111561236b5761236b61207f565b808201808211156106385761063861207f565b634e487b7160e01b5f52601260045260245ffd5b5f826123c7576123c76123a5565b500490565b5f826123da576123da6123a5565b500690565b634e487b7160e01b5f52603260045260245ffd5b5f816124015761240161207f565b505f190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061243a90830184611d51565b9695505050505050565b5f60208284031215612454575f80fd5b81516110df81611cff56fea2646970667358221220bd84e0dd45cdfc99c1757f1e186d43bdc97add8d9868582fcaada5bf0d9ae1a564736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007776f6f6f6e656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007776f6f6f6e656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007776f6f6f6e656e00000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101db575f3560e01c806370a08231116100fd578063c668286211610092578063da3ef23f11610062578063da3ef23f14610522578063dd896a1c14610541578063e985e9c51461056c578063f2fde38b146105b3575f80fd5b8063c6682862146104bb578063c87b56dd146104cf578063d7224ba0146104ee578063d89da28614610503575f80fd5b80638da5cb5b116100cd5780638da5cb5b1461044c57806395d89b4114610469578063a22cb4651461047d578063b88d4fde1461049c575f80fd5b806370a08231146103d9578063715018a6146103f85780638342083a1461040c578063851a770814610421575f80fd5b80633ccfd60b1161017357806355f804b31161014357806355f804b3146103555780635760cc5d146103745780635b4ddc28146103a75780636352211e146103ba575f80fd5b80633ccfd60b146102fc57806342842e0e1461030457806347d6b593146103235780634f6ccce714610336575f80fd5b806318160ddd116101ae57806318160ddd1461028c57806323b872dd146102a95780632f745c59146102c857806332cb6b0c146102e7575f80fd5b806301ffc9a7146101df57806306fdde0314610213578063081812fc14610234578063095ea7b31461026b575b5f80fd5b3480156101ea575f80fd5b506101fe6101f9366004611d14565b6105d2565b60405190151581526020015b60405180910390f35b34801561021e575f80fd5b5061022761063e565b60405161020a9190611d7c565b34801561023f575f80fd5b5061025361024e366004611d8e565b6106ce565b6040516001600160a01b03909116815260200161020a565b348015610276575f80fd5b5061028a610285366004611dc0565b61075b565b005b348015610297575f80fd5b505f545b60405190815260200161020a565b3480156102b4575f80fd5b5061028a6102c3366004611de8565b610871565b3480156102d3575f80fd5b5061029b6102e2366004611dc0565b61087c565b3480156102f2575f80fd5b5061029b61276681565b61028a6109e5565b34801561030f575f80fd5b5061028a61031e366004611de8565b610a3f565b61028a610331366004611d8e565b610a59565b348015610341575f80fd5b5061029b610350366004611d8e565b610b1d565b348015610360575f80fd5b5061028a61036f366004611ea8565b610b7e565b34801561037f575f80fd5b506102537f00000000000000000000000097591d4c59b35b7a3842735c5c3e3d131ab3225181565b61028a6103b5366004611eed565b610bb4565b3480156103c5575f80fd5b506102536103d4366004611d8e565b610dae565b3480156103e4575f80fd5b5061029b6103f3366004611f2c565b610dbf565b348015610403575f80fd5b5061028a610e4e565b348015610417575f80fd5b5061029b61251c81565b34801561042c575f80fd5b5061029b61043b366004611f2c565b600d6020525f908152604090205481565b348015610457575f80fd5b506009546001600160a01b0316610253565b348015610474575f80fd5b50610227610e83565b348015610488575f80fd5b5061028a610497366004611f45565b610e92565b3480156104a7575f80fd5b5061028a6104b6366004611f7e565b610f55565b3480156104c6575f80fd5b50610227610f8e565b3480156104da575f80fd5b506102276104e9366004611d8e565b61101a565b3480156104f9575f80fd5b5061029b60075481565b34801561050e575f80fd5b5061028a61051d366004611ff5565b6110e6565b34801561052d575f80fd5b5061028a61053c366004611ea8565b611164565b34801561054c575f80fd5b5061029b61055b366004611f2c565b600c6020525f908152604090205481565b348015610577575f80fd5b506101fe61058636600461201f565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205460ff1690565b3480156105be575f80fd5b5061028a6105cd366004611f2c565b61119a565b5f6001600160e01b031982166380ac58cd60e01b148061060257506001600160e01b03198216635b5e139f60e01b145b8061061d57506001600160e01b0319821663780e9d6360e01b145b8061063857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461064d90612047565b80601f016020809104026020016040519081016040528092919081815260200182805461067990612047565b80156106c45780601f1061069b576101008083540402835291602001916106c4565b820191905f5260205f20905b8154815290600101906020018083116106a757829003601f168201915b5050505050905090565b5f6106d9825f541190565b6107405760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b505f908152600560205260409020546001600160a01b031690565b5f61076582610dae565b9050806001600160a01b0316836001600160a01b0316036107d35760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610737565b336001600160a01b03821614806107ef57506107ef8133610586565b6108615760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610737565b61086c838383611232565b505050565b61086c83838361128d565b5f61088683610dbf565b82106108df5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610737565b5f80549080805b83811015610985575f818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff16918301919091521561093857805192505b876001600160a01b0316836001600160a01b031603610972578684036109645750935061063892505050565b8361096e81612093565b9450505b508061097d81612093565b9150506108e6565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610737565b6009546001600160a01b03163314610a0f5760405162461bcd60e51b8152600401610737906120ab565b6040514790339082156108fc029083905f818181858888f19350505050158015610a3b573d5f803e3d5ffd5b5050565b61086c83838360405180602001604052805f815250610f55565b612766610a645f5490565b10610aa55760405162461bcd60e51b8152602060048201526011602482015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b6044820152606401610737565b335f908152600d6020526040902054811115610aec5760405162461bcd60e51b815260206004820152600660248201526519985a5b195960d21b6044820152606401610737565b335f908152600d602052604081208054839290610b0a9084906120e0565b90915550610b1a9050338261160a565b50565b5f80548210610b7a5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610737565b5090565b6009546001600160a01b03163314610ba85760405162461bcd60e51b8152600401610737906120ab565b600b610a3b8282612138565b61251c610bbf5f5490565b10610c005760405162461bcd60e51b8152602060048201526011602482015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b6044820152606401610737565b335f908152600c602052604090205415610c465760405162461bcd60e51b815260206004820152600760248201526610db185a5b595960ca1b6044820152606401610737565b5f600233610c5387611623565b604051602001610c649291906121f4565b60408051601f1981840301815290829052610c7e9161222b565b602060405180830381855afa158015610c99573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cbc9190612246565b604080515f81526020810180835283905260ff87169181019190915260608101859052608081018490529091506001600160a01b037f00000000000000000000000097591d4c59b35b7a3842735c5c3e3d131ab32251169060019060a0016020604051602081039080840390855afa158015610d3a573d5f803e3d5ffd5b505050602060405103516001600160a01b031614610d8b5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b6044820152606401610737565b335f818152600c6020526040902060019055610da7908661160a565b5050505050565b5f610db882611728565b5192915050565b5f6001600160a01b038216610e2a5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610737565b506001600160a01b03165f908152600460205260409020546001600160801b031690565b6009546001600160a01b03163314610e785760405162461bcd60e51b8152600401610737906120ab565b610e815f6118ce565b565b60606002805461064d90612047565b336001600160a01b03831603610eea5760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610737565b335f8181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f6084848461128d565b610f6c8484848461191f565b610f885760405162461bcd60e51b81526004016107379061225d565b50505050565b600a8054610f9b90612047565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc790612047565b80156110125780601f10610fe957610100808354040283529160200191611012565b820191905f5260205f20905b815481529060010190602001808311610ff557829003601f168201915b505050505081565b6060611026825f541190565b61108a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610737565b5f611093611a1c565b90505f8151116110b15760405180602001604052805f8152506110df565b806110bb84611623565b600a6040516020016110cf939291906122b0565b6040516020818303038152906040525b9392505050565b6009546001600160a01b031633146111105760405162461bcd60e51b8152600401610737906120ab565b5f821161114b5760405162461bcd60e51b81526020600482015260096024820152680206e756d203c3d20360bc1b6044820152606401610737565b6001600160a01b03165f908152600d6020526040902055565b6009546001600160a01b0316331461118e5760405162461bcd60e51b8152600401610737906120ab565b600a610a3b8282612138565b6009546001600160a01b031633146111c45760405162461bcd60e51b8152600401610737906120ab565b6001600160a01b0381166112295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610737565b610b1a816118ce565b5f8281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b5f61129782611728565b80519091505f906001600160a01b0316336001600160a01b031614806112cd5750336112c2846106ce565b6001600160a01b0316145b806112df575081516112df9033610586565b9050806113495760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610737565b846001600160a01b0316825f01516001600160a01b0316146113bc5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610737565b6001600160a01b0384166114205760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610737565b61142e5f84845f0151611232565b6001600160a01b0385165f90815260046020526040812080546001929061145f9084906001600160801b031661234b565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0386165f90815260046020526040812080546001945090926114aa91859116612372565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff42811660208085019182525f8981526003909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055611531846001612392565b5f818152600360205260409020549091506001600160a01b03166115c057611559815f541190565b156115c05760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081525f878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b610a3b828260405180602001604052805f815250611a2b565b6060815f036116495750506040805180820190915260018152600360fc1b602082015290565b815f5b8115611672578061165c81612093565b915061166b9050600a836123b9565b915061164c565b5f8167ffffffffffffffff81111561168c5761168c611e21565b6040519080825280601f01601f1916602001820160405280156116b6576020820181803683370190505b5090505b8415611720576116cb6001836120e0565b91506116d8600a866123cc565b6116e3906030612392565b60f81b8183815181106116f8576116f86123df565b60200101906001600160f81b03191690815f1a905350611719600a866123b9565b94506116ba565b949350505050565b604080518082019091525f8082526020820152611745825f541190565b6117a45760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610737565b5f7f00000000000000000000000000000000000000000000000000000000000000648310611804576117f67f0000000000000000000000000000000000000000000000000000000000000064846120e0565b611801906001612392565b90505b825b81811061186d575f818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff16918301919091521561185a57949350505050565b5080611865816123f3565b915050611806565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610737565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b0384163b15611a1157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611962903390899088908890600401612408565b6020604051808303815f875af192505050801561199c575060408051601f3d908101601f1916820190925261199991810190612444565b60015b6119f7573d8080156119c9576040519150601f19603f3d011682016040523d82523d5f602084013e6119ce565b606091505b5080515f036119ef5760405162461bcd60e51b81526004016107379061225d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611720565b506001949350505050565b6060600b805461064d90612047565b5f546001600160a01b038416611a8d5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610737565b611a97815f541190565b15611ae45760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610737565b7f0000000000000000000000000000000000000000000000000000000000000064831115611b5f5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610737565b6001600160a01b0384165f908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190611bba908790612372565b6001600160801b03168152602001858360200151611bd89190612372565b6001600160801b039081169091526001600160a01b038088165f8181526004602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015611cf55760405182906001600160a01b038916905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611cb95f88848861191f565b611cd55760405162461bcd60e51b81526004016107379061225d565b81611cdf81612093565b9250508080611ced90612093565b915050611c6e565b505f819055611602565b6001600160e01b031981168114610b1a575f80fd5b5f60208284031215611d24575f80fd5b81356110df81611cff565b5f5b83811015611d49578181015183820152602001611d31565b50505f910152565b5f8151808452611d68816020860160208601611d2f565b601f01601f19169290920160200192915050565b602081525f6110df6020830184611d51565b5f60208284031215611d9e575f80fd5b5035919050565b80356001600160a01b0381168114611dbb575f80fd5b919050565b5f8060408385031215611dd1575f80fd5b611dda83611da5565b946020939093013593505050565b5f805f60608486031215611dfa575f80fd5b611e0384611da5565b9250611e1160208501611da5565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611e4f57611e4f611e21565b604051601f8501601f19908116603f01168101908282118183101715611e7757611e77611e21565b81604052809350858152868686011115611e8f575f80fd5b858560208301375f602087830101525050509392505050565b5f60208284031215611eb8575f80fd5b813567ffffffffffffffff811115611ece575f80fd5b8201601f81018413611ede575f80fd5b61172084823560208401611e35565b5f805f8060808587031215611f00575f80fd5b84359350602085013560ff81168114611f17575f80fd5b93969395505050506040820135916060013590565b5f60208284031215611f3c575f80fd5b6110df82611da5565b5f8060408385031215611f56575f80fd5b611f5f83611da5565b915060208301358015158114611f73575f80fd5b809150509250929050565b5f805f8060808587031215611f91575f80fd5b611f9a85611da5565b9350611fa860208601611da5565b925060408501359150606085013567ffffffffffffffff811115611fca575f80fd5b8501601f81018713611fda575f80fd5b611fe987823560208401611e35565b91505092959194509250565b5f8060408385031215612006575f80fd5b8235915061201660208401611da5565b90509250929050565b5f8060408385031215612030575f80fd5b61203983611da5565b915061201660208401611da5565b600181811c9082168061205b57607f821691505b60208210810361207957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b5f600182016120a4576120a461207f565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b818103818111156106385761063861207f565b601f82111561086c575f81815260208120601f850160051c810160208610156121195750805b601f850160051c820191505b8181101561160257828155600101612125565b815167ffffffffffffffff81111561215257612152611e21565b612166816121608454612047565b846120f3565b602080601f831160018114612199575f84156121825750858301515b5f19600386901b1c1916600185901b178555611602565b5f85815260208120601f198616915b828110156121c7578886015182559484019460019091019084016121a8565b50858210156121e457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6bffffffffffffffffffffffff198360601b1681525f825161221d816014850160208701611d2f565b919091016014019392505050565b5f825161223c818460208701611d2f565b9190910192915050565b5f60208284031215612256575f80fd5b5051919050565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b5f845160206122c28285838a01611d2f565b8551918401916122d58184848a01611d2f565b85549201915f906122e581612047565b600182811680156122fd57600181146123125761233b565b60ff198416875282151583028701945061233b565b895f52855f205f5b848110156123335781548982015290830190870161231a565b505082870194505b50929a9950505050505050505050565b6001600160801b0382811682821603908082111561236b5761236b61207f565b5092915050565b6001600160801b0381811683821601908082111561236b5761236b61207f565b808201808211156106385761063861207f565b634e487b7160e01b5f52601260045260245ffd5b5f826123c7576123c76123a5565b500490565b5f826123da576123da6123a5565b500690565b634e487b7160e01b5f52603260045260245ffd5b5f816124015761240161207f565b505f190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061243a90830184611d51565b9695505050505050565b5f60208284031215612454575f80fd5b81516110df81611cff56fea2646970667358221220bd84e0dd45cdfc99c1757f1e186d43bdc97add8d9868582fcaada5bf0d9ae1a564736f6c63430008140033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007776f6f6f6e656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007776f6f6f6e656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007776f6f6f6e656e00000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): wooonen
Arg [1] : symbol (string): wooonen
Arg [2] : baseURI (string): wooonen

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 776f6f6f6e656e00000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 776f6f6f6e656e00000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [8] : 776f6f6f6e656e00000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

163:2415:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3826:358:3;;;;;;;;;;-1:-1:-1;3826:358:3;;;;;:::i;:::-;;:::i;:::-;;;565:14:13;;558:22;540:41;;528:2;513:18;3826:358:3;;;;;;;;5490:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6955:200::-;;;;;;;;;;-1:-1:-1;6955:200:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:13;;;1679:51;;1667:2;1652:18;6955:200:3;1533:203:13;6533:369:3;;;;;;;;;;-1:-1:-1;6533:369:3;;;;;:::i;:::-;;:::i;:::-;;2432:92;;;;;;;;;;-1:-1:-1;2485:7:3;2507:12;2432:92;;;2324:25:13;;;2312:2;2297:18;2432:92:3;2178:177:13;7773:136:3;;;;;;;;;;-1:-1:-1;7773:136:3;;;;;:::i;:::-;;:::i;3046:721::-;;;;;;;;;;-1:-1:-1;3046:721:3;;;;;:::i;:::-;;:::i;255:42:12:-;;;;;;;;;;;;292:5;255:42;;2428:148;;;:::i;7967:151:3:-;;;;;;;;;;-1:-1:-1;7967:151:3;;;;;:::i;:::-;;:::i;1357:269:12:-;;;;;;:::i;:::-;;:::i;2588:174:3:-;;;;;;;;;;-1:-1:-1;2588:174:3;;;;;:::i;:::-;;:::i;1788:92:12:-;;;;;;;;;;-1:-1:-1;1788:92:12;;;;;:::i;:::-;;:::i;542:32::-;;;;;;;;;;;;;;;917:434;;;;;;:::i;:::-;;:::i;5320:116:3:-;;;;;;;;;;-1:-1:-1;5320:116:3;;;;;:::i;:::-;;:::i;4235:208::-;;;;;;;;;;-1:-1:-1;4235:208:3;;;;;:::i;:::-;;:::i;1598:92:9:-;;;;;;;;;;;;;:::i;303:44:12:-;;;;;;;;;;;;343:4;303:44;;484:52;;;;;;;;;;-1:-1:-1;484:52:12;;;;;:::i;:::-;;;;;;;;;;;;;;966:85:9;;;;;;;;;;-1:-1:-1;1038:6:9;;-1:-1:-1;;;;;1038:6:9;966:85;;5638:96:3;;;;;;;;;;;;;:::i;7214:269::-;;;;;;;;;;-1:-1:-1;7214:269:3;;;;;:::i;:::-;;:::i;8176:300::-;;;;;;;;;;-1:-1:-1;8176:300:3;;;;;:::i;:::-;;:::i;353:37:12:-;;;;;;;;;;;;;:::i;1886:413::-;;;;;;;;;;-1:-1:-1;1886:413:12;;;;;:::i;:::-;;:::i;12446:43:3:-;;;;;;;;;;;;;;;;1632:150:12;;;;;;;;;;-1:-1:-1;1632:150:12;;;;;:::i;:::-;;:::i;2302:120::-;;;;;;;;;;-1:-1:-1;2302:120:12;;;;;:::i;:::-;;:::i;435:43::-;;;;;;;;;;-1:-1:-1;435:43:12;;;;;:::i;:::-;;;;;;;;;;;;;;7541:178:3;;;;;;;;;;-1:-1:-1;7541:178:3;;;;;:::i;:::-;-1:-1:-1;;;;;7679:25:3;;;7658:4;7679:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;7541:178;1839:189:9;;;;;;;;;;-1:-1:-1;1839:189:9;;;;;:::i;:::-;;:::i;3826:358:3:-;3948:4;-1:-1:-1;;;;;;3975:40:3;;-1:-1:-1;;;3975:40:3;;:98;;-1:-1:-1;;;;;;;4025:48:3;;-1:-1:-1;;;4025:48:3;3975:98;:158;;;-1:-1:-1;;;;;;;4083:50:3;;-1:-1:-1;;;4083:50:3;3975:158;:204;;;-1:-1:-1;;;;;;;;;;871:40:2;;;4143:36:3;3962:217;3826:358;-1:-1:-1;;3826:358:3:o;5490:92::-;5544:13;5572:5;5565:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5490:92;:::o;6955:200::-;7023:7;7046:16;7054:7;8763:4;8792:12;-1:-1:-1;8782:22:3;8706:103;7046:16;7038:74;;;;-1:-1:-1;;;7038:74:3;;6723:2:13;7038:74:3;;;6705:21:13;6762:2;6742:18;;;6735:30;6801:34;6781:18;;;6774:62;-1:-1:-1;;;6852:18:13;;;6845:43;6905:19;;7038:74:3;;;;;;;;;-1:-1:-1;7126:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;7126:24:3;;6955:200::o;6533:369::-;6601:13;6617:24;6633:7;6617:15;:24::i;:::-;6601:40;;6661:5;-1:-1:-1;;;;;6655:11:3;:2;-1:-1:-1;;;;;6655:11:3;;6647:58;;;;-1:-1:-1;;;6647:58:3;;7137:2:13;6647:58:3;;;7119:21:13;7176:2;7156:18;;;7149:30;7215:34;7195:18;;;7188:62;-1:-1:-1;;;7266:18:13;;;7259:32;7308:19;;6647:58:3;6935:398:13;6647:58:3;665:10:1;-1:-1:-1;;;;;6727:21:3;;;;:62;;-1:-1:-1;6752:37:3;6769:5;665:10:1;7541:178:3;:::i;6752:37::-;6712:150;;;;-1:-1:-1;;;6712:150:3;;7540:2:13;6712:150:3;;;7522:21:13;7579:2;7559:18;;;7552:30;7618:34;7598:18;;;7591:62;7689:27;7669:18;;;7662:55;7734:19;;6712:150:3;7338:421:13;6712:150:3;6869:28;6878:2;6882:7;6891:5;6869:8;:28::i;:::-;6595:307;6533:369;;:::o;7773:136::-;7876:28;7886:4;7892:2;7896:7;7876:9;:28::i;3046:721::-;3151:7;3184:16;3194:5;3184:9;:16::i;:::-;3176:5;:24;3168:71;;;;-1:-1:-1;;;3168:71:3;;7966:2:13;3168:71:3;;;7948:21:13;8005:2;7985:18;;;7978:30;8044:34;8024:18;;;8017:62;-1:-1:-1;;;8095:18:13;;;8088:32;8137:19;;3168:71:3;7764:398:13;3168:71:3;3245:22;2507:12;;;3245:22;;3362:339;3386:14;3382:1;:18;3362:339;;;3415:31;3449:14;;;:11;:14;;;;;;;;;3415:48;;;;;;;;;-1:-1:-1;;;;;3415:48:3;;;;;-1:-1:-1;;;3415:48:3;;;;;;;;;;;;3475:28;3471:87;;3535:14;;;-1:-1:-1;3471:87:3;3590:5;-1:-1:-1;;;;;3569:26:3;:17;-1:-1:-1;;;;;3569:26:3;;3565:130;;3626:5;3611:11;:20;3607:57;;-1:-1:-1;3652:1:3;-1:-1:-1;3645:8:3;;-1:-1:-1;;;3645:8:3;3607:57;3673:13;;;;:::i;:::-;;;;3565:130;-1:-1:-1;3402:3:3;;;;:::i;:::-;;;;3362:339;;;-1:-1:-1;3706:56:3;;-1:-1:-1;;;3706:56:3;;8641:2:13;3706:56:3;;;8623:21:13;8680:2;8660:18;;;8653:30;8719:34;8699:18;;;8692:62;-1:-1:-1;;;8770:18:13;;;8763:44;8824:19;;3706:56:3;8439:410:13;2428:148:12;1038:6:9;;-1:-1:-1;;;;;1038:6:9;665:10:1;1178:23:9;1170:68;;;;-1:-1:-1;;;1170:68:9;;;;;;;:::i;:::-;2532:37:12::1;::::0;2501:21:::1;::::0;2540:10:::1;::::0;2532:37;::::1;;;::::0;2501:21;;2483:15:::1;2532:37:::0;2483:15;2532:37;2501:21;2540:10;2532:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;2473:103;2428:148::o:0;7967:151:3:-;8074:39;8091:4;8097:2;8101:7;8074:39;;;;;;;;;;;;:16;:39::i;1357:269:12:-;292:5;1424:13;2485:7:3;2507:12;;2432:92;1424:13:12;:26;1416:56;;;;-1:-1:-1;;;1416:56:12;;9417:2:13;1416:56:12;;;9399:21:13;9456:2;9436:18;;;9429:30;-1:-1:-1;;;9475:18:13;;;9468:47;9532:18;;1416:56:12;9215:341:13;1416:56:12;1508:10;1490:29;;;;:17;:29;;;;;;:36;-1:-1:-1;1490:36:12;1482:55;;;;-1:-1:-1;;;1482:55:12;;9763:2:13;1482:55:12;;;9745:21:13;9802:1;9782:18;;;9775:29;-1:-1:-1;;;9820:18:13;;;9813:36;9866:18;;1482:55:12;9561:329:13;1482:55:12;1565:10;1547:29;;;;:17;:29;;;;;:36;;1580:3;;1547:29;:36;;1580:3;;1547:36;:::i;:::-;;;;-1:-1:-1;1593:26:12;;-1:-1:-1;1603:10:12;1615:3;1593:9;:26::i;:::-;1357:269;:::o;2588:174:3:-;2655:7;2507:12;;2678:5;:21;2670:69;;;;-1:-1:-1;;;2670:69:3;;10230:2:13;2670:69:3;;;10212:21:13;10269:2;10249:18;;;10242:30;10308:34;10288:18;;;10281:62;-1:-1:-1;;;10359:18:13;;;10352:33;10402:19;;2670:69:3;10028:399:13;2670:69:3;-1:-1:-1;2752:5:3;2588:174::o;1788:92:12:-;1038:6:9;;-1:-1:-1;;;;;1038:6:9;665:10:1;1178:23:9;1170:68;;;;-1:-1:-1;;;1170:68:9;;;;;;;:::i;:::-;1854:13:12::1;:19;1870:3:::0;1854:13;:19:::1;:::i;917:434::-:0;343:4;1015:13;2485:7:3;2507:12;;2432:92;1015:13:12;:29;1007:59;;;;-1:-1:-1;;;1007:59:12;;9417:2:13;1007:59:12;;;9399:21:13;9456:2;9436:18;;;9429:30;-1:-1:-1;;;9475:18:13;;;9468:47;9532:18;;1007:59:12;9215:341:13;1007:59:12;1093:10;1084:20;;;;:8;:20;;;;;;:25;1076:45;;;;-1:-1:-1;;;1076:45:12;;12838:2:13;1076:45:12;;;12820:21:13;12877:1;12857:18;;;12850:29;-1:-1:-1;;;12895:18:13;;;12888:37;12942:18;;1076:45:12;12636:330:13;1076:45:12;1131:14;1148:52;1172:10;1184:14;:3;:12;:14::i;:::-;1155:44;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1155:44:12;;;;;;;;;;1148:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1218:26;;;;;;;;;;;;14094:25:13;;;14167:4;14155:17;;14135:18;;;14128:45;;;;14189:18;;;14182:34;;;14232:18;;;14225:34;;;1131:69:12;;-1:-1:-1;;;;;;1248:7:12;1218:37;;:26;;14066:19:13;;1218:26:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1218:37:12;;1210:64;;;;-1:-1:-1;;;1210:64:12;;14472:2:13;1210:64:12;;;14454:21:13;14511:2;14491:18;;;14484:30;-1:-1:-1;;;14530:18:13;;;14523:44;14584:18;;1210:64:12;14270:338:13;1210:64:12;1293:10;1284:20;;;;:8;:20;;;;;1307:1;1284:24;;1318:26;;1340:3;1318:9;:26::i;:::-;997:354;917:434;;;;:::o;5320:116:3:-;5384:7;5406:20;5418:7;5406:11;:20::i;:::-;:25;;5320:116;-1:-1:-1;;5320:116:3:o;4235:208::-;4299:7;-1:-1:-1;;;;;4322:19:3;;4314:75;;;;-1:-1:-1;;;4314:75:3;;14815:2:13;4314:75:3;;;14797:21:13;14854:2;14834:18;;;14827:30;14893:34;14873:18;;;14866:62;-1:-1:-1;;;14944:18:13;;;14937:41;14995:19;;4314:75:3;14613:407:13;4314:75:3;-1:-1:-1;;;;;;4410:19:3;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;4410:27:3;;4235:208::o;1598:92:9:-;1038:6;;-1:-1:-1;;;;;1038:6:9;665:10:1;1178:23:9;1170:68;;;;-1:-1:-1;;;1170:68:9;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;5638:96:3:-;5694:13;5722:7;5715:14;;;;;:::i;7214:269::-;665:10:1;-1:-1:-1;;;;;7304:24:3;;;7296:63;;;;-1:-1:-1;;;7296:63:3;;15227:2:13;7296:63:3;;;15209:21:13;15266:2;15246:18;;;15239:30;15305:28;15285:18;;;15278:56;15351:18;;7296:63:3;15025:350:13;7296:63:3;665:10:1;7366:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;7366:42:3;;;;;;;;;;;;:53;;-1:-1:-1;;7366:53:3;;;;;;;;;;7430:48;;540:41:13;;;7366:42:3;;665:10:1;7430:48:3;;513:18:13;7430:48:3;;;;;;;7214:269;;:::o;8176:300::-;8307:28;8317:4;8323:2;8327:7;8307:9;:28::i;:::-;8356:48;8379:4;8385:2;8389:7;8398:5;8356:22;:48::i;:::-;8341:130;;;;-1:-1:-1;;;8341:130:3;;;;;;;:::i;:::-;8176:300;;;;:::o;353:37:12:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1886:413::-;1979:13;2017:16;2025:7;8763:4:3;8792:12;-1:-1:-1;8782:22:3;8706:103;2017:16:12;2002:94;;;;-1:-1:-1;;;2002:94:12;;16002:2:13;2002:94:12;;;15984:21:13;16041:2;16021:18;;;16014:30;16080:34;16060:18;;;16053:62;-1:-1:-1;;;16131:18:13;;;16124:45;16186:19;;2002:94:12;15800:411:13;2002:94:12;2109:28;2140:10;:8;:10::i;:::-;2109:41;;2194:1;2169:14;2163:28;:32;:131;;;;;;;;;;;;;;;;;2230:14;2246:18;:7;:16;:18::i;:::-;2266:13;2213:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2163:131;2156:138;1886:413;-1:-1:-1;;;1886:413:12:o;1632:150::-;1038:6:9;;-1:-1:-1;;;;;1038:6:9;665:10:1;1178:23:9;1170:68;;;;-1:-1:-1;;;1170:68:9;;;;;;;:::i;:::-;1721:1:12::1;1715:3;:7;1707:29;;;::::0;-1:-1:-1;;;1707:29:12;;17679:2:13;1707:29:12::1;::::0;::::1;17661:21:13::0;17718:1;17698:18;;;17691:29;-1:-1:-1;;;17736:18:13;;;17729:39;17785:18;;1707:29:12::1;17477:332:13::0;1707:29:12::1;-1:-1:-1::0;;;;;1746:23:12::1;;::::0;;;:17:::1;:23;::::0;;;;:29;1632:150::o;2302:120::-;1038:6:9;;-1:-1:-1;;;;;1038:6:9;665:10:1;1178:23:9;1170:68;;;;-1:-1:-1;;;1170:68:9;;;;;;;:::i;:::-;2384:13:12::1;:33;2400:17:::0;2384:13;:33:::1;:::i;1839:189:9:-:0;1038:6;;-1:-1:-1;;;;;1038:6:9;665:10:1;1178:23:9;1170:68;;;;-1:-1:-1;;;1170:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:9;::::1;1919:73;;;::::0;-1:-1:-1;;;1919:73:9;;18016:2:13;1919:73:9::1;::::0;::::1;17998:21:13::0;18055:2;18035:18;;;18028:30;18094:34;18074:18;;;18067:62;-1:-1:-1;;;18145:18:13;;;18138:36;18191:19;;1919:73:9::1;17814:402:13::0;1919:73:9::1;2002:19;2012:8;2002:9;:19::i;12277:165:3:-:0;12369:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;12369:29:3;-1:-1:-1;;;;;12369:29:3;;;;;;;;;12409:28;;12369:24;;12409:28;;;;;;;12277:165;;;:::o;10694:1484::-;10786:35;10824:20;10836:7;10824:11;:20::i;:::-;10893:18;;10786:58;;-1:-1:-1;10851:22:3;;-1:-1:-1;;;;;10877:34:3;665:10:1;-1:-1:-1;;;;;10877:34:3;;:80;;;-1:-1:-1;665:10:1;10921:20:3;10933:7;10921:11;:20::i;:::-;-1:-1:-1;;;;;10921:36:3;;10877:80;:140;;;-1:-1:-1;10984:18:3;;10967:50;;665:10:1;7541:178:3;:::i;10967:50::-;10851:167;;11040:17;11025:98;;;;-1:-1:-1;;;11025:98:3;;18423:2:13;11025:98:3;;;18405:21:13;18462:2;18442:18;;;18435:30;18501:34;18481:18;;;18474:62;-1:-1:-1;;;18552:18:13;;;18545:48;18610:19;;11025:98:3;18221:414:13;11025:98:3;11167:4;-1:-1:-1;;;;;11145:26:3;:13;:18;;;-1:-1:-1;;;;;11145:26:3;;11130:95;;;;-1:-1:-1;;;11130:95:3;;18842:2:13;11130:95:3;;;18824:21:13;18881:2;18861:18;;;18854:30;18920:34;18900:18;;;18893:62;-1:-1:-1;;;18971:18:13;;;18964:36;19017:19;;11130:95:3;18640:402:13;11130:95:3;-1:-1:-1;;;;;11239:16:3;;11231:66;;;;-1:-1:-1;;;11231:66:3;;19249:2:13;11231:66:3;;;19231:21:13;19288:2;19268:18;;;19261:30;19327:34;19307:18;;;19300:62;-1:-1:-1;;;19378:18:13;;;19371:35;19423:19;;11231:66:3;19047:401:13;11231:66:3;11401:49;11418:1;11422:7;11431:13;:18;;;11401:8;:49::i;:::-;-1:-1:-1;;;;;11457:18:3;;;;;;:12;:18;;;;;:31;;11487:1;;11457:18;:31;;11487:1;;-1:-1:-1;;;;;11457:31:3;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;11457:31:3;;;;;;;;;;;;;;;-1:-1:-1;;;;;11494:16:3;;-1:-1:-1;11494:16:3;;;:12;:16;;;;;:29;;-1:-1:-1;;;11494:16:3;;:29;;-1:-1:-1;;11494:29:3;;:::i;:::-;;;-1:-1:-1;;;;;11494:29:3;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11552:43:3;;;;;;;;-1:-1:-1;;;;;11552:43:3;;;;;;11578:15;11552:43;;;;;;;;;-1:-1:-1;11529:20:3;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;11529:66:3;-1:-1:-1;;;;;;11529:66:3;;;;;;;;;;;11841:11;11541:7;-1:-1:-1;11841:11:3;:::i;:::-;11903:1;11862:24;;;:11;:24;;;;;:29;11819:33;;-1:-1:-1;;;;;;11862:29:3;11858:229;;11919:20;11927:11;8763:4;8792:12;-1:-1:-1;8782:22:3;8706:103;11919:20;11915:166;;;11978:94;;;;;;;;12004:18;;-1:-1:-1;;;;;11978:94:3;;;;;;12034:28;;;;11978:94;;;;;;;;;;-1:-1:-1;11951:24:3;;;:11;:24;;;;;;;:121;;;;;;;;;-1:-1:-1;;;11951:121:3;-1:-1:-1;;;;;;11951:121:3;;;;;;;;;;;;11915:166;12117:7;12113:2;-1:-1:-1;;;;;12098:27:3;12107:4;-1:-1:-1;;;;;12098:27:3;;;;;;;;;;;12131:42;10780:1398;;;10694:1484;;;:::o;8813:96::-;8877:27;8887:2;8891:8;8877:27;;;;;;;;;;;;:9;:27::i;275:703:11:-;331:13;548:5;557:1;548:10;544:51;;-1:-1:-1;;574:10:11;;;;;;;;;;;;-1:-1:-1;;;574:10:11;;;;;275:703::o;544:51::-;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:11;;-1:-1:-1;720:2:11;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:11;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:11;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;849:56:11;;;;;;;;-1:-1:-1;919:11:11;928:2;919:11;;:::i;:::-;;;791:150;;;964:6;275:703;-1:-1:-1;;;;275:703:11:o;4685:586:3:-;-1:-1:-1;;;;;;;;;;;;;;;;;4797:16:3;4805:7;8763:4;8792:12;-1:-1:-1;8782:22:3;8706:103;4797:16;4789:71;;;;-1:-1:-1;;;4789:71:3;;20698:2:13;4789:71:3;;;20680:21:13;20737:2;20717:18;;;20710:30;20776:34;20756:18;;;20749:62;-1:-1:-1;;;20827:18:13;;;20820:40;20877:19;;4789:71:3;20496:406:13;4789:71:3;4867:26;4914:12;4903:7;:23;4899:91;;4957:22;4967:12;4957:7;:22;:::i;:::-;:26;;4982:1;4957:26;:::i;:::-;4936:47;;4899:91;5016:7;4996:207;5033:18;5025:4;:26;4996:207;;5069:31;5103:17;;;:11;:17;;;;;;;;;5069:51;;;;;;;;;-1:-1:-1;;;;;5069:51:3;;;;;-1:-1:-1;;;5069:51:3;;;;;;;;;;;;5132:28;5128:69;;5179:9;4685:586;-1:-1:-1;;;;4685:586:3:o;5128:69::-;-1:-1:-1;5053:6:3;;;;:::i;:::-;;;;4996:207;;;-1:-1:-1;5209:57:3;;-1:-1:-1;;;5209:57:3;;21250:2:13;5209:57:3;;;21232:21:13;21289:2;21269:18;;;21262:30;21328:34;21308:18;;;21301:62;-1:-1:-1;;;21379:18:13;;;21372:45;21434:19;;5209:57:3;21048:411:13;2034:169:9;2108:6;;;-1:-1:-1;;;;;2124:17:9;;;-1:-1:-1;;;;;;2124:17:9;;;;;;;2156:40;;2108:6;;;2124:17;2108:6;;2156:40;;2089:16;;2156:40;2079:124;2034:169;:::o;13947:667:3:-;14079:4;-1:-1:-1;;;;;14095:13:3;;1034:20:0;1080:8;14091:519:3;;14132:72;;-1:-1:-1;;;14132:72:3;;-1:-1:-1;;;;;14132:36:3;;;;;:72;;665:10:1;;14183:4:3;;14189:7;;14198:5;;14132:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14132:72:3;;;;;;;;-1:-1:-1;;14132:72:3;;;;;;;;;;;;:::i;:::-;;;14120:452;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14359:6;:13;14376:1;14359:18;14355:209;;14391:61;;-1:-1:-1;;;14391:61:3;;;;;;;:::i;14355:209::-;14534:6;14528:13;14519:6;14515:2;14511:15;14504:38;14120:452;-1:-1:-1;;;;;;14252:55:3;-1:-1:-1;;;14252:55:3;;-1:-1:-1;14245:62:3;;14091:519;-1:-1:-1;14599:4:3;13947:667;;;;;;:::o;798:112:12:-;858:13;890;883:20;;;;;:::i;9235:1239:3:-;9335:20;9358:12;-1:-1:-1;;;;;9384:16:3;;9376:62;;;;-1:-1:-1;;;9376:62:3;;22414:2:13;9376:62:3;;;22396:21:13;22453:2;22433:18;;;22426:30;22492:34;22472:18;;;22465:62;-1:-1:-1;;;22543:18:13;;;22536:31;22584:19;;9376:62:3;22212:397:13;9376:62:3;9573:21;9581:12;8763:4;8792:12;-1:-1:-1;8782:22:3;8706:103;9573:21;9572:22;9564:64;;;;-1:-1:-1;;;9564:64:3;;22816:2:13;9564:64:3;;;22798:21:13;22855:2;22835:18;;;22828:30;22894:31;22874:18;;;22867:59;22943:18;;9564:64:3;22614:353:13;9564:64:3;9654:12;9642:8;:24;;9634:71;;;;-1:-1:-1;;;9634:71:3;;23174:2:13;9634:71:3;;;23156:21:13;23213:2;23193:18;;;23186:30;23252:34;23232:18;;;23225:62;-1:-1:-1;;;23303:18:13;;;23296:32;23345:19;;9634:71:3;22972:398:13;9634:71:3;-1:-1:-1;;;;;9813:16:3;;9780:30;9813:16;;;:12;:16;;;;;;;;;9780:49;;;;;;;;;-1:-1:-1;;;;;9780:49:3;;;;;-1:-1:-1;;;9780:49:3;;;;;;;;;;;9854:116;;;;;;;;9873:19;;9780:49;;9854:116;;;9873:39;;9903:8;;9873:39;:::i;:::-;-1:-1:-1;;;;;9854:116:3;;;;;9955:8;9920:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;9854:116:3;;;;;;-1:-1:-1;;;;;9835:16:3;;;;;;;:12;:16;;;;;;;;:135;;;;;;;;-1:-1:-1;;;9835:135:3;;;;;;;;;;;;10004:43;;;;;;;;;;;10030:15;10004:43;;;;;;;;9976:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;9976:71:3;-1:-1:-1;;;;;;9976:71:3;;;;;;;;;;;;;;;;;;9988:12;;10096:274;10120:8;10116:1;:12;10096:274;;;10148:38;;10173:12;;-1:-1:-1;;;;;10148:38:3;;;10165:1;;10148:38;;10165:1;;10148:38;10211:59;10242:1;10246:2;10250:12;10264:5;10211:22;:59::i;:::-;10194:147;;;;-1:-1:-1;;;10194:147:3;;;;;;;:::i;:::-;10349:14;;;;:::i;:::-;;;;10130:3;;;;;:::i;:::-;;;;10096:274;;;-1:-1:-1;10376:12:3;:27;;;10409:60;8176:300;14:131:13;-1:-1:-1;;;;;;88:32:13;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:13;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:13;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:13:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:13;;1348:180;-1:-1:-1;1348:180:13:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:13;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:13:o;2360:328::-;2437:6;2445;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2545:29;2564:9;2545:29;:::i;:::-;2535:39;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2678:2;2667:9;2663:18;2650:32;2640:42;;2360:328;;;;;:::o;2693:127::-;2754:10;2749:3;2745:20;2742:1;2735:31;2785:4;2782:1;2775:15;2809:4;2806:1;2799:15;2825:632;2890:5;2920:18;2961:2;2953:6;2950:14;2947:40;;;2967:18;;:::i;:::-;3042:2;3036:9;3010:2;3096:15;;-1:-1:-1;;3092:24:13;;;3118:2;3088:33;3084:42;3072:55;;;3142:18;;;3162:22;;;3139:46;3136:72;;;3188:18;;:::i;:::-;3228:10;3224:2;3217:22;3257:6;3248:15;;3287:6;3279;3272:22;3327:3;3318:6;3313:3;3309:16;3306:25;3303:45;;;3344:1;3341;3334:12;3303:45;3394:6;3389:3;3382:4;3374:6;3370:17;3357:44;3449:1;3442:4;3433:6;3425;3421:19;3417:30;3410:41;;;;2825:632;;;;;:::o;3462:451::-;3531:6;3584:2;3572:9;3563:7;3559:23;3555:32;3552:52;;;3600:1;3597;3590:12;3552:52;3640:9;3627:23;3673:18;3665:6;3662:30;3659:50;;;3705:1;3702;3695:12;3659:50;3728:22;;3781:4;3773:13;;3769:27;-1:-1:-1;3759:55:13;;3810:1;3807;3800:12;3759:55;3833:74;3899:7;3894:2;3881:16;3876:2;3872;3868:11;3833:74;:::i;3918:474::-;4002:6;4010;4018;4026;4079:3;4067:9;4058:7;4054:23;4050:33;4047:53;;;4096:1;4093;4086:12;4047:53;4132:9;4119:23;4109:33;;4192:2;4181:9;4177:18;4164:32;4236:4;4229:5;4225:16;4218:5;4215:27;4205:55;;4256:1;4253;4246:12;4205:55;3918:474;;4279:5;;-1:-1:-1;;;;4331:2:13;4316:18;;4303:32;;4382:2;4367:18;4354:32;;3918:474::o;4397:186::-;4456:6;4509:2;4497:9;4488:7;4484:23;4480:32;4477:52;;;4525:1;4522;4515:12;4477:52;4548:29;4567:9;4548:29;:::i;4588:347::-;4653:6;4661;4714:2;4702:9;4693:7;4689:23;4685:32;4682:52;;;4730:1;4727;4720:12;4682:52;4753:29;4772:9;4753:29;:::i;:::-;4743:39;;4832:2;4821:9;4817:18;4804:32;4879:5;4872:13;4865:21;4858:5;4855:32;4845:60;;4901:1;4898;4891:12;4845:60;4924:5;4914:15;;;4588:347;;;;;:::o;4940:667::-;5035:6;5043;5051;5059;5112:3;5100:9;5091:7;5087:23;5083:33;5080:53;;;5129:1;5126;5119:12;5080:53;5152:29;5171:9;5152:29;:::i;:::-;5142:39;;5200:38;5234:2;5223:9;5219:18;5200:38;:::i;:::-;5190:48;;5285:2;5274:9;5270:18;5257:32;5247:42;;5340:2;5329:9;5325:18;5312:32;5367:18;5359:6;5356:30;5353:50;;;5399:1;5396;5389:12;5353:50;5422:22;;5475:4;5467:13;;5463:27;-1:-1:-1;5453:55:13;;5504:1;5501;5494:12;5453:55;5527:74;5593:7;5588:2;5575:16;5570:2;5566;5562:11;5527:74;:::i;:::-;5517:84;;;4940:667;;;;;;;:::o;5612:254::-;5680:6;5688;5741:2;5729:9;5720:7;5716:23;5712:32;5709:52;;;5757:1;5754;5747:12;5709:52;5793:9;5780:23;5770:33;;5822:38;5856:2;5845:9;5841:18;5822:38;:::i;:::-;5812:48;;5612:254;;;;;:::o;5871:260::-;5939:6;5947;6000:2;5988:9;5979:7;5975:23;5971:32;5968:52;;;6016:1;6013;6006:12;5968:52;6039:29;6058:9;6039:29;:::i;:::-;6029:39;;6087:38;6121:2;6110:9;6106:18;6087:38;:::i;6136:380::-;6215:1;6211:12;;;;6258;;;6279:61;;6333:4;6325:6;6321:17;6311:27;;6279:61;6386:2;6378:6;6375:14;6355:18;6352:38;6349:161;;6432:10;6427:3;6423:20;6420:1;6413:31;6467:4;6464:1;6457:15;6495:4;6492:1;6485:15;6349:161;;6136:380;;;:::o;8167:127::-;8228:10;8223:3;8219:20;8216:1;8209:31;8259:4;8256:1;8249:15;8283:4;8280:1;8273:15;8299:135;8338:3;8359:17;;;8356:43;;8379:18;;:::i;:::-;-1:-1:-1;8426:1:13;8415:13;;8299:135::o;8854:356::-;9056:2;9038:21;;;9075:18;;;9068:30;9134:34;9129:2;9114:18;;9107:62;9201:2;9186:18;;8854:356::o;9895:128::-;9962:9;;;9983:11;;;9980:37;;;9997:18;;:::i;10558:545::-;10660:2;10655:3;10652:11;10649:448;;;10696:1;10721:5;10717:2;10710:17;10766:4;10762:2;10752:19;10836:2;10824:10;10820:19;10817:1;10813:27;10807:4;10803:38;10872:4;10860:10;10857:20;10854:47;;;-1:-1:-1;10895:4:13;10854:47;10950:2;10945:3;10941:12;10938:1;10934:20;10928:4;10924:31;10914:41;;11005:82;11023:2;11016:5;11013:13;11005:82;;;11068:17;;;11049:1;11038:13;11005:82;;11279:1352;11405:3;11399:10;11432:18;11424:6;11421:30;11418:56;;;11454:18;;:::i;:::-;11483:97;11573:6;11533:38;11565:4;11559:11;11533:38;:::i;:::-;11527:4;11483:97;:::i;:::-;11635:4;;11699:2;11688:14;;11716:1;11711:663;;;;12418:1;12435:6;12432:89;;;-1:-1:-1;12487:19:13;;;12481:26;12432:89;-1:-1:-1;;11236:1:13;11232:11;;;11228:24;11224:29;11214:40;11260:1;11256:11;;;11211:57;12534:81;;11681:944;;11711:663;10505:1;10498:14;;;10542:4;10529:18;;-1:-1:-1;;11747:20:13;;;11865:236;11879:7;11876:1;11873:14;11865:236;;;11968:19;;;11962:26;11947:42;;12060:27;;;;12028:1;12016:14;;;;11895:19;;11865:236;;;11869:3;12129:6;12120:7;12117:19;12114:201;;;12190:19;;;12184:26;-1:-1:-1;;12273:1:13;12269:14;;;12285:3;12265:24;12261:37;12257:42;12242:58;12227:74;;12114:201;-1:-1:-1;;;;;12361:1:13;12345:14;;;12341:22;12328:36;;-1:-1:-1;11279:1352:13:o;12971:410::-;13185:26;13181:31;13172:6;13168:2;13164:15;13160:53;13155:3;13148:66;13130:3;13243:6;13237:13;13259:75;13327:6;13322:2;13317:3;13313:12;13306:4;13298:6;13294:17;13259:75;:::i;:::-;13354:16;;;;13372:2;13350:25;;12971:410;-1:-1:-1;;;12971:410:13:o;13386:287::-;13515:3;13553:6;13547:13;13569:66;13628:6;13623:3;13616:4;13608:6;13604:17;13569:66;:::i;:::-;13651:16;;;;;13386:287;-1:-1:-1;;13386:287:13:o;13678:184::-;13748:6;13801:2;13789:9;13780:7;13776:23;13772:32;13769:52;;;13817:1;13814;13807:12;13769:52;-1:-1:-1;13840:16:13;;13678:184;-1:-1:-1;13678:184:13:o;15380:415::-;15582:2;15564:21;;;15621:2;15601:18;;;15594:30;15660:34;15655:2;15640:18;;15633:62;-1:-1:-1;;;15726:2:13;15711:18;;15704:49;15785:3;15770:19;;15380:415::o;16216:1256::-;16440:3;16478:6;16472:13;16504:4;16517:64;16574:6;16569:3;16564:2;16556:6;16552:15;16517:64;:::i;:::-;16644:13;;16603:16;;;;16666:68;16644:13;16603:16;16701:15;;;16666:68;:::i;:::-;16823:13;;16756:20;;;16796:1;;16861:36;16823:13;16861:36;:::i;:::-;16916:1;16933:18;;;16960:141;;;;17115:1;17110:337;;;;16926:521;;16960:141;-1:-1:-1;;16995:24:13;;16981:39;;17072:16;;17065:24;17051:39;;17040:51;;;-1:-1:-1;16960:141:13;;17110:337;17141:6;17138:1;17131:17;17189:2;17186:1;17176:16;17214:1;17228:169;17242:8;17239:1;17236:15;17228:169;;;17324:14;;17309:13;;;17302:37;17367:16;;;;17259:10;;17228:169;;;17232:3;;17428:8;17421:5;17417:20;17410:27;;16926:521;-1:-1:-1;17463:3:13;;16216:1256;-1:-1:-1;;;;;;;;;;16216:1256:13:o;19453:200::-;-1:-1:-1;;;;;19589:10:13;;;19577;;;19573:27;;19612:12;;;19609:38;;;19627:18;;:::i;:::-;19609:38;19453:200;;;;:::o;19658:197::-;-1:-1:-1;;;;;19780:10:13;;;19792;;;19776:27;;19815:11;;;19812:37;;;19829:18;;:::i;19860:125::-;19925:9;;;19946:10;;;19943:36;;;19959:18;;:::i;19990:127::-;20051:10;20046:3;20042:20;20039:1;20032:31;20082:4;20079:1;20072:15;20106:4;20103:1;20096:15;20122:120;20162:1;20188;20178:35;;20193:18;;:::i;:::-;-1:-1:-1;20227:9:13;;20122:120::o;20247:112::-;20279:1;20305;20295:35;;20310:18;;:::i;:::-;-1:-1:-1;20344:9:13;;20247:112::o;20364:127::-;20425:10;20420:3;20416:20;20413:1;20406:31;20456:4;20453:1;20446:15;20480:4;20477:1;20470:15;20907:136;20946:3;20974:5;20964:39;;20983:18;;:::i;:::-;-1:-1:-1;;;21019:18:13;;20907:136::o;21464:489::-;-1:-1:-1;;;;;21733:15:13;;;21715:34;;21785:15;;21780:2;21765:18;;21758:43;21832:2;21817:18;;21810:34;;;21880:3;21875:2;21860:18;;21853:31;;;21658:4;;21901:46;;21927:19;;21919:6;21901:46;:::i;:::-;21893:54;21464:489;-1:-1:-1;;;;;;21464:489:13:o;21958:249::-;22027:6;22080:2;22068:9;22059:7;22055:23;22051:32;22048:52;;;22096:1;22093;22086:12;22048:52;22128:9;22122:16;22147:30;22171:5;22147:30;:::i

Swarm Source

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