ETH Price: $3,309.65 (-3.62%)
Gas: 14 Gwei

Token

Pixel Women (PixelWomen)
 

Overview

Max Total Supply

5,555 PixelWomen

Holders

498

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
9 PixelWomen
0xF5dd83180669255D64686921eA525F0096b95f23
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:
pixelwomencontract

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-28
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
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);
}

pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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



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



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


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



pragma solidity ^0.8.0;


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



pragma solidity ^0.8.0;



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



pragma solidity ^0.8.0;

/**
 * @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 virtual 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 virtual 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, "");
  }

  function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
         require(_exists(tokenId), "ERC721: operator query for nonexistent token");
         address owner = ERC721A.ownerOf(tokenId);
         return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
   }
  /**
   * @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
  ) internal virtual {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    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 {}
}



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



pragma solidity ^0.8.0;


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


pragma solidity ^0.8.0;

interface IPWOWStaking {
    function deposit(address account, uint256[] calldata tokenIds) external;
}

contract pixelwomencontract is Ownable, ERC721A, ReentrancyGuard {
  uint256 public maxTx;
  uint256 public maxPerFreeMint = 1;  
  uint256 public immutable amountForDevs;

  uint256 public publicsalePrice =   25000000000000000;    
  uint256 public MAX_FREETOKEN = 500;   
  bool public IsActive = true;
  IPWOWStaking public PWOWStaking;

  constructor(
    uint256 maxBatchSize_,
    uint256 collectionSize_,
    uint256 amountForDevs_
  ) ERC721A("Pixel Women", "PixelWomen", maxBatchSize_, collectionSize_) {
    maxTx = maxBatchSize_;
    amountForDevs = amountForDevs_;
  }

  function setPWOWStaking(address _StakingAddress) external onlyOwner {
    PWOWStaking = IPWOWStaking(_StakingAddress);
  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }

  function setpublicsalePrice(uint _price) external onlyOwner {
    publicsalePrice = _price;
  }        

  function setmaxTx(uint _maxTx) external onlyOwner {
    maxTx = _maxTx;
  } 

  function setmaxPerFreeMint(uint _maxPerFreeMint) external onlyOwner {
    maxPerFreeMint = _maxPerFreeMint;
  }   

  function setMaxFreeMint(uint _MAX_FREETOKEN) external onlyOwner {
    MAX_FREETOKEN = _MAX_FREETOKEN;
  }         
	
  function Paused() public onlyOwner {
    IsActive = !IsActive;
  }

  function freeMint(uint256 quantity) external payable callerIsUser {
    require(IsActive, "Sale must be active to mint");
    require(quantity > 0 && quantity <= maxPerFreeMint, "Can only mint max token at a time");  
    require(totalSupply() + quantity <= MAX_FREETOKEN, "reached max Free Mint");

    uint256[] memory tokenIds = new uint256[](quantity);

    for (uint i = 0; i < quantity; i++) {
        tokenIds[i] = totalSupply()+i;
    }

    _safeMint(address(PWOWStaking), quantity);
    PWOWStaking.deposit(msg.sender, tokenIds);
  }

  function publicMint(uint256 quantity, bool _stake)
    external
    payable
    callerIsUser
  {
    require(IsActive, "Sale must be active to mint");
    require(quantity > 0 && quantity <= maxTx, "Can only mint max token at a time");
    require(msg.value >= publicsalePrice*quantity, "Need to send more ETH.");
    require(totalSupply() + quantity <= collectionSize, "reached max supply");

    if (_stake) {
        uint256[] memory tokenIds = new uint256[](quantity);

        for (uint i = 0; i < quantity; i++) {
            tokenIds[i] = totalSupply()+i;
        }

        _safeMint(address(PWOWStaking), quantity);
        PWOWStaking.deposit(msg.sender, tokenIds);
    }
    else{
        _safeMint(msg.sender, quantity);       
    }
  }

  function MintbyOwner(address _to, uint256 _reserveAmount) public onlyOwner {        
    uint supply = totalSupply();
    require(_reserveAmount > 0 && (supply+_reserveAmount) <= collectionSize, "Not enough token left");
    _safeMint(_to, _reserveAmount);
  }

  // // metadata URI
  string private _baseTokenURI;

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

  function setBaseURI(string calldata baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }

  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant {
    _setOwnersExplicit(quantity);
  }

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

  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }

 function transferFrom(address from, address to, uint tokenId) public virtual override {
    // Hardcode the Manager's approval so that users don't have to waste gas approving
    if (_msgSender() != address(PWOWStaking))
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
    _transfer(from, to, tokenId);
 }

 function tokensOfOwner(address _owner) external view returns(uint256[] memory ) {
    uint256 tokenCount = balanceOf(_owner);
    if (tokenCount == 0) {
        // Return an empty array
        return new uint256[](0);
    } else {
        uint256[] memory result = new uint256[](tokenCount);
        uint256 index;
        for (index = 0; index < tokenCount; index++) {
            result[index] = tokenOfOwnerByIndex(_owner, index);
        }
        return result;
    }
 }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"amountForDevs_","type":"uint256"}],"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":"IsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FREETOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"MintbyOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PWOWStaking","outputs":[{"internalType":"contract IPWOWStaking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Paused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"amountForDevs","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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"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":"maxPerFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bool","name":"_stake","type":"bool"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicsalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MAX_FREETOKEN","type":"uint256"}],"name":"setMaxFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_StakingAddress","type":"address"}],"name":"setPWOWStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerFreeMint","type":"uint256"}],"name":"setmaxPerFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"setmaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setpublicsalePrice","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e060405260006001818155600891909155600b8190556658d15e17628000600c556101f4600d55600e805460ff191690911790553480156200004157600080fd5b50604051620035993803806200359983398101604081905262000064916200025c565b6040518060400160405280600b81526020016a2834bc32b6102bb7b6b2b760a91b8152506040518060400160405280600a8152602001692834bc32b62bb7b6b2b760b11b8152508484620000c7620000c16200016260201b60201c565b62000166565b60008111620000f35760405162461bcd60e51b8152600401620000ea90620002d1565b60405180910390fd5b60008211620001165760405162461bcd60e51b8152600401620000ea906200028a565b83516200012b906002906020870190620001b6565b50825162000141906003906020860190620001b6565b5060a09190915260805250506001600955600a929092555060c0526200035c565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001c4906200031f565b90600052602060002090601f016020900481019282620001e8576000855562000233565b82601f106200020357805160ff191683800117855562000233565b8280016001018555821562000233579182015b828111156200023357825182559160200191906001019062000216565b506200024192915062000245565b5090565b5b8082111562000241576000815560010162000246565b60008060006060848603121562000271578283fd5b8351925060208401519150604084015190509250925092565b60208082526027908201527f455243373231413a206d61782062617463682073697a65206d757374206265206040820152666e6f6e7a65726f60c81b606082015260800190565b6020808252602e908201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060408201526d6e6f6e7a65726f20737570706c7960901b606082015260800190565b6002810460018216806200033457607f821691505b602082108114156200035657634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516131ea620003af6000396000611704015260008181611c9101528181611cbb01526120ab015260008181610a34015281816112d201528181611b170152611b4901526131ea6000f3fe6080604052600436106102515760003560e01c8063742a4c9b11610139578063a243d3b6116100b6578063c87b56dd1161007a578063c87b56dd14610686578063d7224ba0146106a6578063dc33e681146106bb578063e985e9c5146106db578063f2fde38b146106fb578063fbe1aa511461071b57610251565b8063a243d3b614610609578063ac4460021461061c578063b0c2b56114610631578063b88d4fde14610651578063c43fe78d1461067157610251565b80638da5cb5b116100fd5780638da5cb5b1461057d5780639231ab2a1461059257806395d89b41146105bf5780639e87fac8146105d4578063a22cb465146105e957610251565b8063742a4c9b146104f35780637437681e146105135780637c928fe9146105285780637eff4b671461053b5780638462151c1461055057610251565b80632f745c59116101d25780634f6ccce7116101965780634f6ccce71461043e57806355f804b31461045e5780636352211e1461047e578063670fc7751461049e57806370a08231146104be578063715018a6146104de57610251565b80632f745c59146103b4578063304dd754146103d45780634080cbbd146103e957806342842e0e146104095780634e5efa3f1461042957610251565b806318160ddd1161021957806318160ddd1461031d5780631e3c18561461033f57806323b872dd14610354578063288ba4c6146103745780632d20fb601461039457610251565b806301ffc9a71461025657806306fdde031461028c578063081812fc146102ae578063095ea7b3146102db57806316fc0366146102fd575b600080fd5b34801561026257600080fd5b5061027661027136600461254a565b610730565b6040516102839190612748565b60405180910390f35b34801561029857600080fd5b506102a1610793565b6040516102839190612753565b3480156102ba57600080fd5b506102ce6102c93660046125ee565b610825565b60405161028391906126c0565b3480156102e757600080fd5b506102fb6102f6366004612521565b610871565b005b34801561030957600080fd5b506102fb6103183660046123a6565b61090a565b34801561032957600080fd5b50610332610971565b6040516102839190613000565b34801561034b57600080fd5b50610332610977565b34801561036057600080fd5b506102fb61036f3660046123f2565b61097d565b34801561038057600080fd5b506102fb61038f366004612521565b6109dc565b3480156103a057600080fd5b506102fb6103af3660046125ee565b610a86565b3480156103c057600080fd5b506103326103cf366004612521565b610afe565b3480156103e057600080fd5b50610276610bf9565b3480156103f557600080fd5b506102fb6104043660046125ee565b610c02565b34801561041557600080fd5b506102fb6104243660046123f2565b610c46565b34801561043557600080fd5b506102ce610c61565b34801561044a57600080fd5b506103326104593660046125ee565b610c75565b34801561046a57600080fd5b506102fb610479366004612582565b610ca1565b34801561048a57600080fd5b506102ce6104993660046125ee565b610cec565b3480156104aa57600080fd5b506102fb6104b93660046125ee565b610cfe565b3480156104ca57600080fd5b506103326104d93660046123a6565b610d42565b3480156104ea57600080fd5b506102fb610d8f565b3480156104ff57600080fd5b506102fb61050e3660046125ee565b610dda565b34801561051f57600080fd5b50610332610e1e565b6102fb6105363660046125ee565b610e24565b34801561054757600080fd5b50610332610ffe565b34801561055c57600080fd5b5061057061056b3660046123a6565b611004565b6040516102839190612735565b34801561058957600080fd5b506102ce6110e4565b34801561059e57600080fd5b506105b26105ad3660046125ee565b6110f3565b6040516102839190612fd7565b3480156105cb57600080fd5b506102a1611104565b3480156105e057600080fd5b506102fb611113565b3480156105f557600080fd5b506102fb6106043660046124f8565b611166565b6102fb610617366004612606565b611234565b34801561062857600080fd5b506102fb61146f565b34801561063d57600080fd5b506102fb61064c3660046125ee565b61154c565b34801561065d57600080fd5b506102fb61066c36600461242d565b611590565b34801561067d57600080fd5b506103326115c9565b34801561069257600080fd5b506102a16106a13660046125ee565b6115cf565b3480156106b257600080fd5b50610332611652565b3480156106c757600080fd5b506103326106d63660046123a6565b611658565b3480156106e757600080fd5b506102766106f63660046123c0565b611663565b34801561070757600080fd5b506102fb6107163660046123a6565b611691565b34801561072757600080fd5b50610332611702565b60006001600160e01b031982166380ac58cd60e01b148061076157506001600160e01b03198216635b5e139f60e01b145b8061077c57506001600160e01b0319821663780e9d6360e01b145b8061078b575061078b82611726565b90505b919050565b6060600280546107a2906130f8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce906130f8565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b5050505050905090565b60006108308261173f565b6108555760405162461bcd60e51b815260040161084c90612f48565b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061087c82610cec565b9050806001600160a01b0316836001600160a01b031614156108b05760405162461bcd60e51b815260040161084c90612c76565b806001600160a01b03166108c2611746565b6001600160a01b031614806108de57506108de816106f6611746565b6108fa5760405162461bcd60e51b815260040161084c90612a0c565b61090583838361174a565b505050565b610912611746565b6001600160a01b03166109236110e4565b6001600160a01b0316146109495760405162461bcd60e51b815260040161084c90612b5d565b600e80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60015490565b600b5481565b600e5461010090046001600160a01b0316610996611746565b6001600160a01b0316146109d1576109b56109af611746565b826117a6565b6109d15760405162461bcd60e51b815260040161084c90612ce2565b61090583838361182b565b6109e4611746565b6001600160a01b03166109f56110e4565b6001600160a01b031614610a1b5760405162461bcd60e51b815260040161084c90612b5d565b6000610a25610971565b9050600082118015610a6057507f0000000000000000000000000000000000000000000000000000000000000000610a5d838361302b565b11155b610a7c5760405162461bcd60e51b815260040161084c90612c47565b6109058383611abc565b610a8e611746565b6001600160a01b0316610a9f6110e4565b6001600160a01b031614610ac55760405162461bcd60e51b815260040161084c90612b5d565b60026009541415610ae85760405162461bcd60e51b815260040161084c90612ec2565b6002600955610af681611ad6565b506001600955565b6000610b0983610d42565b8210610b275760405162461bcd60e51b815260040161084c90612766565b6000610b31610971565b905060008060005b83811015610bda576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610b8b57805192505b876001600160a01b0316836001600160a01b03161415610bc75786841415610bb957509350610bf392505050565b83610bc38161312d565b9450505b5080610bd28161312d565b915050610b39565b5060405162461bcd60e51b815260040161084c90612e2e565b92915050565b600e5460ff1681565b610c0a611746565b6001600160a01b0316610c1b6110e4565b6001600160a01b031614610c415760405162461bcd60e51b815260040161084c90612b5d565b600b55565b61090583838360405180602001604052806000815250611590565b600e5461010090046001600160a01b031681565b6000610c7f610971565b8210610c9d5760405162461bcd60e51b815260040161084c90612879565b5090565b610ca9611746565b6001600160a01b0316610cba6110e4565b6001600160a01b031614610ce05760405162461bcd60e51b815260040161084c90612b5d565b610905600f83836122d3565b6000610cf782611c60565b5192915050565b610d06611746565b6001600160a01b0316610d176110e4565b6001600160a01b031614610d3d5760405162461bcd60e51b815260040161084c90612b5d565b600c55565b60006001600160a01b038216610d6a5760405162461bcd60e51b815260040161084c90612aa0565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b610d97611746565b6001600160a01b0316610da86110e4565b6001600160a01b031614610dce5760405162461bcd60e51b815260040161084c90612b5d565b610dd86000611d72565b565b610de2611746565b6001600160a01b0316610df36110e4565b6001600160a01b031614610e195760405162461bcd60e51b815260040161084c90612b5d565b600d55565b600a5481565b323314610e435760405162461bcd60e51b815260040161084c906129d5565b600e5460ff16610e655760405162461bcd60e51b815260040161084c90612952565b600081118015610e775750600b548111155b610e935760405162461bcd60e51b815260040161084c90612838565b600d5481610e9f610971565b610ea9919061302b565b1115610ec75760405162461bcd60e51b815260040161084c90612c18565b6000816001600160401b03811115610eef57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610f18578160200160208202803683370190505b50905060005b82811015610f765780610f2f610971565b610f39919061302b565b828281518110610f5957634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610f6e8161312d565b915050610f1e565b50600e54610f929061010090046001600160a01b031683611abc565b600e546040516314e2c09d60e31b81526101009091046001600160a01b03169063a71604e890610fc89033908590600401612711565b600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b505050505050565b600c5481565b6060600061101183610d42565b90508061102e57505060408051600081526020810190915261078e565b6000816001600160401b0381111561105657634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561107f578160200160208202803683370190505b50905060005b828110156110d4576110978582610afe565b8282815181106110b757634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806110cc8161312d565b915050611085565b50915061078e9050565b50919050565b6000546001600160a01b031690565b6110fb612353565b61078b82611c60565b6060600380546107a2906130f8565b61111b611746565b6001600160a01b031661112c6110e4565b6001600160a01b0316146111525760405162461bcd60e51b815260040161084c90612b5d565b600e805460ff19811660ff90911615179055565b61116e611746565b6001600160a01b0316826001600160a01b0316141561119f5760405162461bcd60e51b815260040161084c90612be1565b80600760006111ac611746565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556111f0611746565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112289190612748565b60405180910390a35050565b3233146112535760405162461bcd60e51b815260040161084c906129d5565b600e5460ff166112755760405162461bcd60e51b815260040161084c90612952565b6000821180156112875750600a548211155b6112a35760405162461bcd60e51b815260040161084c90612838565b81600c546112b19190613057565b3410156112d05760405162461bcd60e51b815260040161084c90612d86565b7f0000000000000000000000000000000000000000000000000000000000000000826112fa610971565b611304919061302b565b11156113225760405162461bcd60e51b815260040161084c90612aeb565b8015611461576000826001600160401b0381111561135057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611379578160200160208202803683370190505b50905060005b838110156113d75780611390610971565b61139a919061302b565b8282815181106113ba57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806113cf8161312d565b91505061137f565b50600e546113f39061010090046001600160a01b031684611abc565b600e546040516314e2c09d60e31b81526101009091046001600160a01b03169063a71604e8906114299033908590600401612711565b600060405180830381600087803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b505050505061146b565b61146b3383611abc565b5050565b611477611746565b6001600160a01b03166114886110e4565b6001600160a01b0316146114ae5760405162461bcd60e51b815260040161084c90612b5d565b600260095414156114d15760405162461bcd60e51b815260040161084c90612ec2565b6002600955604051600090339047906114e9906126bd565b60006040518083038185875af1925050503d8060008114611526576040519150601f19603f3d011682016040523d82523d6000602084013e61152b565b606091505b5050905080610af65760405162461bcd60e51b815260040161084c90612cb8565b611554611746565b6001600160a01b03166115656110e4565b6001600160a01b03161461158b5760405162461bcd60e51b815260040161084c90612b5d565b600a55565b61159b84848461182b565b6115a784848484611dc2565b6115c35760405162461bcd60e51b815260040161084c90612d33565b50505050565b600d5481565b60606115da8261173f565b6115f65760405162461bcd60e51b815260040161084c90612b92565b6000611600611edd565b90506000815111611620576040518060200160405280600081525061164b565b8061162a84611eec565b60405160200161163b92919061268e565b6040516020818303038152906040525b9392505050565b60085481565b600061078b82612006565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b611699611746565b6001600160a01b03166116aa6110e4565b6001600160a01b0316146116d05760405162461bcd60e51b815260040161084c90612b5d565b6001600160a01b0381166116f65760405162461bcd60e51b815260040161084c906127a8565b6116ff81611d72565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b031981166301ffc9a760e01b14919050565b6001541190565b3390565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006117b18261173f565b6117cd5760405162461bcd60e51b815260040161084c90612989565b60006117d883610cec565b9050806001600160a01b0316846001600160a01b031614806118135750836001600160a01b031661180884610825565b6001600160a01b0316145b8061182357506118238185611663565b949350505050565b600061183682611c60565b9050836001600160a01b031681600001516001600160a01b03161461186d5760405162461bcd60e51b815260040161084c90612b17565b6001600160a01b0383166118935760405162461bcd60e51b815260040161084c906128bc565b6118a084848460016115c3565b6118b0600083836000015161174a565b6001600160a01b03841660009081526005602052604081208054600192906118e29084906001600160801b0316613076565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0385166000908152600560205260408120805460019450909261192e91859116613009565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380861682526001600160401b03428116602080850191825260008881526004909152948520935184549151909216600160a01b0267ffffffffffffffff60a01b19929093166001600160a01b031990911617161790556119c383600161302b565b6000818152600460205260409020549091506001600160a01b0316611a67576119eb8161173f565b15611a675760408051808201825283516001600160a01b0390811682526020808601516001600160401b0390811682850190815260008781526004909352949091209251835494516001600160a01b031990951692169190911767ffffffffffffffff60a01b1916600160a01b93909116929092029190911790555b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ab585858560016115c3565b5050505050565b61146b82826040518060200160405280600081525061205a565b60085481611af65760405162461bcd60e51b815260040161084c90612a69565b60006001611b04848461302b565b611b0e919061309e565b9050611b3b60017f000000000000000000000000000000000000000000000000000000000000000061309e565b811115611b7057611b6d60017f000000000000000000000000000000000000000000000000000000000000000061309e565b90505b611b798161173f565b611b955760405162461bcd60e51b815260040161084c90612e7c565b815b818111611c4c576000818152600460205260409020546001600160a01b0316611c3a576000611bc582611c60565b60408051808201825282516001600160a01b0390811682526020938401516001600160401b0390811685840190815260008881526004909652939094209151825493516001600160a01b031990941691161767ffffffffffffffff60a01b1916600160a01b9290931691909102919091179055505b80611c448161312d565b915050611b97565b50611c5881600161302b565b600855505050565b611c68612353565b611c718261173f565b611c8d5760405162461bcd60e51b815260040161084c906127ee565b60007f00000000000000000000000000000000000000000000000000000000000000008310611cee57611ce07f00000000000000000000000000000000000000000000000000000000000000008461309e565b611ceb90600161302b565b90505b825b818110611d59576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215611d4657925061078e915050565b5080611d51816130e1565b915050611cf0565b5060405162461bcd60e51b815260040161084c90612ef9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611dd6846001600160a01b03166122cd565b15611ed257836001600160a01b031663150b7a02611df2611746565b8786866040518563ffffffff1660e01b8152600401611e1494939291906126d4565b602060405180830381600087803b158015611e2e57600080fd5b505af1925050508015611e5e575060408051601f3d908101601f19168201909252611e5b91810190612566565b60015b611eb8573d808015611e8c576040519150601f19603f3d011682016040523d82523d6000602084013e611e91565b606091505b508051611eb05760405162461bcd60e51b815260040161084c90612d33565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611823565b506001949350505050565b6060600f80546107a2906130f8565b606081611f1157506040805180820190915260018152600360fc1b602082015261078e565b8160005b8115611f3b5780611f258161312d565b9150611f349050600a83613043565b9150611f15565b6000816001600160401b03811115611f6357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611f8d576020820181803683370190505b5090505b841561182357611fa260018361309e565b9150611faf600a86613148565b611fba90603061302b565b60f81b818381518110611fdd57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611fff600a86613043565b9450611f91565b60006001600160a01b03821661202e5760405162461bcd60e51b815260040161084c90612901565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b0384166120835760405162461bcd60e51b815260040161084c90612ded565b61208c8161173f565b156120a95760405162461bcd60e51b815260040161084c90612db6565b7f00000000000000000000000000000000000000000000000000000000000000008311156120e95760405162461bcd60e51b815260040161084c90612f95565b6120f660008583866115c3565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612152908790613009565b6001600160801b031681526020018583602001516121709190613009565b6001600160801b039081169091526001600160a01b03808816600081815260056020908152604080832087518154988401518816600160801b029088166fffffffffffffffffffffffffffffffff199099169890981790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b0267ffffffffffffffff60a01b19959093166001600160a01b031990941693909317939093161790915582905b858110156122ba5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461227e6000888488611dc2565b61229a5760405162461bcd60e51b815260040161084c90612d33565b816122a48161312d565b92505080806122b29061312d565b915050612231565b506001819055610ff660008785886115c3565b3b151590565b8280546122df906130f8565b90600052602060002090601f0160209004810192826123015760008555612347565b82601f1061231a5782800160ff19823516178555612347565b82800160010185558215612347579182015b8281111561234757823582559160200191906001019061232c565b50610c9d92915061236a565b604080518082019091526000808252602082015290565b5b80821115610c9d576000815560010161236b565b80356001600160a01b038116811461078e57600080fd5b8035801515811461078e57600080fd5b6000602082840312156123b7578081fd5b61164b8261237f565b600080604083850312156123d2578081fd5b6123db8361237f565b91506123e96020840161237f565b90509250929050565b600080600060608486031215612406578081fd5b61240f8461237f565b925061241d6020850161237f565b9150604084013590509250925092565b60008060008060808587031215612442578081fd5b61244b8561237f565b9350602061245a81870161237f565b93506040860135925060608601356001600160401b038082111561247c578384fd5b818801915088601f83011261248f578384fd5b8135818111156124a1576124a1613188565b604051601f8201601f19168101850183811182821017156124c4576124c4613188565b60405281815283820185018b10156124da578586fd5b81858501868301379081019093019390935250939692955090935050565b6000806040838503121561250a578182fd5b6125138361237f565b91506123e960208401612396565b60008060408385031215612533578182fd5b61253c8361237f565b946020939093013593505050565b60006020828403121561255b578081fd5b813561164b8161319e565b600060208284031215612577578081fd5b815161164b8161319e565b60008060208385031215612594578182fd5b82356001600160401b03808211156125aa578384fd5b818501915085601f8301126125bd578384fd5b8135818111156125cb578485fd5b8660208285010111156125dc578485fd5b60209290920196919550909350505050565b6000602082840312156125ff578081fd5b5035919050565b60008060408385031215612618578182fd5b823591506123e960208401612396565b6000815180845260208085019450808401835b838110156126575781518752958201959082019060010161263b565b509495945050505050565b6000815180845261267a8160208601602086016130b5565b601f01601f19169290920160200192915050565b600083516126a08184602088016130b5565b8351908301906126b48183602088016130b5565b01949350505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061270790830184612662565b9695505050505050565b6001600160a01b038316815260406020820181905260009061182390830184612628565b60006020825261164b6020830184612628565b901515815260200190565b60006020825261164b6020830184612662565b60208082526022908201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602a908201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736040820152693a32b73a103a37b5b2b760b11b606082015260800190565b60208082526021908201527f43616e206f6e6c79206d696e74206d617820746f6b656e20617420612074696d6040820152606560f81b606082015260800190565b60208082526023908201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756040820152626e647360e81b606082015260800190565b60208082526025908201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526031908201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260408201527020746865207a65726f206164647265737360781b606082015260800190565b6020808252601b908201527f53616c65206d7573742062652061637469766520746f206d696e740000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b60208082526039908201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60408201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606082015260800190565b60208082526018908201527f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000604082015260600190565b6020808252602b908201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526012908201527172656163686564206d617820737570706c7960701b604082015260600190565b60208082526026908201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746040820152651037bbb732b960d11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252601a908201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604082015260600190565b6020808252601590820152741c995858da1959081b585e08119c995948135a5b9d605a1b604082015260600190565b602080825260159082015274139bdd08195b9bdd59da081d1bdad95b881b19599d605a1b604082015260600190565b60208082526022908201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020808252601690820152752732b2b2103a379039b2b7321036b7b9329022aa241760511b604082015260600190565b6020808252601d908201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604082015260600190565b60208082526021908201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060408201526d0deeedccae440c4f240d2dcc8caf60931b606082015260800190565b60208082526026908201527f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360408201526506c65616e75760d41b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602f908201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560408201526e1037bbb732b91037b3103a37b5b2b760891b606082015260800190565b6020808252602d908201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560408201526c3c34b9ba32b73a103a37b5b2b760991b606082015260800190565b60208082526022908201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696040820152610ced60f31b606082015260800190565b81516001600160a01b031681526020918201516001600160401b03169181019190915260400190565b90815260200190565b60006001600160801b038083168185168083038211156126b4576126b461315c565b6000821982111561303e5761303e61315c565b500190565b60008261305257613052613172565b500490565b60008160001904831182151516156130715761307161315c565b500290565b60006001600160801b03838116908316818110156130965761309661315c565b039392505050565b6000828210156130b0576130b061315c565b500390565b60005b838110156130d05781810151838201526020016130b8565b838111156115c35750506000910152565b6000816130f0576130f061315c565b506000190190565b60028104600182168061310c57607f821691505b602082108114156110de57634e487b7160e01b600052602260045260246000fd5b60006000198214156131415761314161315c565b5060010190565b60008261315757613157613172565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146116ff57600080fdfea26469706673582212207ae8e937566462bb6a14ad2179748c9372d056f78158b2cdb9571daa488cd38664736f6c63430008000033000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000015b30000000000000000000000000000000000000000000000000000000000000064

Deployed Bytecode

0x6080604052600436106102515760003560e01c8063742a4c9b11610139578063a243d3b6116100b6578063c87b56dd1161007a578063c87b56dd14610686578063d7224ba0146106a6578063dc33e681146106bb578063e985e9c5146106db578063f2fde38b146106fb578063fbe1aa511461071b57610251565b8063a243d3b614610609578063ac4460021461061c578063b0c2b56114610631578063b88d4fde14610651578063c43fe78d1461067157610251565b80638da5cb5b116100fd5780638da5cb5b1461057d5780639231ab2a1461059257806395d89b41146105bf5780639e87fac8146105d4578063a22cb465146105e957610251565b8063742a4c9b146104f35780637437681e146105135780637c928fe9146105285780637eff4b671461053b5780638462151c1461055057610251565b80632f745c59116101d25780634f6ccce7116101965780634f6ccce71461043e57806355f804b31461045e5780636352211e1461047e578063670fc7751461049e57806370a08231146104be578063715018a6146104de57610251565b80632f745c59146103b4578063304dd754146103d45780634080cbbd146103e957806342842e0e146104095780634e5efa3f1461042957610251565b806318160ddd1161021957806318160ddd1461031d5780631e3c18561461033f57806323b872dd14610354578063288ba4c6146103745780632d20fb601461039457610251565b806301ffc9a71461025657806306fdde031461028c578063081812fc146102ae578063095ea7b3146102db57806316fc0366146102fd575b600080fd5b34801561026257600080fd5b5061027661027136600461254a565b610730565b6040516102839190612748565b60405180910390f35b34801561029857600080fd5b506102a1610793565b6040516102839190612753565b3480156102ba57600080fd5b506102ce6102c93660046125ee565b610825565b60405161028391906126c0565b3480156102e757600080fd5b506102fb6102f6366004612521565b610871565b005b34801561030957600080fd5b506102fb6103183660046123a6565b61090a565b34801561032957600080fd5b50610332610971565b6040516102839190613000565b34801561034b57600080fd5b50610332610977565b34801561036057600080fd5b506102fb61036f3660046123f2565b61097d565b34801561038057600080fd5b506102fb61038f366004612521565b6109dc565b3480156103a057600080fd5b506102fb6103af3660046125ee565b610a86565b3480156103c057600080fd5b506103326103cf366004612521565b610afe565b3480156103e057600080fd5b50610276610bf9565b3480156103f557600080fd5b506102fb6104043660046125ee565b610c02565b34801561041557600080fd5b506102fb6104243660046123f2565b610c46565b34801561043557600080fd5b506102ce610c61565b34801561044a57600080fd5b506103326104593660046125ee565b610c75565b34801561046a57600080fd5b506102fb610479366004612582565b610ca1565b34801561048a57600080fd5b506102ce6104993660046125ee565b610cec565b3480156104aa57600080fd5b506102fb6104b93660046125ee565b610cfe565b3480156104ca57600080fd5b506103326104d93660046123a6565b610d42565b3480156104ea57600080fd5b506102fb610d8f565b3480156104ff57600080fd5b506102fb61050e3660046125ee565b610dda565b34801561051f57600080fd5b50610332610e1e565b6102fb6105363660046125ee565b610e24565b34801561054757600080fd5b50610332610ffe565b34801561055c57600080fd5b5061057061056b3660046123a6565b611004565b6040516102839190612735565b34801561058957600080fd5b506102ce6110e4565b34801561059e57600080fd5b506105b26105ad3660046125ee565b6110f3565b6040516102839190612fd7565b3480156105cb57600080fd5b506102a1611104565b3480156105e057600080fd5b506102fb611113565b3480156105f557600080fd5b506102fb6106043660046124f8565b611166565b6102fb610617366004612606565b611234565b34801561062857600080fd5b506102fb61146f565b34801561063d57600080fd5b506102fb61064c3660046125ee565b61154c565b34801561065d57600080fd5b506102fb61066c36600461242d565b611590565b34801561067d57600080fd5b506103326115c9565b34801561069257600080fd5b506102a16106a13660046125ee565b6115cf565b3480156106b257600080fd5b50610332611652565b3480156106c757600080fd5b506103326106d63660046123a6565b611658565b3480156106e757600080fd5b506102766106f63660046123c0565b611663565b34801561070757600080fd5b506102fb6107163660046123a6565b611691565b34801561072757600080fd5b50610332611702565b60006001600160e01b031982166380ac58cd60e01b148061076157506001600160e01b03198216635b5e139f60e01b145b8061077c57506001600160e01b0319821663780e9d6360e01b145b8061078b575061078b82611726565b90505b919050565b6060600280546107a2906130f8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce906130f8565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b5050505050905090565b60006108308261173f565b6108555760405162461bcd60e51b815260040161084c90612f48565b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061087c82610cec565b9050806001600160a01b0316836001600160a01b031614156108b05760405162461bcd60e51b815260040161084c90612c76565b806001600160a01b03166108c2611746565b6001600160a01b031614806108de57506108de816106f6611746565b6108fa5760405162461bcd60e51b815260040161084c90612a0c565b61090583838361174a565b505050565b610912611746565b6001600160a01b03166109236110e4565b6001600160a01b0316146109495760405162461bcd60e51b815260040161084c90612b5d565b600e80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60015490565b600b5481565b600e5461010090046001600160a01b0316610996611746565b6001600160a01b0316146109d1576109b56109af611746565b826117a6565b6109d15760405162461bcd60e51b815260040161084c90612ce2565b61090583838361182b565b6109e4611746565b6001600160a01b03166109f56110e4565b6001600160a01b031614610a1b5760405162461bcd60e51b815260040161084c90612b5d565b6000610a25610971565b9050600082118015610a6057507f00000000000000000000000000000000000000000000000000000000000015b3610a5d838361302b565b11155b610a7c5760405162461bcd60e51b815260040161084c90612c47565b6109058383611abc565b610a8e611746565b6001600160a01b0316610a9f6110e4565b6001600160a01b031614610ac55760405162461bcd60e51b815260040161084c90612b5d565b60026009541415610ae85760405162461bcd60e51b815260040161084c90612ec2565b6002600955610af681611ad6565b506001600955565b6000610b0983610d42565b8210610b275760405162461bcd60e51b815260040161084c90612766565b6000610b31610971565b905060008060005b83811015610bda576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610b8b57805192505b876001600160a01b0316836001600160a01b03161415610bc75786841415610bb957509350610bf392505050565b83610bc38161312d565b9450505b5080610bd28161312d565b915050610b39565b5060405162461bcd60e51b815260040161084c90612e2e565b92915050565b600e5460ff1681565b610c0a611746565b6001600160a01b0316610c1b6110e4565b6001600160a01b031614610c415760405162461bcd60e51b815260040161084c90612b5d565b600b55565b61090583838360405180602001604052806000815250611590565b600e5461010090046001600160a01b031681565b6000610c7f610971565b8210610c9d5760405162461bcd60e51b815260040161084c90612879565b5090565b610ca9611746565b6001600160a01b0316610cba6110e4565b6001600160a01b031614610ce05760405162461bcd60e51b815260040161084c90612b5d565b610905600f83836122d3565b6000610cf782611c60565b5192915050565b610d06611746565b6001600160a01b0316610d176110e4565b6001600160a01b031614610d3d5760405162461bcd60e51b815260040161084c90612b5d565b600c55565b60006001600160a01b038216610d6a5760405162461bcd60e51b815260040161084c90612aa0565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b610d97611746565b6001600160a01b0316610da86110e4565b6001600160a01b031614610dce5760405162461bcd60e51b815260040161084c90612b5d565b610dd86000611d72565b565b610de2611746565b6001600160a01b0316610df36110e4565b6001600160a01b031614610e195760405162461bcd60e51b815260040161084c90612b5d565b600d55565b600a5481565b323314610e435760405162461bcd60e51b815260040161084c906129d5565b600e5460ff16610e655760405162461bcd60e51b815260040161084c90612952565b600081118015610e775750600b548111155b610e935760405162461bcd60e51b815260040161084c90612838565b600d5481610e9f610971565b610ea9919061302b565b1115610ec75760405162461bcd60e51b815260040161084c90612c18565b6000816001600160401b03811115610eef57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610f18578160200160208202803683370190505b50905060005b82811015610f765780610f2f610971565b610f39919061302b565b828281518110610f5957634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610f6e8161312d565b915050610f1e565b50600e54610f929061010090046001600160a01b031683611abc565b600e546040516314e2c09d60e31b81526101009091046001600160a01b03169063a71604e890610fc89033908590600401612711565b600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b505050505050565b600c5481565b6060600061101183610d42565b90508061102e57505060408051600081526020810190915261078e565b6000816001600160401b0381111561105657634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561107f578160200160208202803683370190505b50905060005b828110156110d4576110978582610afe565b8282815181106110b757634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806110cc8161312d565b915050611085565b50915061078e9050565b50919050565b6000546001600160a01b031690565b6110fb612353565b61078b82611c60565b6060600380546107a2906130f8565b61111b611746565b6001600160a01b031661112c6110e4565b6001600160a01b0316146111525760405162461bcd60e51b815260040161084c90612b5d565b600e805460ff19811660ff90911615179055565b61116e611746565b6001600160a01b0316826001600160a01b0316141561119f5760405162461bcd60e51b815260040161084c90612be1565b80600760006111ac611746565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556111f0611746565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112289190612748565b60405180910390a35050565b3233146112535760405162461bcd60e51b815260040161084c906129d5565b600e5460ff166112755760405162461bcd60e51b815260040161084c90612952565b6000821180156112875750600a548211155b6112a35760405162461bcd60e51b815260040161084c90612838565b81600c546112b19190613057565b3410156112d05760405162461bcd60e51b815260040161084c90612d86565b7f00000000000000000000000000000000000000000000000000000000000015b3826112fa610971565b611304919061302b565b11156113225760405162461bcd60e51b815260040161084c90612aeb565b8015611461576000826001600160401b0381111561135057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611379578160200160208202803683370190505b50905060005b838110156113d75780611390610971565b61139a919061302b565b8282815181106113ba57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806113cf8161312d565b91505061137f565b50600e546113f39061010090046001600160a01b031684611abc565b600e546040516314e2c09d60e31b81526101009091046001600160a01b03169063a71604e8906114299033908590600401612711565b600060405180830381600087803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b505050505061146b565b61146b3383611abc565b5050565b611477611746565b6001600160a01b03166114886110e4565b6001600160a01b0316146114ae5760405162461bcd60e51b815260040161084c90612b5d565b600260095414156114d15760405162461bcd60e51b815260040161084c90612ec2565b6002600955604051600090339047906114e9906126bd565b60006040518083038185875af1925050503d8060008114611526576040519150601f19603f3d011682016040523d82523d6000602084013e61152b565b606091505b5050905080610af65760405162461bcd60e51b815260040161084c90612cb8565b611554611746565b6001600160a01b03166115656110e4565b6001600160a01b03161461158b5760405162461bcd60e51b815260040161084c90612b5d565b600a55565b61159b84848461182b565b6115a784848484611dc2565b6115c35760405162461bcd60e51b815260040161084c90612d33565b50505050565b600d5481565b60606115da8261173f565b6115f65760405162461bcd60e51b815260040161084c90612b92565b6000611600611edd565b90506000815111611620576040518060200160405280600081525061164b565b8061162a84611eec565b60405160200161163b92919061268e565b6040516020818303038152906040525b9392505050565b60085481565b600061078b82612006565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b611699611746565b6001600160a01b03166116aa6110e4565b6001600160a01b0316146116d05760405162461bcd60e51b815260040161084c90612b5d565b6001600160a01b0381166116f65760405162461bcd60e51b815260040161084c906127a8565b6116ff81611d72565b50565b7f000000000000000000000000000000000000000000000000000000000000006481565b6001600160e01b031981166301ffc9a760e01b14919050565b6001541190565b3390565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006117b18261173f565b6117cd5760405162461bcd60e51b815260040161084c90612989565b60006117d883610cec565b9050806001600160a01b0316846001600160a01b031614806118135750836001600160a01b031661180884610825565b6001600160a01b0316145b8061182357506118238185611663565b949350505050565b600061183682611c60565b9050836001600160a01b031681600001516001600160a01b03161461186d5760405162461bcd60e51b815260040161084c90612b17565b6001600160a01b0383166118935760405162461bcd60e51b815260040161084c906128bc565b6118a084848460016115c3565b6118b0600083836000015161174a565b6001600160a01b03841660009081526005602052604081208054600192906118e29084906001600160801b0316613076565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0385166000908152600560205260408120805460019450909261192e91859116613009565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380861682526001600160401b03428116602080850191825260008881526004909152948520935184549151909216600160a01b0267ffffffffffffffff60a01b19929093166001600160a01b031990911617161790556119c383600161302b565b6000818152600460205260409020549091506001600160a01b0316611a67576119eb8161173f565b15611a675760408051808201825283516001600160a01b0390811682526020808601516001600160401b0390811682850190815260008781526004909352949091209251835494516001600160a01b031990951692169190911767ffffffffffffffff60a01b1916600160a01b93909116929092029190911790555b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ab585858560016115c3565b5050505050565b61146b82826040518060200160405280600081525061205a565b60085481611af65760405162461bcd60e51b815260040161084c90612a69565b60006001611b04848461302b565b611b0e919061309e565b9050611b3b60017f00000000000000000000000000000000000000000000000000000000000015b361309e565b811115611b7057611b6d60017f00000000000000000000000000000000000000000000000000000000000015b361309e565b90505b611b798161173f565b611b955760405162461bcd60e51b815260040161084c90612e7c565b815b818111611c4c576000818152600460205260409020546001600160a01b0316611c3a576000611bc582611c60565b60408051808201825282516001600160a01b0390811682526020938401516001600160401b0390811685840190815260008881526004909652939094209151825493516001600160a01b031990941691161767ffffffffffffffff60a01b1916600160a01b9290931691909102919091179055505b80611c448161312d565b915050611b97565b50611c5881600161302b565b600855505050565b611c68612353565b611c718261173f565b611c8d5760405162461bcd60e51b815260040161084c906127ee565b60007f00000000000000000000000000000000000000000000000000000000000000098310611cee57611ce07f00000000000000000000000000000000000000000000000000000000000000098461309e565b611ceb90600161302b565b90505b825b818110611d59576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215611d4657925061078e915050565b5080611d51816130e1565b915050611cf0565b5060405162461bcd60e51b815260040161084c90612ef9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611dd6846001600160a01b03166122cd565b15611ed257836001600160a01b031663150b7a02611df2611746565b8786866040518563ffffffff1660e01b8152600401611e1494939291906126d4565b602060405180830381600087803b158015611e2e57600080fd5b505af1925050508015611e5e575060408051601f3d908101601f19168201909252611e5b91810190612566565b60015b611eb8573d808015611e8c576040519150601f19603f3d011682016040523d82523d6000602084013e611e91565b606091505b508051611eb05760405162461bcd60e51b815260040161084c90612d33565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611823565b506001949350505050565b6060600f80546107a2906130f8565b606081611f1157506040805180820190915260018152600360fc1b602082015261078e565b8160005b8115611f3b5780611f258161312d565b9150611f349050600a83613043565b9150611f15565b6000816001600160401b03811115611f6357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611f8d576020820181803683370190505b5090505b841561182357611fa260018361309e565b9150611faf600a86613148565b611fba90603061302b565b60f81b818381518110611fdd57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611fff600a86613043565b9450611f91565b60006001600160a01b03821661202e5760405162461bcd60e51b815260040161084c90612901565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b0384166120835760405162461bcd60e51b815260040161084c90612ded565b61208c8161173f565b156120a95760405162461bcd60e51b815260040161084c90612db6565b7f00000000000000000000000000000000000000000000000000000000000000098311156120e95760405162461bcd60e51b815260040161084c90612f95565b6120f660008583866115c3565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612152908790613009565b6001600160801b031681526020018583602001516121709190613009565b6001600160801b039081169091526001600160a01b03808816600081815260056020908152604080832087518154988401518816600160801b029088166fffffffffffffffffffffffffffffffff199099169890981790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b0267ffffffffffffffff60a01b19959093166001600160a01b031990941693909317939093161790915582905b858110156122ba5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461227e6000888488611dc2565b61229a5760405162461bcd60e51b815260040161084c90612d33565b816122a48161312d565b92505080806122b29061312d565b915050612231565b506001819055610ff660008785886115c3565b3b151590565b8280546122df906130f8565b90600052602060002090601f0160209004810192826123015760008555612347565b82601f1061231a5782800160ff19823516178555612347565b82800160010185558215612347579182015b8281111561234757823582559160200191906001019061232c565b50610c9d92915061236a565b604080518082019091526000808252602082015290565b5b80821115610c9d576000815560010161236b565b80356001600160a01b038116811461078e57600080fd5b8035801515811461078e57600080fd5b6000602082840312156123b7578081fd5b61164b8261237f565b600080604083850312156123d2578081fd5b6123db8361237f565b91506123e96020840161237f565b90509250929050565b600080600060608486031215612406578081fd5b61240f8461237f565b925061241d6020850161237f565b9150604084013590509250925092565b60008060008060808587031215612442578081fd5b61244b8561237f565b9350602061245a81870161237f565b93506040860135925060608601356001600160401b038082111561247c578384fd5b818801915088601f83011261248f578384fd5b8135818111156124a1576124a1613188565b604051601f8201601f19168101850183811182821017156124c4576124c4613188565b60405281815283820185018b10156124da578586fd5b81858501868301379081019093019390935250939692955090935050565b6000806040838503121561250a578182fd5b6125138361237f565b91506123e960208401612396565b60008060408385031215612533578182fd5b61253c8361237f565b946020939093013593505050565b60006020828403121561255b578081fd5b813561164b8161319e565b600060208284031215612577578081fd5b815161164b8161319e565b60008060208385031215612594578182fd5b82356001600160401b03808211156125aa578384fd5b818501915085601f8301126125bd578384fd5b8135818111156125cb578485fd5b8660208285010111156125dc578485fd5b60209290920196919550909350505050565b6000602082840312156125ff578081fd5b5035919050565b60008060408385031215612618578182fd5b823591506123e960208401612396565b6000815180845260208085019450808401835b838110156126575781518752958201959082019060010161263b565b509495945050505050565b6000815180845261267a8160208601602086016130b5565b601f01601f19169290920160200192915050565b600083516126a08184602088016130b5565b8351908301906126b48183602088016130b5565b01949350505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061270790830184612662565b9695505050505050565b6001600160a01b038316815260406020820181905260009061182390830184612628565b60006020825261164b6020830184612628565b901515815260200190565b60006020825261164b6020830184612662565b60208082526022908201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602a908201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736040820152693a32b73a103a37b5b2b760b11b606082015260800190565b60208082526021908201527f43616e206f6e6c79206d696e74206d617820746f6b656e20617420612074696d6040820152606560f81b606082015260800190565b60208082526023908201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756040820152626e647360e81b606082015260800190565b60208082526025908201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526031908201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260408201527020746865207a65726f206164647265737360781b606082015260800190565b6020808252601b908201527f53616c65206d7573742062652061637469766520746f206d696e740000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b60208082526039908201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60408201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606082015260800190565b60208082526018908201527f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000604082015260600190565b6020808252602b908201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526012908201527172656163686564206d617820737570706c7960701b604082015260600190565b60208082526026908201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746040820152651037bbb732b960d11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252601a908201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604082015260600190565b6020808252601590820152741c995858da1959081b585e08119c995948135a5b9d605a1b604082015260600190565b602080825260159082015274139bdd08195b9bdd59da081d1bdad95b881b19599d605a1b604082015260600190565b60208082526022908201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020808252601690820152752732b2b2103a379039b2b7321036b7b9329022aa241760511b604082015260600190565b6020808252601d908201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604082015260600190565b60208082526021908201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060408201526d0deeedccae440c4f240d2dcc8caf60931b606082015260800190565b60208082526026908201527f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360408201526506c65616e75760d41b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602f908201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560408201526e1037bbb732b91037b3103a37b5b2b760891b606082015260800190565b6020808252602d908201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560408201526c3c34b9ba32b73a103a37b5b2b760991b606082015260800190565b60208082526022908201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696040820152610ced60f31b606082015260800190565b81516001600160a01b031681526020918201516001600160401b03169181019190915260400190565b90815260200190565b60006001600160801b038083168185168083038211156126b4576126b461315c565b6000821982111561303e5761303e61315c565b500190565b60008261305257613052613172565b500490565b60008160001904831182151516156130715761307161315c565b500290565b60006001600160801b03838116908316818110156130965761309661315c565b039392505050565b6000828210156130b0576130b061315c565b500390565b60005b838110156130d05781810151838201526020016130b8565b838111156115c35750506000910152565b6000816130f0576130f061315c565b506000190190565b60028104600182168061310c57607f821691505b602082108114156110de57634e487b7160e01b600052602260045260246000fd5b60006000198214156131415761314161315c565b5060010190565b60008261315757613157613172565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146116ff57600080fdfea26469706673582212207ae8e937566462bb6a14ad2179748c9372d056f78158b2cdb9571daa488cd38664736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000015b30000000000000000000000000000000000000000000000000000000000000064

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 9
Arg [1] : collectionSize_ (uint256): 5555
Arg [2] : amountForDevs_ (uint256): 100

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [1] : 00000000000000000000000000000000000000000000000000000000000015b3
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064


Deployed Bytecode Sourcemap

40316:4699:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22932:370;;;;;;;;;;-1:-1:-1;22932:370:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24658:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26183:204::-;;;;;;;;;;-1:-1:-1;26183:204:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25746:379::-;;;;;;;;;;-1:-1:-1;25746:379:0;;;;;:::i;:::-;;:::i;:::-;;40919:124;;;;;;;;;;-1:-1:-1;40919:124:0;;;;;:::i;:::-;;:::i;21493:94::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;40411:33::-;;;;;;;;;;;;;:::i;44143:375::-;;;;;;;;;;-1:-1:-1;44143:375:0;;;;;:::i;:::-;;:::i;43020:264::-;;;;;;;;;;-1:-1:-1;43020:264:0;;;;;:::i;:::-;;:::i;43754:118::-;;;;;;;;;;-1:-1:-1;43754:118:0;;;;;:::i;:::-;;:::i;22124:744::-;;;;;;;;;;-1:-1:-1;22124:744:0;;;;;:::i;:::-;;:::i;40599:27::-;;;;;;;;;;;;;:::i;41361:113::-;;;;;;;;;;-1:-1:-1;41361:113:0;;;;;:::i;:::-;;:::i;27246:157::-;;;;;;;;;;-1:-1:-1;27246:157:0;;;;;:::i;:::-;;:::i;40631:31::-;;;;;;;;;;;;;:::i;21656:177::-;;;;;;;;;;-1:-1:-1;21656:177:0;;;;;:::i;:::-;;:::i;43461:100::-;;;;;;;;;;-1:-1:-1;43461:100:0;;;;;:::i;:::-;;:::i;24481:118::-;;;;;;;;;;-1:-1:-1;24481:118:0;;;;;:::i;:::-;;:::i;41166:97::-;;;;;;;;;;-1:-1:-1;41166:97:0;;;;;:::i;:::-;;:::i;23358:211::-;;;;;;;;;;-1:-1:-1;23358:211:0;;;;;:::i;:::-;;:::i;39549:94::-;;;;;;;;;;;;;:::i;41483:107::-;;;;;;;;;;-1:-1:-1;41483:107:0;;;;;:::i;:::-;;:::i;40386:20::-;;;;;;;;;;;;;:::i;41680:556::-;;;;;;:::i;:::-;;:::i;40496:52::-;;;;;;;;;;;;;:::i;44523:489::-;;;;;;;;;;-1:-1:-1;44523:489:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38898:87::-;;;;;;;;;;;;;:::i;43991:147::-;;;;;;;;;;-1:-1:-1;43991:147:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24813:98::-;;;;;;;;;;;;;:::i;41606:68::-;;;;;;;;;;;;;:::i;26451:274::-;;;;;;;;;;-1:-1:-1;26451:274:0;;;;;:::i;:::-;;:::i;42242:772::-;;;;;;:::i;:::-;;:::i;43567:181::-;;;;;;;;;;;;;:::i;41277:77::-;;;;;;;;;;-1:-1:-1;41277:77:0;;;;;:::i;:::-;;:::i;27466:319::-;;;;;;;;;;-1:-1:-1;27466:319:0;;;;;:::i;:::-;;:::i;40557:34::-;;;;;;;;;;;;;:::i;24974:394::-;;;;;;;;;;-1:-1:-1;24974:394:0;;;;;:::i;:::-;;:::i;31965:43::-;;;;;;;;;;;;;:::i;43878:107::-;;;;;;;;;;-1:-1:-1;43878:107:0;;;;;:::i;:::-;;:::i;26788:186::-;;;;;;;;;;-1:-1:-1;26788:186:0;;;;;:::i;:::-;;:::i;39798:192::-;;;;;;;;;;-1:-1:-1;39798:192:0;;;;;:::i;:::-;;:::i;40451:38::-;;;;;;;;;;;;;:::i;22932:370::-;23059:4;-1:-1:-1;;;;;;23089:40:0;;-1:-1:-1;;;23089:40:0;;:99;;-1:-1:-1;;;;;;;23140:48:0;;-1:-1:-1;;;23140:48:0;23089:99;:160;;;-1:-1:-1;;;;;;;23199:50:0;;-1:-1:-1;;;23199:50:0;23089:160;:207;;;;23260:36;23284:11;23260:23;:36::i;:::-;23075:221;;22932:370;;;;:::o;24658:94::-;24712:13;24741:5;24734:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24658:94;:::o;26183:204::-;26251:7;26275:16;26283:7;26275;:16::i;:::-;26267:74;;;;-1:-1:-1;;;26267:74:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;26357:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26357:24:0;;26183:204::o;25746:379::-;25815:13;25831:24;25847:7;25831:15;:24::i;:::-;25815:40;;25876:5;-1:-1:-1;;;;;25870:11:0;:2;-1:-1:-1;;;;;25870:11:0;;;25862:58;;;;-1:-1:-1;;;25862:58:0;;;;;;;:::i;:::-;25961:5;-1:-1:-1;;;;;25945:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;25945:21:0;;:62;;;;25970:37;25987:5;25994:12;:10;:12::i;25970:37::-;25929:153;;;;-1:-1:-1;;;25929:153:0;;;;;;;:::i;:::-;26091:28;26100:2;26104:7;26113:5;26091:8;:28::i;:::-;25746:379;;;:::o;40919:124::-;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;40994:11:::1;:43:::0;;-1:-1:-1;;;;;40994:43:0;;::::1;;;-1:-1:-1::0;;;;;;40994:43:0;;::::1;::::0;;;::::1;::::0;;40919:124::o;21493:94::-;21569:12;;21493:94;:::o;40411:33::-;;;;:::o;44143:375::-;44352:11;;;;;-1:-1:-1;;;;;44352:11:0;44328:12;:10;:12::i;:::-;-1:-1:-1;;;;;44328:36:0;;44324:154;;44383:41;44402:12;:10;:12::i;:::-;44416:7;44383:18;:41::i;:::-;44375:103;;;;-1:-1:-1;;;44375:103:0;;;;;;;:::i;:::-;44485:28;44495:4;44501:2;44505:7;44485:9;:28::i;43020:264::-;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;43110:11:::1;43124:13;:11;:13::i;:::-;43110:27;;43169:1;43152:14;:18;:63;;;;-1:-1:-1::0;43201:14:0::1;43175:21;43182:14:::0;43175:6;:21:::1;:::i;:::-;43174:41;;43152:63;43144:97;;;;-1:-1:-1::0;;;43144:97:0::1;;;;;;;:::i;:::-;43248:30;43258:3;43263:14;43248:9;:30::i;43754:118::-:0;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;37010:1:::1;37606:7;;:19;;37598:63;;;;-1:-1:-1::0;;;37598:63:0::1;;;;;;;:::i;:::-;37010:1;37739:7;:18:::0;43838:28:::2;43857:8:::0;43838:18:::2;:28::i;:::-;-1:-1:-1::0;36966:1:0::1;37918:7;:22:::0;43754:118::o;22124:744::-;22233:7;22268:16;22278:5;22268:9;:16::i;:::-;22260:5;:24;22252:71;;;;-1:-1:-1;;;22252:71:0;;;;;;;:::i;:::-;22330:22;22355:13;:11;:13::i;:::-;22330:38;;22375:19;22405:25;22455:9;22450:350;22474:14;22470:1;:18;22450:350;;;22504:31;22538:14;;;:11;:14;;;;;;;;;22504:48;;;;;;;;;-1:-1:-1;;;;;22504:48:0;;;;;-1:-1:-1;;;22504:48:0;;;-1:-1:-1;;;;;22504:48:0;;;;;;;;22565:28;22561:89;;22626:14;;;-1:-1:-1;22561:89:0;22683:5;-1:-1:-1;;;;;22662:26:0;:17;-1:-1:-1;;;;;22662:26:0;;22658:135;;;22720:5;22705:11;:20;22701:59;;;-1:-1:-1;22747:1:0;-1:-1:-1;22740:8:0;;-1:-1:-1;;;22740:8:0;22701:59;22770:13;;;;:::i;:::-;;;;22658:135;-1:-1:-1;22490:3:0;;;;:::i;:::-;;;;22450:350;;;;22806:56;;-1:-1:-1;;;22806:56:0;;;;;;;:::i;22124:744::-;;;;;:::o;40599:27::-;;;;;;:::o;41361:113::-;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;41436:14:::1;:32:::0;41361:113::o;27246:157::-;27358:39;27375:4;27381:2;27385:7;27358:39;;;;;;;;;;;;:16;:39::i;40631:31::-;;;;;;-1:-1:-1;;;;;40631:31:0;;:::o;21656:177::-;21723:7;21755:13;:11;:13::i;:::-;21747:5;:21;21739:69;;;;-1:-1:-1;;;21739:69:0;;;;;;;:::i;:::-;-1:-1:-1;21822:5:0;21656:177::o;43461:100::-;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;43532:23:::1;:13;43548:7:::0;;43532:23:::1;:::i;24481:118::-:0;24545:7;24568:20;24580:7;24568:11;:20::i;:::-;:25;;24481:118;-1:-1:-1;;24481:118:0:o;41166:97::-;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;41233:15:::1;:24:::0;41166:97::o;23358:211::-;23422:7;-1:-1:-1;;;;;23446:19:0;;23438:75;;;;-1:-1:-1;;;23438:75:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23535:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;23535:27:0;;23358:211::o;39549:94::-;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;39614:21:::1;39632:1;39614:9;:21::i;:::-;39549:94::o:0;41483:107::-;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;41554:13:::1;:30:::0;41483:107::o;40386:20::-;;;;:::o;41680:556::-;41088:9;41101:10;41088:23;41080:66;;;;-1:-1:-1;;;41080:66:0;;;;;;;:::i;:::-;41761:8:::1;::::0;::::1;;41753:48;;;;-1:-1:-1::0;;;41753:48:0::1;;;;;;;:::i;:::-;41827:1;41816:8;:12;:42;;;;;41844:14;;41832:8;:26;;41816:42;41808:88;;;;-1:-1:-1::0;;;41808:88:0::1;;;;;;;:::i;:::-;41941:13;;41929:8;41913:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;41905:75;;;;-1:-1:-1::0;;;41905:75:0::1;;;;;;;:::i;:::-;41989:25;42031:8;-1:-1:-1::0;;;;;42017:23:0::1;;;;;-1:-1:-1::0;;;42017:23:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;42017:23:0::1;;41989:51;;42054:6;42049:84;42070:8;42066:1;:12;42049:84;;;42124:1;42110:13;:11;:13::i;:::-;:15;;;;:::i;:::-;42096:8;42105:1;42096:11;;;;;;-1:-1:-1::0;;;42096:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;:29;42080:3;::::1;::::0;::::1;:::i;:::-;;;;42049:84;;;-1:-1:-1::0;42159:11:0::1;::::0;42141:41:::1;::::0;42159:11:::1;::::0;::::1;-1:-1:-1::0;;;;;42159:11:0::1;42173:8:::0;42141:9:::1;:41::i;:::-;42189:11;::::0;:41:::1;::::0;-1:-1:-1;;;42189:41:0;;:11:::1;::::0;;::::1;-1:-1:-1::0;;;;;42189:11:0::1;::::0;:19:::1;::::0;:41:::1;::::0;42209:10:::1;::::0;42221:8;;42189:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41153:1;41680:556:::0;:::o;40496:52::-;;;;:::o;44523:489::-;44584:16;44610:18;44631:17;44641:6;44631:9;:17::i;:::-;44610:38;-1:-1:-1;44659:15:0;44655:353;;-1:-1:-1;;44728:16:0;;;44742:1;44728:16;;;;;;;;44721:23;;44655:353;44769:23;44809:10;-1:-1:-1;;;;;44795:25:0;;;;;-1:-1:-1;;;44795:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44795:25:0;;44769:51;;44831:13;44855:122;44879:10;44871:5;:18;44855:122;;;44931:34;44951:6;44959:5;44931:19;:34::i;:::-;44915:6;44922:5;44915:13;;;;;;-1:-1:-1;;;44915:13:0;;;;;;;;;;;;;;;;;;:50;44891:7;;;;:::i;:::-;;;;44855:122;;;-1:-1:-1;44994:6:0;-1:-1:-1;44987:13:0;;-1:-1:-1;44987:13:0;44655:353;44523:489;;;;:::o;38898:87::-;38944:7;38971:6;-1:-1:-1;;;;;38971:6:0;38898:87;:::o;43991:147::-;44072:21;;:::i;:::-;44112:20;44124:7;44112:11;:20::i;24813:98::-;24869:13;24898:7;24891:14;;;;;:::i;41606:68::-;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;41660:8:::1;::::0;;-1:-1:-1;;41648:20:0;::::1;41660:8;::::0;;::::1;41659:9;41648:20;::::0;;41606:68::o;26451:274::-;26554:12;:10;:12::i;:::-;-1:-1:-1;;;;;26542:24:0;:8;-1:-1:-1;;;;;26542:24:0;;;26534:63;;;;-1:-1:-1;;;26534:63:0;;;;;;;:::i;:::-;26651:8;26606:18;:32;26625:12;:10;:12::i;:::-;-1:-1:-1;;;;;26606:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;26606:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;26606:53:0;;;;;;;;;;;26686:12;:10;:12::i;:::-;-1:-1:-1;;;;;26671:48:0;;26710:8;26671:48;;;;;;:::i;:::-;;;;;;;;26451:274;;:::o;42242:772::-;41088:9;41101:10;41088:23;41080:66;;;;-1:-1:-1;;;41080:66:0;;;;;;;:::i;:::-;42356:8:::1;::::0;::::1;;42348:48;;;;-1:-1:-1::0;;;42348:48:0::1;;;;;;;:::i;:::-;42422:1;42411:8;:12;:33;;;;;42439:5;;42427:8;:17;;42411:33;42403:79;;;;-1:-1:-1::0;;;42403:79:0::1;;;;;;;:::i;:::-;42526:8;42510:15;;:24;;;;:::i;:::-;42497:9;:37;;42489:72;;;;-1:-1:-1::0;;;42489:72:0::1;;;;;;;:::i;:::-;42604:14;42592:8;42576:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;42568:73;;;;-1:-1:-1::0;;;42568:73:0::1;;;;;;;:::i;:::-;42654:6;42650:359;;;42673:25;42715:8;-1:-1:-1::0;;;;;42701:23:0::1;;;;;-1:-1:-1::0;;;42701:23:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;42701:23:0::1;;42673:51;;42742:6;42737:92;42758:8;42754:1;:12;42737:92;;;42816:1;42802:13;:11;:13::i;:::-;:15;;;;:::i;:::-;42788:8;42797:1;42788:11;;;;;;-1:-1:-1::0;;;42788:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;:29;42768:3;::::1;::::0;::::1;:::i;:::-;;;;42737:92;;;-1:-1:-1::0;42859:11:0::1;::::0;42841:41:::1;::::0;42859:11:::1;::::0;::::1;-1:-1:-1::0;;;;;42859:11:0::1;42873:8:::0;42841:9:::1;:41::i;:::-;42893:11;::::0;:41:::1;::::0;-1:-1:-1;;;42893:41:0;;:11:::1;::::0;;::::1;-1:-1:-1::0;;;;;42893:11:0::1;::::0;:19:::1;::::0;:41:::1;::::0;42913:10:::1;::::0;42925:8;;42893:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42650:359;;;;42963:31;42973:10;42985:8;42963:9;:31::i;:::-;42242:772:::0;;:::o;43567:181::-;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;37010:1:::1;37606:7;;:19;;37598:63;;;;-1:-1:-1::0;;;37598:63:0::1;;;;;;;:::i;:::-;37010:1;37739:7;:18:::0;43650:49:::2;::::0;43632:12:::2;::::0;43650:10:::2;::::0;43673:21:::2;::::0;43650:49:::2;::::0;::::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43631:68;;;43714:7;43706:36;;;;-1:-1:-1::0;;;43706:36:0::2;;;;;;;:::i;41277:77::-:0;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;41334:5:::1;:14:::0;41277:77::o;27466:319::-;27611:28;27621:4;27627:2;27631:7;27611:9;:28::i;:::-;27662:48;27685:4;27691:2;27695:7;27704:5;27662:22;:48::i;:::-;27646:133;;;;-1:-1:-1;;;27646:133:0;;;;;;;:::i;:::-;27466:319;;;;:::o;40557:34::-;;;;:::o;24974:394::-;25072:13;25113:16;25121:7;25113;:16::i;:::-;25097:97;;;;-1:-1:-1;;;25097:97:0;;;;;;;:::i;:::-;25203:21;25227:10;:8;:10::i;:::-;25203:34;;25282:1;25264:7;25258:21;:25;:104;;;;;;;;;;;;;;;;;25319:7;25328:18;:7;:16;:18::i;:::-;25302:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25258:104;25244:118;24974:394;-1:-1:-1;;;24974:394:0:o;31965:43::-;;;;:::o;43878:107::-;43936:7;43959:20;43973:5;43959:13;:20::i;26788:186::-;-1:-1:-1;;;;;26933:25:0;;;26910:4;26933:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26788:186::o;39798:192::-;39129:12;:10;:12::i;:::-;-1:-1:-1;;;;;39118:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39118:23:0;;39110:68;;;;-1:-1:-1;;;39110:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39887:22:0;::::1;39879:73;;;;-1:-1:-1::0;;;39879:73:0::1;;;;;;;:::i;:::-;39963:19;39973:8;39963:9;:19::i;:::-;39798:192:::0;:::o;40451:38::-;;;:::o;1246:157::-;-1:-1:-1;;;;;;1355:40:0;;-1:-1:-1;;;1355:40:0;1246:157;;;:::o;28024:105::-;28111:12;;-1:-1:-1;28101:22:0;28024:105::o;15435:98::-;15515:10;15435:98;:::o;31787:172::-;31884:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;31884:29:0;-1:-1:-1;;;;;31884:29:0;;;;;;;;;31925:28;;31884:24;;31925:28;;;;;;;31787:172;;;:::o;28239:351::-;28332:4;28358:16;28366:7;28358;:16::i;:::-;28350:73;;;;-1:-1:-1;;;28350:73:0;;;;;;;:::i;:::-;28435:13;28451:24;28467:7;28451:15;:24::i;:::-;28435:40;;28506:5;-1:-1:-1;;;;;28495:16:0;:7;-1:-1:-1;;;;;28495:16:0;;:51;;;;28539:7;-1:-1:-1;;;;;28515:31:0;:20;28527:7;28515:11;:20::i;:::-;-1:-1:-1;;;;;28515:31:0;;28495:51;:87;;;;28550:32;28567:5;28574:7;28550:16;:32::i;:::-;28487:96;28239:351;-1:-1:-1;;;;28239:351:0:o;30431:1250::-;30537:35;30575:20;30587:7;30575:11;:20::i;:::-;30537:58;;30642:4;-1:-1:-1;;;;;30620:26:0;:13;:18;;;-1:-1:-1;;;;;30620:26:0;;30604:98;;;;-1:-1:-1;;;30604:98:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30717:16:0;;30709:66;;;;-1:-1:-1;;;30709:66:0;;;;;;;:::i;:::-;30784:43;30806:4;30812:2;30816:7;30825:1;30784:21;:43::i;:::-;30884:49;30901:1;30905:7;30914:13;:18;;;30884:8;:49::i;:::-;-1:-1:-1;;;;;30942:18:0;;;;;;:12;:18;;;;;:31;;30972:1;;30942:18;:31;;30972:1;;-1:-1:-1;;;;;30942:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;30942:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30980:16:0;;-1:-1:-1;30980:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;30980:16:0;;:29;;-1:-1:-1;;30980:29:0;;:::i;:::-;;;-1:-1:-1;;;;;30980:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31039:43:0;;;;;;;;-1:-1:-1;;;;;31039:43:0;;;;;-1:-1:-1;;;;;31065:15:0;31039:43;;;;;;;;;-1:-1:-1;31016:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;31016:66:0;-1:-1:-1;;;;31016:66:0;;;;-1:-1:-1;;;;;;31016:66:0;;;;;;;;31332:11;31028:7;-1:-1:-1;31332:11:0;:::i;:::-;31395:1;31354:24;;;:11;:24;;;;;:29;31310:33;;-1:-1:-1;;;;;;31354:29:0;31350:236;;31412:20;31420:11;31412:7;:20::i;:::-;31408:171;;;31472:97;;;;;;;;31499:18;;-1:-1:-1;;;;;31472:97:0;;;;;;31530:28;;;;-1:-1:-1;;;;;31472:97:0;;;;;;;;;-1:-1:-1;31445:24:0;;;:11;:24;;;;;;;:124;;;;;;-1:-1:-1;;;;;;31445:124:0;;;;;;;;;-1:-1:-1;;;;31445:124:0;-1:-1:-1;;;31445:124:0;;;;;;;;;;;;;;31408:171;31618:7;31614:2;-1:-1:-1;;;;;31599:27:0;31608:4;-1:-1:-1;;;;;31599:27:0;;;;;;;;;;;31633:42;31654:4;31660:2;31664:7;31673:1;31633:20;:42::i;:::-;30431:1250;;;;;:::o;28135:98::-;28200:27;28210:2;28214:8;28200:27;;;;;;;;;;;;:9;:27::i;32113:846::-;32203:24;;32242:12;32234:49;;;;-1:-1:-1;;;32234:49:0;;;;;;;:::i;:::-;32290:16;32340:1;32309:28;32329:8;32309:17;:28;:::i;:::-;:32;;;;:::i;:::-;32290:51;-1:-1:-1;32363:18:0;32380:1;32363:14;:18;:::i;:::-;32352:8;:29;32348:81;;;32403:18;32420:1;32403:14;:18;:::i;:::-;32392:29;;32348:81;32544:17;32552:8;32544:7;:17::i;:::-;32536:68;;;;-1:-1:-1;;;32536:68:0;;;;;;;:::i;:::-;32628:17;32611:297;32652:8;32647:1;:13;32611:297;;32711:1;32680:14;;;:11;:14;;;;;:19;-1:-1:-1;;;;;32680:19:0;32676:225;;32726:31;32760:14;32772:1;32760:11;:14::i;:::-;32802:89;;;;;;;;32829:14;;-1:-1:-1;;;;;32802:89:0;;;;;;32856:24;;;;-1:-1:-1;;;;;32802:89:0;;;;;;;;;-1:-1:-1;32785:14:0;;;:11;:14;;;;;;;:106;;;;;;-1:-1:-1;;;;;;32785:106:0;;;;;;-1:-1:-1;;;;32785:106:0;-1:-1:-1;;;32785:106:0;;;;;;;;;;;;;;-1:-1:-1;32676:225:0;32662:3;;;;:::i;:::-;;;;32611:297;;;-1:-1:-1;32941:12:0;:8;32952:1;32941:12;:::i;:::-;32914:24;:39;-1:-1:-1;;;32113:846:0:o;23821:606::-;23897:21;;:::i;:::-;23938:16;23946:7;23938;:16::i;:::-;23930:71;;;;-1:-1:-1;;;23930:71:0;;;;;;;:::i;:::-;24010:26;24058:12;24047:7;:23;24043:93;;24102:22;24112:12;24102:7;:22;:::i;:::-;:26;;24127:1;24102:26;:::i;:::-;24081:47;;24043:93;24164:7;24144:212;24181:18;24173:4;:26;24144:212;;24218:31;24252:17;;;:11;:17;;;;;;;;;24218:51;;;;;;;;;-1:-1:-1;;;;;24218:51:0;;;;;-1:-1:-1;;;24218:51:0;;;-1:-1:-1;;;;;24218:51:0;;;;;;;;24282:28;24278:71;;24330:9;-1:-1:-1;24323:16:0;;-1:-1:-1;;24323:16:0;24278:71;-1:-1:-1;24201:6:0;;;;:::i;:::-;;;;24144:212;;;;24364:57;;-1:-1:-1;;;24364:57:0;;;;;;;:::i;39998:173::-;40054:16;40073:6;;-1:-1:-1;;;;;40090:17:0;;;-1:-1:-1;;;;;;40090:17:0;;;;;;40123:40;;40073:6;;;;;;;40123:40;;40054:16;40123:40;39998:173;;:::o;33502:690::-;33639:4;33656:15;:2;-1:-1:-1;;;;;33656:13:0;;:15::i;:::-;33652:535;;;33711:2;-1:-1:-1;;;;;33695:36:0;;33732:12;:10;:12::i;:::-;33746:4;33752:7;33761:5;33695:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33695:72:0;;;;;;;;-1:-1:-1;;33695:72:0;;;;;;;;;;;;:::i;:::-;;;33682:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33926:13:0;;33922:215;;33959:61;;-1:-1:-1;;;33959:61:0;;;;;;;:::i;33922:215::-;34105:6;34099:13;34090:6;34086:2;34082:15;34075:38;33682:464;-1:-1:-1;;;;;;33817:55:0;-1:-1:-1;;;33817:55:0;;-1:-1:-1;33810:62:0;;33652:535;-1:-1:-1;34175:4:0;33502:690;;;;;;:::o;43347:108::-;43407:13;43436;43429:20;;;;;:::i;15904:723::-;15960:13;16181:10;16177:53;;-1:-1:-1;16208:10:0;;;;;;;;;;;;-1:-1:-1;;;16208:10:0;;;;;;16177:53;16255:5;16240:12;16296:78;16303:9;;16296:78;;16329:8;;;;:::i;:::-;;-1:-1:-1;16352:10:0;;-1:-1:-1;16360:2:0;16352:10;;:::i;:::-;;;16296:78;;;16384:19;16416:6;-1:-1:-1;;;;;16406:17:0;;;;;-1:-1:-1;;;16406:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16406:17:0;;16384:39;;16434:154;16441:10;;16434:154;;16468:11;16478:1;16468:11;;:::i;:::-;;-1:-1:-1;16537:10:0;16545:2;16537:5;:10;:::i;:::-;16524:24;;:2;:24;:::i;:::-;16511:39;;16494:6;16501;16494:14;;;;;;-1:-1:-1;;;16494:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;16494:56:0;;;;;;;;-1:-1:-1;16565:11:0;16574:2;16565:11;;:::i;:::-;;;16434:154;;23575:240;23636:7;-1:-1:-1;;;;;23668:19:0;;23652:102;;;;-1:-1:-1;;;23652:102:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23776:19:0;;;;;:12;:19;;;;;:32;-1:-1:-1;;;23776:32:0;;-1:-1:-1;;;;;23776:32:0;;23575:240::o;28927:1272::-;29055:12;;-1:-1:-1;;;;;29082:16:0;;29074:62;;;;-1:-1:-1;;;29074:62:0;;;;;;;:::i;:::-;29273:21;29281:12;29273:7;:21::i;:::-;29272:22;29264:64;;;;-1:-1:-1;;;29264:64:0;;;;;;;:::i;:::-;29355:12;29343:8;:24;;29335:71;;;;-1:-1:-1;;;29335:71:0;;;;;;;:::i;:::-;29415:61;29445:1;29449:2;29453:12;29467:8;29415:21;:61::i;:::-;-1:-1:-1;;;;;29518:16:0;;29485:30;29518:16;;;:12;:16;;;;;;;;;29485:49;;;;;;;;;-1:-1:-1;;;;;29485:49:0;;;;;-1:-1:-1;;;29485:49:0;;;;;;;;;;;29560:119;;;;;;;;29580:19;;29485:49;;29560:119;;;29580:39;;29610:8;;29580:39;:::i;:::-;-1:-1:-1;;;;;29560:119:0;;;;;29663:8;29628:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;29560:119:0;;;;;;-1:-1:-1;;;;;29541:16:0;;;;;;;:12;:16;;;;;;;;:138;;;;;;;;;;-1:-1:-1;;;29541:138:0;;;;-1:-1:-1;;29541:138:0;;;;;;;;;;;;;;;;;29714:43;;;;;;;;;;-1:-1:-1;;;;;29740:15:0;29714:43;;;;;;;;29686:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;29686:71:0;-1:-1:-1;;;;29686:71:0;;;;-1:-1:-1;;;;;;29686:71:0;;;;;;;;;;;;;;;29698:12;;29810:281;29834:8;29830:1;:12;29810:281;;;29863:38;;29888:12;;-1:-1:-1;;;;;29863:38:0;;;29880:1;;29863:38;;29880:1;;29863:38;29928:59;29959:1;29963:2;29967:12;29981:5;29928:22;:59::i;:::-;29910:150;;;;-1:-1:-1;;;29910:150:0;;;;;;;:::i;:::-;30069:14;;;;:::i;:::-;;;;29844:3;;;;;:::i;:::-;;;;29810:281;;;-1:-1:-1;30099:12:0;:27;;;30133:60;30162:1;30166:2;30170:12;30184:8;30133:20;:60::i;2118:387::-;2441:20;2489:8;;;2118:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:175:1;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:162;261:20;;317:13;;310:21;300:32;;290:2;;346:1;343;336:12;361:198;;473:2;461:9;452:7;448:23;444:32;441:2;;;494:6;486;479:22;441:2;522:31;543:9;522:31;:::i;564:274::-;;;693:2;681:9;672:7;668:23;664:32;661:2;;;714:6;706;699:22;661:2;742:31;763:9;742:31;:::i;:::-;732:41;;792:40;828:2;817:9;813:18;792:40;:::i;:::-;782:50;;651:187;;;;;:::o;843:342::-;;;;989:2;977:9;968:7;964:23;960:32;957:2;;;1010:6;1002;995:22;957:2;1038:31;1059:9;1038:31;:::i;:::-;1028:41;;1088:40;1124:2;1113:9;1109:18;1088:40;:::i;:::-;1078:50;;1175:2;1164:9;1160:18;1147:32;1137:42;;947:238;;;;;:::o;1190:1178::-;;;;;1362:3;1350:9;1341:7;1337:23;1333:33;1330:2;;;1384:6;1376;1369:22;1330:2;1412:31;1433:9;1412:31;:::i;:::-;1402:41;;1462:2;1483:40;1519:2;1508:9;1504:18;1483:40;:::i;:::-;1473:50;;1570:2;1559:9;1555:18;1542:32;1532:42;;1625:2;1614:9;1610:18;1597:32;-1:-1:-1;;;;;1689:2:1;1681:6;1678:14;1675:2;;;1710:6;1702;1695:22;1675:2;1753:6;1742:9;1738:22;1728:32;;1798:7;1791:4;1787:2;1783:13;1779:27;1769:2;;1825:6;1817;1810:22;1769:2;1866;1853:16;1888:2;1884;1881:10;1878:2;;;1894:18;;:::i;:::-;1943:2;1937:9;2012:2;1993:13;;-1:-1:-1;;1989:27:1;1977:40;;1973:49;;2037:18;;;2057:22;;;2034:46;2031:2;;;2083:18;;:::i;:::-;2119:2;2112:22;2143:18;;;2180:11;;;2176:20;;2173:33;-1:-1:-1;2170:2:1;;;2224:6;2216;2209:22;2170:2;2285;2280;2276;2272:11;2267:2;2259:6;2255:15;2242:46;2308:15;;;2304:24;;;2297:40;;;;-1:-1:-1;1320:1048:1;;;;-1:-1:-1;1320:1048:1;;-1:-1:-1;;1320:1048:1:o;2373:268::-;;;2499:2;2487:9;2478:7;2474:23;2470:32;2467:2;;;2520:6;2512;2505:22;2467:2;2548:31;2569:9;2548:31;:::i;:::-;2538:41;;2598:37;2631:2;2620:9;2616:18;2598:37;:::i;2646:266::-;;;2775:2;2763:9;2754:7;2750:23;2746:32;2743:2;;;2796:6;2788;2781:22;2743:2;2824:31;2845:9;2824:31;:::i;:::-;2814:41;2902:2;2887:18;;;;2874:32;;-1:-1:-1;;;2733:179:1:o;2917:257::-;;3028:2;3016:9;3007:7;3003:23;2999:32;2996:2;;;3049:6;3041;3034:22;2996:2;3093:9;3080:23;3112:32;3138:5;3112:32;:::i;3179:261::-;;3301:2;3289:9;3280:7;3276:23;3272:32;3269:2;;;3322:6;3314;3307:22;3269:2;3359:9;3353:16;3378:32;3404:5;3378:32;:::i;3445:642::-;;;3577:2;3565:9;3556:7;3552:23;3548:32;3545:2;;;3598:6;3590;3583:22;3545:2;3643:9;3630:23;-1:-1:-1;;;;;3713:2:1;3705:6;3702:14;3699:2;;;3734:6;3726;3719:22;3699:2;3777:6;3766:9;3762:22;3752:32;;3822:7;3815:4;3811:2;3807:13;3803:27;3793:2;;3849:6;3841;3834:22;3793:2;3894;3881:16;3920:2;3912:6;3909:14;3906:2;;;3941:6;3933;3926:22;3906:2;3991:7;3986:2;3977:6;3973:2;3969:15;3965:24;3962:37;3959:2;;;4017:6;4009;4002:22;3959:2;4053;4045:11;;;;;4075:6;;-1:-1:-1;3535:552:1;;-1:-1:-1;;;;3535:552:1:o;4092:190::-;;4204:2;4192:9;4183:7;4179:23;4175:32;4172:2;;;4225:6;4217;4210:22;4172:2;-1:-1:-1;4253:23:1;;4162:120;-1:-1:-1;4162:120:1:o;4287:260::-;;;4413:2;4401:9;4392:7;4388:23;4384:32;4381:2;;;4434:6;4426;4419:22;4381:2;4475:9;4462:23;4452:33;;4504:37;4537:2;4526:9;4522:18;4504:37;:::i;4552:443::-;;4649:5;4643:12;4676:6;4671:3;4664:19;4702:4;4731:2;4726:3;4722:12;4715:19;;4768:2;4761:5;4757:14;4789:3;4801:169;4815:6;4812:1;4809:13;4801:169;;;4876:13;;4864:26;;4910:12;;;;4945:15;;;;4837:1;4830:9;4801:169;;;-1:-1:-1;4986:3:1;;4619:376;-1:-1:-1;;;;;4619:376:1:o;5000:259::-;;5081:5;5075:12;5108:6;5103:3;5096:19;5124:63;5180:6;5173:4;5168:3;5164:14;5157:4;5150:5;5146:16;5124:63;:::i;:::-;5241:2;5220:15;-1:-1:-1;;5216:29:1;5207:39;;;;5248:4;5203:50;;5051:208;-1:-1:-1;;5051:208:1:o;5264:470::-;;5481:6;5475:13;5497:53;5543:6;5538:3;5531:4;5523:6;5519:17;5497:53;:::i;:::-;5613:13;;5572:16;;;;5635:57;5613:13;5572:16;5669:4;5657:17;;5635:57;:::i;:::-;5708:20;;5451:283;-1:-1:-1;;;;5451:283:1:o;5739:205::-;5939:3;5930:14::o;5949:203::-;-1:-1:-1;;;;;6113:32:1;;;;6095:51;;6083:2;6068:18;;6050:102::o;6157:490::-;-1:-1:-1;;;;;6426:15:1;;;6408:34;;6478:15;;6473:2;6458:18;;6451:43;6525:2;6510:18;;6503:34;;;6573:3;6568:2;6553:18;;6546:31;;;6157:490;;6594:47;;6621:19;;6613:6;6594:47;:::i;:::-;6586:55;6360:287;-1:-1:-1;;;;;;6360:287:1:o;6652:364::-;-1:-1:-1;;;;;6859:32:1;;6841:51;;6928:2;6923;6908:18;;6901:30;;;6652:364;;6948:62;;6991:18;;6983:6;6948:62;:::i;7021:267::-;;7200:2;7189:9;7182:21;7220:62;7278:2;7267:9;7263:18;7255:6;7220:62;:::i;7293:187::-;7458:14;;7451:22;7433:41;;7421:2;7406:18;;7388:92::o;7714:221::-;;7863:2;7852:9;7845:21;7883:46;7925:2;7914:9;7910:18;7902:6;7883:46;:::i;7940:398::-;8142:2;8124:21;;;8181:2;8161:18;;;8154:30;8220:34;8215:2;8200:18;;8193:62;-1:-1:-1;;;8286:2:1;8271:18;;8264:32;8328:3;8313:19;;8114:224::o;8343:402::-;8545:2;8527:21;;;8584:2;8564:18;;;8557:30;8623:34;8618:2;8603:18;;8596:62;-1:-1:-1;;;8689:2:1;8674:18;;8667:36;8735:3;8720:19;;8517:228::o;8750:406::-;8952:2;8934:21;;;8991:2;8971:18;;;8964:30;9030:34;9025:2;9010:18;;9003:62;-1:-1:-1;;;9096:2:1;9081:18;;9074:40;9146:3;9131:19;;8924:232::o;9161:397::-;9363:2;9345:21;;;9402:2;9382:18;;;9375:30;9441:34;9436:2;9421:18;;9414:62;-1:-1:-1;;;9507:2:1;9492:18;;9485:31;9548:3;9533:19;;9335:223::o;9563:399::-;9765:2;9747:21;;;9804:2;9784:18;;;9777:30;9843:34;9838:2;9823:18;;9816:62;-1:-1:-1;;;9909:2:1;9894:18;;9887:33;9952:3;9937:19;;9737:225::o;9967:401::-;10169:2;10151:21;;;10208:2;10188:18;;;10181:30;10247:34;10242:2;10227:18;;10220:62;-1:-1:-1;;;10313:2:1;10298:18;;10291:35;10358:3;10343:19;;10141:227::o;10373:413::-;10575:2;10557:21;;;10614:2;10594:18;;;10587:30;10653:34;10648:2;10633:18;;10626:62;-1:-1:-1;;;10719:2:1;10704:18;;10697:47;10776:3;10761:19;;10547:239::o;10791:351::-;10993:2;10975:21;;;11032:2;11012:18;;;11005:30;11071:29;11066:2;11051:18;;11044:57;11133:2;11118:18;;10965:177::o;11147:408::-;11349:2;11331:21;;;11388:2;11368:18;;;11361:30;11427:34;11422:2;11407:18;;11400:62;-1:-1:-1;;;11493:2:1;11478:18;;11471:42;11545:3;11530:19;;11321:234::o;11560:354::-;11762:2;11744:21;;;11801:2;11781:18;;;11774:30;11840:32;11835:2;11820:18;;11813:60;11905:2;11890:18;;11734:180::o;11919:421::-;12121:2;12103:21;;;12160:2;12140:18;;;12133:30;12199:34;12194:2;12179:18;;12172:62;12270:27;12265:2;12250:18;;12243:55;12330:3;12315:19;;12093:247::o;12345:348::-;12547:2;12529:21;;;12586:2;12566:18;;;12559:30;12625:26;12620:2;12605:18;;12598:54;12684:2;12669:18;;12519:174::o;12698:407::-;12900:2;12882:21;;;12939:2;12919:18;;;12912:30;12978:34;12973:2;12958:18;;12951:62;-1:-1:-1;;;13044:2:1;13029:18;;13022:41;13095:3;13080:19;;12872:233::o;13110:342::-;13312:2;13294:21;;;13351:2;13331:18;;;13324:30;-1:-1:-1;;;13385:2:1;13370:18;;13363:48;13443:2;13428:18;;13284:168::o;13457:402::-;13659:2;13641:21;;;13698:2;13678:18;;;13671:30;13737:34;13732:2;13717:18;;13710:62;-1:-1:-1;;;13803:2:1;13788:18;;13781:36;13849:3;13834:19;;13631:228::o;13864:356::-;14066:2;14048:21;;;14085:18;;;14078:30;14144:34;14139:2;14124:18;;14117:62;14211:2;14196:18;;14038:182::o;14225:411::-;14427:2;14409:21;;;14466:2;14446:18;;;14439:30;14505:34;14500:2;14485:18;;14478:62;-1:-1:-1;;;14571:2:1;14556:18;;14549:45;14626:3;14611:19;;14399:237::o;14641:350::-;14843:2;14825:21;;;14882:2;14862:18;;;14855:30;14921:28;14916:2;14901:18;;14894:56;14982:2;14967:18;;14815:176::o;14996:345::-;15198:2;15180:21;;;15237:2;15217:18;;;15210:30;-1:-1:-1;;;15271:2:1;15256:18;;15249:51;15332:2;15317:18;;15170:171::o;15346:345::-;15548:2;15530:21;;;15587:2;15567:18;;;15560:30;-1:-1:-1;;;15621:2:1;15606:18;;15599:51;15682:2;15667:18;;15520:171::o;15696:398::-;15898:2;15880:21;;;15937:2;15917:18;;;15910:30;15976:34;15971:2;15956:18;;15949:62;-1:-1:-1;;;16042:2:1;16027:18;;16020:32;16084:3;16069:19;;15870:224::o;16099:340::-;16301:2;16283:21;;;16340:2;16320:18;;;16313:30;-1:-1:-1;;;16374:2:1;16359:18;;16352:46;16430:2;16415:18;;16273:166::o;16444:413::-;16646:2;16628:21;;;16685:2;16665:18;;;16658:30;16724:34;16719:2;16704:18;;16697:62;-1:-1:-1;;;16790:2:1;16775:18;;16768:47;16847:3;16832:19;;16618:239::o;16862:415::-;17064:2;17046:21;;;17103:2;17083:18;;;17076:30;17142:34;17137:2;17122:18;;17115:62;-1:-1:-1;;;17208:2:1;17193:18;;17186:49;17267:3;17252:19;;17036:241::o;17282:346::-;17484:2;17466:21;;;17523:2;17503:18;;;17496:30;-1:-1:-1;;;17557:2:1;17542:18;;17535:52;17619:2;17604:18;;17456:172::o;17633:353::-;17835:2;17817:21;;;17874:2;17854:18;;;17847:30;17913:31;17908:2;17893:18;;17886:59;17977:2;17962:18;;17807:179::o;17991:397::-;18193:2;18175:21;;;18232:2;18212:18;;;18205:30;18271:34;18266:2;18251:18;;18244:62;-1:-1:-1;;;18337:2:1;18322:18;;18315:31;18378:3;18363:19;;18165:223::o;18393:410::-;18595:2;18577:21;;;18634:2;18614:18;;;18607:30;18673:34;18668:2;18653:18;;18646:62;-1:-1:-1;;;18739:2:1;18724:18;;18717:44;18793:3;18778:19;;18567:236::o;18808:402::-;19010:2;18992:21;;;19049:2;19029:18;;;19022:30;19088:34;19083:2;19068:18;;19061:62;-1:-1:-1;;;19154:2:1;19139:18;;19132:36;19200:3;19185:19;;18982:228::o;19215:355::-;19417:2;19399:21;;;19456:2;19436:18;;;19429:30;19495:33;19490:2;19475:18;;19468:61;19561:2;19546:18;;19389:181::o;19575:411::-;19777:2;19759:21;;;19816:2;19796:18;;;19789:30;19855:34;19850:2;19835:18;;19828:62;-1:-1:-1;;;19921:2:1;19906:18;;19899:45;19976:3;19961:19;;19749:237::o;19991:409::-;20193:2;20175:21;;;20232:2;20212:18;;;20205:30;20271:34;20266:2;20251:18;;20244:62;-1:-1:-1;;;20337:2:1;20322:18;;20315:43;20390:3;20375:19;;20165:235::o;20405:398::-;20607:2;20589:21;;;20646:2;20626:18;;;20619:30;20685:34;20680:2;20665:18;;20658:62;-1:-1:-1;;;20751:2:1;20736:18;;20729:32;20793:3;20778:19;;20579:224::o;20808:360::-;21038:13;;-1:-1:-1;;;;;21034:39:1;21016:58;;21134:4;21122:17;;;21116:24;-1:-1:-1;;;;;21112:49:1;21090:20;;;21083:79;;;;21004:2;20989:18;;20971:197::o;21173:177::-;21319:25;;;21307:2;21292:18;;21274:76::o;21355:253::-;;-1:-1:-1;;;;;21484:2:1;21481:1;21477:10;21514:2;21511:1;21507:10;21545:3;21541:2;21537:12;21532:3;21529:21;21526:2;;;21553:18;;:::i;21613:128::-;;21684:1;21680:6;21677:1;21674:13;21671:2;;;21690:18;;:::i;:::-;-1:-1:-1;21726:9:1;;21661:80::o;21746:120::-;;21812:1;21802:2;;21817:18;;:::i;:::-;-1:-1:-1;21851:9:1;;21792:74::o;21871:168::-;;21977:1;21973;21969:6;21965:14;21962:1;21959:21;21954:1;21947:9;21940:17;21936:45;21933:2;;;21984:18;;:::i;:::-;-1:-1:-1;22024:9:1;;21923:116::o;22044:246::-;;-1:-1:-1;;;;;22197:10:1;;;;22167;;22219:12;;;22216:2;;;22234:18;;:::i;:::-;22271:13;;22093:197;-1:-1:-1;;;22093:197:1:o;22295:125::-;;22363:1;22360;22357:8;22354:2;;;22368:18;;:::i;:::-;-1:-1:-1;22405:9:1;;22344:76::o;22425:258::-;22497:1;22507:113;22521:6;22518:1;22515:13;22507:113;;;22597:11;;;22591:18;22578:11;;;22571:39;22543:2;22536:10;22507:113;;;22638:6;22635:1;22632:13;22629:2;;;-1:-1:-1;;22673:1:1;22655:16;;22648:27;22478:205::o;22688:136::-;;22755:5;22745:2;;22764:18;;:::i;:::-;-1:-1:-1;;;22800:18:1;;22735:89::o;22829:380::-;22914:1;22904:12;;22961:1;22951:12;;;22972:2;;23026:4;23018:6;23014:17;23004:27;;22972:2;23079;23071:6;23068:14;23048:18;23045:38;23042:2;;;23125:10;23120:3;23116:20;23113:1;23106:31;23160:4;23157:1;23150:15;23188:4;23185:1;23178:15;23214:135;;-1:-1:-1;;23274:17:1;;23271:2;;;23294:18;;:::i;:::-;-1:-1:-1;23341:1:1;23330:13;;23261:88::o;23354:112::-;;23412:1;23402:2;;23417:18;;:::i;:::-;-1:-1:-1;23451:9:1;;23392:74::o;23471:127::-;23532:10;23527:3;23523:20;23520:1;23513:31;23563:4;23560:1;23553:15;23587:4;23584:1;23577:15;23603:127;23664:10;23659:3;23655:20;23652:1;23645:31;23695:4;23692:1;23685:15;23719:4;23716:1;23709:15;23735:127;23796:10;23791:3;23787:20;23784:1;23777:31;23827:4;23824:1;23817:15;23851:4;23848:1;23841:15;23867:133;-1:-1:-1;;;;;;23943:32:1;;23933:43;;23923:2;;23990:1;23987;23980:12

Swarm Source

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