ETH Price: $2,507.28 (+0.64%)

Token

wolfette (wolfette)
 

Overview

Max Total Supply

247 wolfette

Holders

242

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 wolfette
0xe34adfe80f36d725226f2b1fc8a0f2c0a27bbdbb
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:
Wolfversewolfette

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */

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


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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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


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

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


abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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


library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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



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


 
 
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata{
    using Address for address;
    using Strings for uint256;
    
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // 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;
    
    // metadata api after reveal
    string baseUri = "ipfs://QmYjsnxoazyMNX1Kxn4qBnzn4cMeV1UkbjmidocxMDgAjF/";

    // metadata api before reveal
    string notRevealedUri = "ipfs://QmPZ9gZ3fM3SJuPJp1vQt5HMRfMx5E8oLdwDaLdaE67dUu"; 

    bool public revealed = false; // for reveal NFT

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @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 ||
            super.supportsInterface(interfaceId);
    }

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

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

        if(revealed == false){
          // string memory baseURI = _baseURI();
            return bytes(notRevealedUri).length > 0 ? string(abi.encodePacked(notRevealedUri)) : "";
        }
        else{
            return bytes(baseUri).length > 0 ? string(abi.encodePacked(baseUri, tokenId.toString(),".json")) : "";
        } 
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: 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 {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: 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`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;
    
        emit Transfer(address(0), to, tokenId);
    }

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

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }
    
    

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

    /**
     * @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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}


 contract Wolfversewolfette is ERC721, Ownable{
    IERC721 public token;

    uint256 public totalSupply = 0; // Total Minted Supply
    uint256 private constant totalSale = 3333; // total NFTs
    uint256 public constant reserved = 333;  //  reserved for admin
    uint256 public mintPrice = 5 * 10 ** 16;  // minting price 0.05 ETH
    bool public publicSaleIsActive = false;
    bool public privateSaleIsActive = false; 
    uint256 public admin_mint = 0; // for counting admin mint
    uint256 public user_mint = 0; // for counting users mint
    

    mapping(address => uint256) public whiteListMinted;
    mapping(address => bool) private freeMinted;

    constructor(address _token) ERC721("wolfette", "wolfette"){
        token = IERC721(_token);
    }

    function freeMinting() public{
        address sender = msg.sender;
        uint256 bal = token.balanceOf(sender); 

        require(bal > 0, "You are not able for free mint.");
        require(whiteListMinted[sender] + 1 <= 9, "Max NFT per wallet exceeded.");
        require(user_mint + 1 <= totalSale - reserved, "Max Limit To Total Sale");
        require(freeMinted[sender] == false, "You already your free NFT.");

        whiteListMinted[sender] += 1;
        freeMinted[sender] = true;
        totalSupply += 1;
        user_mint += 1;
        _safeMint(sender, totalSupply);
                 
    }    

    function mintByUser(uint256 quantity, bytes memory signature) public payable{
        if(privateSaleIsActive == true){
            require(verify(owner(),msg.sender,signature) == true, "User is not whitelisted");
            require(whiteListMinted[msg.sender] + quantity <= 3, "Max NFT per wallet exceeded in Private Sale");
            whiteListMinted[msg.sender] += quantity;
        }
        else{
            require(whiteListMinted[msg.sender] + quantity <= 9, "Max NFT per wallet exceeded.");
            require(publicSaleIsActive == true, "Public Sale is not Started");
            require(quantity > 0 && quantity <=3, "Invalid Mint Quantity");
            require(user_mint + quantity <= totalSale - reserved, "Max Limit To Total Sale");
            whiteListMinted[msg.sender] += quantity;
        }
        
        require( msg.value >= mintPrice * quantity, "Invalid Price To Mint");

        (bool success,) = owner().call{value: msg.value}("");
        
        if(!success) {
            revert("Payment Sending Failed");
        }
        else{
            for (uint256 i=0; i < quantity; i++) {
                totalSupply++;
                user_mint++;
                _safeMint(msg.sender,totalSupply);
            }     
        }
    } 


    function getMessageHash(address _to)  public pure returns (bytes32) {
        return keccak256(abi.encodePacked(_to));
    }

    function getEthSignedMessageHash(bytes32 _messageHash) private pure returns (bytes32){
        /* Signature is produced by signing a keccak256 hash with the following format: "\x19Ethereum Signed Message\n" + len(msg) + msg */
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash));
    }

    function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature)  private pure returns (address) {
        (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature);
        return ecrecover(_ethSignedMessageHash, v, r, s);
    }

    function splitSignature(bytes memory sig) private pure returns (bytes32 r, bytes32 s, uint8 v) {
        require(sig.length == 65, "invalid signature length");

        assembly {
            /*
            First 32 bytes stores the length of the signature add(sig, 32) = pointer of sig + 32 effectively, skips first 32 bytes of signature
            mload(p) loads next 32 bytes starting at the memory address p into memory
            */

            // first 32 bytes, after the length prefix
            r := mload(add(sig, 32))
            // second 32 bytes
            s := mload(add(sig, 64))
            // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(sig, 96)))
        }

        // implicitly return (r, s, v)
    }

    function verify(address _signer,address _to,bytes memory signature) private pure returns (bool) {
        bytes32 messageHash = getMessageHash(_to);
        bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);
        return recoverSigner(ethSignedMessageHash, signature) == _signer;
    }
     
    
    function setPublicSaleStatus() external onlyOwner {
        publicSaleIsActive = !publicSaleIsActive;
    }

    function setPrivateSaleStatus() external onlyOwner {
        privateSaleIsActive = !privateSaleIsActive;
    }


    function reveal() public onlyOwner {
       revealed = !revealed;
    }
    
    function setMintPrice(uint256 newPrice) external onlyOwner {
        mintPrice = newPrice;
    }
    
    function _setbaseURI(string memory _baseUri) external onlyOwner{
         baseUri = _baseUri;
    }
    
    function mintByOwner(address _to, uint256 quantity) public onlyOwner {
      
        require(admin_mint + quantity <= reserved, "Max Limit To Admin Mint");

        for (uint256 i=0; i<quantity; i++) {
             totalSupply++;
             admin_mint++;    
            _safeMint(_to,totalSupply);
        }   
    }
    
    function batchMintByOwner(address[] memory mintAddressList,uint256[] memory quantityList) external onlyOwner {
        require (mintAddressList.length == quantityList.length, "The length should be same");

        for (uint256 i=0; i<mintAddressList.length; i++) {
            mintByOwner(mintAddressList[i], quantityList[i]);
        }
    }
     
   
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"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":"string","name":"_baseUri","type":"string"}],"name":"_setbaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin_mint","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":"address[]","name":"mintAddressList","type":"address[]"},{"internalType":"uint256[]","name":"quantityList","type":"uint256[]"}],"name":"batchMintByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","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":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mintByUser","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"privateSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPrivateSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicSaleStatus","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":[],"name":"token","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"user_mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60e0604052603660808181529062002d8b60a03980516200002991600691602090910190620001b4565b5060405180606001604052806035815260200162002dc16035913980516200005a91600791602090910190620001b4565b506008805460ff191690556000600a81905566b1a2bc2ec50000600b55600c805461ffff19169055600d819055600e553480156200009757600080fd5b5060405162002df638038062002df6833981016040819052620000ba916200025a565b604080518082018252600880825267776f6c666574746560c01b602080840182815285518087019096529285528401528151919291620000fd91600091620001b4565b50805162000113906001906020840190620001b4565b505050620001306200012a6200015660201b60201c565b6200015a565b600980546001600160a01b0319166001600160a01b0392909216919091179055620002c7565b3390565b600880546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001c2906200028a565b90600052602060002090601f016020900481019282620001e6576000855562000231565b82601f106200020157805160ff191683800117855562000231565b8280016001018555821562000231579182015b828111156200023157825182559160200191906001019062000214565b506200023f92915062000243565b5090565b5b808211156200023f576000815560010162000244565b6000602082840312156200026c578081fd5b81516001600160a01b038116811462000283578182fd5b9392505050565b6002810460018216806200029f57607f821691505b60208210811415620002c157634e487b7160e01b600052602260045260246000fd5b50919050565b612ab480620002d76000396000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c514610581578063f2fde38b146105a1578063f4a0a528146105c1578063fc0c546a146105e1578063fe60d12c146105f65761020f565b8063b88d4fde1461050c578063bf22225a1461052c578063c87b56dd14610541578063db8ff1fd146105615761020f565b806395d89b41116100e757806395d89b4114610498578063a22cb465146104ad578063a475b5dd146104cd578063a5835670146104e2578063a8d81cca146104f75761020f565b806370a0823114610439578063715018a6146104595780637dfed9fe1461046e5780638da5cb5b146104835761020f565b80633542aee21161019b5780634985fb5b1161016a5780634985fb5b146103bc57806351830227146103dc5780635a0a6782146103f15780636352211e146104045780636817c76c146104245761020f565b80633542aee2146103475780633ed50bb31461036757806342842e0e146103875780634915c83c146103a75761020f565b8063095ea7b3116101e2578063095ea7b3146102ae5780630fcf2e75146102d057806318160ddd146102e55780631f5ac1b21461030757806323b872dd146103275761020f565b806301ffc9a71461021457806304737a011461024a57806306fdde031461025f578063081812fc14610281575b600080fd5b34801561022057600080fd5b5061023461022f366004611ed1565b61060b565b6040516102419190612161565b60405180910390f35b34801561025657600080fd5b50610234610653565b34801561026b57600080fd5b50610274610661565b6040516102419190612193565b34801561028d57600080fd5b506102a161029c366004611f4f565b6106f3565b6040516102419190612110565b3480156102ba57600080fd5b506102ce6102c9366004611dea565b61073f565b005b3480156102dc57600080fd5b506102346107d7565b3480156102f157600080fd5b506102fa6107e0565b604051610241919061216c565b34801561031357600080fd5b506102fa610322366004611cc3565b6107e6565b34801561033357600080fd5b506102ce610342366004611d0f565b610816565b34801561035357600080fd5b506102ce610362366004611dea565b61084e565b34801561037357600080fd5b506102fa610382366004611cc3565b61090f565b34801561039357600080fd5b506102ce6103a2366004611d0f565b610921565b3480156103b357600080fd5b506102ce61093c565b3480156103c857600080fd5b506102ce6103d7366004611f09565b610998565b3480156103e857600080fd5b506102346109ee565b6102ce6103ff366004611f7f565b6109f7565b34801561041057600080fd5b506102a161041f366004611f4f565b610c9e565b34801561043057600080fd5b506102fa610cd3565b34801561044557600080fd5b506102fa610454366004611cc3565b610cd9565b34801561046557600080fd5b506102ce610d1d565b34801561047a57600080fd5b506102ce610d68565b34801561048f57600080fd5b506102a1610dbb565b3480156104a457600080fd5b50610274610dcf565b3480156104b957600080fd5b506102ce6104c8366004611db0565b610dde565b3480156104d957600080fd5b506102ce610eac565b3480156104ee57600080fd5b506102ce610eff565b34801561050357600080fd5b506102fa6110f2565b34801561051857600080fd5b506102ce610527366004611d4a565b6110f8565b34801561053857600080fd5b506102fa611131565b34801561054d57600080fd5b5061027461055c366004611f4f565b611137565b34801561056d57600080fd5b506102ce61057c366004611e13565b611203565b34801561058d57600080fd5b5061023461059c366004611cdd565b6112d9565b3480156105ad57600080fd5b506102ce6105bc366004611cc3565b611307565b3480156105cd57600080fd5b506102ce6105dc366004611f4f565b611378565b3480156105ed57600080fd5b506102a16113bc565b34801561060257600080fd5b506102fa6113cb565b60006001600160e01b031982166380ac58cd60e01b148061063c57506001600160e01b03198216635b5e139f60e01b145b8061064b575061064b826113d1565b90505b919050565b600c54610100900460ff1681565b606060008054610670906129bc565b80601f016020809104026020016040519081016040528092919081815260200182805461069c906129bc565b80156106e95780601f106106be576101008083540402835291602001916106e9565b820191906000526020600020905b8154815290600101906020018083116106cc57829003601f168201915b5050505050905090565b60006106fe826113ea565b6107235760405162461bcd60e51b815260040161071a906125ef565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061074a82610c9e565b9050806001600160a01b0316836001600160a01b0316141561077e5760405162461bcd60e51b815260040161071a906127a5565b806001600160a01b0316610790611407565b6001600160a01b031614806107ac57506107ac8161059c611407565b6107c85760405162461bcd60e51b815260040161071a90612463565b6107d2838361140b565b505050565b600c5460ff1681565b600a5481565b6000816040516020016107f9919061207e565b604051602081830303815290604052805190602001209050919050565b610827610821611407565b82611479565b6108435760405162461bcd60e51b815260040161071a906127e6565b6107d28383836114fe565b610856611407565b6001600160a01b0316610867610dbb565b6001600160a01b03161461088d5760405162461bcd60e51b815260040161071a9061263b565b61014d81600d5461089e919061292e565b11156108bc5760405162461bcd60e51b815260040161071a906121a6565b60005b818110156107d257600a80549060006108d7836129f7565b9091555050600d80549060006108ec836129f7565b91905055506108fd83600a5461162b565b80610907816129f7565b9150506108bf565b600f6020526000908152604090205481565b6107d2838383604051806020016040528060008152506110f8565b610944611407565b6001600160a01b0316610955610dbb565b6001600160a01b03161461097b5760405162461bcd60e51b815260040161071a9061263b565b600c805461ff001981166101009182900460ff1615909102179055565b6109a0611407565b6001600160a01b03166109b1610dbb565b6001600160a01b0316146109d75760405162461bcd60e51b815260040161071a9061263b565b80516109ea906006906020840190611b29565b5050565b60085460ff1681565b600c5460ff61010090910416151560011415610aa657610a1f610a18610dbb565b3383611645565b1515600114610a405760405162461bcd60e51b815260040161071a9061242c565b336000908152600f6020526040902054600390610a5e90849061292e565b1115610a7c5760405162461bcd60e51b815260040161071a9061231a565b336000908152600f602052604081208054849290610a9b90849061292e565b90915550610b959050565b336000908152600f6020526040902054600990610ac490849061292e565b1115610ae25760405162461bcd60e51b815260040161071a906122e3565b600c5460ff161515600114610b095760405162461bcd60e51b815260040161071a9061286e565b600082118015610b1a575060038211155b610b365760405162461bcd60e51b815260040161071a906126a7565b610b4461014d610d05612979565b82600e54610b52919061292e565b1115610b705760405162461bcd60e51b815260040161071a906126d6565b336000908152600f602052604081208054849290610b8f90849061292e565b90915550505b81600b54610ba3919061295a565b341015610bc25760405162461bcd60e51b815260040161071a906128a5565b6000610bcc610dbb565b6001600160a01b031634604051610be29061210d565b60006040518083038185875af1925050503d8060008114610c1f576040519150601f19603f3d011682016040523d82523d6000602084013e610c24565b606091505b5050905080610c455760405162461bcd60e51b815260040161071a9061250a565b60005b83811015610c9857600a8054906000610c60836129f7565b9091555050600e8054906000610c75836129f7565b9190505550610c8633600a5461162b565b80610c90816129f7565b915050610c48565b50505050565b6000818152600260205260408120546001600160a01b03168061064b5760405162461bcd60e51b815260040161071a9061253a565b600b5481565b60006001600160a01b038216610d015760405162461bcd60e51b815260040161071a906124c0565b506001600160a01b031660009081526003602052604090205490565b610d25611407565b6001600160a01b0316610d36610dbb565b6001600160a01b031614610d5c5760405162461bcd60e51b815260040161071a9061263b565b610d666000611688565b565b610d70611407565b6001600160a01b0316610d81610dbb565b6001600160a01b031614610da75760405162461bcd60e51b815260040161071a9061263b565b600c805460ff19811660ff90911615179055565b60085461010090046001600160a01b031690565b606060018054610670906129bc565b610de6611407565b6001600160a01b0316826001600160a01b03161415610e175760405162461bcd60e51b815260040161071a906123a9565b8060056000610e24611407565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610e68611407565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ea09190612161565b60405180910390a35050565b610eb4611407565b6001600160a01b0316610ec5610dbb565b6001600160a01b031614610eeb5760405162461bcd60e51b815260040161071a9061263b565b6008805460ff19811660ff90911615179055565b6009546040516370a0823160e01b815233916000916001600160a01b03909116906370a0823190610f34908590600401612110565b60206040518083038186803b158015610f4c57600080fd5b505afa158015610f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f849190611f67565b905060008111610fa65760405162461bcd60e51b815260040161071a906121dd565b6001600160a01b0382166000908152600f6020526040902054600990610fcd90600161292e565b1115610feb5760405162461bcd60e51b815260040161071a906122e3565b610ff961014d610d05612979565b600e5461100790600161292e565b11156110255760405162461bcd60e51b815260040161071a906126d6565b6001600160a01b03821660009081526010602052604090205460ff161561105e5760405162461bcd60e51b815260040161071a90612670565b6001600160a01b0382166000908152600f6020526040812080546001929061108790849061292e565b90915550506001600160a01b0382166000908152601060205260408120805460ff19166001908117909155600a8054919290916110c590849061292e565b925050819055506001600e60008282546110df919061292e565b925050819055506109ea82600a5461162b565b600e5481565b611109611103611407565b83611479565b6111255760405162461bcd60e51b815260040161071a906127e6565b610c98848484846116e2565b600d5481565b6060611142826113ea565b61115e5760405162461bcd60e51b815260040161071a90612756565b60085460ff166111bc57600060078054611177906129bc565b90501161119357604051806020016040528060008152506111b5565b60076040516020016111a5919061209b565b6040516020818303038152906040525b905061064e565b6000600680546111cb906129bc565b9050116111e757604051806020016040528060008152506111b5565b60066111f283611715565b6040516020016111a59291906120a7565b61120b611407565b6001600160a01b031661121c610dbb565b6001600160a01b0316146112425760405162461bcd60e51b815260040161071a9061263b565b80518251146112635760405162461bcd60e51b815260040161071a90612583565b60005b82518110156107d2576112c783828151811061129257634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106112ba57634e487b7160e01b600052603260045260246000fd5b602002602001015161084e565b806112d1816129f7565b915050611266565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61130f611407565b6001600160a01b0316611320610dbb565b6001600160a01b0316146113465760405162461bcd60e51b815260040161071a9061263b565b6001600160a01b03811661136c5760405162461bcd60e51b815260040161071a90612266565b61137581611688565b50565b611380611407565b6001600160a01b0316611391610dbb565b6001600160a01b0316146113b75760405162461bcd60e51b815260040161071a9061263b565b600b55565b6009546001600160a01b031681565b61014d81565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061144082610c9e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611484826113ea565b6114a05760405162461bcd60e51b815260040161071a906123e0565b60006114ab83610c9e565b9050806001600160a01b0316846001600160a01b031614806114e65750836001600160a01b03166114db846106f3565b6001600160a01b0316145b806114f657506114f681856112d9565b949350505050565b826001600160a01b031661151182610c9e565b6001600160a01b0316146115375760405162461bcd60e51b815260040161071a9061270d565b6001600160a01b03821661155d5760405162461bcd60e51b815260040161071a90612365565b6115688383836107d2565b61157360008261140b565b6001600160a01b038316600090815260036020526040812080546001929061159c908490612979565b90915550506001600160a01b03821660009081526003602052604081208054600192906115ca90849061292e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6109ea828260405180602001604052806000815250611830565b600080611651846107e6565b9050600061165e82611863565b9050856001600160a01b03166116748286611876565b6001600160a01b0316149695505050505050565b600880546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6116ed8484846114fe565b6116f9848484846118e5565b610c985760405162461bcd60e51b815260040161071a90612214565b60608161173a57506040805180820190915260018152600360fc1b602082015261064e565b8160005b8115611764578061174e816129f7565b915061175d9050600a83612946565b915061173e565b60008167ffffffffffffffff81111561178d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117b7576020820181803683370190505b5090505b84156114f6576117cc600183612979565b91506117d9600a86612a12565b6117e490603061292e565b60f81b81838151811061180757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611829600a86612946565b94506117bb565b61183a8383611a00565b61184760008484846118e5565b6107d25760405162461bcd60e51b815260040161071a90612214565b6000816040516020016107f991906120dc565b60008060008061188585611adf565b925092509250600186828585604051600081526020016040526040516118ae9493929190612175565b6020604051602081039080840390855afa1580156118d0573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006118f9846001600160a01b0316611b23565b156119f557836001600160a01b031663150b7a02611915611407565b8786866040518563ffffffff1660e01b81526004016119379493929190612124565b602060405180830381600087803b15801561195157600080fd5b505af1925050508015611981575060408051601f3d908101601f1916820190925261197e91810190611eed565b60015b6119db573d8080156119af576040519150601f19603f3d011682016040523d82523d6000602084013e6119b4565b606091505b5080516119d35760405162461bcd60e51b815260040161071a90612214565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506114f6565b506001949350505050565b6001600160a01b038216611a265760405162461bcd60e51b815260040161071a906125ba565b611a2f816113ea565b15611a4c5760405162461bcd60e51b815260040161071a906122ac565b611a58600083836107d2565b6001600160a01b0382166000908152600360205260408120805460019290611a8190849061292e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008060008351604114611b055760405162461bcd60e51b815260040161071a90612837565b50505060208101516040820151606090920151909260009190911a90565b3b151590565b828054611b35906129bc565b90600052602060002090601f016020900481019282611b575760008555611b9d565b82601f10611b7057805160ff1916838001178555611b9d565b82800160010185558215611b9d579182015b82811115611b9d578251825591602001919060010190611b82565b50611ba9929150611bad565b5090565b5b80821115611ba95760008155600101611bae565b600067ffffffffffffffff831115611bdc57611bdc612a52565b611bef601f8401601f19166020016128d4565b9050828152838383011115611c0357600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461064e57600080fd5b600082601f830112611c41578081fd5b81356020611c56611c51836128fe565b6128d4565b8281528181019085830183850287018401881015611c72578586fd5b855b85811015611c9057813584529284019290840190600101611c74565b5090979650505050505050565b600082601f830112611cad578081fd5b611cbc83833560208501611bc2565b9392505050565b600060208284031215611cd4578081fd5b611cbc82611c1a565b60008060408385031215611cef578081fd5b611cf883611c1a565b9150611d0660208401611c1a565b90509250929050565b600080600060608486031215611d23578081fd5b611d2c84611c1a565b9250611d3a60208501611c1a565b9150604084013590509250925092565b60008060008060808587031215611d5f578081fd5b611d6885611c1a565b9350611d7660208601611c1a565b925060408501359150606085013567ffffffffffffffff811115611d98578182fd5b611da487828801611c9d565b91505092959194509250565b60008060408385031215611dc2578182fd5b611dcb83611c1a565b915060208301358015158114611ddf578182fd5b809150509250929050565b60008060408385031215611dfc578182fd5b611e0583611c1a565b946020939093013593505050565b60008060408385031215611e25578182fd5b823567ffffffffffffffff80821115611e3c578384fd5b818501915085601f830112611e4f578384fd5b81356020611e5f611c51836128fe565b82815281810190858301838502870184018b1015611e7b578889fd5b8896505b84871015611ea457611e9081611c1a565b835260019690960195918301918301611e7f565b5096505086013592505080821115611eba578283fd5b50611ec785828601611c31565b9150509250929050565b600060208284031215611ee2578081fd5b8135611cbc81612a68565b600060208284031215611efe578081fd5b8151611cbc81612a68565b600060208284031215611f1a578081fd5b813567ffffffffffffffff811115611f30578182fd5b8201601f81018413611f40578182fd5b6114f684823560208401611bc2565b600060208284031215611f60578081fd5b5035919050565b600060208284031215611f78578081fd5b5051919050565b60008060408385031215611f91578182fd5b82359150602083013567ffffffffffffffff811115611fae578182fd5b611ec785828601611c9d565b60008151808452611fd2816020860160208601612990565b601f01601f19169290920160200192915050565b80546000906002810460018083168061200057607f831692505b602080841082141561202057634e487b7160e01b86526022600452602486fd5b818015612034576001811461204557612072565b60ff19861689528489019650612072565b61204e88612922565b60005b8681101561206a5781548b820152908501908301612051565b505084890196505b50505050505092915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b6000611cbc8284611fe6565b60006120b38285611fe6565b83516120c3818360208801612990565b64173539b7b760d91b9101908152600501949350505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061215790830184611fba565b9695505050505050565b901515815260200190565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252611cbc6020830184611fba565b60208082526017908201527f4d6178204c696d697420546f2041646d696e204d696e74000000000000000000604082015260600190565b6020808252601f908201527f596f7520617265206e6f742061626c6520666f722066726565206d696e742e00604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252601c908201527f4d6178204e4654207065722077616c6c65742065786365656465642e00000000604082015260600190565b6020808252602b908201527f4d6178204e4654207065722077616c6c657420657863656564656420696e205060408201526a7269766174652053616c6560a81b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526017908201527f55736572206973206e6f742077686974656c6973746564000000000000000000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526016908201527514185e5b595b9d0814d95b991a5b99c811985a5b195960521b604082015260600190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b60208082526019908201527f546865206c656e6774682073686f756c642062652073616d6500000000000000604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f596f7520616c726561647920796f75722066726565204e46542e000000000000604082015260600190565b602080825260159082015274496e76616c6964204d696e74205175616e7469747960581b604082015260600190565b60208082526017908201527f4d6178204c696d697420546f20546f74616c2053616c65000000000000000000604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526018908201527f696e76616c6964207369676e6174757265206c656e6774680000000000000000604082015260600190565b6020808252601a908201527f5075626c69632053616c65206973206e6f742053746172746564000000000000604082015260600190565b602080825260159082015274125b9d985b1a5908141c9a58d948151bc8135a5b9d605a1b604082015260600190565b60405181810167ffffffffffffffff811182821017156128f6576128f6612a52565b604052919050565b600067ffffffffffffffff82111561291857612918612a52565b5060209081020190565b60009081526020902090565b6000821982111561294157612941612a26565b500190565b60008261295557612955612a3c565b500490565b600081600019048311821515161561297457612974612a26565b500290565b60008282101561298b5761298b612a26565b500390565b60005b838110156129ab578181015183820152602001612993565b83811115610c985750506000910152565b6002810460018216806129d057607f821691505b602082108114156129f157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a0b57612a0b612a26565b5060010190565b600082612a2157612a21612a3c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461137557600080fdfea2646970667358221220220c9a415e1695a081c70061167cda61fa771018fe54d841d55c63d9d354e3a264736f6c63430008000033697066733a2f2f516d596a736e786f617a794d4e58314b786e3471426e7a6e34634d655631556b626a6d69646f63784d4467416a462f697066733a2f2f516d505a39675a33664d33534a75504a703176517435484d52664d783545386f4c647744614c6461453637645575000000000000000000000000b9efc0972c19ebb2e83988c073f083b67244d8a0

Deployed Bytecode

0x60806040526004361061020f5760003560e01c806370a0823111610118578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c514610581578063f2fde38b146105a1578063f4a0a528146105c1578063fc0c546a146105e1578063fe60d12c146105f65761020f565b8063b88d4fde1461050c578063bf22225a1461052c578063c87b56dd14610541578063db8ff1fd146105615761020f565b806395d89b41116100e757806395d89b4114610498578063a22cb465146104ad578063a475b5dd146104cd578063a5835670146104e2578063a8d81cca146104f75761020f565b806370a0823114610439578063715018a6146104595780637dfed9fe1461046e5780638da5cb5b146104835761020f565b80633542aee21161019b5780634985fb5b1161016a5780634985fb5b146103bc57806351830227146103dc5780635a0a6782146103f15780636352211e146104045780636817c76c146104245761020f565b80633542aee2146103475780633ed50bb31461036757806342842e0e146103875780634915c83c146103a75761020f565b8063095ea7b3116101e2578063095ea7b3146102ae5780630fcf2e75146102d057806318160ddd146102e55780631f5ac1b21461030757806323b872dd146103275761020f565b806301ffc9a71461021457806304737a011461024a57806306fdde031461025f578063081812fc14610281575b600080fd5b34801561022057600080fd5b5061023461022f366004611ed1565b61060b565b6040516102419190612161565b60405180910390f35b34801561025657600080fd5b50610234610653565b34801561026b57600080fd5b50610274610661565b6040516102419190612193565b34801561028d57600080fd5b506102a161029c366004611f4f565b6106f3565b6040516102419190612110565b3480156102ba57600080fd5b506102ce6102c9366004611dea565b61073f565b005b3480156102dc57600080fd5b506102346107d7565b3480156102f157600080fd5b506102fa6107e0565b604051610241919061216c565b34801561031357600080fd5b506102fa610322366004611cc3565b6107e6565b34801561033357600080fd5b506102ce610342366004611d0f565b610816565b34801561035357600080fd5b506102ce610362366004611dea565b61084e565b34801561037357600080fd5b506102fa610382366004611cc3565b61090f565b34801561039357600080fd5b506102ce6103a2366004611d0f565b610921565b3480156103b357600080fd5b506102ce61093c565b3480156103c857600080fd5b506102ce6103d7366004611f09565b610998565b3480156103e857600080fd5b506102346109ee565b6102ce6103ff366004611f7f565b6109f7565b34801561041057600080fd5b506102a161041f366004611f4f565b610c9e565b34801561043057600080fd5b506102fa610cd3565b34801561044557600080fd5b506102fa610454366004611cc3565b610cd9565b34801561046557600080fd5b506102ce610d1d565b34801561047a57600080fd5b506102ce610d68565b34801561048f57600080fd5b506102a1610dbb565b3480156104a457600080fd5b50610274610dcf565b3480156104b957600080fd5b506102ce6104c8366004611db0565b610dde565b3480156104d957600080fd5b506102ce610eac565b3480156104ee57600080fd5b506102ce610eff565b34801561050357600080fd5b506102fa6110f2565b34801561051857600080fd5b506102ce610527366004611d4a565b6110f8565b34801561053857600080fd5b506102fa611131565b34801561054d57600080fd5b5061027461055c366004611f4f565b611137565b34801561056d57600080fd5b506102ce61057c366004611e13565b611203565b34801561058d57600080fd5b5061023461059c366004611cdd565b6112d9565b3480156105ad57600080fd5b506102ce6105bc366004611cc3565b611307565b3480156105cd57600080fd5b506102ce6105dc366004611f4f565b611378565b3480156105ed57600080fd5b506102a16113bc565b34801561060257600080fd5b506102fa6113cb565b60006001600160e01b031982166380ac58cd60e01b148061063c57506001600160e01b03198216635b5e139f60e01b145b8061064b575061064b826113d1565b90505b919050565b600c54610100900460ff1681565b606060008054610670906129bc565b80601f016020809104026020016040519081016040528092919081815260200182805461069c906129bc565b80156106e95780601f106106be576101008083540402835291602001916106e9565b820191906000526020600020905b8154815290600101906020018083116106cc57829003601f168201915b5050505050905090565b60006106fe826113ea565b6107235760405162461bcd60e51b815260040161071a906125ef565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061074a82610c9e565b9050806001600160a01b0316836001600160a01b0316141561077e5760405162461bcd60e51b815260040161071a906127a5565b806001600160a01b0316610790611407565b6001600160a01b031614806107ac57506107ac8161059c611407565b6107c85760405162461bcd60e51b815260040161071a90612463565b6107d2838361140b565b505050565b600c5460ff1681565b600a5481565b6000816040516020016107f9919061207e565b604051602081830303815290604052805190602001209050919050565b610827610821611407565b82611479565b6108435760405162461bcd60e51b815260040161071a906127e6565b6107d28383836114fe565b610856611407565b6001600160a01b0316610867610dbb565b6001600160a01b03161461088d5760405162461bcd60e51b815260040161071a9061263b565b61014d81600d5461089e919061292e565b11156108bc5760405162461bcd60e51b815260040161071a906121a6565b60005b818110156107d257600a80549060006108d7836129f7565b9091555050600d80549060006108ec836129f7565b91905055506108fd83600a5461162b565b80610907816129f7565b9150506108bf565b600f6020526000908152604090205481565b6107d2838383604051806020016040528060008152506110f8565b610944611407565b6001600160a01b0316610955610dbb565b6001600160a01b03161461097b5760405162461bcd60e51b815260040161071a9061263b565b600c805461ff001981166101009182900460ff1615909102179055565b6109a0611407565b6001600160a01b03166109b1610dbb565b6001600160a01b0316146109d75760405162461bcd60e51b815260040161071a9061263b565b80516109ea906006906020840190611b29565b5050565b60085460ff1681565b600c5460ff61010090910416151560011415610aa657610a1f610a18610dbb565b3383611645565b1515600114610a405760405162461bcd60e51b815260040161071a9061242c565b336000908152600f6020526040902054600390610a5e90849061292e565b1115610a7c5760405162461bcd60e51b815260040161071a9061231a565b336000908152600f602052604081208054849290610a9b90849061292e565b90915550610b959050565b336000908152600f6020526040902054600990610ac490849061292e565b1115610ae25760405162461bcd60e51b815260040161071a906122e3565b600c5460ff161515600114610b095760405162461bcd60e51b815260040161071a9061286e565b600082118015610b1a575060038211155b610b365760405162461bcd60e51b815260040161071a906126a7565b610b4461014d610d05612979565b82600e54610b52919061292e565b1115610b705760405162461bcd60e51b815260040161071a906126d6565b336000908152600f602052604081208054849290610b8f90849061292e565b90915550505b81600b54610ba3919061295a565b341015610bc25760405162461bcd60e51b815260040161071a906128a5565b6000610bcc610dbb565b6001600160a01b031634604051610be29061210d565b60006040518083038185875af1925050503d8060008114610c1f576040519150601f19603f3d011682016040523d82523d6000602084013e610c24565b606091505b5050905080610c455760405162461bcd60e51b815260040161071a9061250a565b60005b83811015610c9857600a8054906000610c60836129f7565b9091555050600e8054906000610c75836129f7565b9190505550610c8633600a5461162b565b80610c90816129f7565b915050610c48565b50505050565b6000818152600260205260408120546001600160a01b03168061064b5760405162461bcd60e51b815260040161071a9061253a565b600b5481565b60006001600160a01b038216610d015760405162461bcd60e51b815260040161071a906124c0565b506001600160a01b031660009081526003602052604090205490565b610d25611407565b6001600160a01b0316610d36610dbb565b6001600160a01b031614610d5c5760405162461bcd60e51b815260040161071a9061263b565b610d666000611688565b565b610d70611407565b6001600160a01b0316610d81610dbb565b6001600160a01b031614610da75760405162461bcd60e51b815260040161071a9061263b565b600c805460ff19811660ff90911615179055565b60085461010090046001600160a01b031690565b606060018054610670906129bc565b610de6611407565b6001600160a01b0316826001600160a01b03161415610e175760405162461bcd60e51b815260040161071a906123a9565b8060056000610e24611407565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610e68611407565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ea09190612161565b60405180910390a35050565b610eb4611407565b6001600160a01b0316610ec5610dbb565b6001600160a01b031614610eeb5760405162461bcd60e51b815260040161071a9061263b565b6008805460ff19811660ff90911615179055565b6009546040516370a0823160e01b815233916000916001600160a01b03909116906370a0823190610f34908590600401612110565b60206040518083038186803b158015610f4c57600080fd5b505afa158015610f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f849190611f67565b905060008111610fa65760405162461bcd60e51b815260040161071a906121dd565b6001600160a01b0382166000908152600f6020526040902054600990610fcd90600161292e565b1115610feb5760405162461bcd60e51b815260040161071a906122e3565b610ff961014d610d05612979565b600e5461100790600161292e565b11156110255760405162461bcd60e51b815260040161071a906126d6565b6001600160a01b03821660009081526010602052604090205460ff161561105e5760405162461bcd60e51b815260040161071a90612670565b6001600160a01b0382166000908152600f6020526040812080546001929061108790849061292e565b90915550506001600160a01b0382166000908152601060205260408120805460ff19166001908117909155600a8054919290916110c590849061292e565b925050819055506001600e60008282546110df919061292e565b925050819055506109ea82600a5461162b565b600e5481565b611109611103611407565b83611479565b6111255760405162461bcd60e51b815260040161071a906127e6565b610c98848484846116e2565b600d5481565b6060611142826113ea565b61115e5760405162461bcd60e51b815260040161071a90612756565b60085460ff166111bc57600060078054611177906129bc565b90501161119357604051806020016040528060008152506111b5565b60076040516020016111a5919061209b565b6040516020818303038152906040525b905061064e565b6000600680546111cb906129bc565b9050116111e757604051806020016040528060008152506111b5565b60066111f283611715565b6040516020016111a59291906120a7565b61120b611407565b6001600160a01b031661121c610dbb565b6001600160a01b0316146112425760405162461bcd60e51b815260040161071a9061263b565b80518251146112635760405162461bcd60e51b815260040161071a90612583565b60005b82518110156107d2576112c783828151811061129257634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106112ba57634e487b7160e01b600052603260045260246000fd5b602002602001015161084e565b806112d1816129f7565b915050611266565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61130f611407565b6001600160a01b0316611320610dbb565b6001600160a01b0316146113465760405162461bcd60e51b815260040161071a9061263b565b6001600160a01b03811661136c5760405162461bcd60e51b815260040161071a90612266565b61137581611688565b50565b611380611407565b6001600160a01b0316611391610dbb565b6001600160a01b0316146113b75760405162461bcd60e51b815260040161071a9061263b565b600b55565b6009546001600160a01b031681565b61014d81565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061144082610c9e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611484826113ea565b6114a05760405162461bcd60e51b815260040161071a906123e0565b60006114ab83610c9e565b9050806001600160a01b0316846001600160a01b031614806114e65750836001600160a01b03166114db846106f3565b6001600160a01b0316145b806114f657506114f681856112d9565b949350505050565b826001600160a01b031661151182610c9e565b6001600160a01b0316146115375760405162461bcd60e51b815260040161071a9061270d565b6001600160a01b03821661155d5760405162461bcd60e51b815260040161071a90612365565b6115688383836107d2565b61157360008261140b565b6001600160a01b038316600090815260036020526040812080546001929061159c908490612979565b90915550506001600160a01b03821660009081526003602052604081208054600192906115ca90849061292e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6109ea828260405180602001604052806000815250611830565b600080611651846107e6565b9050600061165e82611863565b9050856001600160a01b03166116748286611876565b6001600160a01b0316149695505050505050565b600880546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6116ed8484846114fe565b6116f9848484846118e5565b610c985760405162461bcd60e51b815260040161071a90612214565b60608161173a57506040805180820190915260018152600360fc1b602082015261064e565b8160005b8115611764578061174e816129f7565b915061175d9050600a83612946565b915061173e565b60008167ffffffffffffffff81111561178d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117b7576020820181803683370190505b5090505b84156114f6576117cc600183612979565b91506117d9600a86612a12565b6117e490603061292e565b60f81b81838151811061180757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611829600a86612946565b94506117bb565b61183a8383611a00565b61184760008484846118e5565b6107d25760405162461bcd60e51b815260040161071a90612214565b6000816040516020016107f991906120dc565b60008060008061188585611adf565b925092509250600186828585604051600081526020016040526040516118ae9493929190612175565b6020604051602081039080840390855afa1580156118d0573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006118f9846001600160a01b0316611b23565b156119f557836001600160a01b031663150b7a02611915611407565b8786866040518563ffffffff1660e01b81526004016119379493929190612124565b602060405180830381600087803b15801561195157600080fd5b505af1925050508015611981575060408051601f3d908101601f1916820190925261197e91810190611eed565b60015b6119db573d8080156119af576040519150601f19603f3d011682016040523d82523d6000602084013e6119b4565b606091505b5080516119d35760405162461bcd60e51b815260040161071a90612214565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506114f6565b506001949350505050565b6001600160a01b038216611a265760405162461bcd60e51b815260040161071a906125ba565b611a2f816113ea565b15611a4c5760405162461bcd60e51b815260040161071a906122ac565b611a58600083836107d2565b6001600160a01b0382166000908152600360205260408120805460019290611a8190849061292e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008060008351604114611b055760405162461bcd60e51b815260040161071a90612837565b50505060208101516040820151606090920151909260009190911a90565b3b151590565b828054611b35906129bc565b90600052602060002090601f016020900481019282611b575760008555611b9d565b82601f10611b7057805160ff1916838001178555611b9d565b82800160010185558215611b9d579182015b82811115611b9d578251825591602001919060010190611b82565b50611ba9929150611bad565b5090565b5b80821115611ba95760008155600101611bae565b600067ffffffffffffffff831115611bdc57611bdc612a52565b611bef601f8401601f19166020016128d4565b9050828152838383011115611c0357600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461064e57600080fd5b600082601f830112611c41578081fd5b81356020611c56611c51836128fe565b6128d4565b8281528181019085830183850287018401881015611c72578586fd5b855b85811015611c9057813584529284019290840190600101611c74565b5090979650505050505050565b600082601f830112611cad578081fd5b611cbc83833560208501611bc2565b9392505050565b600060208284031215611cd4578081fd5b611cbc82611c1a565b60008060408385031215611cef578081fd5b611cf883611c1a565b9150611d0660208401611c1a565b90509250929050565b600080600060608486031215611d23578081fd5b611d2c84611c1a565b9250611d3a60208501611c1a565b9150604084013590509250925092565b60008060008060808587031215611d5f578081fd5b611d6885611c1a565b9350611d7660208601611c1a565b925060408501359150606085013567ffffffffffffffff811115611d98578182fd5b611da487828801611c9d565b91505092959194509250565b60008060408385031215611dc2578182fd5b611dcb83611c1a565b915060208301358015158114611ddf578182fd5b809150509250929050565b60008060408385031215611dfc578182fd5b611e0583611c1a565b946020939093013593505050565b60008060408385031215611e25578182fd5b823567ffffffffffffffff80821115611e3c578384fd5b818501915085601f830112611e4f578384fd5b81356020611e5f611c51836128fe565b82815281810190858301838502870184018b1015611e7b578889fd5b8896505b84871015611ea457611e9081611c1a565b835260019690960195918301918301611e7f565b5096505086013592505080821115611eba578283fd5b50611ec785828601611c31565b9150509250929050565b600060208284031215611ee2578081fd5b8135611cbc81612a68565b600060208284031215611efe578081fd5b8151611cbc81612a68565b600060208284031215611f1a578081fd5b813567ffffffffffffffff811115611f30578182fd5b8201601f81018413611f40578182fd5b6114f684823560208401611bc2565b600060208284031215611f60578081fd5b5035919050565b600060208284031215611f78578081fd5b5051919050565b60008060408385031215611f91578182fd5b82359150602083013567ffffffffffffffff811115611fae578182fd5b611ec785828601611c9d565b60008151808452611fd2816020860160208601612990565b601f01601f19169290920160200192915050565b80546000906002810460018083168061200057607f831692505b602080841082141561202057634e487b7160e01b86526022600452602486fd5b818015612034576001811461204557612072565b60ff19861689528489019650612072565b61204e88612922565b60005b8681101561206a5781548b820152908501908301612051565b505084890196505b50505050505092915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b6000611cbc8284611fe6565b60006120b38285611fe6565b83516120c3818360208801612990565b64173539b7b760d91b9101908152600501949350505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061215790830184611fba565b9695505050505050565b901515815260200190565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252611cbc6020830184611fba565b60208082526017908201527f4d6178204c696d697420546f2041646d696e204d696e74000000000000000000604082015260600190565b6020808252601f908201527f596f7520617265206e6f742061626c6520666f722066726565206d696e742e00604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252601c908201527f4d6178204e4654207065722077616c6c65742065786365656465642e00000000604082015260600190565b6020808252602b908201527f4d6178204e4654207065722077616c6c657420657863656564656420696e205060408201526a7269766174652053616c6560a81b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526017908201527f55736572206973206e6f742077686974656c6973746564000000000000000000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526016908201527514185e5b595b9d0814d95b991a5b99c811985a5b195960521b604082015260600190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b60208082526019908201527f546865206c656e6774682073686f756c642062652073616d6500000000000000604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f596f7520616c726561647920796f75722066726565204e46542e000000000000604082015260600190565b602080825260159082015274496e76616c6964204d696e74205175616e7469747960581b604082015260600190565b60208082526017908201527f4d6178204c696d697420546f20546f74616c2053616c65000000000000000000604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526018908201527f696e76616c6964207369676e6174757265206c656e6774680000000000000000604082015260600190565b6020808252601a908201527f5075626c69632053616c65206973206e6f742053746172746564000000000000604082015260600190565b602080825260159082015274125b9d985b1a5908141c9a58d948151bc8135a5b9d605a1b604082015260600190565b60405181810167ffffffffffffffff811182821017156128f6576128f6612a52565b604052919050565b600067ffffffffffffffff82111561291857612918612a52565b5060209081020190565b60009081526020902090565b6000821982111561294157612941612a26565b500190565b60008261295557612955612a3c565b500490565b600081600019048311821515161561297457612974612a26565b500290565b60008282101561298b5761298b612a26565b500390565b60005b838110156129ab578181015183820152602001612993565b83811115610c985750506000910152565b6002810460018216806129d057607f821691505b602082108114156129f157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a0b57612a0b612a26565b5060010190565b600082612a2157612a21612a3c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461137557600080fdfea2646970667358221220220c9a415e1695a081c70061167cda61fa771018fe54d841d55c63d9d354e3a264736f6c63430008000033

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

000000000000000000000000b9efc0972c19ebb2e83988c073f083b67244d8a0

-----Decoded View---------------
Arg [0] : _token (address): 0xB9EFc0972c19EBB2e83988C073F083b67244d8A0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b9efc0972c19ebb2e83988c073f083b67244d8a0


Deployed Bytecode Sourcemap

32553:5816:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20194:305;;;;;;;;;;-1:-1:-1;20194:305:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32943:39;;;;;;;;;;;;;:::i;21139:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22915:221::-;;;;;;;;;;-1:-1:-1;22915:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22438:411::-;;;;;;;;;;-1:-1:-1;22438:411:0;;;;;:::i;:::-;;:::i;:::-;;32898:38;;;;;;;;;;;;;:::i;32634:30::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35274:126::-;;;;;;;;;;-1:-1:-1;35274:126:0;;;;;:::i;:::-;;:::i;23805:339::-;;;;;;;;;;-1:-1:-1;23805:339:0;;;;;:::i;:::-;;:::i;37665:329::-;;;;;;;;;;-1:-1:-1;37665:329:0;;;;;:::i;:::-;;:::i;33123:50::-;;;;;;;;;;-1:-1:-1;33123:50:0;;;;;:::i;:::-;;:::i;24215:185::-;;;;;;;;;;-1:-1:-1;24215:185:0;;;;;:::i;:::-;;:::i;37235:112::-;;;;;;;;;;;;;:::i;37552:101::-;;;;;;;;;;-1:-1:-1;37552:101:0;;;;;:::i;:::-;;:::i;19835:28::-;;;;;;;;;;;;;:::i;33974:1289::-;;;;;;:::i;:::-;;:::i;20833:239::-;;;;;;;;;;-1:-1:-1;20833:239:0;;;;;:::i;:::-;;:::i;32825:39::-;;;;;;;;;;;;;:::i;20563:208::-;;;;;;;;;;-1:-1:-1;20563:208:0;;;;;:::i;:::-;;:::i;10279:103::-;;;;;;;;;;;;;:::i;37118:109::-;;;;;;;;;;;;;:::i;9628:87::-;;;;;;;;;;;;;:::i;21308:104::-;;;;;;;;;;;;;:::i;23208:295::-;;;;;;;;;;-1:-1:-1;23208:295:0;;;;;:::i;:::-;;:::i;37357:73::-;;;;;;;;;;;;;:::i;33340:622::-;;;;;;;;;;;;;:::i;33053:28::-;;;;;;;;;;;;;:::i;24471:328::-;;;;;;;;;;-1:-1:-1;24471:328:0;;;;;:::i;:::-;;:::i;32990:29::-;;;;;;;;;;;;;:::i;21489:523::-;;;;;;;;;;-1:-1:-1;21489:523:0;;;;;:::i;:::-;;:::i;38006:348::-;;;;;;;;;;-1:-1:-1;38006:348:0;;;;;:::i;:::-;;:::i;23574:164::-;;;;;;;;;;-1:-1:-1;23574:164:0;;;;;:::i;:::-;;:::i;10537:201::-;;;;;;;;;;-1:-1:-1;10537:201:0;;;;;:::i;:::-;;:::i;37442:98::-;;;;;;;;;;-1:-1:-1;37442:98:0;;;;;:::i;:::-;;:::i;32605:20::-;;;;;;;;;;;;;:::i;32756:38::-;;;;;;;;;;;;;:::i;20194:305::-;20296:4;-1:-1:-1;;;;;;20333:40:0;;-1:-1:-1;;;20333:40:0;;:105;;-1:-1:-1;;;;;;;20390:48:0;;-1:-1:-1;;;20390:48:0;20333:105;:158;;;;20455:36;20479:11;20455:23;:36::i;:::-;20313:178;;20194:305;;;;:::o;32943:39::-;;;;;;;;;:::o;21139:100::-;21193:13;21226:5;21219:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21139:100;:::o;22915:221::-;22991:7;23019:16;23027:7;23019;:16::i;:::-;23011:73;;;;-1:-1:-1;;;23011:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;23104:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23104:24:0;;22915:221::o;22438:411::-;22519:13;22535:23;22550:7;22535:14;:23::i;:::-;22519:39;;22583:5;-1:-1:-1;;;;;22577:11:0;:2;-1:-1:-1;;;;;22577:11:0;;;22569:57;;;;-1:-1:-1;;;22569:57:0;;;;;;;:::i;:::-;22677:5;-1:-1:-1;;;;;22661:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;22661:21:0;;:62;;;;22686:37;22703:5;22710:12;:10;:12::i;22686:37::-;22639:168;;;;-1:-1:-1;;;22639:168:0;;;;;;;:::i;:::-;22820:21;22829:2;22833:7;22820:8;:21::i;:::-;22438:411;;;:::o;32898:38::-;;;;;;:::o;32634:30::-;;;;:::o;35274:126::-;35333:7;35387:3;35370:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;35360:32;;;;;;35353:39;;35274:126;;;:::o;23805:339::-;24000:41;24019:12;:10;:12::i;:::-;24033:7;24000:18;:41::i;:::-;23992:103;;;;-1:-1:-1;;;23992:103:0;;;;;;;:::i;:::-;24108:28;24118:4;24124:2;24128:7;24108:9;:28::i;37665:329::-;9859:12;:10;:12::i;:::-;-1:-1:-1;;;;;9848:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9848:23:0;;9840:68;;;;-1:-1:-1;;;9840:68:0;;;;;;;:::i;:::-;32791:3:::1;37774:8;37761:10;;:21;;;;:::i;:::-;:33;;37753:69;;;;-1:-1:-1::0;;;37753:69:0::1;;;;;;;:::i;:::-;37840:9;37835:149;37855:8;37853:1;:10;37835:149;;;37886:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;37915:10:0::1;:12:::0;;;:10:::1;:12;::::0;::::1;:::i;:::-;;;;;;37946:26;37956:3;37960:11;;37946:9;:26::i;:::-;37865:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37835:149;;33123:50:::0;;;;;;;;;;;;;:::o;24215:185::-;24353:39;24370:4;24376:2;24380:7;24353:39;;;;;;;;;;;;:16;:39::i;37235:112::-;9859:12;:10;:12::i;:::-;-1:-1:-1;;;;;9848:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9848:23:0;;9840:68;;;;-1:-1:-1;;;9840:68:0;;;;;;;:::i;:::-;37320:19:::1;::::0;;-1:-1:-1;;37297:42:0;::::1;37320:19;::::0;;;::::1;;;37319:20;37297:42:::0;;::::1;;::::0;;37235:112::o;37552:101::-;9859:12;:10;:12::i;:::-;-1:-1:-1;;;;;9848:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9848:23:0;;9840:68;;;;-1:-1:-1;;;9840:68:0;;;;;;;:::i;:::-;37627:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;37552:101:::0;:::o;19835:28::-;;;;;;:::o;33974:1289::-;34064:19;;;;;;;;:27;;:19;:27;34061:737;;;34115:36;34122:7;:5;:7::i;:::-;34130:10;34141:9;34115:6;:36::i;:::-;:44;;34155:4;34115:44;34107:80;;;;-1:-1:-1;;;34107:80:0;;;;;;;:::i;:::-;34226:10;34210:27;;;;:15;:27;;;;;;34252:1;;34210:38;;34240:8;;34210:38;:::i;:::-;:43;;34202:99;;;;-1:-1:-1;;;34202:99:0;;;;;;;:::i;:::-;34332:10;34316:27;;;;:15;:27;;;;;:39;;34347:8;;34316:27;:39;;34347:8;;34316:39;:::i;:::-;;;;-1:-1:-1;34061:737:0;;-1:-1:-1;34061:737:0;;34420:10;34404:27;;;;:15;:27;;;;;;34446:1;;34404:38;;34434:8;;34404:38;:::i;:::-;:43;;34396:84;;;;-1:-1:-1;;;34396:84:0;;;;;;;:::i;:::-;34503:18;;;;:26;;:18;:26;34495:65;;;;-1:-1:-1;;;34495:65:0;;;;;;;:::i;:::-;34594:1;34583:8;:12;:28;;;;;34610:1;34599:8;:12;;34583:28;34575:62;;;;-1:-1:-1;;;34575:62:0;;;;;;;:::i;:::-;34684:20;32791:3;32731:4;34684:20;:::i;:::-;34672:8;34660:9;;:20;;;;:::i;:::-;:44;;34652:80;;;;-1:-1:-1;;;34652:80:0;;;;;;;:::i;:::-;34763:10;34747:27;;;;:15;:27;;;;;:39;;34778:8;;34747:27;:39;;34778:8;;34747:39;:::i;:::-;;;;-1:-1:-1;;34061:737:0;34852:8;34840:9;;:20;;;;:::i;:::-;34827:9;:33;;34818:68;;;;-1:-1:-1;;;34818:68:0;;;;;;;:::i;:::-;34900:12;34917:7;:5;:7::i;:::-;-1:-1:-1;;;;;34917:12:0;34937:9;34917:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34899:52;;;34976:7;34972:284;;35000:32;;-1:-1:-1;;;35000:32:0;;;;;;;:::i;34972:284::-;35078:9;35073:167;35095:8;35091:1;:12;35073:167;;;35129:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;;35161:9:0;:11;;;:9;:11;;;:::i;:::-;;;;;;35191:33;35201:10;35212:11;;35191:9;:33::i;:::-;35105:3;;;;:::i;:::-;;;;35073:167;;;;33974:1289;;;:::o;20833:239::-;20905:7;20941:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20941:16:0;20976:19;20968:73;;;;-1:-1:-1;;;20968:73:0;;;;;;;:::i;32825:39::-;;;;:::o;20563:208::-;20635:7;-1:-1:-1;;;;;20663:19:0;;20655:74;;;;-1:-1:-1;;;20655:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;20747:16:0;;;;;:9;:16;;;;;;;20563:208::o;10279:103::-;9859:12;:10;:12::i;:::-;-1:-1:-1;;;;;9848:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9848:23:0;;9840:68;;;;-1:-1:-1;;;9840:68:0;;;;;;;:::i;:::-;10344:30:::1;10371:1;10344:18;:30::i;:::-;10279:103::o:0;37118:109::-;9859:12;:10;:12::i;:::-;-1:-1:-1;;;;;9848:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9848:23:0;;9840:68;;;;-1:-1:-1;;;9840:68:0;;;;;;;:::i;:::-;37201:18:::1;::::0;;-1:-1:-1;;37179:40:0;::::1;37201:18;::::0;;::::1;37200:19;37179:40;::::0;;37118:109::o;9628:87::-;9701:6;;;;;-1:-1:-1;;;;;9701:6:0;;9628:87::o;21308:104::-;21364:13;21397:7;21390:14;;;;;:::i;23208:295::-;23323:12;:10;:12::i;:::-;-1:-1:-1;;;;;23311:24:0;:8;-1:-1:-1;;;;;23311:24:0;;;23303:62;;;;-1:-1:-1;;;23303:62:0;;;;;;;:::i;:::-;23423:8;23378:18;:32;23397:12;:10;:12::i;:::-;-1:-1:-1;;;;;23378:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;23378:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;23378:53:0;;;;;;;;;;;23462:12;:10;:12::i;:::-;-1:-1:-1;;;;;23447:48:0;;23486:8;23447:48;;;;;;:::i;:::-;;;;;;;;23208:295;;:::o;37357:73::-;9859:12;:10;:12::i;:::-;-1:-1:-1;;;;;9848:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9848:23:0;;9840:68;;;;-1:-1:-1;;;9840:68:0;;;;;;;:::i;:::-;37414:8:::1;::::0;;-1:-1:-1;;37402:20:0;::::1;37414:8;::::0;;::::1;37413:9;37402:20;::::0;;37357:73::o;33340:622::-;33432:5;;:23;;-1:-1:-1;;;33432:23:0;;33397:10;;33380:14;;-1:-1:-1;;;;;33432:5:0;;;;:15;;:23;;33397:10;;33432:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33418:37;;33483:1;33477:3;:7;33469:51;;;;-1:-1:-1;;;33469:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33539:23:0;;;;;;:15;:23;;;;;;33570:1;;33539:27;;33565:1;33539:27;:::i;:::-;:32;;33531:73;;;;-1:-1:-1;;;33531:73:0;;;;;;;:::i;:::-;33640:20;32791:3;32731:4;33640:20;:::i;:::-;33623:9;;:13;;33635:1;33623:13;:::i;:::-;:37;;33615:73;;;;-1:-1:-1;;;33615:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33707:18:0;;;;;;:10;:18;;;;;;;;:27;33699:66;;;;-1:-1:-1;;;33699:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33778:23:0;;;;;;:15;:23;;;;;:28;;33805:1;;33778:23;:28;;33805:1;;33778:28;:::i;:::-;;;;-1:-1:-1;;;;;;;33817:18:0;;;;;;:10;:18;;;;;:25;;-1:-1:-1;;33817:25:0;33838:4;33817:25;;;;;;33853:11;:16;;33838:4;;33853:11;;:16;;33838:4;;33853:16;:::i;:::-;;;;;;;;33893:1;33880:9;;:14;;;;;;;:::i;:::-;;;;;;;;33905:30;33915:6;33923:11;;33905:9;:30::i;33053:28::-;;;;:::o;24471:328::-;24646:41;24665:12;:10;:12::i;:::-;24679:7;24646:18;:41::i;:::-;24638:103;;;;-1:-1:-1;;;24638:103:0;;;;;;;:::i;:::-;24752:39;24766:4;24772:2;24776:7;24785:5;24752:13;:39::i;32990:29::-;;;;:::o;21489:523::-;21562:13;21596:16;21604:7;21596;:16::i;:::-;21588:76;;;;-1:-1:-1;;;21588:76:0;;;;;;;:::i;:::-;21680:8;;;;21677:327;;21801:1;21776:14;21770:28;;;;;:::i;:::-;;;:32;:80;;;;;;;;;;;;;;;;;21829:14;21812:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;21770:80;21763:87;;;;21677:327;21922:1;21904:7;21898:21;;;;;:::i;:::-;;;:25;:94;;;;;;;;;;;;;;;;;21950:7;21959:18;:7;:16;:18::i;:::-;21933:53;;;;;;;;;:::i;38006:348::-;9859:12;:10;:12::i;:::-;-1:-1:-1;;;;;9848:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9848:23:0;;9840:68;;;;-1:-1:-1;;;9840:68:0;;;;;;;:::i;:::-;38161:12:::1;:19;38135:15;:22;:45;38126:84;;;;-1:-1:-1::0;;;38126:84:0::1;;;;;;;:::i;:::-;38228:9;38223:124;38243:15;:22;38241:1;:24;38223:124;;;38287:48;38299:15;38315:1;38299:18;;;;;;-1:-1:-1::0;;;38299:18:0::1;;;;;;;;;;;;;;;38319:12;38332:1;38319:15;;;;;;-1:-1:-1::0;;;38319:15:0::1;;;;;;;;;;;;;;;38287:11;:48::i;:::-;38267:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38223:124;;23574:164:::0;-1:-1:-1;;;;;23695:25:0;;;23671:4;23695:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23574:164::o;10537:201::-;9859:12;:10;:12::i;:::-;-1:-1:-1;;;;;9848:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9848:23:0;;9840:68;;;;-1:-1:-1;;;9840:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10626:22:0;::::1;10618:73;;;;-1:-1:-1::0;;;10618:73:0::1;;;;;;;:::i;:::-;10702:28;10721:8;10702:18;:28::i;:::-;10537:201:::0;:::o;37442:98::-;9859:12;:10;:12::i;:::-;-1:-1:-1;;;;;9848:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9848:23:0;;9840:68;;;;-1:-1:-1;;;9840:68:0;;;;;;;:::i;:::-;37512:9:::1;:20:::0;37442:98::o;32605:20::-;;;-1:-1:-1;;;;;32605:20:0;;:::o;32756:38::-;32791:3;32756:38;:::o;13617:157::-;-1:-1:-1;;;;;;13726:40:0;;-1:-1:-1;;;13726:40:0;13617:157;;;:::o;26309:127::-;26374:4;26398:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26398:16:0;:30;;;26309:127::o;9000:98::-;9080:10;9000:98;:::o;30307:174::-;30382:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30382:29:0;-1:-1:-1;;;;;30382:29:0;;;;;;;;:24;;30436:23;30382:24;30436:14;:23::i;:::-;-1:-1:-1;;;;;30427:46:0;;;;;;;;;;;30307:174;;:::o;26603:348::-;26696:4;26721:16;26729:7;26721;:16::i;:::-;26713:73;;;;-1:-1:-1;;;26713:73:0;;;;;;;:::i;:::-;26797:13;26813:23;26828:7;26813:14;:23::i;:::-;26797:39;;26866:5;-1:-1:-1;;;;;26855:16:0;:7;-1:-1:-1;;;;;26855:16:0;;:51;;;;26899:7;-1:-1:-1;;;;;26875:31:0;:20;26887:7;26875:11;:20::i;:::-;-1:-1:-1;;;;;26875:31:0;;26855:51;:87;;;;26910:32;26927:5;26934:7;26910:16;:32::i;:::-;26847:96;26603:348;-1:-1:-1;;;;26603:348:0:o;29599:578::-;29758:4;-1:-1:-1;;;;;29731:31:0;:23;29746:7;29731:14;:23::i;:::-;-1:-1:-1;;;;;29731:31:0;;29723:85;;;;-1:-1:-1;;;29723:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29827:16:0;;29819:65;;;;-1:-1:-1;;;29819:65:0;;;;;;;:::i;:::-;29897:39;29918:4;29924:2;29928:7;29897:20;:39::i;:::-;30001:29;30018:1;30022:7;30001:8;:29::i;:::-;-1:-1:-1;;;;;30043:15:0;;;;;;:9;:15;;;;;:20;;30062:1;;30043:15;:20;;30062:1;;30043:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30074:13:0;;;;;;:9;:13;;;;;:18;;30091:1;;30074:13;:18;;30091:1;;30074:18;:::i;:::-;;;;-1:-1:-1;;30103:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30103:21:0;-1:-1:-1;;;;;30103:21:0;;;;;;;;;30142:27;;30103:16;;30142:27;;;;;;;29599:578;;;:::o;27293:110::-;27369:26;27379:2;27383:7;27369:26;;;;;;;;;;;;:9;:26::i;36790:309::-;36880:4;36897:19;36919;36934:3;36919:14;:19::i;:::-;36897:41;;36949:28;36980:36;37004:11;36980:23;:36::i;:::-;36949:67;;37084:7;-1:-1:-1;;;;;37034:57:0;:46;37048:20;37070:9;37034:13;:46::i;:::-;-1:-1:-1;;;;;37034:57:0;;;36790:309;-1:-1:-1;;;;;;36790:309:0:o;10898:191::-;10991:6;;;-1:-1:-1;;;;;11008:17:0;;;10991:6;11008:17;;;-1:-1:-1;;;;;;11008:17:0;;;;;;11041:40;;10991:6;;;;;;;;11041:40;;10972:16;;11041:40;10898:191;;:::o;25681:315::-;25838:28;25848:4;25854:2;25858:7;25838:9;:28::i;:::-;25885:48;25908:4;25914:2;25918:7;25927:5;25885:22;:48::i;:::-;25877:111;;;;-1:-1:-1;;;25877:111:0;;;;;;;:::i;11286:723::-;11342:13;11563:10;11559:53;;-1:-1:-1;11590:10:0;;;;;;;;;;;;-1:-1:-1;;;11590:10:0;;;;;;11559:53;11637:5;11622:12;11678:78;11685:9;;11678:78;;11711:8;;;;:::i;:::-;;-1:-1:-1;11734:10:0;;-1:-1:-1;11742:2:0;11734:10;;:::i;:::-;;;11678:78;;;11766:19;11798:6;11788:17;;;;;;-1:-1:-1;;;11788:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11788:17:0;;11766:39;;11816:154;11823:10;;11816:154;;11850:11;11860:1;11850:11;;:::i;:::-;;-1:-1:-1;11919:10:0;11927:2;11919:5;:10;:::i;:::-;11906:24;;:2;:24;:::i;:::-;11893:39;;11876:6;11883;11876:14;;;;;;-1:-1:-1;;;11876:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;11876:56:0;;;;;;;;-1:-1:-1;11947:11:0;11956:2;11947:11;;:::i;:::-;;;11816:154;;27630:321;27760:18;27766:2;27770:7;27760:5;:18::i;:::-;27811:54;27842:1;27846:2;27850:7;27859:5;27811:22;:54::i;:::-;27789:154;;;;-1:-1:-1;;;27789:154:0;;;;;;;:::i;35408:329::-;35485:7;35715:12;35662:66;;;;;;;;:::i;35745:249::-;35847:7;35868:9;35879;35890:7;35901:26;35916:10;35901:14;:26::i;:::-;35867:60;;;;;;35945:41;35955:21;35978:1;35981;35984;35945:41;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35945:41:0;;-1:-1:-1;;35945:41:0;;;35745:249;-1:-1:-1;;;;;;;35745:249:0:o;31046:799::-;31201:4;31222:15;:2;-1:-1:-1;;;;;31222:13:0;;:15::i;:::-;31218:620;;;31274:2;-1:-1:-1;;;;;31258:36:0;;31295:12;:10;:12::i;:::-;31309:4;31315:7;31324:5;31258:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31258:72:0;;;;;;;;-1:-1:-1;;31258:72:0;;;;;;;;;;;;:::i;:::-;;;31254:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31500:13:0;;31496:272;;31543:60;;-1:-1:-1;;;31543:60:0;;;;;;;:::i;31496:272::-;31718:6;31712:13;31703:6;31699:2;31695:15;31688:38;31254:529;-1:-1:-1;;;;;;31381:51:0;-1:-1:-1;;;31381:51:0;;-1:-1:-1;31374:58:0;;31218:620;-1:-1:-1;31822:4:0;31046:799;;;;;;:::o;28287:386::-;-1:-1:-1;;;;;28367:16:0;;28359:61;;;;-1:-1:-1;;;28359:61:0;;;;;;;:::i;:::-;28440:16;28448:7;28440;:16::i;:::-;28439:17;28431:58;;;;-1:-1:-1;;;28431:58:0;;;;;;;:::i;:::-;28502:45;28531:1;28535:2;28539:7;28502:20;:45::i;:::-;-1:-1:-1;;;;;28560:13:0;;;;;;:9;:13;;;;;:18;;28577:1;;28560:13;:18;;28577:1;;28560:18;:::i;:::-;;;;-1:-1:-1;;28589:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28589:21:0;-1:-1:-1;;;;;28589:21:0;;;;;;;;28632:33;;28589:16;;;28632:33;;28589:16;;28632:33;28287:386;;:::o;36002:780::-;36066:9;36077;36088:7;36116:3;:10;36130:2;36116:16;36108:53;;;;-1:-1:-1;;;36108:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;36540:2:0;36531:12;;36525:19;36610:2;36601:12;;36595:19;36717:2;36708:12;;;36702:19;36525;;36699:1;36694:28;;;;;36183:550::o;1634:387::-;1957:20;2005:8;;;1634:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:409:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:175::-;498:20;;-1:-1:-1;;;;;547:31:1;;537:42;;527:2;;593:1;590;583:12;608:705;;721:3;714:4;706:6;702:17;698:27;688:2;;743:5;736;729:20;688:2;783:6;770:20;809:4;833:65;848:49;894:2;848:49;:::i;:::-;833:65;:::i;:::-;932:15;;;963:12;;;;995:15;;;1041:11;;;1029:24;;1025:33;;1022:42;-1:-1:-1;1019:2:1;;;1081:5;1074;1067:20;1019:2;1107:5;1121:163;1135:2;1132:1;1129:9;1121:163;;;1192:17;;1180:30;;1230:12;;;;1262;;;;1153:1;1146:9;1121:163;;;-1:-1:-1;1302:5:1;;678:635;-1:-1:-1;;;;;;;678:635:1:o;1318:232::-;;1415:3;1408:4;1400:6;1396:17;1392:27;1382:2;;1437:5;1430;1423:20;1382:2;1463:81;1540:3;1531:6;1518:20;1511:4;1503:6;1499:17;1463:81;:::i;:::-;1454:90;1372:178;-1:-1:-1;;;1372:178:1:o;1555:198::-;;1667:2;1655:9;1646:7;1642:23;1638:32;1635:2;;;1688:6;1680;1673:22;1635:2;1716:31;1737:9;1716:31;:::i;1758:274::-;;;1887:2;1875:9;1866:7;1862:23;1858:32;1855:2;;;1908:6;1900;1893:22;1855:2;1936:31;1957:9;1936:31;:::i;:::-;1926:41;;1986:40;2022:2;2011:9;2007:18;1986:40;:::i;:::-;1976:50;;1845:187;;;;;:::o;2037:342::-;;;;2183:2;2171:9;2162:7;2158:23;2154:32;2151:2;;;2204:6;2196;2189:22;2151:2;2232:31;2253:9;2232:31;:::i;:::-;2222:41;;2282:40;2318:2;2307:9;2303:18;2282:40;:::i;:::-;2272:50;;2369:2;2358:9;2354:18;2341:32;2331:42;;2141:238;;;;;:::o;2384:563::-;;;;;2556:3;2544:9;2535:7;2531:23;2527:33;2524:2;;;2578:6;2570;2563:22;2524:2;2606:31;2627:9;2606:31;:::i;:::-;2596:41;;2656:40;2692:2;2681:9;2677:18;2656:40;:::i;:::-;2646:50;;2743:2;2732:9;2728:18;2715:32;2705:42;;2798:2;2787:9;2783:18;2770:32;2825:18;2817:6;2814:30;2811:2;;;2862:6;2854;2847:22;2811:2;2890:51;2933:7;2924:6;2913:9;2909:22;2890:51;:::i;:::-;2880:61;;;2514:433;;;;;;;:::o;2952:369::-;;;3078:2;3066:9;3057:7;3053:23;3049:32;3046:2;;;3099:6;3091;3084:22;3046:2;3127:31;3148:9;3127:31;:::i;:::-;3117:41;;3208:2;3197:9;3193:18;3180:32;3255:5;3248:13;3241:21;3234:5;3231:32;3221:2;;3282:6;3274;3267:22;3221:2;3310:5;3300:15;;;3036:285;;;;;:::o;3326:266::-;;;3455:2;3443:9;3434:7;3430:23;3426:32;3423:2;;;3476:6;3468;3461:22;3423:2;3504:31;3525:9;3504:31;:::i;:::-;3494:41;3582:2;3567:18;;;;3554:32;;-1:-1:-1;;;3413:179:1:o;3597:1226::-;;;3776:2;3764:9;3755:7;3751:23;3747:32;3744:2;;;3797:6;3789;3782:22;3744:2;3842:9;3829:23;3871:18;3912:2;3904:6;3901:14;3898:2;;;3933:6;3925;3918:22;3898:2;3976:6;3965:9;3961:22;3951:32;;4021:7;4014:4;4010:2;4006:13;4002:27;3992:2;;4048:6;4040;4033:22;3992:2;4089;4076:16;4111:4;4135:65;4150:49;4196:2;4150:49;:::i;4135:65::-;4234:15;;;4265:12;;;;4297:11;;;4335;;;4327:20;;4323:29;;4320:42;-1:-1:-1;4317:2:1;;;4380:6;4372;4365:22;4317:2;4407:6;4398:15;;4422:171;4436:2;4433:1;4430:9;4422:171;;;4493:25;4514:3;4493:25;:::i;:::-;4481:38;;4454:1;4447:9;;;;;4539:12;;;;4571;;4422:171;;;-1:-1:-1;4612:5:1;-1:-1:-1;;4655:18:1;;4642:32;;-1:-1:-1;;4686:16:1;;;4683:2;;;4720:6;4712;4705:22;4683:2;;4748:69;4809:7;4798:8;4787:9;4783:24;4748:69;:::i;:::-;4738:79;;;3734:1089;;;;;:::o;4828:257::-;;4939:2;4927:9;4918:7;4914:23;4910:32;4907:2;;;4960:6;4952;4945:22;4907:2;5004:9;4991:23;5023:32;5049:5;5023:32;:::i;5090:261::-;;5212:2;5200:9;5191:7;5187:23;5183:32;5180:2;;;5233:6;5225;5218:22;5180:2;5270:9;5264:16;5289:32;5315:5;5289:32;:::i;5356:482::-;;5478:2;5466:9;5457:7;5453:23;5449:32;5446:2;;;5499:6;5491;5484:22;5446:2;5544:9;5531:23;5577:18;5569:6;5566:30;5563:2;;;5614:6;5606;5599:22;5563:2;5642:22;;5695:4;5687:13;;5683:27;-1:-1:-1;5673:2:1;;5729:6;5721;5714:22;5673:2;5757:75;5824:7;5819:2;5806:16;5801:2;5797;5793:11;5757:75;:::i;5843:190::-;;5955:2;5943:9;5934:7;5930:23;5926:32;5923:2;;;5976:6;5968;5961:22;5923:2;-1:-1:-1;6004:23:1;;5913:120;-1:-1:-1;5913:120:1:o;6038:194::-;;6161:2;6149:9;6140:7;6136:23;6132:32;6129:2;;;6182:6;6174;6167:22;6129:2;-1:-1:-1;6210:16:1;;6119:113;-1:-1:-1;6119:113:1:o;6237:410::-;;;6375:2;6363:9;6354:7;6350:23;6346:32;6343:2;;;6396:6;6388;6381:22;6343:2;6437:9;6424:23;6414:33;;6498:2;6487:9;6483:18;6470:32;6525:18;6517:6;6514:30;6511:2;;;6562:6;6554;6547:22;6511:2;6590:51;6633:7;6624:6;6613:9;6609:22;6590:51;:::i;6652:259::-;;6733:5;6727:12;6760:6;6755:3;6748:19;6776:63;6832:6;6825:4;6820:3;6816:14;6809:4;6802:5;6798:16;6776:63;:::i;:::-;6893:2;6872:15;-1:-1:-1;;6868:29:1;6859:39;;;;6900:4;6855:50;;6703:208;-1:-1:-1;;6703:208:1:o;6916:982::-;7003:12;;6916:982;;7075:1;7060:17;;7096:1;7132:18;;;;7159:2;;7213:4;7205:6;7201:17;7191:27;;7159:2;7239;7287;7279:6;7276:14;7256:18;7253:38;7250:2;;;-1:-1:-1;;;7314:33:1;;7370:4;7367:1;7360:15;7400:4;7321:3;7388:17;7250:2;7431:18;7458:104;;;;7576:1;7571:321;;;;7424:468;;7458:104;-1:-1:-1;;7491:24:1;;7479:37;;7536:16;;;;-1:-1:-1;7458:104:1;;7571:321;7607:38;7639:5;7607:38;:::i;:::-;7667:1;7681:165;7695:6;7692:1;7689:13;7681:165;;;7773:14;;7760:11;;;7753:35;7816:16;;;;7710:10;;7681:165;;;7685:3;;7875:6;7870:3;7866:16;7859:23;;7424:468;;;;;;;6976:922;;;;:::o;7903:229::-;8052:2;8048:15;;;;-1:-1:-1;;8044:53:1;8032:66;;8123:2;8114:12;;8022:110::o;8137:199::-;;8290:40;8326:3;8318:6;8290:40;:::i;8341:545::-;;8646:40;8682:3;8674:6;8646:40;:::i;:::-;8715:6;8709:13;8731:52;8776:6;8772:2;8765:4;8757:6;8753:17;8731:52;:::i;:::-;-1:-1:-1;;;8805:15:1;;8829:22;;;8878:1;8867:13;;8626:260;-1:-1:-1;;;;8626:260:1:o;8891:380::-;9133:66;9121:79;;9225:2;9216:12;;9209:28;;;;9262:2;9253:12;;9111:160::o;9276:205::-;9476:3;9467:14::o;9486:203::-;-1:-1:-1;;;;;9650:32:1;;;;9632:51;;9620:2;9605:18;;9587:102::o;9694:490::-;-1:-1:-1;;;;;9963:15:1;;;9945:34;;10015:15;;10010:2;9995:18;;9988:43;10062:2;10047:18;;10040:34;;;10110:3;10105:2;10090:18;;10083:31;;;9694:490;;10131:47;;10158:19;;10150:6;10131:47;:::i;:::-;10123:55;9897:287;-1:-1:-1;;;;;;9897:287:1:o;10189:187::-;10354:14;;10347:22;10329:41;;10317:2;10302:18;;10284:92::o;10381:177::-;10527:25;;;10515:2;10500:18;;10482:76::o;10563:398::-;10790:25;;;10863:4;10851:17;;;;10846:2;10831:18;;10824:45;10900:2;10885:18;;10878:34;10943:2;10928:18;;10921:34;10777:3;10762:19;;10744:217::o;11189:221::-;;11338:2;11327:9;11320:21;11358:46;11400:2;11389:9;11385:18;11377:6;11358:46;:::i;11415:347::-;11617:2;11599:21;;;11656:2;11636:18;;;11629:30;11695:25;11690:2;11675:18;;11668:53;11753:2;11738:18;;11589:173::o;11767:355::-;11969:2;11951:21;;;12008:2;11988:18;;;11981:30;12047:33;12042:2;12027:18;;12020:61;12113:2;12098:18;;11941:181::o;12127:414::-;12329:2;12311:21;;;12368:2;12348:18;;;12341:30;12407:34;12402:2;12387:18;;12380:62;-1:-1:-1;;;12473:2:1;12458:18;;12451:48;12531:3;12516:19;;12301:240::o;12546:402::-;12748:2;12730:21;;;12787:2;12767:18;;;12760:30;12826:34;12821:2;12806:18;;12799:62;-1:-1:-1;;;12892:2:1;12877:18;;12870:36;12938:3;12923:19;;12720:228::o;12953:352::-;13155:2;13137:21;;;13194:2;13174:18;;;13167:30;13233;13228:2;13213:18;;13206:58;13296:2;13281:18;;13127:178::o;13310:352::-;13512:2;13494:21;;;13551:2;13531:18;;;13524:30;13590;13585:2;13570:18;;13563:58;13653:2;13638:18;;13484:178::o;13667:407::-;13869:2;13851:21;;;13908:2;13888:18;;;13881:30;13947:34;13942:2;13927:18;;13920:62;-1:-1:-1;;;14013:2:1;13998:18;;13991:41;14064:3;14049:19;;13841:233::o;14079:400::-;14281:2;14263:21;;;14320:2;14300:18;;;14293:30;14359:34;14354:2;14339:18;;14332:62;-1:-1:-1;;;14425:2:1;14410:18;;14403:34;14469:3;14454:19;;14253:226::o;14484:349::-;14686:2;14668:21;;;14725:2;14705:18;;;14698:30;14764:27;14759:2;14744:18;;14737:55;14824:2;14809:18;;14658:175::o;14838:408::-;15040:2;15022:21;;;15079:2;15059:18;;;15052:30;15118:34;15113:2;15098:18;;15091:62;-1:-1:-1;;;15184:2:1;15169:18;;15162:42;15236:3;15221:19;;15012:234::o;15251:347::-;15453:2;15435:21;;;15492:2;15472:18;;;15465:30;15531:25;15526:2;15511:18;;15504:53;15589:2;15574:18;;15425:173::o;15603:420::-;15805:2;15787:21;;;15844:2;15824:18;;;15817:30;15883:34;15878:2;15863:18;;15856:62;15954:26;15949:2;15934:18;;15927:54;16013:3;15998:19;;15777:246::o;16028:406::-;16230:2;16212:21;;;16269:2;16249:18;;;16242:30;16308:34;16303:2;16288:18;;16281:62;-1:-1:-1;;;16374:2:1;16359:18;;16352:40;16424:3;16409:19;;16202:232::o;16439:346::-;16641:2;16623:21;;;16680:2;16660:18;;;16653:30;-1:-1:-1;;;16714:2:1;16699:18;;16692:52;16776:2;16761:18;;16613:172::o;16790:405::-;16992:2;16974:21;;;17031:2;17011:18;;;17004:30;17070:34;17065:2;17050:18;;17043:62;-1:-1:-1;;;17136:2:1;17121:18;;17114:39;17185:3;17170:19;;16964:231::o;17200:349::-;17402:2;17384:21;;;17441:2;17421:18;;;17414:30;17480:27;17475:2;17460:18;;17453:55;17540:2;17525:18;;17374:175::o;17554:356::-;17756:2;17738:21;;;17775:18;;;17768:30;17834:34;17829:2;17814:18;;17807:62;17901:2;17886:18;;17728:182::o;17915:408::-;18117:2;18099:21;;;18156:2;18136:18;;;18129:30;18195:34;18190:2;18175:18;;18168:62;-1:-1:-1;;;18261:2:1;18246:18;;18239:42;18313:3;18298:19;;18089:234::o;18328:356::-;18530:2;18512:21;;;18549:18;;;18542:30;18608:34;18603:2;18588:18;;18581:62;18675:2;18660:18;;18502:182::o;18689:350::-;18891:2;18873:21;;;18930:2;18910:18;;;18903:30;18969:28;18964:2;18949:18;;18942:56;19030:2;19015:18;;18863:176::o;19044:345::-;19246:2;19228:21;;;19285:2;19265:18;;;19258:30;-1:-1:-1;;;19319:2:1;19304:18;;19297:51;19380:2;19365:18;;19218:171::o;19394:347::-;19596:2;19578:21;;;19635:2;19615:18;;;19608:30;19674:25;19669:2;19654:18;;19647:53;19732:2;19717:18;;19568:173::o;19746:405::-;19948:2;19930:21;;;19987:2;19967:18;;;19960:30;20026:34;20021:2;20006:18;;19999:62;-1:-1:-1;;;20092:2:1;20077:18;;20070:39;20141:3;20126:19;;19920:231::o;20156:411::-;20358:2;20340:21;;;20397:2;20377:18;;;20370:30;20436:34;20431:2;20416:18;;20409:62;-1:-1:-1;;;20502:2:1;20487:18;;20480:45;20557:3;20542:19;;20330:237::o;20572:397::-;20774:2;20756:21;;;20813:2;20793:18;;;20786:30;20852:34;20847:2;20832:18;;20825:62;-1:-1:-1;;;20918:2:1;20903:18;;20896:31;20959:3;20944:19;;20746:223::o;20974:413::-;21176:2;21158:21;;;21215:2;21195:18;;;21188:30;21254:34;21249:2;21234:18;;21227:62;-1:-1:-1;;;21320:2:1;21305:18;;21298:47;21377:3;21362:19;;21148:239::o;21392:348::-;21594:2;21576:21;;;21633:2;21613:18;;;21606:30;21672:26;21667:2;21652:18;;21645:54;21731:2;21716:18;;21566:174::o;21745:350::-;21947:2;21929:21;;;21986:2;21966:18;;;21959:30;22025:28;22020:2;22005:18;;21998:56;22086:2;22071:18;;21919:176::o;22100:345::-;22302:2;22284:21;;;22341:2;22321:18;;;22314:30;-1:-1:-1;;;22375:2:1;22360:18;;22353:51;22436:2;22421:18;;22274:171::o;22632:251::-;22702:2;22696:9;22732:17;;;22779:18;22764:34;;22800:22;;;22761:62;22758:2;;;22826:18;;:::i;:::-;22862:2;22855:22;22676:207;;-1:-1:-1;22676:207:1:o;22888:192::-;;22987:18;22979:6;22976:30;22973:2;;;23009:18;;:::i;:::-;-1:-1:-1;23069:4:1;23050:17;;;23046:28;;22963:117::o;23085:129::-;;23153:17;;;23203:4;23187:21;;;23143:71::o;23219:128::-;;23290:1;23286:6;23283:1;23280:13;23277:2;;;23296:18;;:::i;:::-;-1:-1:-1;23332:9:1;;23267:80::o;23352:120::-;;23418:1;23408:2;;23423:18;;:::i;:::-;-1:-1:-1;23457:9:1;;23398:74::o;23477:168::-;;23583:1;23579;23575:6;23571:14;23568:1;23565:21;23560:1;23553:9;23546:17;23542:45;23539:2;;;23590:18;;:::i;:::-;-1:-1:-1;23630:9:1;;23529:116::o;23650:125::-;;23718:1;23715;23712:8;23709:2;;;23723:18;;:::i;:::-;-1:-1:-1;23760:9:1;;23699:76::o;23780:258::-;23852:1;23862:113;23876:6;23873:1;23870:13;23862:113;;;23952:11;;;23946:18;23933:11;;;23926:39;23898:2;23891:10;23862:113;;;23993:6;23990:1;23987:13;23984:2;;;-1:-1:-1;;24028:1:1;24010:16;;24003:27;23833:205::o;24043:380::-;24128:1;24118:12;;24175:1;24165:12;;;24186:2;;24240:4;24232:6;24228:17;24218:27;;24186:2;24293;24285:6;24282:14;24262:18;24259:38;24256:2;;;24339:10;24334:3;24330:20;24327:1;24320:31;24374:4;24371:1;24364:15;24402:4;24399:1;24392:15;24256:2;;24098:325;;;:::o;24428:135::-;;-1:-1:-1;;24488:17:1;;24485:2;;;24508:18;;:::i;:::-;-1:-1:-1;24555:1:1;24544:13;;24475:88::o;24568:112::-;;24626:1;24616:2;;24631:18;;:::i;:::-;-1:-1:-1;24665:9:1;;24606:74::o;24685:127::-;24746:10;24741:3;24737:20;24734:1;24727:31;24777:4;24774:1;24767:15;24801:4;24798:1;24791:15;24817:127;24878:10;24873:3;24869:20;24866:1;24859:31;24909:4;24906:1;24899:15;24933:4;24930:1;24923:15;24949:127;25010:10;25005:3;25001:20;24998:1;24991:31;25041:4;25038:1;25031:15;25065:4;25062:1;25055:15;25081:133;-1:-1:-1;;;;;;25157:32:1;;25147:43;;25137:2;;25204:1;25201;25194:12

Swarm Source

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