ETH Price: $3,480.76 (+4.04%)

Token

Baby Trippin Ape Club (BabyTrippinApeClub)
 

Overview

Max Total Supply

1,018 BabyTrippinApeClub

Holders

447

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 BabyTrippinApeClub
0x1C6D8d942410248A3487c880Ad9FbBd1e913FE86
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:
BabyTrippinApeClubContract

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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


pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

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

pragma solidity ^0.8.0;

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

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable TotalToken;
  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.
   * `TotalToken_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 TotalToken_
  ) {
    require(
      TotalToken_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    TotalToken = TotalToken_;
  }

  /**
   * @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(TotalToken). 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()))
        : "";
  }


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

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

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

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

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

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

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

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

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

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

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

  /**
   * @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 > TotalToken - 1) {
      endIndex = TotalToken - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

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

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

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



pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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


pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}


pragma solidity ^0.8.0;


contract BabyTrippinApeClubContract is Ownable, ERC721A, ReentrancyGuard {
  bool public     IsSalesStart;
  uint256 public  TotalCollectionSize;
  uint256 public  Mintprice;  
  uint256 public  MaxClaimTokenTotalForFree; 
  uint256 public  MaxClaimTokenTotalForFreePerwallet;   
  uint public     MaxMintPerTx; 
  mapping(address => uint256) public ClaimPerWallet;

 constructor(
    uint256 maxBatchSize_,
    uint256 TotalToken_
  ) ERC721A("Baby Trippin Ape Club", "BabyTrippinApeClub", maxBatchSize_, TotalToken_) {
    MaxMintPerTx = maxBatchSize_;
    TotalCollectionSize = TotalToken_; 
    IsSalesStart = true;  
    Mintprice =   6900000000000000;
    MaxClaimTokenTotalForFree = 1000;
    MaxClaimTokenTotalForFreePerwallet = 2;
  }

  
  function MintTo(address _to,uint256 mintamount) external onlyOwner {        
    require(totalSupply() + mintamount <= TotalCollectionSize, "Can not mint more than 5555");

    _safeMint(_to, mintamount);
    }

  function Mint(uint256 mintamount) external payable {
    uint256 cost = Mintprice;
    bool isFree = (totalSupply() + mintamount < MaxClaimTokenTotalForFree + 1) &&
       (ClaimPerWallet[msg.sender] + mintamount <= MaxClaimTokenTotalForFreePerwallet);
       
    if (isFree) {
        cost = 0;
    }
              
    require(IsSalesStart, "Sale is not started");
    require(totalSupply() + mintamount <= TotalCollectionSize, "Can not mint more than 5555");    
    require(mintamount > 0 && mintamount <= MaxMintPerTx, "Can not mint more than 20 per tx");
    require(msg.value >= cost*mintamount, "Not paid enough ETH.");

   if (isFree) {
       ClaimPerWallet[msg.sender] += mintamount;
    }

    _safeMint(msg.sender, mintamount);
  } 

  function setMaxMintPerTx(uint _MaxMintPerTx) external onlyOwner {
    MaxMintPerTx = _MaxMintPerTx;
  }   

  function setTotalCollectionSize(uint _TotalToken) external onlyOwner {
    TotalCollectionSize = _TotalToken;
  }

  function setMintprice(uint _Mintprice) external onlyOwner {
    Mintprice = _Mintprice;
  }        

  function setMaxClaimTokenTotalForFreePerwallet(uint _MaxClaimTokenTotalForFreePerwallet) external onlyOwner {
    MaxClaimTokenTotalForFreePerwallet = _MaxClaimTokenTotalForFreePerwallet;
  }         

  function setMaxClaimTokenTotalForFree(uint _MaxClaimTokenTotalForFree) external onlyOwner {
    MaxClaimTokenTotalForFree = _MaxClaimTokenTotalForFree;
  } 

  function SetSalesStart() public onlyOwner {
    IsSalesStart = !IsSalesStart;
  }

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

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

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

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

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

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

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

 }

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"TotalToken_","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":[{"internalType":"address","name":"","type":"address"}],"name":"ClaimPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IsSalesStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxClaimTokenTotalForFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxClaimTokenTotalForFreePerwallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxMintPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"Mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"MintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Mintprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SetSalesStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TotalCollectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxClaimTokenTotalForFree","type":"uint256"}],"name":"setMaxClaimTokenTotalForFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxClaimTokenTotalForFreePerwallet","type":"uint256"}],"name":"setMaxClaimTokenTotalForFreePerwallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxMintPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Mintprice","type":"uint256"}],"name":"setMintprice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_TotalToken","type":"uint256"}],"name":"setTotalCollectionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600060015560006008553480156200001b57600080fd5b50604051620059333803806200593383398181016040528101906200004191906200038c565b6040518060400160405280601581526020017f42616279205472697070696e2041706520436c756200000000000000000000008152506040518060400160405280601281526020017f426162795472697070696e417065436c756200000000000000000000000000008152508383620000cf620000c3620001f960201b60201c565b6200020160201b60201c565b6000811162000115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010c9062000443565b60405180910390fd5b600082116200015b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001529062000421565b60405180910390fd5b836002908051906020019062000173929190620002c5565b5082600390805190602001906200018c929190620002c5565b508160a08181525050806080818152505050505050600160098190555081600f8190555080600b819055506001600a60006101000a81548160ff0219169083151502179055506618838370f34000600c819055506103e8600d819055506002600e819055505050620005a2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002d39062000480565b90600052602060002090601f016020900481019282620002f7576000855562000343565b82601f106200031257805160ff191683800117855562000343565b8280016001018555821562000343579182015b828111156200034257825182559160200191906001019062000325565b5b50905062000352919062000356565b5090565b5b808211156200037157600081600090555060010162000357565b5090565b600081519050620003868162000588565b92915050565b60008060408385031215620003a657620003a5620004e5565b5b6000620003b68582860162000375565b9250506020620003c98582860162000375565b9150509250929050565b6000620003e260278362000465565b9150620003ef82620004ea565b604082019050919050565b600062000409602e8362000465565b9150620004168262000539565b604082019050919050565b600060208201905081810360008301526200043c81620003d3565b9050919050565b600060208201905081810360008301526200045e81620003fa565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200049957607f821691505b60208210811415620004b057620004af620004b6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005938162000476565b81146200059f57600080fd5b50565b60805160a051615356620005dd60003960008181612abe01528181612ae70152613266015260008181612846015261287a01526153566000f3fe6080604052600436106102465760003560e01c8063616cdb1e1161013957806395d89b41116100b6578063c87b56dd1161007a578063c87b56dd1461086b578063d7224ba0146108a8578063dc33e681146108d3578063e985e9c514610910578063f2fde38b1461094d578063fb41438b1461097657610246565b806395d89b411461079a5780639a47415e146107c5578063a22cb465146107f0578063b6414eb814610819578063b88d4fde1461084257610246565b80637b0a6691116100fd5780637b0a66911461069f578063823903a9146106ca5780638462151c146106f55780638da5cb5b146107325780639231ab2a1461075d57610246565b8063616cdb1e146105ba57806361f1f87d146105e35780636352211e1461060e57806370a082311461064b578063715018a61461068857610246565b80632f745c59116101c75780634f6ccce71161018b5780634f6ccce7146104e757806354870bc614610524578063556621cc1461053b57806355f804b3146105665780635b7a0d881461058f57610246565b80632f745c591461040457806336748001146104415780633ccfd60b1461046a5780633dd832d61461048157806342842e0e146104be57610246565b8063095ea7b31161020e578063095ea7b31461033557806318160ddd1461035e57806323b872dd146103895780632ccee9be146103b25780632d20fb60146103db57610246565b8063011239571461024b57806301ffc9a71461027457806306fdde03146102b157806307883703146102dc578063081812fc146102f8575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613b19565b61099f565b005b34801561028057600080fd5b5061029b60048036038101906102969190613a72565b610a25565b6040516102a891906141c4565b60405180910390f35b3480156102bd57600080fd5b506102c6610b6f565b6040516102d391906141df565b60405180910390f35b6102f660048036038101906102f19190613b19565b610c01565b005b34801561030457600080fd5b5061031f600480360381019061031a9190613b19565b610e43565b60405161032c919061413b565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190613a32565b610ec8565b005b34801561036a57600080fd5b50610373610fe1565b60405161038091906145bc565b60405180910390f35b34801561039557600080fd5b506103b060048036038101906103ab919061391c565b610feb565b005b3480156103be57600080fd5b506103d960048036038101906103d49190613a32565b610ffb565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190613b19565b6110dc565b005b34801561041057600080fd5b5061042b60048036038101906104269190613a32565b6111ba565b60405161043891906145bc565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190613b19565b6113b8565b005b34801561047657600080fd5b5061047f61143e565b005b34801561048d57600080fd5b506104a860048036038101906104a391906138af565b6115bf565b6040516104b591906145bc565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e0919061391c565b6115d7565b005b3480156104f357600080fd5b5061050e60048036038101906105099190613b19565b6115f7565b60405161051b91906145bc565b60405180910390f35b34801561053057600080fd5b5061053961164a565b005b34801561054757600080fd5b506105506116f2565b60405161055d91906145bc565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190613acc565b6116f8565b005b34801561059b57600080fd5b506105a461178a565b6040516105b191906145bc565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613b19565b611790565b005b3480156105ef57600080fd5b506105f8611816565b60405161060591906145bc565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190613b19565b61181c565b604051610642919061413b565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906138af565b611832565b60405161067f91906145bc565b60405180910390f35b34801561069457600080fd5b5061069d61191b565b005b3480156106ab57600080fd5b506106b46119a3565b6040516106c191906141c4565b60405180910390f35b3480156106d657600080fd5b506106df6119b6565b6040516106ec91906145bc565b60405180910390f35b34801561070157600080fd5b5061071c600480360381019061071791906138af565b6119bc565b60405161072991906141a2565b60405180910390f35b34801561073e57600080fd5b50610747611ac6565b604051610754919061413b565b60405180910390f35b34801561076957600080fd5b50610784600480360381019061077f9190613b19565b611aef565b60405161079191906145a1565b60405180910390f35b3480156107a657600080fd5b506107af611b07565b6040516107bc91906141df565b60405180910390f35b3480156107d157600080fd5b506107da611b99565b6040516107e791906145bc565b60405180910390f35b3480156107fc57600080fd5b50610817600480360381019061081291906139f2565b611b9f565b005b34801561082557600080fd5b50610840600480360381019061083b9190613b19565b611d20565b005b34801561084e57600080fd5b506108696004803603810190610864919061396f565b611da6565b005b34801561087757600080fd5b50610892600480360381019061088d9190613b19565b611e02565b60405161089f91906141df565b60405180910390f35b3480156108b457600080fd5b506108bd611ea9565b6040516108ca91906145bc565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f591906138af565b611eaf565b60405161090791906145bc565b60405180910390f35b34801561091c57600080fd5b50610937600480360381019061093291906138dc565b611ec1565b60405161094491906141c4565b60405180910390f35b34801561095957600080fd5b50610974600480360381019061096f91906138af565b611f55565b005b34801561098257600080fd5b5061099d60048036038101906109989190613b19565b61204d565b005b6109a76120d3565b73ffffffffffffffffffffffffffffffffffffffff166109c5611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614610a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1290614381565b60405180910390fd5b80600d8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b685750610b67826120db565b5b9050919050565b606060028054610b7e90614953565b80601f0160208091040260200160405190810160405280929190818152602001828054610baa90614953565b8015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b5050505050905090565b6000600c54905060006001600d54610c1991906146fa565b83610c22610fe1565b610c2c91906146fa565b108015610c855750600e5483601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c8291906146fa565b11155b90508015610c9257600091505b600a60009054906101000a900460ff16610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd8906142c1565b60405180910390fd5b600b5483610ced610fe1565b610cf791906146fa565b1115610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f906143c1565b60405180910390fd5b600083118015610d4a5750600f548311155b610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090614361565b60405180910390fd5b8282610d959190614781565b341015610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90614421565b60405180910390fd5b8015610e345782601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e2c91906146fa565b925050819055505b610e3e3384612145565b505050565b6000610e4e82612163565b610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490614561565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ed38261181c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b90614441565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f636120d3565b73ffffffffffffffffffffffffffffffffffffffff161480610f925750610f9181610f8c6120d3565b611ec1565b5b610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc8906142e1565b60405180910390fd5b610fdc838383612171565b505050565b6000600154905090565b610ff6838383612223565b505050565b6110036120d3565b73ffffffffffffffffffffffffffffffffffffffff16611021611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90614381565b60405180910390fd5b600b5481611083610fe1565b61108d91906146fa565b11156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c5906143c1565b60405180910390fd5b6110d88282612145565b5050565b6110e46120d3565b73ffffffffffffffffffffffffffffffffffffffff16611102611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90614381565b60405180910390fd5b6002600954141561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590614521565b60405180910390fd5b60026009819055506111af816127dc565b600160098190555050565b60006111c583611832565b8210611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd90614201565b60405180910390fd5b6000611210610fe1565b905060008060005b83811015611376576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461130a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561136257868414156113535781955050505050506113b2565b838061135e906149b6565b9450505b50808061136e906149b6565b915050611218565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a9906144e1565b60405180910390fd5b92915050565b6113c06120d3565b73ffffffffffffffffffffffffffffffffffffffff166113de611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90614381565b60405180910390fd5b80600c8190555050565b6114466120d3565b73ffffffffffffffffffffffffffffffffffffffff16611464611ac6565b73ffffffffffffffffffffffffffffffffffffffff16146114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190614381565b60405180910390fd5b60026009541415611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790614521565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161152e90614126565b60006040518083038185875af1925050503d806000811461156b576040519150601f19603f3d011682016040523d82523d6000602084013e611570565b606091505b50509050806115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90614461565b60405180910390fd5b506001600981905550565b60106020528060005260406000206000915090505481565b6115f283838360405180602001604052806000815250611da6565b505050565b6000611601610fe1565b8210611642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163990614261565b60405180910390fd5b819050919050565b6116526120d3565b73ffffffffffffffffffffffffffffffffffffffff16611670611ac6565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90614381565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b600c5481565b6117006120d3565b73ffffffffffffffffffffffffffffffffffffffff1661171e611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90614381565b60405180910390fd5b8181601191906117859291906136a3565b505050565b600b5481565b6117986120d3565b73ffffffffffffffffffffffffffffffffffffffff166117b6611ac6565b73ffffffffffffffffffffffffffffffffffffffff161461180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180390614381565b60405180910390fd5b80600f8190555050565b600d5481565b600061182782612a6a565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a90614321565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6119236120d3565b73ffffffffffffffffffffffffffffffffffffffff16611941611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e90614381565b60405180910390fd5b6119a16000612c6d565b565b600a60009054906101000a900460ff1681565b600f5481565b606060006119c983611832565b90506000811415611a2657600067ffffffffffffffff8111156119ef576119ee614aec565b5b604051908082528060200260200182016040528015611a1d5781602001602082028036833780820191505090505b50915050611ac1565b60008167ffffffffffffffff811115611a4257611a41614aec565b5b604051908082528060200260200182016040528015611a705781602001602082028036833780820191505090505b50905060005b82811015611aba57611a8885826111ba565b828281518110611a9b57611a9a614abd565b5b6020026020010181815250508080611ab2906149b6565b915050611a76565b8193505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611af7613729565b611b0082612a6a565b9050919050565b606060038054611b1690614953565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4290614953565b8015611b8f5780601f10611b6457610100808354040283529160200191611b8f565b820191906000526020600020905b815481529060010190602001808311611b7257829003601f168201915b5050505050905090565b600e5481565b611ba76120d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c906143e1565b60405180910390fd5b8060076000611c226120d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ccf6120d3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d1491906141c4565b60405180910390a35050565b611d286120d3565b73ffffffffffffffffffffffffffffffffffffffff16611d46611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9390614381565b60405180910390fd5b80600e8190555050565b611db1848484612223565b611dbd84848484612d31565b611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390614481565b60405180910390fd5b50505050565b6060611e0d82612163565b611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e43906143a1565b60405180910390fd5b6000611e56612ec8565b90506000815111611e765760405180602001604052806000815250611ea1565b80611e8084612f5a565b604051602001611e91929190614102565b6040516020818303038152906040525b915050919050565b60085481565b6000611eba826130bb565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f5d6120d3565b73ffffffffffffffffffffffffffffffffffffffff16611f7b611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890614381565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614221565b60405180910390fd5b61204a81612c6d565b50565b6120556120d3565b73ffffffffffffffffffffffffffffffffffffffff16612073611ac6565b73ffffffffffffffffffffffffffffffffffffffff16146120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c090614381565b60405180910390fd5b80600b8190555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61215f8282604051806020016040528060008152506131a4565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061222e82612a6a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166122556120d3565b73ffffffffffffffffffffffffffffffffffffffff1614806122b1575061227a6120d3565b73ffffffffffffffffffffffffffffffffffffffff1661229984610e43565b73ffffffffffffffffffffffffffffffffffffffff16145b806122cd57506122cc82600001516122c76120d3565b611ec1565b5b90508061230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690614401565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237890614341565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890614281565b60405180910390fd5b6123fe8585856001613684565b61240e6000848460000151612171565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661247c91906147db565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661252091906146b4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461262691906146fa565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561276c5761269c81612163565b1561276b576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127d4868686600161368a565b505050505050565b6000600854905060008211612826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281d90614301565b60405180910390fd5b60006001838361283691906146fa565b612840919061480f565b905060017f000000000000000000000000000000000000000000000000000000000000000061286f919061480f565b8111156128a65760017f00000000000000000000000000000000000000000000000000000000000000006128a3919061480f565b90505b6128af81612163565b6128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e590614501565b60405180910390fd5b60008290505b818111612a5157600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612a3e57600061297182612a6a565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612a49906149b6565b9150506128f4565b50600181612a5f91906146fa565b600881905550505050565b612a72613729565b612a7b82612163565b612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190614241565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612b1e5760017f000000000000000000000000000000000000000000000000000000000000000084612b11919061480f565b612b1b91906146fa565b90505b60008390505b818110612c2c576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c1857809350505050612c68565b508080612c2490614929565b915050612b24565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5f90614541565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612d528473ffffffffffffffffffffffffffffffffffffffff16613690565b15612ebb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d7b6120d3565b8786866040518563ffffffff1660e01b8152600401612d9d9493929190614156565b602060405180830381600087803b158015612db757600080fd5b505af1925050508015612de857506040513d601f19601f82011682018060405250810190612de59190613a9f565b60015b612e6b573d8060008114612e18576040519150601f19603f3d011682016040523d82523d6000602084013e612e1d565b606091505b50600081511415612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a90614481565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ec0565b600190505b949350505050565b606060118054612ed790614953565b80601f0160208091040260200160405190810160405280929190818152602001828054612f0390614953565b8015612f505780601f10612f2557610100808354040283529160200191612f50565b820191906000526020600020905b815481529060010190602001808311612f3357829003601f168201915b5050505050905090565b60606000821415612fa2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130b6565b600082905060005b60008214612fd4578080612fbd906149b6565b915050600a82612fcd9190614750565b9150612faa565b60008167ffffffffffffffff811115612ff057612fef614aec565b5b6040519080825280601f01601f1916602001820160405280156130225781602001600182028036833780820191505090505b5090505b600085146130af5760018261303b919061480f565b9150600a8561304a91906149ff565b603061305691906146fa565b60f81b81838151811061306c5761306b614abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130a89190614750565b9450613026565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561312c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613123906142a1565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561321b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613212906144c1565b60405180910390fd5b61322481612163565b15613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b906144a1565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156132c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132be90614581565b60405180910390fd5b6132d46000858386613684565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516133d191906146b4565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133f891906146b4565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561366757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136076000888488612d31565b613646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363d90614481565b60405180910390fd5b8180613651906149b6565b925050808061365f906149b6565b915050613596565b508060018190555061367c600087858861368a565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b8280546136af90614953565b90600052602060002090601f0160209004810192826136d15760008555613718565b82601f106136ea57803560ff1916838001178555613718565b82800160010185558215613718579182015b828111156137175782358255916020019190600101906136fc565b5b5090506137259190613763565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561377c576000816000905550600101613764565b5090565b600061379361378e846145fc565b6145d7565b9050828152602081018484840111156137af576137ae614b2a565b5b6137ba8482856148e7565b509392505050565b6000813590506137d1816152c4565b92915050565b6000813590506137e6816152db565b92915050565b6000813590506137fb816152f2565b92915050565b600081519050613810816152f2565b92915050565b600082601f83011261382b5761382a614b20565b5b813561383b848260208601613780565b91505092915050565b60008083601f84011261385a57613859614b20565b5b8235905067ffffffffffffffff81111561387757613876614b1b565b5b60208301915083600182028301111561389357613892614b25565b5b9250929050565b6000813590506138a981615309565b92915050565b6000602082840312156138c5576138c4614b34565b5b60006138d3848285016137c2565b91505092915050565b600080604083850312156138f3576138f2614b34565b5b6000613901858286016137c2565b9250506020613912858286016137c2565b9150509250929050565b60008060006060848603121561393557613934614b34565b5b6000613943868287016137c2565b9350506020613954868287016137c2565b92505060406139658682870161389a565b9150509250925092565b6000806000806080858703121561398957613988614b34565b5b6000613997878288016137c2565b94505060206139a8878288016137c2565b93505060406139b98782880161389a565b925050606085013567ffffffffffffffff8111156139da576139d9614b2f565b5b6139e687828801613816565b91505092959194509250565b60008060408385031215613a0957613a08614b34565b5b6000613a17858286016137c2565b9250506020613a28858286016137d7565b9150509250929050565b60008060408385031215613a4957613a48614b34565b5b6000613a57858286016137c2565b9250506020613a688582860161389a565b9150509250929050565b600060208284031215613a8857613a87614b34565b5b6000613a96848285016137ec565b91505092915050565b600060208284031215613ab557613ab4614b34565b5b6000613ac384828501613801565b91505092915050565b60008060208385031215613ae357613ae2614b34565b5b600083013567ffffffffffffffff811115613b0157613b00614b2f565b5b613b0d85828601613844565b92509250509250929050565b600060208284031215613b2f57613b2e614b34565b5b6000613b3d8482850161389a565b91505092915050565b6000613b5283836140d5565b60208301905092915050565b613b6781614843565b82525050565b613b7681614843565b82525050565b6000613b878261463d565b613b91818561466b565b9350613b9c8361462d565b8060005b83811015613bcd578151613bb48882613b46565b9750613bbf8361465e565b925050600181019050613ba0565b5085935050505092915050565b613be381614855565b82525050565b6000613bf482614648565b613bfe818561467c565b9350613c0e8185602086016148f6565b613c1781614b39565b840191505092915050565b6000613c2d82614653565b613c378185614698565b9350613c478185602086016148f6565b613c5081614b39565b840191505092915050565b6000613c6682614653565b613c7081856146a9565b9350613c808185602086016148f6565b80840191505092915050565b6000613c99602283614698565b9150613ca482614b4a565b604082019050919050565b6000613cbc602683614698565b9150613cc782614b99565b604082019050919050565b6000613cdf602a83614698565b9150613cea82614be8565b604082019050919050565b6000613d02602383614698565b9150613d0d82614c37565b604082019050919050565b6000613d25602583614698565b9150613d3082614c86565b604082019050919050565b6000613d48603183614698565b9150613d5382614cd5565b604082019050919050565b6000613d6b601383614698565b9150613d7682614d24565b602082019050919050565b6000613d8e603983614698565b9150613d9982614d4d565b604082019050919050565b6000613db1601883614698565b9150613dbc82614d9c565b602082019050919050565b6000613dd4602b83614698565b9150613ddf82614dc5565b604082019050919050565b6000613df7602683614698565b9150613e0282614e14565b604082019050919050565b6000613e1a602083614698565b9150613e2582614e63565b602082019050919050565b6000613e3d602083614698565b9150613e4882614e8c565b602082019050919050565b6000613e60602f83614698565b9150613e6b82614eb5565b604082019050919050565b6000613e83601b83614698565b9150613e8e82614f04565b602082019050919050565b6000613ea6601a83614698565b9150613eb182614f2d565b602082019050919050565b6000613ec9603283614698565b9150613ed482614f56565b604082019050919050565b6000613eec601483614698565b9150613ef782614fa5565b602082019050919050565b6000613f0f602283614698565b9150613f1a82614fce565b604082019050919050565b6000613f3260008361468d565b9150613f3d8261501d565b600082019050919050565b6000613f55601083614698565b9150613f6082615020565b602082019050919050565b6000613f78603383614698565b9150613f8382615049565b604082019050919050565b6000613f9b601d83614698565b9150613fa682615098565b602082019050919050565b6000613fbe602183614698565b9150613fc9826150c1565b604082019050919050565b6000613fe1602e83614698565b9150613fec82615110565b604082019050919050565b6000614004602683614698565b915061400f8261515f565b604082019050919050565b6000614027601f83614698565b9150614032826151ae565b602082019050919050565b600061404a602f83614698565b9150614055826151d7565b604082019050919050565b600061406d602d83614698565b915061407882615226565b604082019050919050565b6000614090602283614698565b915061409b82615275565b604082019050919050565b6040820160008201516140bc6000850182613b5e565b5060208201516140cf60208501826140f3565b50505050565b6140de816148c9565b82525050565b6140ed816148c9565b82525050565b6140fc816148d3565b82525050565b600061410e8285613c5b565b915061411a8284613c5b565b91508190509392505050565b600061413182613f25565b9150819050919050565b60006020820190506141506000830184613b6d565b92915050565b600060808201905061416b6000830187613b6d565b6141786020830186613b6d565b61418560408301856140e4565b81810360608301526141978184613be9565b905095945050505050565b600060208201905081810360008301526141bc8184613b7c565b905092915050565b60006020820190506141d96000830184613bda565b92915050565b600060208201905081810360008301526141f98184613c22565b905092915050565b6000602082019050818103600083015261421a81613c8c565b9050919050565b6000602082019050818103600083015261423a81613caf565b9050919050565b6000602082019050818103600083015261425a81613cd2565b9050919050565b6000602082019050818103600083015261427a81613cf5565b9050919050565b6000602082019050818103600083015261429a81613d18565b9050919050565b600060208201905081810360008301526142ba81613d3b565b9050919050565b600060208201905081810360008301526142da81613d5e565b9050919050565b600060208201905081810360008301526142fa81613d81565b9050919050565b6000602082019050818103600083015261431a81613da4565b9050919050565b6000602082019050818103600083015261433a81613dc7565b9050919050565b6000602082019050818103600083015261435a81613dea565b9050919050565b6000602082019050818103600083015261437a81613e0d565b9050919050565b6000602082019050818103600083015261439a81613e30565b9050919050565b600060208201905081810360008301526143ba81613e53565b9050919050565b600060208201905081810360008301526143da81613e76565b9050919050565b600060208201905081810360008301526143fa81613e99565b9050919050565b6000602082019050818103600083015261441a81613ebc565b9050919050565b6000602082019050818103600083015261443a81613edf565b9050919050565b6000602082019050818103600083015261445a81613f02565b9050919050565b6000602082019050818103600083015261447a81613f48565b9050919050565b6000602082019050818103600083015261449a81613f6b565b9050919050565b600060208201905081810360008301526144ba81613f8e565b9050919050565b600060208201905081810360008301526144da81613fb1565b9050919050565b600060208201905081810360008301526144fa81613fd4565b9050919050565b6000602082019050818103600083015261451a81613ff7565b9050919050565b6000602082019050818103600083015261453a8161401a565b9050919050565b6000602082019050818103600083015261455a8161403d565b9050919050565b6000602082019050818103600083015261457a81614060565b9050919050565b6000602082019050818103600083015261459a81614083565b9050919050565b60006040820190506145b660008301846140a6565b92915050565b60006020820190506145d160008301846140e4565b92915050565b60006145e16145f2565b90506145ed8282614985565b919050565b6000604051905090565b600067ffffffffffffffff82111561461757614616614aec565b5b61462082614b39565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006146bf8261488d565b91506146ca8361488d565b9250826fffffffffffffffffffffffffffffffff038211156146ef576146ee614a30565b5b828201905092915050565b6000614705826148c9565b9150614710836148c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561474557614744614a30565b5b828201905092915050565b600061475b826148c9565b9150614766836148c9565b92508261477657614775614a5f565b5b828204905092915050565b600061478c826148c9565b9150614797836148c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147d0576147cf614a30565b5b828202905092915050565b60006147e68261488d565b91506147f18361488d565b92508282101561480457614803614a30565b5b828203905092915050565b600061481a826148c9565b9150614825836148c9565b92508282101561483857614837614a30565b5b828203905092915050565b600061484e826148a9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156149145780820151818401526020810190506148f9565b83811115614923576000848401525b50505050565b6000614934826148c9565b9150600082141561494857614947614a30565b5b600182039050919050565b6000600282049050600182168061496b57607f821691505b6020821081141561497f5761497e614a8e565b5b50919050565b61498e82614b39565b810181811067ffffffffffffffff821117156149ad576149ac614aec565b5b80604052505050565b60006149c1826148c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149f4576149f3614a30565b5b600182019050919050565b6000614a0a826148c9565b9150614a15836148c9565b925082614a2557614a24614a5f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206973206e6f74207374617274656400000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e74206d6f7265207468616e20323020706572207478600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e74206d6f7265207468616e20353535350000000000600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f74207061696420656e6f756768204554482e000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6152cd81614843565b81146152d857600080fd5b50565b6152e481614855565b81146152ef57600080fd5b50565b6152fb81614861565b811461530657600080fd5b50565b615312816148c9565b811461531d57600080fd5b5056fea2646970667358221220529dc5bf2775bc5d3dea78c9f55b61cc8a24341ad246c6ec90419f1b2c9a568564736f6c63430008070033000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000015b3

Deployed Bytecode

0x6080604052600436106102465760003560e01c8063616cdb1e1161013957806395d89b41116100b6578063c87b56dd1161007a578063c87b56dd1461086b578063d7224ba0146108a8578063dc33e681146108d3578063e985e9c514610910578063f2fde38b1461094d578063fb41438b1461097657610246565b806395d89b411461079a5780639a47415e146107c5578063a22cb465146107f0578063b6414eb814610819578063b88d4fde1461084257610246565b80637b0a6691116100fd5780637b0a66911461069f578063823903a9146106ca5780638462151c146106f55780638da5cb5b146107325780639231ab2a1461075d57610246565b8063616cdb1e146105ba57806361f1f87d146105e35780636352211e1461060e57806370a082311461064b578063715018a61461068857610246565b80632f745c59116101c75780634f6ccce71161018b5780634f6ccce7146104e757806354870bc614610524578063556621cc1461053b57806355f804b3146105665780635b7a0d881461058f57610246565b80632f745c591461040457806336748001146104415780633ccfd60b1461046a5780633dd832d61461048157806342842e0e146104be57610246565b8063095ea7b31161020e578063095ea7b31461033557806318160ddd1461035e57806323b872dd146103895780632ccee9be146103b25780632d20fb60146103db57610246565b8063011239571461024b57806301ffc9a71461027457806306fdde03146102b157806307883703146102dc578063081812fc146102f8575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613b19565b61099f565b005b34801561028057600080fd5b5061029b60048036038101906102969190613a72565b610a25565b6040516102a891906141c4565b60405180910390f35b3480156102bd57600080fd5b506102c6610b6f565b6040516102d391906141df565b60405180910390f35b6102f660048036038101906102f19190613b19565b610c01565b005b34801561030457600080fd5b5061031f600480360381019061031a9190613b19565b610e43565b60405161032c919061413b565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190613a32565b610ec8565b005b34801561036a57600080fd5b50610373610fe1565b60405161038091906145bc565b60405180910390f35b34801561039557600080fd5b506103b060048036038101906103ab919061391c565b610feb565b005b3480156103be57600080fd5b506103d960048036038101906103d49190613a32565b610ffb565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190613b19565b6110dc565b005b34801561041057600080fd5b5061042b60048036038101906104269190613a32565b6111ba565b60405161043891906145bc565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190613b19565b6113b8565b005b34801561047657600080fd5b5061047f61143e565b005b34801561048d57600080fd5b506104a860048036038101906104a391906138af565b6115bf565b6040516104b591906145bc565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e0919061391c565b6115d7565b005b3480156104f357600080fd5b5061050e60048036038101906105099190613b19565b6115f7565b60405161051b91906145bc565b60405180910390f35b34801561053057600080fd5b5061053961164a565b005b34801561054757600080fd5b506105506116f2565b60405161055d91906145bc565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190613acc565b6116f8565b005b34801561059b57600080fd5b506105a461178a565b6040516105b191906145bc565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613b19565b611790565b005b3480156105ef57600080fd5b506105f8611816565b60405161060591906145bc565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190613b19565b61181c565b604051610642919061413b565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906138af565b611832565b60405161067f91906145bc565b60405180910390f35b34801561069457600080fd5b5061069d61191b565b005b3480156106ab57600080fd5b506106b46119a3565b6040516106c191906141c4565b60405180910390f35b3480156106d657600080fd5b506106df6119b6565b6040516106ec91906145bc565b60405180910390f35b34801561070157600080fd5b5061071c600480360381019061071791906138af565b6119bc565b60405161072991906141a2565b60405180910390f35b34801561073e57600080fd5b50610747611ac6565b604051610754919061413b565b60405180910390f35b34801561076957600080fd5b50610784600480360381019061077f9190613b19565b611aef565b60405161079191906145a1565b60405180910390f35b3480156107a657600080fd5b506107af611b07565b6040516107bc91906141df565b60405180910390f35b3480156107d157600080fd5b506107da611b99565b6040516107e791906145bc565b60405180910390f35b3480156107fc57600080fd5b50610817600480360381019061081291906139f2565b611b9f565b005b34801561082557600080fd5b50610840600480360381019061083b9190613b19565b611d20565b005b34801561084e57600080fd5b506108696004803603810190610864919061396f565b611da6565b005b34801561087757600080fd5b50610892600480360381019061088d9190613b19565b611e02565b60405161089f91906141df565b60405180910390f35b3480156108b457600080fd5b506108bd611ea9565b6040516108ca91906145bc565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f591906138af565b611eaf565b60405161090791906145bc565b60405180910390f35b34801561091c57600080fd5b50610937600480360381019061093291906138dc565b611ec1565b60405161094491906141c4565b60405180910390f35b34801561095957600080fd5b50610974600480360381019061096f91906138af565b611f55565b005b34801561098257600080fd5b5061099d60048036038101906109989190613b19565b61204d565b005b6109a76120d3565b73ffffffffffffffffffffffffffffffffffffffff166109c5611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614610a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1290614381565b60405180910390fd5b80600d8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b685750610b67826120db565b5b9050919050565b606060028054610b7e90614953565b80601f0160208091040260200160405190810160405280929190818152602001828054610baa90614953565b8015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b5050505050905090565b6000600c54905060006001600d54610c1991906146fa565b83610c22610fe1565b610c2c91906146fa565b108015610c855750600e5483601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c8291906146fa565b11155b90508015610c9257600091505b600a60009054906101000a900460ff16610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd8906142c1565b60405180910390fd5b600b5483610ced610fe1565b610cf791906146fa565b1115610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f906143c1565b60405180910390fd5b600083118015610d4a5750600f548311155b610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090614361565b60405180910390fd5b8282610d959190614781565b341015610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90614421565b60405180910390fd5b8015610e345782601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e2c91906146fa565b925050819055505b610e3e3384612145565b505050565b6000610e4e82612163565b610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490614561565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ed38261181c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b90614441565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f636120d3565b73ffffffffffffffffffffffffffffffffffffffff161480610f925750610f9181610f8c6120d3565b611ec1565b5b610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc8906142e1565b60405180910390fd5b610fdc838383612171565b505050565b6000600154905090565b610ff6838383612223565b505050565b6110036120d3565b73ffffffffffffffffffffffffffffffffffffffff16611021611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90614381565b60405180910390fd5b600b5481611083610fe1565b61108d91906146fa565b11156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c5906143c1565b60405180910390fd5b6110d88282612145565b5050565b6110e46120d3565b73ffffffffffffffffffffffffffffffffffffffff16611102611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90614381565b60405180910390fd5b6002600954141561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590614521565b60405180910390fd5b60026009819055506111af816127dc565b600160098190555050565b60006111c583611832565b8210611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd90614201565b60405180910390fd5b6000611210610fe1565b905060008060005b83811015611376576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461130a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561136257868414156113535781955050505050506113b2565b838061135e906149b6565b9450505b50808061136e906149b6565b915050611218565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a9906144e1565b60405180910390fd5b92915050565b6113c06120d3565b73ffffffffffffffffffffffffffffffffffffffff166113de611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90614381565b60405180910390fd5b80600c8190555050565b6114466120d3565b73ffffffffffffffffffffffffffffffffffffffff16611464611ac6565b73ffffffffffffffffffffffffffffffffffffffff16146114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190614381565b60405180910390fd5b60026009541415611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790614521565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161152e90614126565b60006040518083038185875af1925050503d806000811461156b576040519150601f19603f3d011682016040523d82523d6000602084013e611570565b606091505b50509050806115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90614461565b60405180910390fd5b506001600981905550565b60106020528060005260406000206000915090505481565b6115f283838360405180602001604052806000815250611da6565b505050565b6000611601610fe1565b8210611642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163990614261565b60405180910390fd5b819050919050565b6116526120d3565b73ffffffffffffffffffffffffffffffffffffffff16611670611ac6565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90614381565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b600c5481565b6117006120d3565b73ffffffffffffffffffffffffffffffffffffffff1661171e611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90614381565b60405180910390fd5b8181601191906117859291906136a3565b505050565b600b5481565b6117986120d3565b73ffffffffffffffffffffffffffffffffffffffff166117b6611ac6565b73ffffffffffffffffffffffffffffffffffffffff161461180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180390614381565b60405180910390fd5b80600f8190555050565b600d5481565b600061182782612a6a565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a90614321565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6119236120d3565b73ffffffffffffffffffffffffffffffffffffffff16611941611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e90614381565b60405180910390fd5b6119a16000612c6d565b565b600a60009054906101000a900460ff1681565b600f5481565b606060006119c983611832565b90506000811415611a2657600067ffffffffffffffff8111156119ef576119ee614aec565b5b604051908082528060200260200182016040528015611a1d5781602001602082028036833780820191505090505b50915050611ac1565b60008167ffffffffffffffff811115611a4257611a41614aec565b5b604051908082528060200260200182016040528015611a705781602001602082028036833780820191505090505b50905060005b82811015611aba57611a8885826111ba565b828281518110611a9b57611a9a614abd565b5b6020026020010181815250508080611ab2906149b6565b915050611a76565b8193505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611af7613729565b611b0082612a6a565b9050919050565b606060038054611b1690614953565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4290614953565b8015611b8f5780601f10611b6457610100808354040283529160200191611b8f565b820191906000526020600020905b815481529060010190602001808311611b7257829003601f168201915b5050505050905090565b600e5481565b611ba76120d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c906143e1565b60405180910390fd5b8060076000611c226120d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ccf6120d3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d1491906141c4565b60405180910390a35050565b611d286120d3565b73ffffffffffffffffffffffffffffffffffffffff16611d46611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9390614381565b60405180910390fd5b80600e8190555050565b611db1848484612223565b611dbd84848484612d31565b611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390614481565b60405180910390fd5b50505050565b6060611e0d82612163565b611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e43906143a1565b60405180910390fd5b6000611e56612ec8565b90506000815111611e765760405180602001604052806000815250611ea1565b80611e8084612f5a565b604051602001611e91929190614102565b6040516020818303038152906040525b915050919050565b60085481565b6000611eba826130bb565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f5d6120d3565b73ffffffffffffffffffffffffffffffffffffffff16611f7b611ac6565b73ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890614381565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614221565b60405180910390fd5b61204a81612c6d565b50565b6120556120d3565b73ffffffffffffffffffffffffffffffffffffffff16612073611ac6565b73ffffffffffffffffffffffffffffffffffffffff16146120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c090614381565b60405180910390fd5b80600b8190555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61215f8282604051806020016040528060008152506131a4565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061222e82612a6a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166122556120d3565b73ffffffffffffffffffffffffffffffffffffffff1614806122b1575061227a6120d3565b73ffffffffffffffffffffffffffffffffffffffff1661229984610e43565b73ffffffffffffffffffffffffffffffffffffffff16145b806122cd57506122cc82600001516122c76120d3565b611ec1565b5b90508061230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690614401565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237890614341565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890614281565b60405180910390fd5b6123fe8585856001613684565b61240e6000848460000151612171565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661247c91906147db565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661252091906146b4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461262691906146fa565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561276c5761269c81612163565b1561276b576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127d4868686600161368a565b505050505050565b6000600854905060008211612826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281d90614301565b60405180910390fd5b60006001838361283691906146fa565b612840919061480f565b905060017f00000000000000000000000000000000000000000000000000000000000015b361286f919061480f565b8111156128a65760017f00000000000000000000000000000000000000000000000000000000000015b36128a3919061480f565b90505b6128af81612163565b6128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e590614501565b60405180910390fd5b60008290505b818111612a5157600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612a3e57600061297182612a6a565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612a49906149b6565b9150506128f4565b50600181612a5f91906146fa565b600881905550505050565b612a72613729565b612a7b82612163565b612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190614241565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148310612b1e5760017f000000000000000000000000000000000000000000000000000000000000001484612b11919061480f565b612b1b91906146fa565b90505b60008390505b818110612c2c576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c1857809350505050612c68565b508080612c2490614929565b915050612b24565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5f90614541565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612d528473ffffffffffffffffffffffffffffffffffffffff16613690565b15612ebb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d7b6120d3565b8786866040518563ffffffff1660e01b8152600401612d9d9493929190614156565b602060405180830381600087803b158015612db757600080fd5b505af1925050508015612de857506040513d601f19601f82011682018060405250810190612de59190613a9f565b60015b612e6b573d8060008114612e18576040519150601f19603f3d011682016040523d82523d6000602084013e612e1d565b606091505b50600081511415612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a90614481565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ec0565b600190505b949350505050565b606060118054612ed790614953565b80601f0160208091040260200160405190810160405280929190818152602001828054612f0390614953565b8015612f505780601f10612f2557610100808354040283529160200191612f50565b820191906000526020600020905b815481529060010190602001808311612f3357829003601f168201915b5050505050905090565b60606000821415612fa2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130b6565b600082905060005b60008214612fd4578080612fbd906149b6565b915050600a82612fcd9190614750565b9150612faa565b60008167ffffffffffffffff811115612ff057612fef614aec565b5b6040519080825280601f01601f1916602001820160405280156130225781602001600182028036833780820191505090505b5090505b600085146130af5760018261303b919061480f565b9150600a8561304a91906149ff565b603061305691906146fa565b60f81b81838151811061306c5761306b614abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130a89190614750565b9450613026565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561312c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613123906142a1565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561321b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613212906144c1565b60405180910390fd5b61322481612163565b15613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b906144a1565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000148311156132c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132be90614581565b60405180910390fd5b6132d46000858386613684565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516133d191906146b4565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133f891906146b4565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561366757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136076000888488612d31565b613646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363d90614481565b60405180910390fd5b8180613651906149b6565b925050808061365f906149b6565b915050613596565b508060018190555061367c600087858861368a565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b8280546136af90614953565b90600052602060002090601f0160209004810192826136d15760008555613718565b82601f106136ea57803560ff1916838001178555613718565b82800160010185558215613718579182015b828111156137175782358255916020019190600101906136fc565b5b5090506137259190613763565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561377c576000816000905550600101613764565b5090565b600061379361378e846145fc565b6145d7565b9050828152602081018484840111156137af576137ae614b2a565b5b6137ba8482856148e7565b509392505050565b6000813590506137d1816152c4565b92915050565b6000813590506137e6816152db565b92915050565b6000813590506137fb816152f2565b92915050565b600081519050613810816152f2565b92915050565b600082601f83011261382b5761382a614b20565b5b813561383b848260208601613780565b91505092915050565b60008083601f84011261385a57613859614b20565b5b8235905067ffffffffffffffff81111561387757613876614b1b565b5b60208301915083600182028301111561389357613892614b25565b5b9250929050565b6000813590506138a981615309565b92915050565b6000602082840312156138c5576138c4614b34565b5b60006138d3848285016137c2565b91505092915050565b600080604083850312156138f3576138f2614b34565b5b6000613901858286016137c2565b9250506020613912858286016137c2565b9150509250929050565b60008060006060848603121561393557613934614b34565b5b6000613943868287016137c2565b9350506020613954868287016137c2565b92505060406139658682870161389a565b9150509250925092565b6000806000806080858703121561398957613988614b34565b5b6000613997878288016137c2565b94505060206139a8878288016137c2565b93505060406139b98782880161389a565b925050606085013567ffffffffffffffff8111156139da576139d9614b2f565b5b6139e687828801613816565b91505092959194509250565b60008060408385031215613a0957613a08614b34565b5b6000613a17858286016137c2565b9250506020613a28858286016137d7565b9150509250929050565b60008060408385031215613a4957613a48614b34565b5b6000613a57858286016137c2565b9250506020613a688582860161389a565b9150509250929050565b600060208284031215613a8857613a87614b34565b5b6000613a96848285016137ec565b91505092915050565b600060208284031215613ab557613ab4614b34565b5b6000613ac384828501613801565b91505092915050565b60008060208385031215613ae357613ae2614b34565b5b600083013567ffffffffffffffff811115613b0157613b00614b2f565b5b613b0d85828601613844565b92509250509250929050565b600060208284031215613b2f57613b2e614b34565b5b6000613b3d8482850161389a565b91505092915050565b6000613b5283836140d5565b60208301905092915050565b613b6781614843565b82525050565b613b7681614843565b82525050565b6000613b878261463d565b613b91818561466b565b9350613b9c8361462d565b8060005b83811015613bcd578151613bb48882613b46565b9750613bbf8361465e565b925050600181019050613ba0565b5085935050505092915050565b613be381614855565b82525050565b6000613bf482614648565b613bfe818561467c565b9350613c0e8185602086016148f6565b613c1781614b39565b840191505092915050565b6000613c2d82614653565b613c378185614698565b9350613c478185602086016148f6565b613c5081614b39565b840191505092915050565b6000613c6682614653565b613c7081856146a9565b9350613c808185602086016148f6565b80840191505092915050565b6000613c99602283614698565b9150613ca482614b4a565b604082019050919050565b6000613cbc602683614698565b9150613cc782614b99565b604082019050919050565b6000613cdf602a83614698565b9150613cea82614be8565b604082019050919050565b6000613d02602383614698565b9150613d0d82614c37565b604082019050919050565b6000613d25602583614698565b9150613d3082614c86565b604082019050919050565b6000613d48603183614698565b9150613d5382614cd5565b604082019050919050565b6000613d6b601383614698565b9150613d7682614d24565b602082019050919050565b6000613d8e603983614698565b9150613d9982614d4d565b604082019050919050565b6000613db1601883614698565b9150613dbc82614d9c565b602082019050919050565b6000613dd4602b83614698565b9150613ddf82614dc5565b604082019050919050565b6000613df7602683614698565b9150613e0282614e14565b604082019050919050565b6000613e1a602083614698565b9150613e2582614e63565b602082019050919050565b6000613e3d602083614698565b9150613e4882614e8c565b602082019050919050565b6000613e60602f83614698565b9150613e6b82614eb5565b604082019050919050565b6000613e83601b83614698565b9150613e8e82614f04565b602082019050919050565b6000613ea6601a83614698565b9150613eb182614f2d565b602082019050919050565b6000613ec9603283614698565b9150613ed482614f56565b604082019050919050565b6000613eec601483614698565b9150613ef782614fa5565b602082019050919050565b6000613f0f602283614698565b9150613f1a82614fce565b604082019050919050565b6000613f3260008361468d565b9150613f3d8261501d565b600082019050919050565b6000613f55601083614698565b9150613f6082615020565b602082019050919050565b6000613f78603383614698565b9150613f8382615049565b604082019050919050565b6000613f9b601d83614698565b9150613fa682615098565b602082019050919050565b6000613fbe602183614698565b9150613fc9826150c1565b604082019050919050565b6000613fe1602e83614698565b9150613fec82615110565b604082019050919050565b6000614004602683614698565b915061400f8261515f565b604082019050919050565b6000614027601f83614698565b9150614032826151ae565b602082019050919050565b600061404a602f83614698565b9150614055826151d7565b604082019050919050565b600061406d602d83614698565b915061407882615226565b604082019050919050565b6000614090602283614698565b915061409b82615275565b604082019050919050565b6040820160008201516140bc6000850182613b5e565b5060208201516140cf60208501826140f3565b50505050565b6140de816148c9565b82525050565b6140ed816148c9565b82525050565b6140fc816148d3565b82525050565b600061410e8285613c5b565b915061411a8284613c5b565b91508190509392505050565b600061413182613f25565b9150819050919050565b60006020820190506141506000830184613b6d565b92915050565b600060808201905061416b6000830187613b6d565b6141786020830186613b6d565b61418560408301856140e4565b81810360608301526141978184613be9565b905095945050505050565b600060208201905081810360008301526141bc8184613b7c565b905092915050565b60006020820190506141d96000830184613bda565b92915050565b600060208201905081810360008301526141f98184613c22565b905092915050565b6000602082019050818103600083015261421a81613c8c565b9050919050565b6000602082019050818103600083015261423a81613caf565b9050919050565b6000602082019050818103600083015261425a81613cd2565b9050919050565b6000602082019050818103600083015261427a81613cf5565b9050919050565b6000602082019050818103600083015261429a81613d18565b9050919050565b600060208201905081810360008301526142ba81613d3b565b9050919050565b600060208201905081810360008301526142da81613d5e565b9050919050565b600060208201905081810360008301526142fa81613d81565b9050919050565b6000602082019050818103600083015261431a81613da4565b9050919050565b6000602082019050818103600083015261433a81613dc7565b9050919050565b6000602082019050818103600083015261435a81613dea565b9050919050565b6000602082019050818103600083015261437a81613e0d565b9050919050565b6000602082019050818103600083015261439a81613e30565b9050919050565b600060208201905081810360008301526143ba81613e53565b9050919050565b600060208201905081810360008301526143da81613e76565b9050919050565b600060208201905081810360008301526143fa81613e99565b9050919050565b6000602082019050818103600083015261441a81613ebc565b9050919050565b6000602082019050818103600083015261443a81613edf565b9050919050565b6000602082019050818103600083015261445a81613f02565b9050919050565b6000602082019050818103600083015261447a81613f48565b9050919050565b6000602082019050818103600083015261449a81613f6b565b9050919050565b600060208201905081810360008301526144ba81613f8e565b9050919050565b600060208201905081810360008301526144da81613fb1565b9050919050565b600060208201905081810360008301526144fa81613fd4565b9050919050565b6000602082019050818103600083015261451a81613ff7565b9050919050565b6000602082019050818103600083015261453a8161401a565b9050919050565b6000602082019050818103600083015261455a8161403d565b9050919050565b6000602082019050818103600083015261457a81614060565b9050919050565b6000602082019050818103600083015261459a81614083565b9050919050565b60006040820190506145b660008301846140a6565b92915050565b60006020820190506145d160008301846140e4565b92915050565b60006145e16145f2565b90506145ed8282614985565b919050565b6000604051905090565b600067ffffffffffffffff82111561461757614616614aec565b5b61462082614b39565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006146bf8261488d565b91506146ca8361488d565b9250826fffffffffffffffffffffffffffffffff038211156146ef576146ee614a30565b5b828201905092915050565b6000614705826148c9565b9150614710836148c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561474557614744614a30565b5b828201905092915050565b600061475b826148c9565b9150614766836148c9565b92508261477657614775614a5f565b5b828204905092915050565b600061478c826148c9565b9150614797836148c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147d0576147cf614a30565b5b828202905092915050565b60006147e68261488d565b91506147f18361488d565b92508282101561480457614803614a30565b5b828203905092915050565b600061481a826148c9565b9150614825836148c9565b92508282101561483857614837614a30565b5b828203905092915050565b600061484e826148a9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156149145780820151818401526020810190506148f9565b83811115614923576000848401525b50505050565b6000614934826148c9565b9150600082141561494857614947614a30565b5b600182039050919050565b6000600282049050600182168061496b57607f821691505b6020821081141561497f5761497e614a8e565b5b50919050565b61498e82614b39565b810181811067ffffffffffffffff821117156149ad576149ac614aec565b5b80604052505050565b60006149c1826148c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149f4576149f3614a30565b5b600182019050919050565b6000614a0a826148c9565b9150614a15836148c9565b925082614a2557614a24614a5f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206973206e6f74207374617274656400000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e74206d6f7265207468616e20323020706572207478600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e74206d6f7265207468616e20353535350000000000600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f74207061696420656e6f756768204554482e000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6152cd81614843565b81146152d857600080fd5b50565b6152e481614855565b81146152ef57600080fd5b50565b6152fb81614861565b811461530657600080fd5b50565b615312816148c9565b811461531d57600080fd5b5056fea2646970667358221220529dc5bf2775bc5d3dea78c9f55b61cc8a24341ad246c6ec90419f1b2c9a568564736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000015b3

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 20
Arg [1] : TotalToken_ (uint256): 5555

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 00000000000000000000000000000000000000000000000000000000000015b3


Deployed Bytecode Sourcemap

40857:3852:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43170:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21930:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23656:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41849:764;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24953:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24516:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20495:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25803:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41629:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43423:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21122:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42855:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44527:176;;;;;;;;;;;;;:::i;:::-;;41179:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26016:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20658:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43334:83;;;;;;;;;;;;;:::i;:::-;;41008:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43695:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40968:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42620:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41040:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23479:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22356:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38235:94;;;;;;;;;;;;;:::i;:::-;;40935:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41145;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44064:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37584:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43911:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23811:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41087:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25221:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42962:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26236:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23972:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30659:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43547:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25558:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38484:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42734:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43170:157;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43295:26:::1;43267:25;:54;;;;43170:157:::0;:::o;21930:370::-;22057:4;22102:25;22087:40;;;:11;:40;;;;:99;;;;22153:33;22138:48;;;:11;:48;;;;22087:99;:160;;;;22212:35;22197:50;;;:11;:50;;;;22087:160;:207;;;;22258:36;22282:11;22258:23;:36::i;:::-;22087:207;22073:221;;21930:370;;;:::o;23656:94::-;23710:13;23739:5;23732:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23656:94;:::o;41849:764::-;41907:12;41922:9;;41907:24;;41938:11;42010:1;41982:25;;:29;;;;:::i;:::-;41969:10;41953:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:58;41952:151;;;;;42068:34;;42054:10;42025:14;:26;42040:10;42025:26;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:77;;41952:151;41938:165;;42123:6;42119:39;;;42149:1;42142:8;;42119:39;42188:12;;;;;;;;;;;42180:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;42269:19;;42255:10;42239:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:49;;42231:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;42352:1;42339:10;:14;:44;;;;;42371:12;;42357:10;:26;;42339:44;42331:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;42453:10;42448:4;:15;;;;:::i;:::-;42435:9;:28;;42427:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42500:6;42496:70;;;42548:10;42518:14;:26;42533:10;42518:26;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;42496:70;42574:33;42584:10;42596;42574:9;:33::i;:::-;41900:713;;41849:764;:::o;24953:204::-;25021:7;25045:16;25053:7;25045;:16::i;:::-;25037:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25127:15;:24;25143:7;25127:24;;;;;;;;;;;;;;;;;;;;;25120:31;;24953:204;;;:::o;24516:379::-;24585:13;24601:24;24617:7;24601:15;:24::i;:::-;24585:40;;24646:5;24640:11;;:2;:11;;;;24632:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24731:5;24715:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24740:37;24757:5;24764:12;:10;:12::i;:::-;24740:16;:37::i;:::-;24715:62;24699:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;24861:28;24870:2;24874:7;24883:5;24861:8;:28::i;:::-;24578:317;24516:379;;:::o;20495:94::-;20548:7;20571:12;;20564:19;;20495:94;:::o;25803:150::-;25919:28;25929:4;25935:2;25939:7;25919:9;:28::i;:::-;25803:150;;;:::o;41629:214::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41749:19:::1;;41735:10;41719:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:49;;41711:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;41809:26;41819:3;41824:10;41809:9;:26::i;:::-;41629:214:::0;;:::o;43423:118::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1:::1;36292:7;;:19;;36284:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1;36425:7;:18;;;;43507:28:::2;43526:8;43507:18;:28::i;:::-;35652:1:::1;36604:7;:22;;;;43423:118:::0;:::o;21122:744::-;21231:7;21266:16;21276:5;21266:9;:16::i;:::-;21258:5;:24;21250:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21328:22;21353:13;:11;:13::i;:::-;21328:38;;21373:19;21403:25;21453:9;21448:350;21472:14;21468:1;:18;21448:350;;;21502:31;21536:11;:14;21548:1;21536:14;;;;;;;;;;;21502:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21589:1;21563:28;;:9;:14;;;:28;;;21559:89;;21624:9;:14;;;21604:34;;21559:89;21681:5;21660:26;;:17;:26;;;21656:135;;;21718:5;21703:11;:20;21699:59;;;21745:1;21738:8;;;;;;;;;21699:59;21768:13;;;;;:::i;:::-;;;;21656:135;21493:305;21488:3;;;;;:::i;:::-;;;;21448:350;;;;21804:56;;;;;;;;;;:::i;:::-;;;;;;;;21122:744;;;;;:::o;42855:93::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42932:10:::1;42920:9;:22;;;;42855:93:::0;:::o;44527:176::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1:::1;36292:7;;:19;;36284:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1;36425:7;:18;;;;44587:12:::2;44605:10;:15;;44628:21;44605:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44586:68;;;44669:7;44661:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;44579:124;35652:1:::1;36604:7;:22;;;;44527:176::o:0;41179:49::-;;;;;;;;;;;;;;;;;:::o;26016:157::-;26128:39;26145:4;26151:2;26155:7;26128:39;;;;;;;;;;;;:16;:39::i;:::-;26016:157;;;:::o;20658:177::-;20725:7;20757:13;:11;:13::i;:::-;20749:5;:21;20741:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20824:5;20817:12;;20658:177;;;:::o;43334:83::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43399:12:::1;;;;;;;;;;;43398:13;43383:12;;:28;;;;;;;;;;;;;;;;;;43334:83::o:0;41008:25::-;;;;:::o;43695:98::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43780:7:::1;;43766:11;:21;;;;;;;:::i;:::-;;43695:98:::0;;:::o;40968:35::-;;;;:::o;42620:105::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42706:13:::1;42691:12;:28;;;;42620:105:::0;:::o;41040:41::-;;;;:::o;23479:118::-;23543:7;23566:20;23578:7;23566:11;:20::i;:::-;:25;;;23559:32;;23479:118;;;:::o;22356:211::-;22420:7;22461:1;22444:19;;:5;:19;;;;22436:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22533:12;:19;22546:5;22533:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;22525:36;;22518:43;;22356:211;;;:::o;38235:94::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38300:21:::1;38318:1;38300:9;:21::i;:::-;38235:94::o:0;40935:28::-;;;;;;;;;;;;;:::o;41145:::-;;;;:::o;44064:456::-;44125:16;44151:18;44172:17;44182:6;44172:9;:17::i;:::-;44151:38;;44214:1;44200:10;:15;44196:319;;;44249:1;44235:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44228:23;;;;;44196:319;44276:23;44316:10;44302:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44276:51;;44338:13;44362:122;44386:10;44378:5;:18;44362:122;;;44438:34;44458:6;44466:5;44438:19;:34::i;:::-;44422:6;44429:5;44422:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;44398:7;;;;;:::i;:::-;;;;44362:122;;;44501:6;44494:13;;;;;44064:456;;;;:::o;37584:87::-;37630:7;37657:6;;;;;;;;;;;37650:13;;37584:87;:::o;43911:147::-;43992:21;;:::i;:::-;44032:20;44044:7;44032:11;:20::i;:::-;44025:27;;43911:147;;;:::o;23811:98::-;23867:13;23896:7;23889:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23811:98;:::o;41087:50::-;;;;:::o;25221:274::-;25324:12;:10;:12::i;:::-;25312:24;;:8;:24;;;;25304:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25421:8;25376:18;:32;25395:12;:10;:12::i;:::-;25376:32;;;;;;;;;;;;;;;:42;25409:8;25376:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25470:8;25441:48;;25456:12;:10;:12::i;:::-;25441:48;;;25480:8;25441:48;;;;;;:::i;:::-;;;;;;;;25221:274;;:::o;42962:193::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43114:35:::1;43077:34;:72;;;;42962:193:::0;:::o;26236:319::-;26381:28;26391:4;26397:2;26401:7;26381:9;:28::i;:::-;26432:48;26455:4;26461:2;26465:7;26474:5;26432:22;:48::i;:::-;26416:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;26236:319;;;;:::o;23972:394::-;24070:13;24111:16;24119:7;24111;:16::i;:::-;24095:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;24201:21;24225:10;:8;:10::i;:::-;24201:34;;24280:1;24262:7;24256:21;:25;:104;;;;;;;;;;;;;;;;;24317:7;24326:18;:7;:16;:18::i;:::-;24300:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24256:104;24242:118;;;23972:394;;;:::o;30659:43::-;;;;:::o;43547:107::-;43605:7;43628:20;43642:5;43628:13;:20::i;:::-;43621:27;;43547:107;;;:::o;25558:186::-;25680:4;25703:18;:25;25722:5;25703:25;;;;;;;;;;;;;;;:35;25729:8;25703:35;;;;;;;;;;;;;;;;;;;;;;;;;25696:42;;25558:186;;;;:::o;38484:192::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38593:1:::1;38573:22;;:8;:22;;;;38565:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38649:19;38659:8;38649:9;:19::i;:::-;38484:192:::0;:::o;42734:115::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42832:11:::1;42810:19;:33;;;;42734:115:::0;:::o;14481:98::-;14534:7;14561:10;14554:17;;14481:98;:::o;306:157::-;391:4;430:25;415:40;;;:11;:40;;;;408:47;;306:157;;;:::o;26905:98::-;26970:27;26980:2;26984:8;26970:27;;;;;;;;;;;;:9;:27::i;:::-;26905:98;;:::o;26794:105::-;26851:4;26881:12;;26871:7;:22;26864:29;;26794:105;;;:::o;30481:172::-;30605:2;30578:15;:24;30594:7;30578:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30639:7;30635:2;30619:28;;30628:5;30619:28;;;;;;;;;;;;30481:172;;;:::o;28846:1529::-;28943:35;28981:20;28993:7;28981:11;:20::i;:::-;28943:58;;29010:22;29052:13;:18;;;29036:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;29105:12;:10;:12::i;:::-;29081:36;;:20;29093:7;29081:11;:20::i;:::-;:36;;;29036:81;:142;;;;29128:50;29145:13;:18;;;29165:12;:10;:12::i;:::-;29128:16;:50::i;:::-;29036:142;29010:169;;29204:17;29188:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;29336:4;29314:26;;:13;:18;;;:26;;;29298:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;29425:1;29411:16;;:2;:16;;;;29403:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29478:43;29500:4;29506:2;29510:7;29519:1;29478:21;:43::i;:::-;29578:49;29595:1;29599:7;29608:13;:18;;;29578:8;:49::i;:::-;29666:1;29636:12;:18;29649:4;29636:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29702:1;29674:12;:16;29687:2;29674:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29733:43;;;;;;;;29748:2;29733:43;;;;;;29759:15;29733:43;;;;;29710:11;:20;29722:7;29710:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30004:19;30036:1;30026:7;:11;;;;:::i;:::-;30004:33;;30089:1;30048:43;;:11;:24;30060:11;30048:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;30044:236;;;30106:20;30114:11;30106:7;:20::i;:::-;30102:171;;;30166:97;;;;;;;;30193:13;:18;;;30166:97;;;;;;30224:13;:28;;;30166:97;;;;;30139:11;:24;30151:11;30139:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30102:171;30044:236;30312:7;30308:2;30293:27;;30302:4;30293:27;;;;;;;;;;;;30327:42;30348:4;30354:2;30358:7;30367:1;30327:20;:42::i;:::-;28936:1439;;;28846:1529;;;:::o;30807:838::-;30869:25;30897:24;;30869:52;;30947:1;30936:8;:12;30928:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30984:16;31034:1;31023:8;31003:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;30984:51;;31070:1;31057:10;:14;;;;:::i;:::-;31046:8;:25;31042:73;;;31106:1;31093:10;:14;;;;:::i;:::-;31082:25;;31042:73;31230:17;31238:8;31230:7;:17::i;:::-;31222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31302:9;31314:17;31302:29;;31297:297;31338:8;31333:1;:13;31297:297;;31397:1;31366:33;;:11;:14;31378:1;31366:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;31362:225;;;31412:31;31446:14;31458:1;31446:11;:14::i;:::-;31412:48;;31488:89;;;;;;;;31515:9;:14;;;31488:89;;;;;;31542:9;:24;;;31488:89;;;;;31471:11;:14;31483:1;31471:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31401:186;31362:225;31348:3;;;;;:::i;:::-;;;;31297:297;;;;31638:1;31627:8;:12;;;;:::i;:::-;31600:24;:39;;;;30862:783;;30807:838;:::o;22819:606::-;22895:21;;:::i;:::-;22936:16;22944:7;22936;:16::i;:::-;22928:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23008:26;23056:12;23045:7;:23;23041:93;;23125:1;23110:12;23100:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;23079:47;;23041:93;23147:12;23162:7;23147:22;;23142:212;23179:18;23171:4;:26;23142:212;;23216:31;23250:11;:17;23262:4;23250:17;;;;;;;;;;;23216:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23306:1;23280:28;;:9;:14;;;:28;;;23276:71;;23328:9;23321:16;;;;;;;23276:71;23207:147;23199:6;;;;;:::i;:::-;;;;23142:212;;;;23362:57;;;;;;;;;;:::i;:::-;;;;;;;;22819:606;;;;:::o;38684:173::-;38740:16;38759:6;;;;;;;;;;;38740:25;;38785:8;38776:6;;:17;;;;;;;;;;;;;;;;;;38840:8;38809:40;;38830:8;38809:40;;;;;;;;;;;;38729:128;38684:173;:::o;32188:690::-;32325:4;32342:15;:2;:13;;;:15::i;:::-;32338:535;;;32397:2;32381:36;;;32418:12;:10;:12::i;:::-;32432:4;32438:7;32447:5;32381:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32368:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32629:1;32612:6;:13;:18;32608:215;;;32645:61;;;;;;;;;;:::i;:::-;;;;;;;;32608:215;32791:6;32785:13;32776:6;32772:2;32768:15;32761:38;32368:464;32513:45;;;32503:55;;;:6;:55;;;;32496:62;;;;;32338:535;32861:4;32854:11;;32188:690;;;;;;;:::o;43799:106::-;43859:13;43888:11;43881:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43799:106;:::o;14948:723::-;15004:13;15234:1;15225:5;:10;15221:53;;;15252:10;;;;;;;;;;;;;;;;;;;;;15221:53;15284:12;15299:5;15284:20;;15315:14;15340:78;15355:1;15347:4;:9;15340:78;;15373:8;;;;;:::i;:::-;;;;15404:2;15396:10;;;;;:::i;:::-;;;15340:78;;;15428:19;15460:6;15450:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15428:39;;15478:154;15494:1;15485:5;:10;15478:154;;15522:1;15512:11;;;;;:::i;:::-;;;15589:2;15581:5;:10;;;;:::i;:::-;15568:2;:24;;;;:::i;:::-;15555:39;;15538:6;15545;15538:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15618:2;15609:11;;;;;:::i;:::-;;;15478:154;;;15656:6;15642:21;;;;;14948:723;;;;:::o;22573:240::-;22634:7;22683:1;22666:19;;:5;:19;;;;22650:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22774:12;:19;22787:5;22774:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;22766:41;;22759:48;;22573:240;;;:::o;27342:1272::-;27447:20;27470:12;;27447:35;;27511:1;27497:16;;:2;:16;;;;27489:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27688:21;27696:12;27688:7;:21::i;:::-;27687:22;27679:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27770:12;27758:8;:24;;27750:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27830:61;27860:1;27864:2;27868:12;27882:8;27830:21;:61::i;:::-;27900:30;27933:12;:16;27946:2;27933:16;;;;;;;;;;;;;;;27900:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27975:119;;;;;;;;28025:8;27995:11;:19;;;:39;;;;:::i;:::-;27975:119;;;;;;28078:8;28043:11;:24;;;:44;;;;:::i;:::-;27975:119;;;;;27956:12;:16;27969:2;27956:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28129:43;;;;;;;;28144:2;28129:43;;;;;;28155:15;28129:43;;;;;28101:11;:25;28113:12;28101:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28181:20;28204:12;28181:35;;28230:9;28225:281;28249:8;28245:1;:12;28225:281;;;28303:12;28299:2;28278:38;;28295:1;28278:38;;;;;;;;;;;;28343:59;28374:1;28378:2;28382:12;28396:5;28343:22;:59::i;:::-;28325:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;28484:14;;;;;:::i;:::-;;;;28259:3;;;;;:::i;:::-;;;;28225:281;;;;28529:12;28514;:27;;;;28548:60;28577:1;28581:2;28585:12;28599:8;28548:20;:60::i;:::-;27440:1174;;;27342:1272;;;:::o;33340:141::-;;;;;:::o;33867:140::-;;;;;:::o;1178:387::-;1238:4;1446:12;1513:7;1501:20;1493:28;;1556:1;1549:4;:8;1542:15;;;1178:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:179::-;7042:10;7063:46;7105:3;7097:6;7063:46;:::i;:::-;7141:4;7136:3;7132:14;7118:28;;6973:179;;;;:::o;7158:108::-;7235:24;7253:5;7235:24;:::i;:::-;7230:3;7223:37;7158:108;;:::o;7272:118::-;7359:24;7377:5;7359:24;:::i;:::-;7354:3;7347:37;7272:118;;:::o;7426:732::-;7545:3;7574:54;7622:5;7574:54;:::i;:::-;7644:86;7723:6;7718:3;7644:86;:::i;:::-;7637:93;;7754:56;7804:5;7754:56;:::i;:::-;7833:7;7864:1;7849:284;7874:6;7871:1;7868:13;7849:284;;;7950:6;7944:13;7977:63;8036:3;8021:13;7977:63;:::i;:::-;7970:70;;8063:60;8116:6;8063:60;:::i;:::-;8053:70;;7909:224;7896:1;7893;7889:9;7884:14;;7849:284;;;7853:14;8149:3;8142:10;;7550:608;;;7426:732;;;;:::o;8164:109::-;8245:21;8260:5;8245:21;:::i;:::-;8240:3;8233:34;8164:109;;:::o;8279:360::-;8365:3;8393:38;8425:5;8393:38;:::i;:::-;8447:70;8510:6;8505:3;8447:70;:::i;:::-;8440:77;;8526:52;8571:6;8566:3;8559:4;8552:5;8548:16;8526:52;:::i;:::-;8603:29;8625:6;8603:29;:::i;:::-;8598:3;8594:39;8587:46;;8369:270;8279:360;;;;:::o;8645:364::-;8733:3;8761:39;8794:5;8761:39;:::i;:::-;8816:71;8880:6;8875:3;8816:71;:::i;:::-;8809:78;;8896:52;8941:6;8936:3;8929:4;8922:5;8918:16;8896:52;:::i;:::-;8973:29;8995:6;8973:29;:::i;:::-;8968:3;8964:39;8957:46;;8737:272;8645:364;;;;:::o;9015:377::-;9121:3;9149:39;9182:5;9149:39;:::i;:::-;9204:89;9286:6;9281:3;9204:89;:::i;:::-;9197:96;;9302:52;9347:6;9342:3;9335:4;9328:5;9324:16;9302:52;:::i;:::-;9379:6;9374:3;9370:16;9363:23;;9125:267;9015:377;;;;:::o;9398:366::-;9540:3;9561:67;9625:2;9620:3;9561:67;:::i;:::-;9554:74;;9637:93;9726:3;9637:93;:::i;:::-;9755:2;9750:3;9746:12;9739:19;;9398:366;;;:::o;9770:::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:::-;10284:3;10305:67;10369:2;10364:3;10305:67;:::i;:::-;10298:74;;10381:93;10470:3;10381:93;:::i;:::-;10499:2;10494:3;10490:12;10483:19;;10142:366;;;:::o;10514:::-;10656:3;10677:67;10741:2;10736:3;10677:67;:::i;:::-;10670:74;;10753:93;10842:3;10753:93;:::i;:::-;10871:2;10866:3;10862:12;10855:19;;10514:366;;;:::o;10886:::-;11028:3;11049:67;11113:2;11108:3;11049:67;:::i;:::-;11042:74;;11125:93;11214:3;11125:93;:::i;:::-;11243:2;11238:3;11234:12;11227:19;;10886:366;;;:::o;11258:::-;11400:3;11421:67;11485:2;11480:3;11421:67;:::i;:::-;11414:74;;11497:93;11586:3;11497:93;:::i;:::-;11615:2;11610:3;11606:12;11599:19;;11258:366;;;:::o;11630:::-;11772:3;11793:67;11857:2;11852:3;11793:67;:::i;:::-;11786:74;;11869:93;11958:3;11869:93;:::i;:::-;11987:2;11982:3;11978:12;11971:19;;11630:366;;;:::o;12002:::-;12144:3;12165:67;12229:2;12224:3;12165:67;:::i;:::-;12158:74;;12241:93;12330:3;12241:93;:::i;:::-;12359:2;12354:3;12350:12;12343:19;;12002:366;;;:::o;12374:::-;12516:3;12537:67;12601:2;12596:3;12537:67;:::i;:::-;12530:74;;12613:93;12702:3;12613:93;:::i;:::-;12731:2;12726:3;12722:12;12715:19;;12374:366;;;:::o;12746:::-;12888:3;12909:67;12973:2;12968:3;12909:67;:::i;:::-;12902:74;;12985:93;13074:3;12985:93;:::i;:::-;13103:2;13098:3;13094:12;13087:19;;12746:366;;;:::o;13118:::-;13260:3;13281:67;13345:2;13340:3;13281:67;:::i;:::-;13274:74;;13357:93;13446:3;13357:93;:::i;:::-;13475:2;13470:3;13466:12;13459:19;;13118:366;;;:::o;13490:::-;13632:3;13653:67;13717:2;13712:3;13653:67;:::i;:::-;13646:74;;13729:93;13818:3;13729:93;:::i;:::-;13847:2;13842:3;13838:12;13831:19;;13490:366;;;:::o;13862:::-;14004:3;14025:67;14089:2;14084:3;14025:67;:::i;:::-;14018:74;;14101:93;14190:3;14101:93;:::i;:::-;14219:2;14214:3;14210:12;14203:19;;13862:366;;;:::o;14234:::-;14376:3;14397:67;14461:2;14456:3;14397:67;:::i;:::-;14390:74;;14473:93;14562:3;14473:93;:::i;:::-;14591:2;14586:3;14582:12;14575:19;;14234:366;;;:::o;14606:::-;14748:3;14769:67;14833:2;14828:3;14769:67;:::i;:::-;14762:74;;14845:93;14934:3;14845:93;:::i;:::-;14963:2;14958:3;14954:12;14947:19;;14606:366;;;:::o;14978:::-;15120:3;15141:67;15205:2;15200:3;15141:67;:::i;:::-;15134:74;;15217:93;15306:3;15217:93;:::i;:::-;15335:2;15330:3;15326:12;15319:19;;14978:366;;;:::o;15350:::-;15492:3;15513:67;15577:2;15572:3;15513:67;:::i;:::-;15506:74;;15589:93;15678:3;15589:93;:::i;:::-;15707:2;15702:3;15698:12;15691:19;;15350:366;;;:::o;15722:::-;15864:3;15885:67;15949:2;15944:3;15885:67;:::i;:::-;15878:74;;15961:93;16050:3;15961:93;:::i;:::-;16079:2;16074:3;16070:12;16063:19;;15722:366;;;:::o;16094:::-;16236:3;16257:67;16321:2;16316:3;16257:67;:::i;:::-;16250:74;;16333:93;16422:3;16333:93;:::i;:::-;16451:2;16446:3;16442:12;16435:19;;16094:366;;;:::o;16466:398::-;16625:3;16646:83;16727:1;16722:3;16646:83;:::i;:::-;16639:90;;16738:93;16827:3;16738:93;:::i;:::-;16856:1;16851:3;16847:11;16840:18;;16466:398;;;:::o;16870:366::-;17012:3;17033:67;17097:2;17092:3;17033:67;:::i;:::-;17026:74;;17109:93;17198:3;17109:93;:::i;:::-;17227:2;17222:3;17218:12;17211:19;;16870:366;;;:::o;17242:::-;17384:3;17405:67;17469:2;17464:3;17405:67;:::i;:::-;17398:74;;17481:93;17570:3;17481:93;:::i;:::-;17599:2;17594:3;17590:12;17583:19;;17242:366;;;:::o;17614:::-;17756:3;17777:67;17841:2;17836:3;17777:67;:::i;:::-;17770:74;;17853:93;17942:3;17853:93;:::i;:::-;17971:2;17966:3;17962:12;17955:19;;17614:366;;;:::o;17986:::-;18128:3;18149:67;18213:2;18208:3;18149:67;:::i;:::-;18142:74;;18225:93;18314:3;18225:93;:::i;:::-;18343:2;18338:3;18334:12;18327:19;;17986:366;;;:::o;18358:::-;18500:3;18521:67;18585:2;18580:3;18521:67;:::i;:::-;18514:74;;18597:93;18686:3;18597:93;:::i;:::-;18715:2;18710:3;18706:12;18699:19;;18358:366;;;:::o;18730:::-;18872:3;18893:67;18957:2;18952:3;18893:67;:::i;:::-;18886:74;;18969:93;19058:3;18969:93;:::i;:::-;19087:2;19082:3;19078:12;19071:19;;18730:366;;;:::o;19102:::-;19244:3;19265:67;19329:2;19324:3;19265:67;:::i;:::-;19258:74;;19341:93;19430:3;19341:93;:::i;:::-;19459:2;19454:3;19450:12;19443:19;;19102:366;;;:::o;19474:::-;19616:3;19637:67;19701:2;19696:3;19637:67;:::i;:::-;19630:74;;19713:93;19802:3;19713:93;:::i;:::-;19831:2;19826:3;19822:12;19815:19;;19474:366;;;:::o;19846:::-;19988:3;20009:67;20073:2;20068:3;20009:67;:::i;:::-;20002:74;;20085:93;20174:3;20085:93;:::i;:::-;20203:2;20198:3;20194:12;20187:19;;19846:366;;;:::o;20218:::-;20360:3;20381:67;20445:2;20440:3;20381:67;:::i;:::-;20374:74;;20457:93;20546:3;20457:93;:::i;:::-;20575:2;20570:3;20566:12;20559:19;;20218:366;;;:::o;20660:527::-;20819:4;20814:3;20810:14;20906:4;20899:5;20895:16;20889:23;20925:63;20982:4;20977:3;20973:14;20959:12;20925:63;:::i;:::-;20834:164;21090:4;21083:5;21079:16;21073:23;21109:61;21164:4;21159:3;21155:14;21141:12;21109:61;:::i;:::-;21008:172;20788:399;20660:527;;:::o;21193:108::-;21270:24;21288:5;21270:24;:::i;:::-;21265:3;21258:37;21193:108;;:::o;21307:118::-;21394:24;21412:5;21394:24;:::i;:::-;21389:3;21382:37;21307:118;;:::o;21431:105::-;21506:23;21523:5;21506:23;:::i;:::-;21501:3;21494:36;21431:105;;:::o;21542:435::-;21722:3;21744:95;21835:3;21826:6;21744:95;:::i;:::-;21737:102;;21856:95;21947:3;21938:6;21856:95;:::i;:::-;21849:102;;21968:3;21961:10;;21542:435;;;;;:::o;21983:379::-;22167:3;22189:147;22332:3;22189:147;:::i;:::-;22182:154;;22353:3;22346:10;;21983:379;;;:::o;22368:222::-;22461:4;22499:2;22488:9;22484:18;22476:26;;22512:71;22580:1;22569:9;22565:17;22556:6;22512:71;:::i;:::-;22368:222;;;;:::o;22596:640::-;22791:4;22829:3;22818:9;22814:19;22806:27;;22843:71;22911:1;22900:9;22896:17;22887:6;22843:71;:::i;:::-;22924:72;22992:2;22981:9;22977:18;22968:6;22924:72;:::i;:::-;23006;23074:2;23063:9;23059:18;23050:6;23006:72;:::i;:::-;23125:9;23119:4;23115:20;23110:2;23099:9;23095:18;23088:48;23153:76;23224:4;23215:6;23153:76;:::i;:::-;23145:84;;22596:640;;;;;;;:::o;23242:373::-;23385:4;23423:2;23412:9;23408:18;23400:26;;23472:9;23466:4;23462:20;23458:1;23447:9;23443:17;23436:47;23500:108;23603:4;23594:6;23500:108;:::i;:::-;23492:116;;23242:373;;;;:::o;23621:210::-;23708:4;23746:2;23735:9;23731:18;23723:26;;23759:65;23821:1;23810:9;23806:17;23797:6;23759:65;:::i;:::-;23621:210;;;;:::o;23837:313::-;23950:4;23988:2;23977:9;23973:18;23965:26;;24037:9;24031:4;24027:20;24023:1;24012:9;24008:17;24001:47;24065:78;24138:4;24129:6;24065:78;:::i;:::-;24057:86;;23837:313;;;;:::o;24156:419::-;24322:4;24360:2;24349:9;24345:18;24337:26;;24409:9;24403:4;24399:20;24395:1;24384:9;24380:17;24373:47;24437:131;24563:4;24437:131;:::i;:::-;24429:139;;24156:419;;;:::o;24581:::-;24747:4;24785:2;24774:9;24770:18;24762:26;;24834:9;24828:4;24824:20;24820:1;24809:9;24805:17;24798:47;24862:131;24988:4;24862:131;:::i;:::-;24854:139;;24581:419;;;:::o;25006:::-;25172:4;25210:2;25199:9;25195:18;25187:26;;25259:9;25253:4;25249:20;25245:1;25234:9;25230:17;25223:47;25287:131;25413:4;25287:131;:::i;:::-;25279:139;;25006:419;;;:::o;25431:::-;25597:4;25635:2;25624:9;25620:18;25612:26;;25684:9;25678:4;25674:20;25670:1;25659:9;25655:17;25648:47;25712:131;25838:4;25712:131;:::i;:::-;25704:139;;25431:419;;;:::o;25856:::-;26022:4;26060:2;26049:9;26045:18;26037:26;;26109:9;26103:4;26099:20;26095:1;26084:9;26080:17;26073:47;26137:131;26263:4;26137:131;:::i;:::-;26129:139;;25856:419;;;:::o;26281:::-;26447:4;26485:2;26474:9;26470:18;26462:26;;26534:9;26528:4;26524:20;26520:1;26509:9;26505:17;26498:47;26562:131;26688:4;26562:131;:::i;:::-;26554:139;;26281:419;;;:::o;26706:::-;26872:4;26910:2;26899:9;26895:18;26887:26;;26959:9;26953:4;26949:20;26945:1;26934:9;26930:17;26923:47;26987:131;27113:4;26987:131;:::i;:::-;26979:139;;26706:419;;;:::o;27131:::-;27297:4;27335:2;27324:9;27320:18;27312:26;;27384:9;27378:4;27374:20;27370:1;27359:9;27355:17;27348:47;27412:131;27538:4;27412:131;:::i;:::-;27404:139;;27131:419;;;:::o;27556:::-;27722:4;27760:2;27749:9;27745:18;27737:26;;27809:9;27803:4;27799:20;27795:1;27784:9;27780:17;27773:47;27837:131;27963:4;27837:131;:::i;:::-;27829:139;;27556:419;;;:::o;27981:::-;28147:4;28185:2;28174:9;28170:18;28162:26;;28234:9;28228:4;28224:20;28220:1;28209:9;28205:17;28198:47;28262:131;28388:4;28262:131;:::i;:::-;28254:139;;27981:419;;;:::o;28406:::-;28572:4;28610:2;28599:9;28595:18;28587:26;;28659:9;28653:4;28649:20;28645:1;28634:9;28630:17;28623:47;28687:131;28813:4;28687:131;:::i;:::-;28679:139;;28406:419;;;:::o;28831:::-;28997:4;29035:2;29024:9;29020:18;29012:26;;29084:9;29078:4;29074:20;29070:1;29059:9;29055:17;29048:47;29112:131;29238:4;29112:131;:::i;:::-;29104:139;;28831:419;;;:::o;29256:::-;29422:4;29460:2;29449:9;29445:18;29437:26;;29509:9;29503:4;29499:20;29495:1;29484:9;29480:17;29473:47;29537:131;29663:4;29537:131;:::i;:::-;29529:139;;29256:419;;;:::o;29681:::-;29847:4;29885:2;29874:9;29870:18;29862:26;;29934:9;29928:4;29924:20;29920:1;29909:9;29905:17;29898:47;29962:131;30088:4;29962:131;:::i;:::-;29954:139;;29681:419;;;:::o;30106:::-;30272:4;30310:2;30299:9;30295:18;30287:26;;30359:9;30353:4;30349:20;30345:1;30334:9;30330:17;30323:47;30387:131;30513:4;30387:131;:::i;:::-;30379:139;;30106:419;;;:::o;30531:::-;30697:4;30735:2;30724:9;30720:18;30712:26;;30784:9;30778:4;30774:20;30770:1;30759:9;30755:17;30748:47;30812:131;30938:4;30812:131;:::i;:::-;30804:139;;30531:419;;;:::o;30956:::-;31122:4;31160:2;31149:9;31145:18;31137:26;;31209:9;31203:4;31199:20;31195:1;31184:9;31180:17;31173:47;31237:131;31363:4;31237:131;:::i;:::-;31229:139;;30956:419;;;:::o;31381:::-;31547:4;31585:2;31574:9;31570:18;31562:26;;31634:9;31628:4;31624:20;31620:1;31609:9;31605:17;31598:47;31662:131;31788:4;31662:131;:::i;:::-;31654:139;;31381:419;;;:::o;31806:::-;31972:4;32010:2;31999:9;31995:18;31987:26;;32059:9;32053:4;32049:20;32045:1;32034:9;32030:17;32023:47;32087:131;32213:4;32087:131;:::i;:::-;32079:139;;31806:419;;;:::o;32231:::-;32397:4;32435:2;32424:9;32420:18;32412:26;;32484:9;32478:4;32474:20;32470:1;32459:9;32455:17;32448:47;32512:131;32638:4;32512:131;:::i;:::-;32504:139;;32231:419;;;:::o;32656:::-;32822:4;32860:2;32849:9;32845:18;32837:26;;32909:9;32903:4;32899:20;32895:1;32884:9;32880:17;32873:47;32937:131;33063:4;32937:131;:::i;:::-;32929:139;;32656:419;;;:::o;33081:::-;33247:4;33285:2;33274:9;33270:18;33262:26;;33334:9;33328:4;33324:20;33320:1;33309:9;33305:17;33298:47;33362:131;33488:4;33362:131;:::i;:::-;33354:139;;33081:419;;;:::o;33506:::-;33672:4;33710:2;33699:9;33695:18;33687:26;;33759:9;33753:4;33749:20;33745:1;33734:9;33730:17;33723:47;33787:131;33913:4;33787:131;:::i;:::-;33779:139;;33506:419;;;:::o;33931:::-;34097:4;34135:2;34124:9;34120:18;34112:26;;34184:9;34178:4;34174:20;34170:1;34159:9;34155:17;34148:47;34212:131;34338:4;34212:131;:::i;:::-;34204:139;;33931:419;;;:::o;34356:::-;34522:4;34560:2;34549:9;34545:18;34537:26;;34609:9;34603:4;34599:20;34595:1;34584:9;34580:17;34573:47;34637:131;34763:4;34637:131;:::i;:::-;34629:139;;34356:419;;;:::o;34781:::-;34947:4;34985:2;34974:9;34970:18;34962:26;;35034:9;35028:4;35024:20;35020:1;35009:9;35005:17;34998:47;35062:131;35188:4;35062:131;:::i;:::-;35054:139;;34781:419;;;:::o;35206:::-;35372:4;35410:2;35399:9;35395:18;35387:26;;35459:9;35453:4;35449:20;35445:1;35434:9;35430:17;35423:47;35487:131;35613:4;35487:131;:::i;:::-;35479:139;;35206:419;;;:::o;35631:::-;35797:4;35835:2;35824:9;35820:18;35812:26;;35884:9;35878:4;35874:20;35870:1;35859:9;35855:17;35848:47;35912:131;36038:4;35912:131;:::i;:::-;35904:139;;35631:419;;;:::o;36056:::-;36222:4;36260:2;36249:9;36245:18;36237:26;;36309:9;36303:4;36299:20;36295:1;36284:9;36280:17;36273:47;36337:131;36463:4;36337:131;:::i;:::-;36329:139;;36056:419;;;:::o;36481:346::-;36636:4;36674:2;36663:9;36659:18;36651:26;;36687:133;36817:1;36806:9;36802:17;36793:6;36687:133;:::i;:::-;36481:346;;;;:::o;36833:222::-;36926:4;36964:2;36953:9;36949:18;36941:26;;36977:71;37045:1;37034:9;37030:17;37021:6;36977:71;:::i;:::-;36833:222;;;;:::o;37061:129::-;37095:6;37122:20;;:::i;:::-;37112:30;;37151:33;37179:4;37171:6;37151:33;:::i;:::-;37061:129;;;:::o;37196:75::-;37229:6;37262:2;37256:9;37246:19;;37196:75;:::o;37277:307::-;37338:4;37428:18;37420:6;37417:30;37414:56;;;37450:18;;:::i;:::-;37414:56;37488:29;37510:6;37488:29;:::i;:::-;37480:37;;37572:4;37566;37562:15;37554:23;;37277:307;;;:::o;37590:132::-;37657:4;37680:3;37672:11;;37710:4;37705:3;37701:14;37693:22;;37590:132;;;:::o;37728:114::-;37795:6;37829:5;37823:12;37813:22;;37728:114;;;:::o;37848:98::-;37899:6;37933:5;37927:12;37917:22;;37848:98;;;:::o;37952:99::-;38004:6;38038:5;38032:12;38022:22;;37952:99;;;:::o;38057:113::-;38127:4;38159;38154:3;38150:14;38142:22;;38057:113;;;:::o;38176:184::-;38275:11;38309:6;38304:3;38297:19;38349:4;38344:3;38340:14;38325:29;;38176:184;;;;:::o;38366:168::-;38449:11;38483:6;38478:3;38471:19;38523:4;38518:3;38514:14;38499:29;;38366:168;;;;:::o;38540:147::-;38641:11;38678:3;38663:18;;38540:147;;;;:::o;38693:169::-;38777:11;38811:6;38806:3;38799:19;38851:4;38846:3;38842:14;38827:29;;38693:169;;;;:::o;38868:148::-;38970:11;39007:3;38992:18;;38868:148;;;;:::o;39022:273::-;39062:3;39081:20;39099:1;39081:20;:::i;:::-;39076:25;;39115:20;39133:1;39115:20;:::i;:::-;39110:25;;39237:1;39201:34;39197:42;39194:1;39191:49;39188:75;;;39243:18;;:::i;:::-;39188:75;39287:1;39284;39280:9;39273:16;;39022:273;;;;:::o;39301:305::-;39341:3;39360:20;39378:1;39360:20;:::i;:::-;39355:25;;39394:20;39412:1;39394:20;:::i;:::-;39389:25;;39548:1;39480:66;39476:74;39473:1;39470:81;39467:107;;;39554:18;;:::i;:::-;39467:107;39598:1;39595;39591:9;39584:16;;39301:305;;;;:::o;39612:185::-;39652:1;39669:20;39687:1;39669:20;:::i;:::-;39664:25;;39703:20;39721:1;39703:20;:::i;:::-;39698:25;;39742:1;39732:35;;39747:18;;:::i;:::-;39732:35;39789:1;39786;39782:9;39777:14;;39612:185;;;;:::o;39803:348::-;39843:7;39866:20;39884:1;39866:20;:::i;:::-;39861:25;;39900:20;39918:1;39900:20;:::i;:::-;39895:25;;40088:1;40020:66;40016:74;40013:1;40010:81;40005:1;39998:9;39991:17;39987:105;39984:131;;;40095:18;;:::i;:::-;39984:131;40143:1;40140;40136:9;40125:20;;39803:348;;;;:::o;40157:191::-;40197:4;40217:20;40235:1;40217:20;:::i;:::-;40212:25;;40251:20;40269:1;40251:20;:::i;:::-;40246:25;;40290:1;40287;40284:8;40281:34;;;40295:18;;:::i;:::-;40281:34;40340:1;40337;40333:9;40325:17;;40157:191;;;;:::o;40354:::-;40394:4;40414:20;40432:1;40414:20;:::i;:::-;40409:25;;40448:20;40466:1;40448:20;:::i;:::-;40443:25;;40487:1;40484;40481:8;40478:34;;;40492:18;;:::i;:::-;40478:34;40537:1;40534;40530:9;40522:17;;40354:191;;;;:::o;40551:96::-;40588:7;40617:24;40635:5;40617:24;:::i;:::-;40606:35;;40551:96;;;:::o;40653:90::-;40687:7;40730:5;40723:13;40716:21;40705:32;;40653:90;;;:::o;40749:149::-;40785:7;40825:66;40818:5;40814:78;40803:89;;40749:149;;;:::o;40904:118::-;40941:7;40981:34;40974:5;40970:46;40959:57;;40904:118;;;:::o;41028:126::-;41065:7;41105:42;41098:5;41094:54;41083:65;;41028:126;;;:::o;41160:77::-;41197:7;41226:5;41215:16;;41160:77;;;:::o;41243:101::-;41279:7;41319:18;41312:5;41308:30;41297:41;;41243:101;;;:::o;41350:154::-;41434:6;41429:3;41424;41411:30;41496:1;41487:6;41482:3;41478:16;41471:27;41350:154;;;:::o;41510:307::-;41578:1;41588:113;41602:6;41599:1;41596:13;41588:113;;;41687:1;41682:3;41678:11;41672:18;41668:1;41663:3;41659:11;41652:39;41624:2;41621:1;41617:10;41612:15;;41588:113;;;41719:6;41716:1;41713:13;41710:101;;;41799:1;41790:6;41785:3;41781:16;41774:27;41710:101;41559:258;41510:307;;;:::o;41823:171::-;41862:3;41885:24;41903:5;41885:24;:::i;:::-;41876:33;;41931:4;41924:5;41921:15;41918:41;;;41939:18;;:::i;:::-;41918:41;41986:1;41979:5;41975:13;41968:20;;41823:171;;;:::o;42000:320::-;42044:6;42081:1;42075:4;42071:12;42061:22;;42128:1;42122:4;42118:12;42149:18;42139:81;;42205:4;42197:6;42193:17;42183:27;;42139:81;42267:2;42259:6;42256:14;42236:18;42233:38;42230:84;;;42286:18;;:::i;:::-;42230:84;42051:269;42000:320;;;:::o;42326:281::-;42409:27;42431:4;42409:27;:::i;:::-;42401:6;42397:40;42539:6;42527:10;42524:22;42503:18;42491:10;42488:34;42485:62;42482:88;;;42550:18;;:::i;:::-;42482:88;42590:10;42586:2;42579:22;42369:238;42326:281;;:::o;42613:233::-;42652:3;42675:24;42693:5;42675:24;:::i;:::-;42666:33;;42721:66;42714:5;42711:77;42708:103;;;42791:18;;:::i;:::-;42708:103;42838:1;42831:5;42827:13;42820:20;;42613:233;;;:::o;42852:176::-;42884:1;42901:20;42919:1;42901:20;:::i;:::-;42896:25;;42935:20;42953:1;42935:20;:::i;:::-;42930:25;;42974:1;42964:35;;42979:18;;:::i;:::-;42964:35;43020:1;43017;43013:9;43008:14;;42852:176;;;;:::o;43034:180::-;43082:77;43079:1;43072:88;43179:4;43176:1;43169:15;43203:4;43200:1;43193:15;43220:180;43268:77;43265:1;43258:88;43365:4;43362:1;43355:15;43389:4;43386:1;43379:15;43406:180;43454:77;43451:1;43444:88;43551:4;43548:1;43541:15;43575:4;43572:1;43565:15;43592:180;43640:77;43637:1;43630:88;43737:4;43734:1;43727:15;43761:4;43758:1;43751:15;43778:180;43826:77;43823:1;43816:88;43923:4;43920:1;43913:15;43947:4;43944:1;43937:15;43964:117;44073:1;44070;44063:12;44087:117;44196:1;44193;44186:12;44210:117;44319:1;44316;44309:12;44333:117;44442:1;44439;44432:12;44456:117;44565:1;44562;44555:12;44579:117;44688:1;44685;44678:12;44702:102;44743:6;44794:2;44790:7;44785:2;44778:5;44774:14;44770:28;44760:38;;44702:102;;;:::o;44810:221::-;44950:34;44946:1;44938:6;44934:14;44927:58;45019:4;45014:2;45006:6;45002:15;44995:29;44810:221;:::o;45037:225::-;45177:34;45173:1;45165:6;45161:14;45154:58;45246:8;45241:2;45233:6;45229:15;45222:33;45037:225;:::o;45268:229::-;45408:34;45404:1;45396:6;45392:14;45385:58;45477:12;45472:2;45464:6;45460:15;45453:37;45268:229;:::o;45503:222::-;45643:34;45639:1;45631:6;45627:14;45620:58;45712:5;45707:2;45699:6;45695:15;45688:30;45503:222;:::o;45731:224::-;45871:34;45867:1;45859:6;45855:14;45848:58;45940:7;45935:2;45927:6;45923:15;45916:32;45731:224;:::o;45961:236::-;46101:34;46097:1;46089:6;46085:14;46078:58;46170:19;46165:2;46157:6;46153:15;46146:44;45961:236;:::o;46203:169::-;46343:21;46339:1;46331:6;46327:14;46320:45;46203:169;:::o;46378:244::-;46518:34;46514:1;46506:6;46502:14;46495:58;46587:27;46582:2;46574:6;46570:15;46563:52;46378:244;:::o;46628:174::-;46768:26;46764:1;46756:6;46752:14;46745:50;46628:174;:::o;46808:230::-;46948:34;46944:1;46936:6;46932:14;46925:58;47017:13;47012:2;47004:6;47000:15;46993:38;46808:230;:::o;47044:225::-;47184:34;47180:1;47172:6;47168:14;47161:58;47253:8;47248:2;47240:6;47236:15;47229:33;47044:225;:::o;47275:182::-;47415:34;47411:1;47403:6;47399:14;47392:58;47275:182;:::o;47463:::-;47603:34;47599:1;47591:6;47587:14;47580:58;47463:182;:::o;47651:234::-;47791:34;47787:1;47779:6;47775:14;47768:58;47860:17;47855:2;47847:6;47843:15;47836:42;47651:234;:::o;47891:177::-;48031:29;48027:1;48019:6;48015:14;48008:53;47891:177;:::o;48074:176::-;48214:28;48210:1;48202:6;48198:14;48191:52;48074:176;:::o;48256:237::-;48396:34;48392:1;48384:6;48380:14;48373:58;48465:20;48460:2;48452:6;48448:15;48441:45;48256:237;:::o;48499:170::-;48639:22;48635:1;48627:6;48623:14;48616:46;48499:170;:::o;48675:221::-;48815:34;48811:1;48803:6;48799:14;48792:58;48884:4;48879:2;48871:6;48867:15;48860:29;48675:221;:::o;48902:114::-;;:::o;49022:166::-;49162:18;49158:1;49150:6;49146:14;49139:42;49022:166;:::o;49194:238::-;49334:34;49330:1;49322:6;49318:14;49311:58;49403:21;49398:2;49390:6;49386:15;49379:46;49194:238;:::o;49438:179::-;49578:31;49574:1;49566:6;49562:14;49555:55;49438:179;:::o;49623:220::-;49763:34;49759:1;49751:6;49747:14;49740:58;49832:3;49827:2;49819:6;49815:15;49808:28;49623:220;:::o;49849:233::-;49989:34;49985:1;49977:6;49973:14;49966:58;50058:16;50053:2;50045:6;50041:15;50034:41;49849:233;:::o;50088:225::-;50228:34;50224:1;50216:6;50212:14;50205:58;50297:8;50292:2;50284:6;50280:15;50273:33;50088:225;:::o;50319:181::-;50459:33;50455:1;50447:6;50443:14;50436:57;50319:181;:::o;50506:234::-;50646:34;50642:1;50634:6;50630:14;50623:58;50715:17;50710:2;50702:6;50698:15;50691:42;50506:234;:::o;50746:232::-;50886:34;50882:1;50874:6;50870:14;50863:58;50955:15;50950:2;50942:6;50938:15;50931:40;50746:232;:::o;50984:221::-;51124:34;51120:1;51112:6;51108:14;51101:58;51193:4;51188:2;51180:6;51176:15;51169:29;50984:221;:::o;51211:122::-;51284:24;51302:5;51284:24;:::i;:::-;51277:5;51274:35;51264:63;;51323:1;51320;51313:12;51264:63;51211:122;:::o;51339:116::-;51409:21;51424:5;51409:21;:::i;:::-;51402:5;51399:32;51389:60;;51445:1;51442;51435:12;51389:60;51339:116;:::o;51461:120::-;51533:23;51550:5;51533:23;:::i;:::-;51526:5;51523:34;51513:62;;51571:1;51568;51561:12;51513:62;51461:120;:::o;51587:122::-;51660:24;51678:5;51660:24;:::i;:::-;51653:5;51650:35;51640:63;;51699:1;51696;51689:12;51640:63;51587:122;:::o

Swarm Source

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