ETH Price: $2,349.40 (+8.18%)

Token

Genesis Paws (GP)
 

Overview

Max Total Supply

10 GP

Holders

8

Transfers

-
0

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

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:
GenesisPaws

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-02-21
*/

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

////// Developer Info ///////

//Written by Sheraz Manzoor 
//Email: info@blockchainguy.net

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

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

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

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

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

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

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);
            }
        }
    }
}
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

  // Mapping from token ID to ownership details
  // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  /**
   * @dev See {IERC721Metadata-tokenURI}.
   */
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

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

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

  /**
   * @dev See {IERC721-approve}.
   */
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

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

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

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

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

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

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

  /**
   * @dev Returns whether `tokenId` exists.
   *
   * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
   *
   * Tokens start existing when they are minted (`_mint`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

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

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

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

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

    uint256 updatedIndex = startTokenId;

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

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

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

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

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

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

    _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

  uint256 public nextOwnerToExplicitlySet = 0;

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

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

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

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

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);
    }
}
interface IAuctionHouse {
    struct Auction {
        // ID for the Nft (ERC721 token ID)
        uint256 nftId;
        // The current highest bid amount
        uint256 amount;
        // The time that the auction started
        uint256 startTime;
        // The time that the auction is scheduled to end
        uint256 endTime;
        // The address of the current highest bid
        address payable bidder;
        // Whether or not the auction has been settled
        bool settled;
    }

}
contract GenesisPaws is Ownable, ERC721A, ReentrancyGuard {

    using Strings for uint256;
    string private baseURI = "https://www.puffypawspack.com/api/genesis/";
    uint256 public defaultIncrease = 0.05 ether;
    uint256 public maxSupply = 10;
    string public _extension;

    // The duration of a single auction
    uint256 public duration = 14400; //4 Hours

    // The active auction
    IAuctionHouse.Auction public auction;
    bool public auctionStarted = false;

    mapping(uint256 => IAuctionHouse.Auction) public auctionHistory;

    constructor(string memory name, 
        string memory symbol, uint256 _maxBatchSize,
        uint256 _collectionSize) 
        ERC721A(name, symbol, _maxBatchSize, _collectionSize) 
    {
      }

    function settleCurrentAndCreateNewAuction() external nonReentrant  {
        _settleAuction();
        _createAuction();
    }

    function _settleAuction() internal {
        IAuctionHouse.Auction memory _auction = auction;
        require(totalSupply() < maxSupply, "Max Supply Reached.");
        require(auctionStarted, "Auction Not Started Yet.");
        require(_auction.startTime != 0, "Auction hasn't begun");
        require(!_auction.settled, "Auction has already been settled");
        require(block.timestamp >= _auction.endTime, "Auction hasn't completed");

        _auction.settled = true;

       if (_auction.bidder == address(0)) {
            _auction.bidder = payable(owner());
            _safeMint(owner(), 1);
        }else{
            _safeMint(_auction.bidder, 1);
        }

        auctionHistory[totalSupply() - 1] = _auction;
      
    }

    function _createAuction() internal {

          if(totalSupply() < maxSupply){

              uint256 _startTime = block.timestamp;
              uint256 _endTime = _startTime + duration;

              auction = IAuctionHouse.Auction({
                  nftId: totalSupply(),
                  amount: 0,
                  startTime: _startTime,
                  endTime: _endTime,
                  bidder: payable(0),
                  settled: false
              });
              auctionStarted = true;
          }
    }
    function sendGift(address _reciever) public onlyOwner{
            require(totalSupply() < maxSupply, "Max Supply Reached.");
              IAuctionHouse.Auction memory _auction = IAuctionHouse.Auction({
                nftId: totalSupply(),
                amount: 0,
                startTime: block.timestamp,
                endTime: block.timestamp,
                bidder: payable(_reciever),
                settled: true
            });

            auctionHistory[totalSupply()] = _auction;
            _safeMint(_reciever, 1);
    }
    function auctionNft() public payable {
        require(totalSupply() < maxSupply, "Reaching max supply");
        IAuctionHouse.Auction memory _auction = auction;

        require(_auction.nftId == totalSupply(), "Nft not up for auction");
        require(block.timestamp < _auction.endTime, "Auction expired");
        require(msg.value > (_auction.amount + defaultIncrease),"Must send 0.12 more than last bid.");

        address payable lastBidder = _auction.bidder;

        // Refund the last bidder, if applicable
        if (lastBidder != address(0)) {
            payable(lastBidder).transfer(_auction.amount);
        }
        auction.amount = msg.value;
        auction.bidder = payable(msg.sender);
    }

    function isAuctionEnded() public view returns (bool){
      if(block.timestamp > auction.endTime){
        return true;
      }else{
        return false;
      }
    }

    function endAuction() public onlyOwner{
      auction.endTime = block.timestamp;
    }
    //Adming Testing function
    function extendAuction(uint256 _temp) public onlyOwner{
      auction.endTime = block.timestamp + _temp;
    }

    function createAuction() external nonReentrant onlyOwner{
        _createAuction();
    }
    function settleAuction() external nonReentrant onlyOwner{
        _settleAuction();
    }
    function getAuctionHistory(uint256 _id) public view returns(IAuctionHouse.Auction memory){
      return auctionHistory[_id];
    }
    function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
        require(
            _exists(_tokenId),
            "ERC721Metadata: URI set of nonexistent token"
        );

        return string(abi.encodePacked(baseURI, _tokenId.toString(), _extension));

    }

    function updateBaseURI(string memory _newBaseURI) onlyOwner public {
        baseURI = _newBaseURI;
    }
    function updateExtension(string memory _temp) onlyOwner public {
        _extension = _temp;
    }

    function getBaseURI() external view returns(string memory) {
        return baseURI;
    }

    function setdefaultIncrease(uint256 _price) public onlyOwner() {
        defaultIncrease = _price;
    }

    function setmaxSupply(uint256 _supply) public onlyOwner() {
        require(_supply > maxSupply, "Provide a valid supply i.e. greater than current supply and less than/equal to max supply");
        maxSupply = _supply;
    }

    function getBalance() public view returns(uint) {
        return address(this).balance;
    }

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

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



    receive() external payable {}

}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"_maxBatchSize","type":"uint256"},{"internalType":"uint256","name":"_collectionSize","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":"_extension","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"auction","outputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"address payable","name":"bidder","type":"address"},{"internalType":"bool","name":"settled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctionHistory","outputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"address payable","name":"bidder","type":"address"},{"internalType":"bool","name":"settled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auctionNft","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"auctionStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultIncrease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_temp","type":"uint256"}],"name":"extendAuction","outputs":[],"stateMutability":"nonpayable","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":"_id","type":"uint256"}],"name":"getAuctionHistory","outputs":[{"components":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"address payable","name":"bidder","type":"address"},{"internalType":"bool","name":"settled","type":"bool"}],"internalType":"struct IAuctionHouse.Auction","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"isAuctionEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_reciever","type":"address"}],"name":"sendGift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setdefaultIncrease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settleAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settleCurrentAndCreateNewAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"updateBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_temp","type":"string"}],"name":"updateExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006001819055600855610120604052602a60c081815290620032ba60e03980516200003491600a91602090910190620001fa565b5066b1a2bc2ec50000600b55600a600c55613840600e556014805460ff191690553480156200006257600080fd5b50604051620032e4380380620032e4833981016040819052620000859162000357565b838383836200009433620001aa565b60008111620001015760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620001635760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b6064820152608401620000f8565b835162000178906002906020870190620001fa565b5082516200018e906003906020860190620001fa565b5060a09190915260805250506001600955506200042492505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200020890620003d1565b90600052602060002090601f0160209004810192826200022c576000855562000277565b82601f106200024757805160ff191683800117855562000277565b8280016001018555821562000277579182015b82811115620002775782518255916020019190600101906200025a565b506200028592915062000289565b5090565b5b808211156200028557600081556001016200028a565b600082601f830112620002b257600080fd5b81516001600160401b0380821115620002cf57620002cf6200040e565b604051601f8301601f19908116603f01168101908282118183101715620002fa57620002fa6200040e565b816040528381526020925086838588010111156200031757600080fd5b600091505b838210156200033b57858201830151818301840152908201906200031c565b838211156200034d5760008385830101525b9695505050505050565b600080600080608085870312156200036e57600080fd5b84516001600160401b03808211156200038657600080fd5b6200039488838901620002a0565b95506020870151915080821115620003ab57600080fd5b50620003ba87828801620002a0565b604087015160609097015195989097509350505050565b600181811c90821680620003e657607f821691505b602082108114156200040857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a051612e656200045560003960008181611d6301528181611d8d0152612527015260005050612e656000f3fe60806040526004361061026b5760003560e01c80637d9f6db511610144578063d5abeb01116100b6578063e985e9c51161007a578063e985e9c5146107ed578063ee2679bc14610836578063f25efffc14610850578063f2fde38b14610865578063f581144714610885578063fe67a54b1461089a57600080fd5b8063d5abeb011461070f578063d7224ba014610725578063db4e299b1461073b578063de2e61361461075b578063e7f4c1271461077b57600080fd5b806395d89b411161010857806395d89b4114610665578063a22cb4651461067a578063a4d0a17e1461069a578063b88d4fde146106af578063c87b56dd146106cf578063ce5f9fb3146106ef57600080fd5b80637d9f6db51461057d5780637e6182d9146105b95780638da5cb5b146105d95780639231ab2a146105f7578063931688cb1461064557600080fd5b80632f745c59116101dd5780634f6ccce7116101a15780634f6ccce7146104d357806351cff8d9146104f35780636352211e1461051357806370a0823114610533578063714c539814610553578063715018a61461056857600080fd5b80632f745c59146103d257806331cde51a146103f25780633ae1dd9d1461048957806342842e0e1461049e57806343891f3a146104be57600080fd5b80630fb5a6b41161022f5780630fb5a6b41461034c57806312065fe0146103625780631696b4a81461037557806318160ddd1461037d578063228025e81461039257806323b872dd146103b257600080fd5b806301ffc9a71461027757806306375b9a146102ac57806306fdde03146102d0578063081812fc146102f2578063095ea7b31461032a57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b506102976102923660046129da565b6108af565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102c2600b5481565b6040519081526020016102a3565b3480156102dc57600080fd5b506102e561091c565b6040516102a39190612bac565b3480156102fe57600080fd5b5061031261030d366004612a5d565b6109ae565b6040516001600160a01b0390911681526020016102a3565b34801561033657600080fd5b5061034a6103453660046129b0565b610a3e565b005b34801561035857600080fd5b506102c2600e5481565b34801561036e57600080fd5b50476102c2565b61034a610b56565b34801561038957600080fd5b506001546102c2565b34801561039e57600080fd5b5061034a6103ad366004612a5d565b610d4f565b3480156103be57600080fd5b5061034a6103cd3660046128bc565b610e1b565b3480156103de57600080fd5b506102c26103ed3660046129b0565b610e26565b3480156103fe57600080fd5b5061045161040d366004612a5d565b60156020526000908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b03811690600160a01b900460ff1686565b6040805196875260208701959095529385019290925260608401526001600160a01b03166080830152151560a082015260c0016102a3565b34801561049557600080fd5b506102e5610f9f565b3480156104aa57600080fd5b5061034a6104b93660046128bc565b61102d565b3480156104ca57600080fd5b50610297611048565b3480156104df57600080fd5b506102c26104ee366004612a5d565b611061565b3480156104ff57600080fd5b5061034a61050e366004612867565b6110ca565b34801561051f57600080fd5b5061031261052e366004612a5d565b6111b9565b34801561053f57600080fd5b506102c261054e366004612867565b6111cb565b34801561055f57600080fd5b506102e561125c565b34801561057457600080fd5b5061034a61126b565b34801561058957600080fd5b50600f5460105460115460125460135461045194939291906001600160a01b03811690600160a01b900460ff1686565b3480156105c557600080fd5b5061034a6105d4366004612a14565b6112a1565b3480156105e557600080fd5b506000546001600160a01b0316610312565b34801561060357600080fd5b50610617610612366004612a5d565b6112e2565b6040805182516001600160a01b0316815260209283015167ffffffffffffffff1692810192909252016102a3565b34801561065157600080fd5b5061034a610660366004612a14565b6112ff565b34801561067157600080fd5b506102e561133c565b34801561068657600080fd5b5061034a610695366004612974565b61134b565b3480156106a657600080fd5b5061034a611410565b3480156106bb57600080fd5b5061034a6106ca3660046128f8565b611471565b3480156106db57600080fd5b506102e56106ea366004612a5d565b6114aa565b3480156106fb57600080fd5b5061034a61070a366004612a5d565b61154d565b34801561071b57600080fd5b506102c2600c5481565b34801561073157600080fd5b506102c260085481565b34801561074757600080fd5b5061034a610756366004612a5d565b611587565b34801561076757600080fd5b5061034a610776366004612867565b6115b6565b34801561078757600080fd5b5061079b610796366004612a5d565b6116fa565b6040516102a39190815181526020808301519082015260408083015190820152606080830151908201526080808301516001600160a01b03169082015260a09182015115159181019190915260c00190565b3480156107f957600080fd5b50610297610808366004612889565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561084257600080fd5b506014546102979060ff1681565b34801561085c57600080fd5b5061034a6117a8565b34801561087157600080fd5b5061034a610880366004612867565b6117e0565b34801561089157600080fd5b5061034a61187b565b3480156108a657600080fd5b5061034a6118cd565b60006001600160e01b031982166380ac58cd60e01b14806108e057506001600160e01b03198216635b5e139f60e01b145b806108fb57506001600160e01b0319821663780e9d6360e01b145b8061091657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461092b90612d57565b80601f016020809104026020016040519081016040528092919081815260200182805461095790612d57565b80156109a45780601f10610979576101008083540402835291602001916109a4565b820191906000526020600020905b81548152906001019060200180831161098757829003601f168201915b5050505050905090565b60006109bb826001541190565b610a225760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610a49826111b9565b9050806001600160a01b0316836001600160a01b03161415610ab85760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610a19565b336001600160a01b0382161480610ad45750610ad48133610808565b610b465760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610a19565b610b518383836118fd565b505050565b600c5460015410610b9f5760405162461bcd60e51b81526020600482015260136024820152725265616368696e67206d617820737570706c7960681b6044820152606401610a19565b6040805160c081018252600f54815260105460208201526011549181019190915260125460608201526013546001600160a01b0381166080830152600160a01b900460ff16151560a0820152600154815114610c365760405162461bcd60e51b815260206004820152601660248201527527333a103737ba103ab8103337b91030bab1ba34b7b760511b6044820152606401610a19565b80606001514210610c7b5760405162461bcd60e51b815260206004820152600f60248201526e105d58dd1a5bdb88195e1c1a5c9959608a1b6044820152606401610a19565b600b548160200151610c8d9190612ca9565b3411610ce65760405162461bcd60e51b815260206004820152602260248201527f4d7573742073656e6420302e3132206d6f7265207468616e206c617374206269604482015261321760f11b6064820152608401610a19565b60808101516001600160a01b03811615610d355760208201516040516001600160a01b0383169180156108fc02916000818181858888f19350505050158015610d33573d6000803e3d6000fd5b505b505034601055601380546001600160a01b03191633179055565b6000546001600160a01b03163314610d795760405162461bcd60e51b8152600401610a1990612bbf565b600c548111610e165760405162461bcd60e51b815260206004820152605960248201527f50726f7669646520612076616c696420737570706c7920692e652e206772656160448201527f746572207468616e2063757272656e7420737570706c7920616e64206c65737360648201527f207468616e2f657175616c20746f206d617820737570706c7900000000000000608482015260a401610a19565b600c55565b610b51838383611959565b6000610e31836111cb565b8210610e8a5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610a19565b6000610e9560015490565b905060008060005b83811015610f3f576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610ef057805192505b876001600160a01b0316836001600160a01b03161415610f2c5786841415610f1e5750935061091692505050565b83610f2881612d92565b9450505b5080610f3781612d92565b915050610e9d565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610a19565b600d8054610fac90612d57565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd890612d57565b80156110255780601f10610ffa57610100808354040283529160200191611025565b820191906000526020600020905b81548152906001019060200180831161100857829003601f168201915b505050505081565b610b5183838360405180602001604052806000815250611471565b60125460009042111561105b5750600190565b50600090565b600061106c60015490565b82106110c65760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610a19565b5090565b6000546001600160a01b031633146110f45760405162461bcd60e51b8152600401610a1990612bbf565b600260095414156111175760405162461bcd60e51b8152600401610a1990612c47565b60026009556040516000906001600160a01b0383169047908381818185875af1925050503d8060008114611167576040519150601f19603f3d011682016040523d82523d6000602084013e61116c565b606091505b50509050806111b05760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610a19565b50506001600955565b60006111c482611ce1565b5192915050565b60006001600160a01b0382166112375760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610a19565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6060600a805461092b90612d57565b6000546001600160a01b031633146112955760405162461bcd60e51b8152600401610a1990612bbf565b61129f6000611e8b565b565b6000546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610a1990612bbf565b80516112de90600d906020840190612745565b5050565b604080518082019091526000808252602082015261091682611ce1565b6000546001600160a01b031633146113295760405162461bcd60e51b8152600401610a1990612bbf565b80516112de90600a906020840190612745565b60606003805461092b90612d57565b6001600160a01b0382163314156113a45760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610a19565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600260095414156114335760405162461bcd60e51b8152600401610a1990612c47565b60026009556000546001600160a01b031633146114625760405162461bcd60e51b8152600401610a1990612bbf565b61146a611edb565b6001600955565b61147c848484611959565b61148884848484612185565b6114a45760405162461bcd60e51b8152600401610a1990612bf4565b50505050565b60606114b7826001541190565b6115185760405162461bcd60e51b815260206004820152602c60248201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a19565b600a61152383612293565b600d60405160200161153793929190612b3c565b6040516020818303038152906040529050919050565b6000546001600160a01b031633146115775760405162461bcd60e51b8152600401610a1990612bbf565b6115818142612ca9565b60125550565b6000546001600160a01b031633146115b15760405162461bcd60e51b8152600401610a1990612bbf565b600b55565b6000546001600160a01b031633146115e05760405162461bcd60e51b8152600401610a1990612bbf565b600c54600154106116295760405162461bcd60e51b815260206004820152601360248201527226b0bc1029bab838363c902932b0b1b432b21760691b6044820152606401610a19565b60006040518060c0016040528061163f60015490565b815260200160008152602001428152602001428152602001836001600160a01b03168152602001600115158152509050806015600061167d60015490565b8152602080820192909252604090810160002083518155918301516001808401919091559083015160028301556060830151600383015560808301516004909201805460a0909401511515600160a01b026001600160a81b03199094166001600160a01b03909316929092179290921790556112de908390612391565b61173e6040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000151581525090565b50600090815260156020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004909101546001600160a01b0381166080830152600160a01b900460ff16151560a082015290565b600260095414156117cb5760405162461bcd60e51b8152600401610a1990612c47565b60026009556117d8611edb565b61146a6123ab565b6000546001600160a01b0316331461180a5760405162461bcd60e51b8152600401610a1990612bbf565b6001600160a01b03811661186f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a19565b61187881611e8b565b50565b6002600954141561189e5760405162461bcd60e51b8152600401610a1990612c47565b60026009556000546001600160a01b031633146117d85760405162461bcd60e51b8152600401610a1990612bbf565b6000546001600160a01b031633146118f75760405162461bcd60e51b8152600401610a1990612bbf565b42601255565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061196482611ce1565b80519091506000906001600160a01b0316336001600160a01b0316148061199b575033611990846109ae565b6001600160a01b0316145b806119ad575081516119ad9033610808565b905080611a175760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610a19565b846001600160a01b031682600001516001600160a01b031614611a8b5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610a19565b6001600160a01b038416611aef5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610a19565b611aff60008484600001516118fd565b6001600160a01b0385166000908152600560205260408120805460019290611b319084906001600160801b0316612cd5565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092611b7d91859116612c7e565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055611c05846001612ca9565b6000818152600460205260409020549091506001600160a01b0316611c9757611c2f816001541190565b15611c975760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6040805180820190915260008082526020820152611d00826001541190565b611d5f5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610a19565b60007f00000000000000000000000000000000000000000000000000000000000000008310611dc057611db27f000000000000000000000000000000000000000000000000000000000000000084612cfd565b611dbd906001612ca9565b90505b825b818110611e2a576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215611e1757949350505050565b5080611e2281612d40565b915050611dc2565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610a19565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160c081018252600f54815260105460208201526011549181019190915260125460608201526013546001600160a01b0381166080830152600160a01b900460ff16151560a0820152600c5460015410611f705760405162461bcd60e51b815260206004820152601360248201527226b0bc1029bab838363c902932b0b1b432b21760691b6044820152606401610a19565b60145460ff16611fc25760405162461bcd60e51b815260206004820152601860248201527f41756374696f6e204e6f742053746172746564205965742e00000000000000006044820152606401610a19565b604081015161200a5760405162461bcd60e51b815260206004820152601460248201527320bab1ba34b7b7103430b9b713ba103132b3bab760611b6044820152606401610a19565b8060a001511561205c5760405162461bcd60e51b815260206004820181905260248201527f41756374696f6e2068617320616c7265616479206265656e20736574746c65646044820152606401610a19565b80606001514210156120b05760405162461bcd60e51b815260206004820152601860248201527f41756374696f6e206861736e277420636f6d706c6574656400000000000000006044820152606401610a19565b600160a082015260808101516001600160a01b03166120ec576000546001600160a01b0316608082018190526120e7906001612391565b6120fb565b6120fb81608001516001612391565b8060156000600161210b60015490565b6121159190612cfd565b815260208082019290925260409081016000208351815591830151600183015582015160028201556060820151600382015560808201516004909101805460a0909301511515600160a01b026001600160a81b03199093166001600160a01b039092169190911791909117905550565b60006001600160a01b0384163b1561228757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121c9903390899088908890600401612b6f565b602060405180830381600087803b1580156121e357600080fd5b505af1925050508015612213575060408051601f3d908101601f19168201909252612210918101906129f7565b60015b61226d573d808015612241576040519150601f19603f3d011682016040523d82523d6000602084013e612246565b606091505b5080516122655760405162461bcd60e51b8152600401610a1990612bf4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061228b565b5060015b949350505050565b6060816122b75750506040805180820190915260018152600360fc1b602082015290565b8160005b81156122e157806122cb81612d92565b91506122da9050600a83612cc1565b91506122bb565b60008167ffffffffffffffff8111156122fc576122fc612e03565b6040519080825280601f01601f191660200182016040528015612326576020820181803683370190505b5090505b841561228b5761233b600183612cfd565b9150612348600a86612dad565b612353906030612ca9565b60f81b81838151811061236857612368612ded565b60200101906001600160f81b031916908160001a90535061238a600a86612cc1565b945061232a565b6112de82826040518060200160405280600081525061246a565b600c54600154101561129f57600e5442906000906123c99083612ca9565b90506040518060c001604052806123df60015490565b815260006020808301829052604080840196909652606080840195909552608080840183905260a0938401929092528351600f558301516010559382015160115591810151601255918201516013805493909201511515600160a01b026001600160a81b03199093166001600160a01b0391909116179190911790556014805460ff19166001179055565b6001546001600160a01b0384166124cd5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a19565b6124d8816001541190565b156125255760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610a19565b7f00000000000000000000000000000000000000000000000000000000000000008311156125a05760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610a19565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906125fc908790612c7e565b6001600160801b0316815260200185836020015161261a9190612c7e565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b8581101561273a5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46126fe6000888488612185565b61271a5760405162461bcd60e51b8152600401610a1990612bf4565b8161272481612d92565b925050808061273290612d92565b9150506126b1565b506001819055611cd9565b82805461275190612d57565b90600052602060002090601f01602090048101928261277357600085556127b9565b82601f1061278c57805160ff19168380011785556127b9565b828001600101855582156127b9579182015b828111156127b957825182559160200191906001019061279e565b506110c69291505b808211156110c657600081556001016127c1565b600067ffffffffffffffff808411156127f0576127f0612e03565b604051601f8501601f19908116603f0116810190828211818310171561281857612818612e03565b8160405280935085815286868601111561283157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461286257600080fd5b919050565b60006020828403121561287957600080fd5b6128828261284b565b9392505050565b6000806040838503121561289c57600080fd5b6128a58361284b565b91506128b36020840161284b565b90509250929050565b6000806000606084860312156128d157600080fd5b6128da8461284b565b92506128e86020850161284b565b9150604084013590509250925092565b6000806000806080858703121561290e57600080fd5b6129178561284b565b93506129256020860161284b565b925060408501359150606085013567ffffffffffffffff81111561294857600080fd5b8501601f8101871361295957600080fd5b612968878235602084016127d5565b91505092959194509250565b6000806040838503121561298757600080fd5b6129908361284b565b9150602083013580151581146129a557600080fd5b809150509250929050565b600080604083850312156129c357600080fd5b6129cc8361284b565b946020939093013593505050565b6000602082840312156129ec57600080fd5b813561288281612e19565b600060208284031215612a0957600080fd5b815161288281612e19565b600060208284031215612a2657600080fd5b813567ffffffffffffffff811115612a3d57600080fd5b8201601f81018413612a4e57600080fd5b61228b848235602084016127d5565b600060208284031215612a6f57600080fd5b5035919050565b60008151808452612a8e816020860160208601612d14565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612abc57607f831692505b6020808410821415612ade57634e487b7160e01b600052602260045260246000fd5b818015612af25760018114612b0357612b30565b60ff19861689528489019650612b30565b60008881526020902060005b86811015612b285781548b820152908501908301612b0f565b505084890196505b50505050505092915050565b6000612b488286612aa2565b8451612b58818360208901612d14565b612b6481830186612aa2565b979650505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ba290830184612a76565b9695505050505050565b6020815260006128826020830184612a76565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60006001600160801b03808316818516808303821115612ca057612ca0612dc1565b01949350505050565b60008219821115612cbc57612cbc612dc1565b500190565b600082612cd057612cd0612dd7565b500490565b60006001600160801b0383811690831681811015612cf557612cf5612dc1565b039392505050565b600082821015612d0f57612d0f612dc1565b500390565b60005b83811015612d2f578181015183820152602001612d17565b838111156114a45750506000910152565b600081612d4f57612d4f612dc1565b506000190190565b600181811c90821680612d6b57607f821691505b60208210811415612d8c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612da657612da6612dc1565b5060010190565b600082612dbc57612dbc612dd7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461187857600080fdfea2646970667358221220093354d990f5930fa585b696277f3c9c22d79a8b10dcb636bd67fbfed90ddbf564736f6c6343000807003368747470733a2f2f7777772e7075666679706177737061636b2e636f6d2f6170692f67656e657369732f000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c47656e657369732050617773000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024750000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80637d9f6db511610144578063d5abeb01116100b6578063e985e9c51161007a578063e985e9c5146107ed578063ee2679bc14610836578063f25efffc14610850578063f2fde38b14610865578063f581144714610885578063fe67a54b1461089a57600080fd5b8063d5abeb011461070f578063d7224ba014610725578063db4e299b1461073b578063de2e61361461075b578063e7f4c1271461077b57600080fd5b806395d89b411161010857806395d89b4114610665578063a22cb4651461067a578063a4d0a17e1461069a578063b88d4fde146106af578063c87b56dd146106cf578063ce5f9fb3146106ef57600080fd5b80637d9f6db51461057d5780637e6182d9146105b95780638da5cb5b146105d95780639231ab2a146105f7578063931688cb1461064557600080fd5b80632f745c59116101dd5780634f6ccce7116101a15780634f6ccce7146104d357806351cff8d9146104f35780636352211e1461051357806370a0823114610533578063714c539814610553578063715018a61461056857600080fd5b80632f745c59146103d257806331cde51a146103f25780633ae1dd9d1461048957806342842e0e1461049e57806343891f3a146104be57600080fd5b80630fb5a6b41161022f5780630fb5a6b41461034c57806312065fe0146103625780631696b4a81461037557806318160ddd1461037d578063228025e81461039257806323b872dd146103b257600080fd5b806301ffc9a71461027757806306375b9a146102ac57806306fdde03146102d0578063081812fc146102f2578063095ea7b31461032a57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b506102976102923660046129da565b6108af565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102c2600b5481565b6040519081526020016102a3565b3480156102dc57600080fd5b506102e561091c565b6040516102a39190612bac565b3480156102fe57600080fd5b5061031261030d366004612a5d565b6109ae565b6040516001600160a01b0390911681526020016102a3565b34801561033657600080fd5b5061034a6103453660046129b0565b610a3e565b005b34801561035857600080fd5b506102c2600e5481565b34801561036e57600080fd5b50476102c2565b61034a610b56565b34801561038957600080fd5b506001546102c2565b34801561039e57600080fd5b5061034a6103ad366004612a5d565b610d4f565b3480156103be57600080fd5b5061034a6103cd3660046128bc565b610e1b565b3480156103de57600080fd5b506102c26103ed3660046129b0565b610e26565b3480156103fe57600080fd5b5061045161040d366004612a5d565b60156020526000908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b03811690600160a01b900460ff1686565b6040805196875260208701959095529385019290925260608401526001600160a01b03166080830152151560a082015260c0016102a3565b34801561049557600080fd5b506102e5610f9f565b3480156104aa57600080fd5b5061034a6104b93660046128bc565b61102d565b3480156104ca57600080fd5b50610297611048565b3480156104df57600080fd5b506102c26104ee366004612a5d565b611061565b3480156104ff57600080fd5b5061034a61050e366004612867565b6110ca565b34801561051f57600080fd5b5061031261052e366004612a5d565b6111b9565b34801561053f57600080fd5b506102c261054e366004612867565b6111cb565b34801561055f57600080fd5b506102e561125c565b34801561057457600080fd5b5061034a61126b565b34801561058957600080fd5b50600f5460105460115460125460135461045194939291906001600160a01b03811690600160a01b900460ff1686565b3480156105c557600080fd5b5061034a6105d4366004612a14565b6112a1565b3480156105e557600080fd5b506000546001600160a01b0316610312565b34801561060357600080fd5b50610617610612366004612a5d565b6112e2565b6040805182516001600160a01b0316815260209283015167ffffffffffffffff1692810192909252016102a3565b34801561065157600080fd5b5061034a610660366004612a14565b6112ff565b34801561067157600080fd5b506102e561133c565b34801561068657600080fd5b5061034a610695366004612974565b61134b565b3480156106a657600080fd5b5061034a611410565b3480156106bb57600080fd5b5061034a6106ca3660046128f8565b611471565b3480156106db57600080fd5b506102e56106ea366004612a5d565b6114aa565b3480156106fb57600080fd5b5061034a61070a366004612a5d565b61154d565b34801561071b57600080fd5b506102c2600c5481565b34801561073157600080fd5b506102c260085481565b34801561074757600080fd5b5061034a610756366004612a5d565b611587565b34801561076757600080fd5b5061034a610776366004612867565b6115b6565b34801561078757600080fd5b5061079b610796366004612a5d565b6116fa565b6040516102a39190815181526020808301519082015260408083015190820152606080830151908201526080808301516001600160a01b03169082015260a09182015115159181019190915260c00190565b3480156107f957600080fd5b50610297610808366004612889565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561084257600080fd5b506014546102979060ff1681565b34801561085c57600080fd5b5061034a6117a8565b34801561087157600080fd5b5061034a610880366004612867565b6117e0565b34801561089157600080fd5b5061034a61187b565b3480156108a657600080fd5b5061034a6118cd565b60006001600160e01b031982166380ac58cd60e01b14806108e057506001600160e01b03198216635b5e139f60e01b145b806108fb57506001600160e01b0319821663780e9d6360e01b145b8061091657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461092b90612d57565b80601f016020809104026020016040519081016040528092919081815260200182805461095790612d57565b80156109a45780601f10610979576101008083540402835291602001916109a4565b820191906000526020600020905b81548152906001019060200180831161098757829003601f168201915b5050505050905090565b60006109bb826001541190565b610a225760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610a49826111b9565b9050806001600160a01b0316836001600160a01b03161415610ab85760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610a19565b336001600160a01b0382161480610ad45750610ad48133610808565b610b465760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610a19565b610b518383836118fd565b505050565b600c5460015410610b9f5760405162461bcd60e51b81526020600482015260136024820152725265616368696e67206d617820737570706c7960681b6044820152606401610a19565b6040805160c081018252600f54815260105460208201526011549181019190915260125460608201526013546001600160a01b0381166080830152600160a01b900460ff16151560a0820152600154815114610c365760405162461bcd60e51b815260206004820152601660248201527527333a103737ba103ab8103337b91030bab1ba34b7b760511b6044820152606401610a19565b80606001514210610c7b5760405162461bcd60e51b815260206004820152600f60248201526e105d58dd1a5bdb88195e1c1a5c9959608a1b6044820152606401610a19565b600b548160200151610c8d9190612ca9565b3411610ce65760405162461bcd60e51b815260206004820152602260248201527f4d7573742073656e6420302e3132206d6f7265207468616e206c617374206269604482015261321760f11b6064820152608401610a19565b60808101516001600160a01b03811615610d355760208201516040516001600160a01b0383169180156108fc02916000818181858888f19350505050158015610d33573d6000803e3d6000fd5b505b505034601055601380546001600160a01b03191633179055565b6000546001600160a01b03163314610d795760405162461bcd60e51b8152600401610a1990612bbf565b600c548111610e165760405162461bcd60e51b815260206004820152605960248201527f50726f7669646520612076616c696420737570706c7920692e652e206772656160448201527f746572207468616e2063757272656e7420737570706c7920616e64206c65737360648201527f207468616e2f657175616c20746f206d617820737570706c7900000000000000608482015260a401610a19565b600c55565b610b51838383611959565b6000610e31836111cb565b8210610e8a5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610a19565b6000610e9560015490565b905060008060005b83811015610f3f576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610ef057805192505b876001600160a01b0316836001600160a01b03161415610f2c5786841415610f1e5750935061091692505050565b83610f2881612d92565b9450505b5080610f3781612d92565b915050610e9d565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610a19565b600d8054610fac90612d57565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd890612d57565b80156110255780601f10610ffa57610100808354040283529160200191611025565b820191906000526020600020905b81548152906001019060200180831161100857829003601f168201915b505050505081565b610b5183838360405180602001604052806000815250611471565b60125460009042111561105b5750600190565b50600090565b600061106c60015490565b82106110c65760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610a19565b5090565b6000546001600160a01b031633146110f45760405162461bcd60e51b8152600401610a1990612bbf565b600260095414156111175760405162461bcd60e51b8152600401610a1990612c47565b60026009556040516000906001600160a01b0383169047908381818185875af1925050503d8060008114611167576040519150601f19603f3d011682016040523d82523d6000602084013e61116c565b606091505b50509050806111b05760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610a19565b50506001600955565b60006111c482611ce1565b5192915050565b60006001600160a01b0382166112375760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610a19565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6060600a805461092b90612d57565b6000546001600160a01b031633146112955760405162461bcd60e51b8152600401610a1990612bbf565b61129f6000611e8b565b565b6000546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610a1990612bbf565b80516112de90600d906020840190612745565b5050565b604080518082019091526000808252602082015261091682611ce1565b6000546001600160a01b031633146113295760405162461bcd60e51b8152600401610a1990612bbf565b80516112de90600a906020840190612745565b60606003805461092b90612d57565b6001600160a01b0382163314156113a45760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610a19565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600260095414156114335760405162461bcd60e51b8152600401610a1990612c47565b60026009556000546001600160a01b031633146114625760405162461bcd60e51b8152600401610a1990612bbf565b61146a611edb565b6001600955565b61147c848484611959565b61148884848484612185565b6114a45760405162461bcd60e51b8152600401610a1990612bf4565b50505050565b60606114b7826001541190565b6115185760405162461bcd60e51b815260206004820152602c60248201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a19565b600a61152383612293565b600d60405160200161153793929190612b3c565b6040516020818303038152906040529050919050565b6000546001600160a01b031633146115775760405162461bcd60e51b8152600401610a1990612bbf565b6115818142612ca9565b60125550565b6000546001600160a01b031633146115b15760405162461bcd60e51b8152600401610a1990612bbf565b600b55565b6000546001600160a01b031633146115e05760405162461bcd60e51b8152600401610a1990612bbf565b600c54600154106116295760405162461bcd60e51b815260206004820152601360248201527226b0bc1029bab838363c902932b0b1b432b21760691b6044820152606401610a19565b60006040518060c0016040528061163f60015490565b815260200160008152602001428152602001428152602001836001600160a01b03168152602001600115158152509050806015600061167d60015490565b8152602080820192909252604090810160002083518155918301516001808401919091559083015160028301556060830151600383015560808301516004909201805460a0909401511515600160a01b026001600160a81b03199094166001600160a01b03909316929092179290921790556112de908390612391565b61173e6040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000151581525090565b50600090815260156020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004909101546001600160a01b0381166080830152600160a01b900460ff16151560a082015290565b600260095414156117cb5760405162461bcd60e51b8152600401610a1990612c47565b60026009556117d8611edb565b61146a6123ab565b6000546001600160a01b0316331461180a5760405162461bcd60e51b8152600401610a1990612bbf565b6001600160a01b03811661186f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a19565b61187881611e8b565b50565b6002600954141561189e5760405162461bcd60e51b8152600401610a1990612c47565b60026009556000546001600160a01b031633146117d85760405162461bcd60e51b8152600401610a1990612bbf565b6000546001600160a01b031633146118f75760405162461bcd60e51b8152600401610a1990612bbf565b42601255565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061196482611ce1565b80519091506000906001600160a01b0316336001600160a01b0316148061199b575033611990846109ae565b6001600160a01b0316145b806119ad575081516119ad9033610808565b905080611a175760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610a19565b846001600160a01b031682600001516001600160a01b031614611a8b5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610a19565b6001600160a01b038416611aef5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610a19565b611aff60008484600001516118fd565b6001600160a01b0385166000908152600560205260408120805460019290611b319084906001600160801b0316612cd5565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092611b7d91859116612c7e565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055611c05846001612ca9565b6000818152600460205260409020549091506001600160a01b0316611c9757611c2f816001541190565b15611c975760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6040805180820190915260008082526020820152611d00826001541190565b611d5f5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610a19565b60007f00000000000000000000000000000000000000000000000000000000000000018310611dc057611db27f000000000000000000000000000000000000000000000000000000000000000184612cfd565b611dbd906001612ca9565b90505b825b818110611e2a576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215611e1757949350505050565b5080611e2281612d40565b915050611dc2565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610a19565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160c081018252600f54815260105460208201526011549181019190915260125460608201526013546001600160a01b0381166080830152600160a01b900460ff16151560a0820152600c5460015410611f705760405162461bcd60e51b815260206004820152601360248201527226b0bc1029bab838363c902932b0b1b432b21760691b6044820152606401610a19565b60145460ff16611fc25760405162461bcd60e51b815260206004820152601860248201527f41756374696f6e204e6f742053746172746564205965742e00000000000000006044820152606401610a19565b604081015161200a5760405162461bcd60e51b815260206004820152601460248201527320bab1ba34b7b7103430b9b713ba103132b3bab760611b6044820152606401610a19565b8060a001511561205c5760405162461bcd60e51b815260206004820181905260248201527f41756374696f6e2068617320616c7265616479206265656e20736574746c65646044820152606401610a19565b80606001514210156120b05760405162461bcd60e51b815260206004820152601860248201527f41756374696f6e206861736e277420636f6d706c6574656400000000000000006044820152606401610a19565b600160a082015260808101516001600160a01b03166120ec576000546001600160a01b0316608082018190526120e7906001612391565b6120fb565b6120fb81608001516001612391565b8060156000600161210b60015490565b6121159190612cfd565b815260208082019290925260409081016000208351815591830151600183015582015160028201556060820151600382015560808201516004909101805460a0909301511515600160a01b026001600160a81b03199093166001600160a01b039092169190911791909117905550565b60006001600160a01b0384163b1561228757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121c9903390899088908890600401612b6f565b602060405180830381600087803b1580156121e357600080fd5b505af1925050508015612213575060408051601f3d908101601f19168201909252612210918101906129f7565b60015b61226d573d808015612241576040519150601f19603f3d011682016040523d82523d6000602084013e612246565b606091505b5080516122655760405162461bcd60e51b8152600401610a1990612bf4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061228b565b5060015b949350505050565b6060816122b75750506040805180820190915260018152600360fc1b602082015290565b8160005b81156122e157806122cb81612d92565b91506122da9050600a83612cc1565b91506122bb565b60008167ffffffffffffffff8111156122fc576122fc612e03565b6040519080825280601f01601f191660200182016040528015612326576020820181803683370190505b5090505b841561228b5761233b600183612cfd565b9150612348600a86612dad565b612353906030612ca9565b60f81b81838151811061236857612368612ded565b60200101906001600160f81b031916908160001a90535061238a600a86612cc1565b945061232a565b6112de82826040518060200160405280600081525061246a565b600c54600154101561129f57600e5442906000906123c99083612ca9565b90506040518060c001604052806123df60015490565b815260006020808301829052604080840196909652606080840195909552608080840183905260a0938401929092528351600f558301516010559382015160115591810151601255918201516013805493909201511515600160a01b026001600160a81b03199093166001600160a01b0391909116179190911790556014805460ff19166001179055565b6001546001600160a01b0384166124cd5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a19565b6124d8816001541190565b156125255760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610a19565b7f00000000000000000000000000000000000000000000000000000000000000018311156125a05760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610a19565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906125fc908790612c7e565b6001600160801b0316815260200185836020015161261a9190612c7e565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b8581101561273a5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46126fe6000888488612185565b61271a5760405162461bcd60e51b8152600401610a1990612bf4565b8161272481612d92565b925050808061273290612d92565b9150506126b1565b506001819055611cd9565b82805461275190612d57565b90600052602060002090601f01602090048101928261277357600085556127b9565b82601f1061278c57805160ff19168380011785556127b9565b828001600101855582156127b9579182015b828111156127b957825182559160200191906001019061279e565b506110c69291505b808211156110c657600081556001016127c1565b600067ffffffffffffffff808411156127f0576127f0612e03565b604051601f8501601f19908116603f0116810190828211818310171561281857612818612e03565b8160405280935085815286868601111561283157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461286257600080fd5b919050565b60006020828403121561287957600080fd5b6128828261284b565b9392505050565b6000806040838503121561289c57600080fd5b6128a58361284b565b91506128b36020840161284b565b90509250929050565b6000806000606084860312156128d157600080fd5b6128da8461284b565b92506128e86020850161284b565b9150604084013590509250925092565b6000806000806080858703121561290e57600080fd5b6129178561284b565b93506129256020860161284b565b925060408501359150606085013567ffffffffffffffff81111561294857600080fd5b8501601f8101871361295957600080fd5b612968878235602084016127d5565b91505092959194509250565b6000806040838503121561298757600080fd5b6129908361284b565b9150602083013580151581146129a557600080fd5b809150509250929050565b600080604083850312156129c357600080fd5b6129cc8361284b565b946020939093013593505050565b6000602082840312156129ec57600080fd5b813561288281612e19565b600060208284031215612a0957600080fd5b815161288281612e19565b600060208284031215612a2657600080fd5b813567ffffffffffffffff811115612a3d57600080fd5b8201601f81018413612a4e57600080fd5b61228b848235602084016127d5565b600060208284031215612a6f57600080fd5b5035919050565b60008151808452612a8e816020860160208601612d14565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612abc57607f831692505b6020808410821415612ade57634e487b7160e01b600052602260045260246000fd5b818015612af25760018114612b0357612b30565b60ff19861689528489019650612b30565b60008881526020902060005b86811015612b285781548b820152908501908301612b0f565b505084890196505b50505050505092915050565b6000612b488286612aa2565b8451612b58818360208901612d14565b612b6481830186612aa2565b979650505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ba290830184612a76565b9695505050505050565b6020815260006128826020830184612a76565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60006001600160801b03808316818516808303821115612ca057612ca0612dc1565b01949350505050565b60008219821115612cbc57612cbc612dc1565b500190565b600082612cd057612cd0612dd7565b500490565b60006001600160801b0383811690831681811015612cf557612cf5612dc1565b039392505050565b600082821015612d0f57612d0f612dc1565b500390565b60005b83811015612d2f578181015183820152602001612d17565b838111156114a45750506000910152565b600081612d4f57612d4f612dc1565b506000190190565b600181811c90821680612d6b57607f821691505b60208210811415612d8c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612da657612da6612dc1565b5060010190565b600082612dbc57612dbc612dd7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461187857600080fdfea2646970667358221220093354d990f5930fa585b696277f3c9c22d79a8b10dcb636bd67fbfed90ddbf564736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c47656e657369732050617773000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024750000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Genesis Paws
Arg [1] : symbol (string): GP
Arg [2] : _maxBatchSize (uint256): 1
Arg [3] : _collectionSize (uint256): 10

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [5] : 47656e6573697320506177730000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4750000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36913:5763:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22145:370;;;;;;;;;;-1:-1:-1;22145:370:0;;;;;:::i;:::-;;:::i;:::-;;;6820:14:1;;6813:22;6795:41;;6783:2;6768:18;22145:370:0;;;;;;;;37088:43;;;;;;;;;;;;;;;;;;;20647:25:1;;;20635:2;20620:18;37088:43:0;20501:177:1;23871:94:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25396:204::-;;;;;;;;;;-1:-1:-1;25396:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6118:32:1;;;6100:51;;6088:2;6073:18;25396:204:0;5954:203:1;24959:379:0;;;;;;;;;;-1:-1:-1;24959:379:0;;;;;:::i;:::-;;:::i;:::-;;37248:31;;;;;;;;;;;;;;;;42191:95;;;;;;;;;;-1:-1:-1;42257:21:0;42191:95;;39706:732;;;:::i;20706:94::-;;;;;;;;;;-1:-1:-1;20782:12:0;;20706:94;;41955:228;;;;;;;;;;-1:-1:-1;41955:228:0;;;;;:::i;:::-;;:::i;26246:142::-;;;;;;;;;;-1:-1:-1;26246:142:0;;;;;:::i;:::-;;:::i;21337:744::-;;;;;;;;;;-1:-1:-1;21337:744:0;;;;;:::i;:::-;;:::i;37411:63::-;;;;;;;;;;-1:-1:-1;37411:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37411:63:0;;;-1:-1:-1;;;37411:63:0;;;;;;;;;;20980:25:1;;;21036:2;21021:18;;21014:34;;;;21064:18;;;21057:34;;;;21122:2;21107:18;;21100:34;-1:-1:-1;;;;;21171:32:1;21165:3;21150:19;;21143:61;21248:14;21241:22;21191:3;21220:19;;21213:51;20967:3;20952:19;37411:63:0;20683:587:1;37174:24:0;;;;;;;;;;;;;:::i;26451:157::-;;;;;;;;;;-1:-1:-1;26451:157:0;;;;;:::i;:::-;;:::i;40446:174::-;;;;;;;;;;;;;:::i;20869:177::-;;;;;;;;;;-1:-1:-1;20869:177:0;;;;;:::i;:::-;;:::i;42294:181::-;;;;;;;;;;-1:-1:-1;42294:181:0;;;;;:::i;:::-;;:::i;23694:118::-;;;;;;;;;;-1:-1:-1;23694:118:0;;;;;:::i;:::-;;:::i;22571:211::-;;;;;;;;;;-1:-1:-1;22571:211:0;;;;;:::i;:::-;;:::i;41741:92::-;;;;;;;;;;;;;:::i;1459:94::-;;;;;;;;;;;;;:::i;37325:36::-;;;;;;;;;;-1:-1:-1;37325:36:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37325:36:0;;;-1:-1:-1;;;37325:36:0;;;;;;41633:100;;;;;;;;;;-1:-1:-1;41633:100:0;;;;;:::i;:::-;;:::i;808:87::-;;;;;;;;;;-1:-1:-1;854:7:0;881:6;-1:-1:-1;;;;;881:6:0;808:87;;42483:147;;;;;;;;;;-1:-1:-1;42483:147:0;;;;;:::i;:::-;;:::i;:::-;;;;20366:13:1;;-1:-1:-1;;;;;20362:39:1;20344:58;;20462:4;20450:17;;;20444:24;20470:18;20440:49;20418:20;;;20411:79;;;;20317:18;42483:147:0;20136:360:1;41520:107:0;;;;;;;;;;-1:-1:-1;41520:107:0;;;;;:::i;:::-;;:::i;24026:98::-;;;;;;;;;;;;;:::i;25664:274::-;;;;;;;;;;-1:-1:-1;25664:274:0;;;;;:::i;:::-;;:::i;40970:91::-;;;;;;;;;;;;;:::i;26671:311::-;;;;;;;;;;-1:-1:-1;26671:311:0;;;;;:::i;:::-;;:::i;41205:307::-;;;;;;;;;;-1:-1:-1;41205:307:0;;;;;:::i;:::-;;:::i;40753:112::-;;;;;;;;;;-1:-1:-1;40753:112:0;;;;;:::i;:::-;;:::i;37138:29::-;;;;;;;;;;;;;;;;31086:43;;;;;;;;;;;;;;;;41841:106;;;;;;;;;;-1:-1:-1;41841:106:0;;;;;:::i;:::-;;:::i;39145:555::-;;;;;;;;;;-1:-1:-1;39145:555:0;;;;;:::i;:::-;;:::i;41067:132::-;;;;;;;;;;-1:-1:-1;41067:132:0;;;;;:::i;:::-;;:::i;:::-;;;;;;19754:13:1;;19736:32;;19824:4;19812:17;;;19806:24;19784:20;;;19777:54;19887:4;19875:17;;;19869:24;19847:20;;;19840:54;19950:4;19938:17;;;19932:24;19910:20;;;19903:54;20017:4;20005:17;;;19999:24;-1:-1:-1;;;;;19995:50:1;19973:20;;;19966:80;20033:3;20104:17;;;20098:24;20091:32;20084:40;20062:20;;;20055:70;;;;19723:3;19708:19;;19539:592;26001:186:0;;;;;;;;;;-1:-1:-1;26001:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;26146:25:0;;;26123:4;26146:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26001:186;37368:34;;;;;;;;;;-1:-1:-1;37368:34:0;;;;;;;;37692:129;;;;;;;;;;;;;:::i;1708:192::-;;;;;;;;;;-1:-1:-1;1708:192:0;;;;;:::i;:::-;;:::i;40873:91::-;;;;;;;;;;;;;:::i;40628:88::-;;;;;;;;;;;;;:::i;22145:370::-;22272:4;-1:-1:-1;;;;;;22302:40:0;;-1:-1:-1;;;22302:40:0;;:99;;-1:-1:-1;;;;;;;22353:48:0;;-1:-1:-1;;;22353:48:0;22302:99;:160;;;-1:-1:-1;;;;;;;22412:50:0;;-1:-1:-1;;;22412:50:0;22302:160;:207;;;-1:-1:-1;;;;;;;;;;18871:40:0;;;22473:36;22288:221;22145:370;-1:-1:-1;;22145:370:0:o;23871:94::-;23925:13;23954:5;23947:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23871:94;:::o;25396:204::-;25464:7;25488:16;25496:7;27308:12;;-1:-1:-1;27298:22:0;27221:105;25488:16;25480:74;;;;-1:-1:-1;;;25480:74:0;;18924:2:1;25480:74:0;;;18906:21:1;18963:2;18943:18;;;18936:30;19002:34;18982:18;;;18975:62;-1:-1:-1;;;19053:18:1;;;19046:43;19106:19;;25480:74:0;;;;;;;;;-1:-1:-1;25570:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25570:24:0;;25396:204::o;24959:379::-;25028:13;25044:24;25060:7;25044:15;:24::i;:::-;25028:40;;25089:5;-1:-1:-1;;;;;25083:11:0;:2;-1:-1:-1;;;;;25083:11:0;;;25075:58;;;;-1:-1:-1;;;25075:58:0;;14059:2:1;25075:58:0;;;14041:21:1;14098:2;14078:18;;;14071:30;14137:34;14117:18;;;14110:62;-1:-1:-1;;;14188:18:1;;;14181:32;14230:19;;25075:58:0;13857:398:1;25075:58:0;271:10;-1:-1:-1;;;;;25158:21:0;;;;:62;;-1:-1:-1;25183:37:0;25200:5;271:10;26001:186;:::i;25183:37::-;25142:153;;;;-1:-1:-1;;;25142:153:0;;10502:2:1;25142:153:0;;;10484:21:1;10541:2;10521:18;;;10514:30;10580:34;10560:18;;;10553:62;10651:27;10631:18;;;10624:55;10696:19;;25142:153:0;10300:421:1;25142:153:0;25304:28;25313:2;25317:7;25326:5;25304:8;:28::i;:::-;25021:317;24959:379;;:::o;39706:732::-;39778:9;;20782:12;;39762:25;39754:57;;;;-1:-1:-1;;;39754:57:0;;17463:2:1;39754:57:0;;;17445:21:1;17502:2;17482:18;;;17475:30;-1:-1:-1;;;17521:18:1;;;17514:49;17580:18;;39754:57:0;17261:343:1;39754:57:0;39822:47;;;;;;;;39862:7;39822:47;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39822:47:0;;;;;;-1:-1:-1;;;39822:47:0;;;;;;;;;;20782:12;;39890:14;;:31;39882:66;;;;-1:-1:-1;;;39882:66:0;;8992:2:1;39882:66:0;;;8974:21:1;9031:2;9011:18;;;9004:30;-1:-1:-1;;;9050:18:1;;;9043:52;9112:18;;39882:66:0;8790:346:1;39882:66:0;39985:8;:16;;;39967:15;:34;39959:62;;;;-1:-1:-1;;;39959:62:0;;18227:2:1;39959:62:0;;;18209:21:1;18266:2;18246:18;;;18239:30;-1:-1:-1;;;18285:18:1;;;18278:45;18340:18;;39959:62:0;18025:339:1;39959:62:0;40071:15;;40053:8;:15;;;:33;;;;:::i;:::-;40040:9;:47;40032:93;;;;-1:-1:-1;;;40032:93:0;;13656:2:1;40032:93:0;;;13638:21:1;13695:2;13675:18;;;13668:30;13734:34;13714:18;;;13707:62;-1:-1:-1;;;13785:18:1;;;13778:32;13827:19;;40032:93:0;13454:398:1;40032:93:0;40167:15;;;;-1:-1:-1;;;;;40249:24:0;;;40245:102;;40319:15;;;;40290:45;;-1:-1:-1;;;;;40290:28:0;;;:45;;;;;;;;;40319:15;40290:28;:45;;;;;;;;;;;;;;;;;;;;;40245:102;-1:-1:-1;;40374:9:0;40357:14;:26;40394:14;:36;;-1:-1:-1;;;;;;40394:36:0;40419:10;40394:36;;;39706:732::o;41955:228::-;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23;1020:68;;;;-1:-1:-1;;;1020:68:0;;;;;;;:::i;:::-;42042:9:::1;;42032:7;:19;42024:121;;;::::0;-1:-1:-1;;;42024:121:0;;7676:2:1;42024:121:0::1;::::0;::::1;7658:21:1::0;7715:2;7695:18;;;7688:30;7754:34;7734:18;;;7727:62;7825:34;7805:18;;;7798:62;7897:27;7876:19;;;7869:56;7942:19;;42024:121:0::1;7474:493:1::0;42024:121:0::1;42156:9;:19:::0;41955:228::o;26246:142::-;26354:28;26364:4;26370:2;26374:7;26354:9;:28::i;21337:744::-;21446:7;21481:16;21491:5;21481:9;:16::i;:::-;21473:5;:24;21465:71;;;;-1:-1:-1;;;21465:71:0;;7273:2:1;21465:71:0;;;7255:21:1;7312:2;7292:18;;;7285:30;7351:34;7331:18;;;7324:62;-1:-1:-1;;;7402:18:1;;;7395:32;7444:19;;21465:71:0;7071:398:1;21465:71:0;21543:22;21568:13;20782:12;;;20706:94;21568:13;21543:38;;21588:19;21618:25;21668:9;21663:350;21687:14;21683:1;:18;21663:350;;;21717:31;21751:14;;;:11;:14;;;;;;;;;21717:48;;;;;;;;;-1:-1:-1;;;;;21717:48:0;;;;;-1:-1:-1;;;21717:48:0;;;;;;;;;;;;21778:28;21774:89;;21839:14;;;-1:-1:-1;21774:89:0;21896:5;-1:-1:-1;;;;;21875:26:0;:17;-1:-1:-1;;;;;21875:26:0;;21871:135;;;21933:5;21918:11;:20;21914:59;;;-1:-1:-1;21960:1:0;-1:-1:-1;21953:8:0;;-1:-1:-1;;;21953:8:0;21914:59;21983:13;;;;:::i;:::-;;;;21871:135;-1:-1:-1;21703:3:0;;;;:::i;:::-;;;;21663:350;;;-1:-1:-1;22019:56:0;;-1:-1:-1;;;22019:56:0;;16688:2:1;22019:56:0;;;16670:21:1;16727:2;16707:18;;;16700:30;16766:34;16746:18;;;16739:62;-1:-1:-1;;;16817:18:1;;;16810:44;16871:19;;22019:56:0;16486:410:1;37174:24:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26451:157::-;26563:39;26580:4;26586:2;26590:7;26563:39;;;;;;;;;;;;:16;:39::i;40446:174::-;40528:15;;40493:4;;40510:15;:33;40507:106;;;-1:-1:-1;40562:4:0;;40446:174::o;40507:106::-;-1:-1:-1;40598:5:0;;40446:174::o;20869:177::-;20936:7;20968:13;20782:12;;;20706:94;20968:13;20960:5;:21;20952:69;;;;-1:-1:-1;;;20952:69:0;;9343:2:1;20952:69:0;;;9325:21:1;9382:2;9362:18;;;9355:30;9421:34;9401:18;;;9394:62;-1:-1:-1;;;9472:18:1;;;9465:33;9515:19;;20952:69:0;9141:399:1;20952:69:0;-1:-1:-1;21035:5:0;20869:177::o;42294:181::-;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23;1020:68;;;;-1:-1:-1;;;1020:68:0;;;;;;;:::i;:::-;2972:1:::1;3568:7;;:19;;3560:63;;;;-1:-1:-1::0;;;3560:63:0::1;;;;;;;:::i;:::-;2972:1;3701:7;:18:::0;42382:42:::2;::::0;42364:12:::2;::::0;-1:-1:-1;;;;;42382:8:0;::::2;::::0;42398:21:::2;::::0;42364:12;42382:42;42364:12;42382:42;42398:21;42382:8;:42:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42363:61;;;42439:7;42431:36;;;::::0;-1:-1:-1;;;42431:36:0;;14462:2:1;42431:36:0::2;::::0;::::2;14444:21:1::0;14501:2;14481:18;;;14474:30;-1:-1:-1;;;14520:18:1;;;14513:46;14576:18;;42431:36:0::2;14260:340:1::0;42431:36:0::2;-1:-1:-1::0;;2928:1:0::1;3880:7;:22:::0;42294:181::o;23694:118::-;23758:7;23781:20;23793:7;23781:11;:20::i;:::-;:25;;23694:118;-1:-1:-1;;23694:118:0:o;22571:211::-;22635:7;-1:-1:-1;;;;;22659:19:0;;22651:75;;;;-1:-1:-1;;;22651:75:0;;10928:2:1;22651:75:0;;;10910:21:1;10967:2;10947:18;;;10940:30;11006:34;10986:18;;;10979:62;-1:-1:-1;;;11057:18:1;;;11050:41;11108:19;;22651:75:0;10726:407:1;22651:75:0;-1:-1:-1;;;;;;22748:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;22748:27:0;;22571:211::o;41741:92::-;41785:13;41818:7;41811:14;;;;;:::i;1459:94::-;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23;1020:68;;;;-1:-1:-1;;;1020:68:0;;;;;;;:::i;:::-;1524:21:::1;1542:1;1524:9;:21::i;:::-;1459:94::o:0;41633:100::-;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23;1020:68;;;;-1:-1:-1;;;1020:68:0;;;;;;;:::i;:::-;41707:18;;::::1;::::0;:10:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;41633:100:::0;:::o;42483:147::-;-1:-1:-1;;;;;;;;;;;;;;;;;42604:20:0;42616:7;42604:11;:20::i;41520:107::-;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23;1020:68;;;;-1:-1:-1;;;1020:68:0;;;;;;;:::i;:::-;41598:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;24026:98::-:0;24082:13;24111:7;24104:14;;;;;:::i;25664:274::-;-1:-1:-1;;;;;25755:24:0;;271:10;25755:24;;25747:63;;;;-1:-1:-1;;;25747:63:0;;12882:2:1;25747:63:0;;;12864:21:1;12921:2;12901:18;;;12894:30;12960:28;12940:18;;;12933:56;13006:18;;25747:63:0;12680:350:1;25747:63:0;271:10;25819:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25819:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25819:53:0;;;;;;;;;;25884:48;;6795:41:1;;;25819:42:0;;271:10;25884:48;;6768:18:1;25884:48:0;;;;;;;25664:274;;:::o;40970:91::-;2972:1;3568:7;;:19;;3560:63;;;;-1:-1:-1;;;3560:63:0;;;;;;;:::i;:::-;2972:1;3701:7;:18;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23:::1;1020:68;;;;-1:-1:-1::0;;;1020:68:0::1;;;;;;;:::i;:::-;41037:16:::2;:14;:16::i;:::-;2928:1:::0;3880:7;:22;40970:91::o;26671:311::-;26808:28;26818:4;26824:2;26828:7;26808:9;:28::i;:::-;26859:48;26882:4;26888:2;26892:7;26901:5;26859:22;:48::i;:::-;26843:133;;;;-1:-1:-1;;;26843:133:0;;;;;;;:::i;:::-;26671:311;;;;:::o;41205:307::-;41279:13;41327:17;41335:8;27308:12;;-1:-1:-1;27298:22:0;27221:105;41327:17;41305:111;;;;-1:-1:-1;;;41305:111:0;;11747:2:1;41305:111:0;;;11729:21:1;11786:2;11766:18;;;11759:30;11825:34;11805:18;;;11798:62;-1:-1:-1;;;11876:18:1;;;11869:42;11928:19;;41305:111:0;11545:408:1;41305:111:0;41460:7;41469:19;:8;:17;:19::i;:::-;41490:10;41443:58;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41429:73;;41205:307;;;:::o;40753:112::-;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23;1020:68;;;;-1:-1:-1;;;1020:68:0;;;;;;;:::i;:::-;40834:23:::1;40852:5:::0;40834:15:::1;:23;:::i;:::-;40816:15:::0;:41;-1:-1:-1;40753:112:0:o;41841:106::-;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23;1020:68;;;;-1:-1:-1;;;1020:68:0;;;;;;;:::i;:::-;41915:15:::1;:24:::0;41841:106::o;39145:555::-;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23;1020:68;;;;-1:-1:-1;;;1020:68:0;;;;;;;:::i;:::-;39237:9:::1;::::0;20782:12;;39221:25:::1;39213:57;;;::::0;-1:-1:-1;;;39213:57:0;;15987:2:1;39213:57:0::1;::::0;::::1;15969:21:1::0;16026:2;16006:18;;;15999:30;-1:-1:-1;;;16045:18:1;;;16038:49;16104:18;;39213:57:0::1;15785:343:1::0;39213:57:0::1;39287:37;39327:270;;;;;;;;39375:13;20782:12:::0;;;20706:94;39375:13:::1;39327:270;;;;39415:1;39327:270;;;;39446:15;39327:270;;;;39489:15;39327:270;;;;39539:9;-1:-1:-1::0;;;;;39327:270:0::1;;;;;39577:4;39327:270;;;;::::0;39287:310:::1;;39646:8;39614:14;:29;39629:13;20782:12:::0;;;20706:94;39629:13:::1;39614:29:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;39614:29:0;:40;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;-1:-1:-1::0;;;39614:40:0::1;-1:-1:-1::0;;;;;;39614:40:0;;;-1:-1:-1;;;;;39614:40:0;;::::1;::::0;;;;;;;::::1;::::0;;39669:23:::1;::::0;39679:9;;39669::::1;:23::i;41067:132::-:0;41127:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41127:28:0;-1:-1:-1;41172:19:0;;;;:14;:19;;;;;;;;;41165:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41165:26:0;;;;;;-1:-1:-1;;;41165:26:0;;;;;;;;;;;41067:132::o;37692:129::-;2972:1;3568:7;;:19;;3560:63;;;;-1:-1:-1;;;3560:63:0;;;;;;;:::i;:::-;2972:1;3701:7;:18;37770:16:::1;:14;:16::i;:::-;37797;:14;:16::i;1708:192::-:0;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23;1020:68;;;;-1:-1:-1;;;1020:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1797:22:0;::::1;1789:73;;;::::0;-1:-1:-1;;;1789:73:0;;8174:2:1;1789:73:0::1;::::0;::::1;8156:21:1::0;8213:2;8193:18;;;8186:30;8252:34;8232:18;;;8225:62;-1:-1:-1;;;8303:18:1;;;8296:36;8349:19;;1789:73:0::1;7972:402:1::0;1789:73:0::1;1873:19;1883:8;1873:9;:19::i;:::-;1708:192:::0;:::o;40873:91::-;2972:1;3568:7;;:19;;3560:63;;;;-1:-1:-1;;;3560:63:0;;;;;;;:::i;:::-;2972:1;3701:7;:18;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23:::1;1020:68;;;;-1:-1:-1::0;;;1020:68:0::1;;;;;;;:::i;40628:88::-:0;854:7;881:6;-1:-1:-1;;;;;881:6:0;271:10;1028:23;1020:68;;;;-1:-1:-1;;;1020:68:0;;;;;;;:::i;:::-;40693:15:::1;40675::::0;:33;40628:88::o;30908:172::-;31005:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;31005:29:0;-1:-1:-1;;;;;31005:29:0;;;;;;;;;31046:28;;31005:24;;31046:28;;;;;;;30908:172;;;:::o;29273:1529::-;29370:35;29408:20;29420:7;29408:11;:20::i;:::-;29479:18;;29370:58;;-1:-1:-1;29437:22:0;;-1:-1:-1;;;;;29463:34:0;271:10;-1:-1:-1;;;;;29463:34:0;;:81;;;-1:-1:-1;271:10:0;29508:20;29520:7;29508:11;:20::i;:::-;-1:-1:-1;;;;;29508:36:0;;29463:81;:142;;;-1:-1:-1;29572:18:0;;29555:50;;271:10;26001:186;:::i;29555:50::-;29437:169;;29631:17;29615:101;;;;-1:-1:-1;;;29615:101:0;;13237:2:1;29615:101:0;;;13219:21:1;13276:2;13256:18;;;13249:30;13315:34;13295:18;;;13288:62;-1:-1:-1;;;13366:18:1;;;13359:48;13424:19;;29615:101:0;13035:414:1;29615:101:0;29763:4;-1:-1:-1;;;;;29741:26:0;:13;:18;;;-1:-1:-1;;;;;29741:26:0;;29725:98;;;;-1:-1:-1;;;29725:98:0;;11340:2:1;29725:98:0;;;11322:21:1;11379:2;11359:18;;;11352:30;11418:34;11398:18;;;11391:62;-1:-1:-1;;;11469:18:1;;;11462:36;11515:19;;29725:98:0;11138:402:1;29725:98:0;-1:-1:-1;;;;;29838:16:0;;29830:66;;;;-1:-1:-1;;;29830:66:0;;9747:2:1;29830:66:0;;;9729:21:1;9786:2;9766:18;;;9759:30;9825:34;9805:18;;;9798:62;-1:-1:-1;;;9876:18:1;;;9869:35;9921:19;;29830:66:0;9545:401:1;29830:66:0;30005:49;30022:1;30026:7;30035:13;:18;;;30005:8;:49::i;:::-;-1:-1:-1;;;;;30063:18:0;;;;;;:12;:18;;;;;:31;;30093:1;;30063:18;:31;;30093:1;;-1:-1:-1;;;;;30063:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;30063:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30101:16:0;;-1:-1:-1;30101:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;30101:16:0;;:29;;-1:-1:-1;;30101:29:0;;:::i;:::-;;;-1:-1:-1;;;;;30101:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30160:43:0;;;;;;;;-1:-1:-1;;;;;30160:43:0;;;;;;30186:15;30160:43;;;;;;;;;-1:-1:-1;30137:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;30137:66:0;-1:-1:-1;;;;;;30137:66:0;;;;;;;;;;;30453:11;30149:7;-1:-1:-1;30453:11:0;:::i;:::-;30516:1;30475:24;;;:11;:24;;;;;:29;30431:33;;-1:-1:-1;;;;;;30475:29:0;30471:236;;30533:20;30541:11;27308:12;;-1:-1:-1;27298:22:0;27221:105;30533:20;30529:171;;;30593:97;;;;;;;;30620:18;;-1:-1:-1;;;;;30593:97:0;;;;;;30651:28;;;;30593:97;;;;;;;;;;-1:-1:-1;30566:24:0;;;:11;:24;;;;;;;:124;;;;;;;;;-1:-1:-1;;;30566:124:0;-1:-1:-1;;;;;;30566:124:0;;;;;;;;;;;;30529:171;30739:7;30735:2;-1:-1:-1;;;;;30720:27:0;30729:4;-1:-1:-1;;;;;30720:27:0;;;;;;;;;;;30754:42;29363:1439;;;29273:1529;;;:::o;23034:606::-;-1:-1:-1;;;;;;;;;;;;;;;;;23151:16:0;23159:7;27308:12;;-1:-1:-1;27298:22:0;27221:105;23151:16;23143:71;;;;-1:-1:-1;;;23143:71:0;;8581:2:1;23143:71:0;;;8563:21:1;8620:2;8600:18;;;8593:30;8659:34;8639:18;;;8632:62;-1:-1:-1;;;8710:18:1;;;8703:40;8760:19;;23143:71:0;8379:406:1;23143:71:0;23223:26;23271:12;23260:7;:23;23256:93;;23315:22;23325:12;23315:7;:22;:::i;:::-;:26;;23340:1;23315:26;:::i;:::-;23294:47;;23256:93;23377:7;23357:212;23394:18;23386:4;:26;23357:212;;23431:31;23465:17;;;:11;:17;;;;;;;;;23431:51;;;;;;;;;-1:-1:-1;;;;;23431:51:0;;;;;-1:-1:-1;;;23431:51:0;;;;;;;;;;;;23495:28;23491:71;;23543:9;23034:606;-1:-1:-1;;;;23034:606:0:o;23491:71::-;-1:-1:-1;23414:6:0;;;;:::i;:::-;;;;23357:212;;;-1:-1:-1;23577:57:0;;-1:-1:-1;;;23577:57:0;;17811:2:1;23577:57:0;;;17793:21:1;17850:2;17830:18;;;17823:30;17889:34;17869:18;;;17862:62;-1:-1:-1;;;17940:18:1;;;17933:45;17995:19;;23577:57:0;17609:411:1;1908:173:0;1964:16;1983:6;;-1:-1:-1;;;;;2000:17:0;;;-1:-1:-1;;;;;;2000:17:0;;;;;;2033:40;;1983:6;;;;;;;2033:40;;1964:16;2033:40;1953:128;1908:173;:::o;37829:758::-;37875:47;;;;;;;;37915:7;37875:47;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37875:47:0;;;;;;-1:-1:-1;;;37875:47:0;;;;;;;;;;37957:9;;20782:12;;37941:25;37933:57;;;;-1:-1:-1;;;37933:57:0;;15987:2:1;37933:57:0;;;15969:21:1;16026:2;16006:18;;;15999:30;-1:-1:-1;;;16045:18:1;;;16038:49;16104:18;;37933:57:0;15785:343:1;37933:57:0;38009:14;;;;38001:51;;;;-1:-1:-1;;;38001:51:0;;18571:2:1;38001:51:0;;;18553:21:1;18610:2;18590:18;;;18583:30;18649:26;18629:18;;;18622:54;18693:18;;38001:51:0;18369:348:1;38001:51:0;38071:18;;;;38063:56;;;;-1:-1:-1;;;38063:56:0;;10153:2:1;38063:56:0;;;10135:21:1;10192:2;10172:18;;;10165:30;-1:-1:-1;;;10211:18:1;;;10204:50;10271:18;;38063:56:0;9951:344:1;38063:56:0;38139:8;:16;;;38138:17;38130:62;;;;-1:-1:-1;;;38130:62:0;;12521:2:1;38130:62:0;;;12503:21:1;;;12540:18;;;12533:30;12599:34;12579:18;;;12572:62;12651:18;;38130:62:0;12319:356:1;38130:62:0;38230:8;:16;;;38211:15;:35;;38203:72;;;;-1:-1:-1;;;38203:72:0;;16335:2:1;38203:72:0;;;16317:21:1;16374:2;16354:18;;;16347:30;16413:26;16393:18;;;16386:54;16457:18;;38203:72:0;16133:348:1;38203:72:0;38307:4;38288:16;;;:23;38327:15;;;;-1:-1:-1;;;;;38327:29:0;38323:192;;854:7;881:6;-1:-1:-1;;;;;881:6:0;38373:15;;;:34;;;38422:21;;38441:1;38422:9;:21::i;:::-;38323:192;;;38474:29;38484:8;:15;;;38501:1;38474:9;:29::i;:::-;38563:8;38527:14;:33;38558:1;38542:13;20782:12;;;20706:94;38542:13;:17;;;;:::i;:::-;38527:33;;;;;;;;;;;;;;-1:-1:-1;38527:33:0;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38527:44:0;-1:-1:-1;;;;;;38527:44:0;;;-1:-1:-1;;;;;38527:44:0;;;;;;;;;;;;;-1:-1:-1;37829:758:0:o;32623:690::-;32760:4;-1:-1:-1;;;;;32777:13:0;;11866:20;11914:8;32773:535;;32816:72;;-1:-1:-1;;;32816:72:0;;-1:-1:-1;;;;;32816:36:0;;;;;:72;;271:10;;32867:4;;32873:7;;32882:5;;32816:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32816:72:0;;;;;;;;-1:-1:-1;;32816:72:0;;;;;;;;;;;;:::i;:::-;;;32803:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33047:13:0;;33043:215;;33080:61;;-1:-1:-1;;;33080:61:0;;;;;;;:::i;33043:215::-;33226:6;33220:13;33211:6;33207:2;33203:15;33196:38;32803:464;-1:-1:-1;;;;;;32938:55:0;-1:-1:-1;;;32938:55:0;;-1:-1:-1;32931:62:0;;32773:535;-1:-1:-1;33296:4:0;32773:535;32623:690;;;;;;:::o;34637:723::-;34693:13;34914:10;34910:53;;-1:-1:-1;;34941:10:0;;;;;;;;;;;;-1:-1:-1;;;34941:10:0;;;;;34637:723::o;34910:53::-;34988:5;34973:12;35029:78;35036:9;;35029:78;;35062:8;;;;:::i;:::-;;-1:-1:-1;35085:10:0;;-1:-1:-1;35093:2:0;35085:10;;:::i;:::-;;;35029:78;;;35117:19;35149:6;35139:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35139:17:0;;35117:39;;35167:154;35174:10;;35167:154;;35201:11;35211:1;35201:11;;:::i;:::-;;-1:-1:-1;35270:10:0;35278:2;35270:5;:10;:::i;:::-;35257:24;;:2;:24;:::i;:::-;35244:39;;35227:6;35234;35227:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;35227:56:0;;;;;;;;-1:-1:-1;35298:11:0;35307:2;35298:11;;:::i;:::-;;;35167:154;;27332:98;27397:27;27407:2;27411:8;27397:27;;;;;;;;;;;;:9;:27::i;38595:544::-;38664:9;;20782:12;;38648:25;38645:487;;;38778:8;;38714:15;;38693:18;;38765:21;;38714:15;38765:21;:::i;:::-;38746:40;;38815:265;;;;;;;;38865:13;20782:12;;;20706:94;38865:13;38815:265;;38907:1;38815:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38805:275;;:7;:275;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38805:275:0;-1:-1:-1;;;;;;38805:275:0;;;-1:-1:-1;;;;;38805:275:0;;;;;;;;;;;;39097:21;;-1:-1:-1;;39097:21:0;38815:265;39097:21;;;38595:544::o;27769:1272::-;27897:12;;-1:-1:-1;;;;;27924:16:0;;27916:62;;;;-1:-1:-1;;;27916:62:0;;15585:2:1;27916:62:0;;;15567:21:1;15624:2;15604:18;;;15597:30;15663:34;15643:18;;;15636:62;-1:-1:-1;;;15714:18:1;;;15707:31;15755:19;;27916:62:0;15383:397:1;27916:62:0;28115:21;28123:12;27308;;-1:-1:-1;27298:22:0;27221:105;28115:21;28114:22;28106:64;;;;-1:-1:-1;;;28106:64:0;;15227:2:1;28106:64:0;;;15209:21:1;15266:2;15246:18;;;15239:30;15305:31;15285:18;;;15278:59;15354:18;;28106:64:0;15025:353:1;28106:64:0;28197:12;28185:8;:24;;28177:71;;;;-1:-1:-1;;;28177:71:0;;19338:2:1;28177:71:0;;;19320:21:1;19377:2;19357:18;;;19350:30;19416:34;19396:18;;;19389:62;-1:-1:-1;;;19467:18:1;;;19460:32;19509:19;;28177:71:0;19136:398:1;28177:71:0;-1:-1:-1;;;;;28360:16:0;;28327:30;28360:16;;;:12;:16;;;;;;;;;28327:49;;;;;;;;;-1:-1:-1;;;;;28327:49:0;;;;;-1:-1:-1;;;28327:49:0;;;;;;;;;;;28402:119;;;;;;;;28422:19;;28327:49;;28402:119;;;28422:39;;28452:8;;28422:39;:::i;:::-;-1:-1:-1;;;;;28402:119:0;;;;;28505:8;28470:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;28402:119:0;;;;;;-1:-1:-1;;;;;28383:16:0;;;;;;;:12;:16;;;;;;;;:138;;;;;;;;-1:-1:-1;;;28383:138:0;;;;;;;;;;;;28556:43;;;;;;;;;;;28582:15;28556:43;;;;;;;;28528:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;28528:71:0;-1:-1:-1;;;;;;28528:71:0;;;;;;;;;;;;;;;;;;28540:12;;28652:281;28676:8;28672:1;:12;28652:281;;;28705:38;;28730:12;;-1:-1:-1;;;;;28705:38:0;;;28722:1;;28705:38;;28722:1;;28705:38;28770:59;28801:1;28805:2;28809:12;28823:5;28770:22;:59::i;:::-;28752:150;;;;-1:-1:-1;;;28752:150:0;;;;;;;:::i;:::-;28911:14;;;;:::i;:::-;;;;28686:3;;;;;:::i;:::-;;;;28652:281;;;-1:-1:-1;28941:12:0;:27;;;28975:60;26671:311;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:186::-;887:6;940:2;928:9;919:7;915:23;911:32;908:52;;;956:1;953;946:12;908:52;979:29;998:9;979:29;:::i;:::-;969:39;828:186;-1:-1:-1;;;828:186:1:o;1019:260::-;1087:6;1095;1148:2;1136:9;1127:7;1123:23;1119:32;1116:52;;;1164:1;1161;1154:12;1116:52;1187:29;1206:9;1187:29;:::i;:::-;1177:39;;1235:38;1269:2;1258:9;1254:18;1235:38;:::i;:::-;1225:48;;1019:260;;;;;:::o;1284:328::-;1361:6;1369;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1469:29;1488:9;1469:29;:::i;:::-;1459:39;;1517:38;1551:2;1540:9;1536:18;1517:38;:::i;:::-;1507:48;;1602:2;1591:9;1587:18;1574:32;1564:42;;1284:328;;;;;:::o;1617:666::-;1712:6;1720;1728;1736;1789:3;1777:9;1768:7;1764:23;1760:33;1757:53;;;1806:1;1803;1796:12;1757:53;1829:29;1848:9;1829:29;:::i;:::-;1819:39;;1877:38;1911:2;1900:9;1896:18;1877:38;:::i;:::-;1867:48;;1962:2;1951:9;1947:18;1934:32;1924:42;;2017:2;2006:9;2002:18;1989:32;2044:18;2036:6;2033:30;2030:50;;;2076:1;2073;2066:12;2030:50;2099:22;;2152:4;2144:13;;2140:27;-1:-1:-1;2130:55:1;;2181:1;2178;2171:12;2130:55;2204:73;2269:7;2264:2;2251:16;2246:2;2242;2238:11;2204:73;:::i;:::-;2194:83;;;1617:666;;;;;;;:::o;2288:347::-;2353:6;2361;2414:2;2402:9;2393:7;2389:23;2385:32;2382:52;;;2430:1;2427;2420:12;2382:52;2453:29;2472:9;2453:29;:::i;:::-;2443:39;;2532:2;2521:9;2517:18;2504:32;2579:5;2572:13;2565:21;2558:5;2555:32;2545:60;;2601:1;2598;2591:12;2545:60;2624:5;2614:15;;;2288:347;;;;;:::o;2640:254::-;2708:6;2716;2769:2;2757:9;2748:7;2744:23;2740:32;2737:52;;;2785:1;2782;2775:12;2737:52;2808:29;2827:9;2808:29;:::i;:::-;2798:39;2884:2;2869:18;;;;2856:32;;-1:-1:-1;;;2640:254:1:o;2899:245::-;2957:6;3010:2;2998:9;2989:7;2985:23;2981:32;2978:52;;;3026:1;3023;3016:12;2978:52;3065:9;3052:23;3084:30;3108:5;3084:30;:::i;3149:249::-;3218:6;3271:2;3259:9;3250:7;3246:23;3242:32;3239:52;;;3287:1;3284;3277:12;3239:52;3319:9;3313:16;3338:30;3362:5;3338:30;:::i;3403:450::-;3472:6;3525:2;3513:9;3504:7;3500:23;3496:32;3493:52;;;3541:1;3538;3531:12;3493:52;3581:9;3568:23;3614:18;3606:6;3603:30;3600:50;;;3646:1;3643;3636:12;3600:50;3669:22;;3722:4;3714:13;;3710:27;-1:-1:-1;3700:55:1;;3751:1;3748;3741:12;3700:55;3774:73;3839:7;3834:2;3821:16;3816:2;3812;3808:11;3774:73;:::i;3858:180::-;3917:6;3970:2;3958:9;3949:7;3945:23;3941:32;3938:52;;;3986:1;3983;3976:12;3938:52;-1:-1:-1;4009:23:1;;3858:180;-1:-1:-1;3858:180:1:o;4043:257::-;4084:3;4122:5;4116:12;4149:6;4144:3;4137:19;4165:63;4221:6;4214:4;4209:3;4205:14;4198:4;4191:5;4187:16;4165:63;:::i;:::-;4282:2;4261:15;-1:-1:-1;;4257:29:1;4248:39;;;;4289:4;4244:50;;4043:257;-1:-1:-1;;4043:257:1:o;4305:973::-;4390:12;;4355:3;;4445:1;4465:18;;;;4518;;;;4545:61;;4599:4;4591:6;4587:17;4577:27;;4545:61;4625:2;4673;4665:6;4662:14;4642:18;4639:38;4636:161;;;4719:10;4714:3;4710:20;4707:1;4700:31;4754:4;4751:1;4744:15;4782:4;4779:1;4772:15;4636:161;4813:18;4840:104;;;;4958:1;4953:319;;;;4806:466;;4840:104;-1:-1:-1;;4873:24:1;;4861:37;;4918:16;;;;-1:-1:-1;4840:104:1;;4953:319;21348:1;21341:14;;;21385:4;21372:18;;5047:1;5061:165;5075:6;5072:1;5069:13;5061:165;;;5153:14;;5140:11;;;5133:35;5196:16;;;;5090:10;;5061:165;;;5065:3;;5255:6;5250:3;5246:16;5239:23;;4806:466;;;;;;;4305:973;;;;:::o;5283:456::-;5504:3;5532:38;5566:3;5558:6;5532:38;:::i;:::-;5599:6;5593:13;5615:52;5660:6;5656:2;5649:4;5641:6;5637:17;5615:52;:::i;:::-;5683:50;5725:6;5721:2;5717:15;5709:6;5683:50;:::i;:::-;5676:57;5283:456;-1:-1:-1;;;;;;;5283:456:1:o;6162:488::-;-1:-1:-1;;;;;6431:15:1;;;6413:34;;6483:15;;6478:2;6463:18;;6456:43;6530:2;6515:18;;6508:34;;;6578:3;6573:2;6558:18;;6551:31;;;6356:4;;6599:45;;6624:19;;6616:6;6599:45;:::i;:::-;6591:53;6162:488;-1:-1:-1;;;;;;6162:488:1:o;6847:219::-;6996:2;6985:9;6978:21;6959:4;7016:44;7056:2;7045:9;7041:18;7033:6;7016:44;:::i;11958:356::-;12160:2;12142:21;;;12179:18;;;12172:30;12238:34;12233:2;12218:18;;12211:62;12305:2;12290:18;;11958:356::o;14605:415::-;14807:2;14789:21;;;14846:2;14826:18;;;14819:30;14885:34;14880:2;14865:18;;14858:62;-1:-1:-1;;;14951:2:1;14936:18;;14929:49;15010:3;14995:19;;14605:415::o;16901:355::-;17103:2;17085:21;;;17142:2;17122:18;;;17115:30;17181:33;17176:2;17161:18;;17154:61;17247:2;17232:18;;16901:355::o;21401:253::-;21441:3;-1:-1:-1;;;;;21530:2:1;21527:1;21523:10;21560:2;21557:1;21553:10;21591:3;21587:2;21583:12;21578:3;21575:21;21572:47;;;21599:18;;:::i;:::-;21635:13;;21401:253;-1:-1:-1;;;;21401:253:1:o;21659:128::-;21699:3;21730:1;21726:6;21723:1;21720:13;21717:39;;;21736:18;;:::i;:::-;-1:-1:-1;21772:9:1;;21659:128::o;21792:120::-;21832:1;21858;21848:35;;21863:18;;:::i;:::-;-1:-1:-1;21897:9:1;;21792:120::o;21917:246::-;21957:4;-1:-1:-1;;;;;22070:10:1;;;;22040;;22092:12;;;22089:38;;;22107:18;;:::i;:::-;22144:13;;21917:246;-1:-1:-1;;;21917:246:1:o;22168:125::-;22208:4;22236:1;22233;22230:8;22227:34;;;22241:18;;:::i;:::-;-1:-1:-1;22278:9:1;;22168:125::o;22298:258::-;22370:1;22380:113;22394:6;22391:1;22388:13;22380:113;;;22470:11;;;22464:18;22451:11;;;22444:39;22416:2;22409:10;22380:113;;;22511:6;22508:1;22505:13;22502:48;;;-1:-1:-1;;22546:1:1;22528:16;;22521:27;22298:258::o;22561:136::-;22600:3;22628:5;22618:39;;22637:18;;:::i;:::-;-1:-1:-1;;;22673:18:1;;22561:136::o;22702:380::-;22781:1;22777:12;;;;22824;;;22845:61;;22899:4;22891:6;22887:17;22877:27;;22845:61;22952:2;22944:6;22941:14;22921:18;22918:38;22915:161;;;22998:10;22993:3;22989:20;22986:1;22979:31;23033:4;23030:1;23023:15;23061:4;23058:1;23051:15;22915:161;;22702:380;;;:::o;23087:135::-;23126:3;-1:-1:-1;;23147:17:1;;23144:43;;;23167:18;;:::i;:::-;-1:-1:-1;23214:1:1;23203:13;;23087:135::o;23227:112::-;23259:1;23285;23275:35;;23290:18;;:::i;:::-;-1:-1:-1;23324:9:1;;23227:112::o;23344:127::-;23405:10;23400:3;23396:20;23393:1;23386:31;23436:4;23433:1;23426:15;23460:4;23457:1;23450:15;23476:127;23537:10;23532:3;23528:20;23525:1;23518:31;23568:4;23565:1;23558:15;23592:4;23589:1;23582:15;23608:127;23669:10;23664:3;23660:20;23657:1;23650:31;23700:4;23697:1;23690:15;23724:4;23721:1;23714:15;23740:127;23801:10;23796:3;23792:20;23789:1;23782:31;23832:4;23829:1;23822:15;23856:4;23853:1;23846:15;23872:131;-1:-1:-1;;;;;;23946:32:1;;23936:43;;23926:71;;23993:1;23990;23983:12

Swarm Source

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