ETH Price: $3,476.28 (-1.92%)
Gas: 2 Gwei

Token

WOLVERINU 1st Edition (WOLVERINU1st)
 

Overview

Max Total Supply

174 WOLVERINU1st

Holders

174

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 WOLVERINU1st
0x7ae76826f78dc872f2b4e0a4598eb4f8dedbe7b3
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:
WOLVERINU1st

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-14
*/

pragma solidity 0.8.9;
// SPDX-License-Identifier: MIT

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

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @dev Required interface of an ERC721 compliant contract.
 */

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

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

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

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

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external payable;
}

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

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    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;
    }

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

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

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

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

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

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

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

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

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

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

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

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

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

/**
 * @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}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    uint256 public NFTPrice = 0.1 ether;

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

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

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public 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 payable 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 payable virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

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

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

    function _exists(uint256 tokenId) public view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    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(msg.value >= NFTPrice, "insufficient amount");
        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);
    }

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

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (isContract(to)) {
            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;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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

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

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

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721.balanceOf(owner),
            "ERC721Enumerable: owner index out of bounds"
        );
        return _ownedTokens[owner][index];
    }

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

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

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId)
        private
    {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI)
        internal
        virtual
    {
        require(
            _exists(tokenId),
            "ERC721URIStorage: URI set of nonexistent token"
        );
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

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

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

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

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

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

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

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

contract WOLVERINU1st is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable {
    using SafeMath for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;
    Counters.Counter private _tokenIds;

    constructor(address _owner) ERC721("WOLVERINU 1st Edition", "WOLVERINU1st") Ownable(_owner) {}

    function getCurrentNFTId() public view returns (uint256) {
        return _tokenIds.current();
    }

    // The following functions are overrides required by Solidity.
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function _burn(uint256 tokenId)
        internal
        override(ERC721, ERC721URIStorage)
    {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }

    function mint(address[] memory to, string memory _tokenURI)
        external
        payable
        onlyOwner
    {
        for (uint8 i = 0; i < to.length; i++) {
            _tokenIds.increment();
            uint256 newID = getCurrentNFTId();
            _safeMint(to[i], newID);
            _setTokenURI(newID, _tokenURI);
        }
    }

    function withdrawFee() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    receive() external payable {}

    function setNFTPrice(uint256 amount) public onlyOwner {
        NFTPrice = amount;
    }

    function getPrice() public view returns (uint256) {
        return NFTPrice;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","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":[],"name":"NFTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"_exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentNFTId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"payable","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":"amount","type":"uint256"}],"name":"setNFTPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405267016345785d8a00006000553480156200001d57600080fd5b5060405162004145380380620041458339818101604052810190620000439190620002dd565b806040518060400160405280601581526020017f574f4c564552494e55203173742045646974696f6e00000000000000000000008152506040518060400160405280600c81526020017f574f4c564552494e5531737400000000000000000000000000000000000000008152508160019080519060200190620000c8929190620001c3565b508060029080519060200190620000e1929190620001c3565b505050620000f581620000fd60201b60201c565b505062000374565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001d1906200033e565b90600052602060002090601f016020900481019282620001f5576000855562000241565b82601f106200021057805160ff191683800117855562000241565b8280016001018555821562000241579182015b828111156200024057825182559160200191906001019062000223565b5b50905062000250919062000254565b5090565b5b808211156200026f57600081600090555060010162000255565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002a58262000278565b9050919050565b620002b78162000298565b8114620002c357600080fd5b50565b600081519050620002d781620002ac565b92915050565b600060208284031215620002f657620002f562000273565b5b60006200030684828501620002c6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200035757607f821691505b602082108114156200036e576200036d6200030f565b5b50919050565b613dc180620003846000396000f3fe6080604052600436106101855760003560e01c806381530b68116100d1578063b6c320741161008a578063e941fa7811610064578063e941fa781461056b578063e985e9c514610582578063f2fde38b146105bf578063f8e76cc0146105e85761018c565b8063b6c32074146104f6578063b88d4fde14610512578063c87b56dd1461052e5761018c565b806381530b68146103f85780638da5cb5b1461042157806395d89b411461044c57806398d5fdca14610477578063a22cb465146104a2578063a38bffda146104cb5761018c565b80632f745c591161013e5780636352211e116101185780636352211e1461033c578063654ebbe71461037957806370a08231146103a4578063715018a6146103e15761018c565b80632f745c59146102a657806342842e0e146102e35780634f6ccce7146102ff5761018c565b806301ffc9a71461019157806306fdde03146101ce578063081812fc146101f9578063095ea7b31461023657806318160ddd1461025f57806323b872dd1461028a5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101b860048036038101906101b3919061274b565b610625565b6040516101c59190612793565b60405180910390f35b3480156101da57600080fd5b506101e3610637565b6040516101f09190612847565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b919061289f565b6106c9565b60405161022d919061290d565b60405180910390f35b34801561024257600080fd5b5061025d60048036038101906102589190612954565b61074e565b005b34801561026b57600080fd5b50610274610866565b60405161028191906129a3565b60405180910390f35b6102a4600480360381019061029f91906129be565b610873565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190612954565b6108d3565b6040516102da91906129a3565b60405180910390f35b6102fd60048036038101906102f891906129be565b610978565b005b34801561030b57600080fd5b506103266004803603810190610321919061289f565b610998565b60405161033391906129a3565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061289f565b610a09565b604051610370919061290d565b60405180910390f35b34801561038557600080fd5b5061038e610abb565b60405161039b91906129a3565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c69190612a11565b610acc565b6040516103d891906129a3565b60405180910390f35b3480156103ed57600080fd5b506103f6610b84565b005b34801561040457600080fd5b5061041f600480360381019061041a919061289f565b610c0c565b005b34801561042d57600080fd5b50610436610c92565b604051610443919061290d565b60405180910390f35b34801561045857600080fd5b50610461610cbc565b60405161046e9190612847565b60405180910390f35b34801561048357600080fd5b5061048c610d4e565b60405161049991906129a3565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190612a6a565b610d57565b005b3480156104d757600080fd5b506104e0610ed8565b6040516104ed91906129a3565b60405180910390f35b610510600480360381019061050b9190612ca7565b610ede565b005b61052c60048036038101906105279190612dc0565b610fc9565b005b34801561053a57600080fd5b506105556004803603810190610550919061289f565b61102b565b6040516105629190612847565b60405180910390f35b34801561057757600080fd5b5061058061103d565b005b34801561058e57600080fd5b506105a960048036038101906105a49190612e43565b611109565b6040516105b69190612793565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190612a11565b61119d565b005b3480156105f457600080fd5b5061060f600480360381019061060a919061289f565b611295565b60405161061c9190612793565b60405180910390f35b600061063082611301565b9050919050565b60606001805461064690612eb2565b80601f016020809104026020016040519081016040528092919081815260200182805461067290612eb2565b80156106bf5780601f10610694576101008083540402835291602001916106bf565b820191906000526020600020905b8154815290600101906020018083116106a257829003601f168201915b5050505050905090565b60006106d482611295565b610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a90612f56565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061075982610a09565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c190612fe8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107e961137b565b73ffffffffffffffffffffffffffffffffffffffff16148061081857506108178161081261137b565b611109565b5b610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e9061307a565b60405180910390fd5b6108618383611383565b505050565b6000600980549050905090565b61088461087e61137b565b8261143c565b6108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba9061310c565b60405180910390fd5b6108ce83838361151a565b505050565b60006108de83610acc565b821061091f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109169061319e565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61099383838360405180602001604052806000815250610fc9565b505050565b60006109a2610866565b82106109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90613230565b60405180910390fd5b600982815481106109f7576109f6613250565b5b90600052602060002001549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa9906132f1565b60405180910390fd5b80915050919050565b6000610ac7600e6117bb565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490613383565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b8c61137b565b73ffffffffffffffffffffffffffffffffffffffff16610baa610c92565b73ffffffffffffffffffffffffffffffffffffffff1614610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906133ef565b60405180910390fd5b610c0a60006117c9565b565b610c1461137b565b73ffffffffffffffffffffffffffffffffffffffff16610c32610c92565b73ffffffffffffffffffffffffffffffffffffffff1614610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f906133ef565b60405180910390fd5b8060008190555050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610ccb90612eb2565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf790612eb2565b8015610d445780601f10610d1957610100808354040283529160200191610d44565b820191906000526020600020905b815481529060010190602001808311610d2757829003601f168201915b5050505050905090565b60008054905090565b610d5f61137b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc49061345b565b60405180910390fd5b8060066000610dda61137b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e8761137b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ecc9190612793565b60405180910390a35050565b60005481565b610ee661137b565b73ffffffffffffffffffffffffffffffffffffffff16610f04610c92565b73ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51906133ef565b60405180910390fd5b60005b82518160ff161015610fc457610f73600e61188f565b6000610f7d610abb565b9050610fa6848360ff1681518110610f9857610f97613250565b5b6020026020010151826118a5565b610fb081846118c3565b508080610fbc906134b7565b915050610f5d565b505050565b610fda610fd461137b565b8361143c565b611019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110109061310c565b60405180910390fd5b61102584848484611937565b50505050565b606061103682611993565b9050919050565b61104561137b565b73ffffffffffffffffffffffffffffffffffffffff16611063610c92565b73ffffffffffffffffffffffffffffffffffffffff16146110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b0906133ef565b60405180910390fd5b6110c1610c92565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611106573d6000803e3d6000fd5b50565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111a561137b565b73ffffffffffffffffffffffffffffffffffffffff166111c3610c92565b73ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611210906133ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128090613553565b60405180910390fd5b611292816117c9565b50565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611374575061137382611ae5565b5b9050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113f683610a09565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061144782611295565b611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d906135e5565b60405180910390fd5b600061149183610a09565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061150057508373ffffffffffffffffffffffffffffffffffffffff166114e8846106c9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061151157506115108185611109565b5b91505092915050565b60005434101561155f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155690613651565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1661157f82610a09565b73ffffffffffffffffffffffffffffffffffffffff16146115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc906136e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c90613775565b60405180910390fd5b611650838383611bc7565b61165b600082611383565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116ab9190613795565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461170291906137c9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b6118bf828260405180602001604052806000815250611bd7565b5050565b6118cc82611295565b61190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190290613891565b60405180910390fd5b80600b6000848152602001908152602001600020908051906020019061193292919061263c565b505050565b61194284848461151a565b61194e84848484611c32565b61198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490613923565b60405180910390fd5b50505050565b606061199e82611295565b6119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d4906139b5565b60405180910390fd5b6000600b600084815260200190815260200160002080546119fd90612eb2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2990612eb2565b8015611a765780601f10611a4b57610100808354040283529160200191611a76565b820191906000526020600020905b815481529060010190602001808311611a5957829003601f168201915b505050505090506000611a87611db3565b9050600081511415611a9d578192505050611ae0565b600082511115611ad2578082604051602001611aba929190613a11565b60405160208183030381529060405292505050611ae0565b611adb84611dca565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bb057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bc05750611bbf82611e71565b5b9050919050565b611bd2838383611edb565b505050565b611be18383611fef565b611bee6000848484611c32565b611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490613923565b60405180910390fd5b505050565b6000611c3d846121bd565b15611da6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c6661137b565b8786866040518563ffffffff1660e01b8152600401611c889493929190613a8a565b602060405180830381600087803b158015611ca257600080fd5b505af1925050508015611cd357506040513d601f19601f82011682018060405250810190611cd09190613aeb565b60015b611d56573d8060008114611d03576040519150601f19603f3d011682016040523d82523d6000602084013e611d08565b606091505b50600081511415611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590613923565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611dab565b600190505b949350505050565b606060405180602001604052806000815250905090565b6060611dd582611295565b611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613b8a565b60405180910390fd5b6000611e1e611db3565b90506000815111611e3e5760405180602001604052806000815250611e69565b80611e48846121d0565b604051602001611e59929190613a11565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611ee6838383612331565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f2957611f2481612336565b611f68565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f6757611f66838261237f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fab57611fa6816124ec565b611fea565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611fe957611fe882826125bd565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690613bf6565b60405180910390fd5b61206881611295565b156120a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f90613c62565b60405180910390fd5b6120b460008383611bc7565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210491906137c9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612218576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061232c565b600082905060005b6000821461224a57808061223390613c82565b915050600a826122439190613cfa565b9150612220565b60008167ffffffffffffffff81111561226657612265612aaf565b5b6040519080825280601f01601f1916602001820160405280156122985781602001600182028036833780820191505090505b5090505b60008514612325576001826122b19190613795565b9150600a856122c09190613d2b565b60306122cc91906137c9565b60f81b8183815181106122e2576122e1613250565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561231e9190613cfa565b945061229c565b8093505050505b919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161238c84610acc565b6123969190613795565b905060006008600084815260200190815260200160002054905081811461247b576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506125009190613795565b90506000600a60008481526020019081526020016000205490506000600983815481106125305761252f613250565b5b90600052602060002001549050806009838154811061255257612551613250565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806125a1576125a0613d5c565b5b6001900381819060005260206000200160009055905550505050565b60006125c883610acc565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b82805461264890612eb2565b90600052602060002090601f01602090048101928261266a57600085556126b1565b82601f1061268357805160ff19168380011785556126b1565b828001600101855582156126b1579182015b828111156126b0578251825591602001919060010190612695565b5b5090506126be91906126c2565b5090565b5b808211156126db5760008160009055506001016126c3565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612728816126f3565b811461273357600080fd5b50565b6000813590506127458161271f565b92915050565b600060208284031215612761576127606126e9565b5b600061276f84828501612736565b91505092915050565b60008115159050919050565b61278d81612778565b82525050565b60006020820190506127a86000830184612784565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127e85780820151818401526020810190506127cd565b838111156127f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612819826127ae565b61282381856127b9565b93506128338185602086016127ca565b61283c816127fd565b840191505092915050565b60006020820190508181036000830152612861818461280e565b905092915050565b6000819050919050565b61287c81612869565b811461288757600080fd5b50565b60008135905061289981612873565b92915050565b6000602082840312156128b5576128b46126e9565b5b60006128c38482850161288a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128f7826128cc565b9050919050565b612907816128ec565b82525050565b600060208201905061292260008301846128fe565b92915050565b612931816128ec565b811461293c57600080fd5b50565b60008135905061294e81612928565b92915050565b6000806040838503121561296b5761296a6126e9565b5b60006129798582860161293f565b925050602061298a8582860161288a565b9150509250929050565b61299d81612869565b82525050565b60006020820190506129b86000830184612994565b92915050565b6000806000606084860312156129d7576129d66126e9565b5b60006129e58682870161293f565b93505060206129f68682870161293f565b9250506040612a078682870161288a565b9150509250925092565b600060208284031215612a2757612a266126e9565b5b6000612a358482850161293f565b91505092915050565b612a4781612778565b8114612a5257600080fd5b50565b600081359050612a6481612a3e565b92915050565b60008060408385031215612a8157612a806126e9565b5b6000612a8f8582860161293f565b9250506020612aa085828601612a55565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ae7826127fd565b810181811067ffffffffffffffff82111715612b0657612b05612aaf565b5b80604052505050565b6000612b196126df565b9050612b258282612ade565b919050565b600067ffffffffffffffff821115612b4557612b44612aaf565b5b602082029050602081019050919050565b600080fd5b6000612b6e612b6984612b2a565b612b0f565b90508083825260208201905060208402830185811115612b9157612b90612b56565b5b835b81811015612bba5780612ba6888261293f565b845260208401935050602081019050612b93565b5050509392505050565b600082601f830112612bd957612bd8612aaa565b5b8135612be9848260208601612b5b565b91505092915050565b600080fd5b600067ffffffffffffffff821115612c1257612c11612aaf565b5b612c1b826127fd565b9050602081019050919050565b82818337600083830152505050565b6000612c4a612c4584612bf7565b612b0f565b905082815260208101848484011115612c6657612c65612bf2565b5b612c71848285612c28565b509392505050565b600082601f830112612c8e57612c8d612aaa565b5b8135612c9e848260208601612c37565b91505092915050565b60008060408385031215612cbe57612cbd6126e9565b5b600083013567ffffffffffffffff811115612cdc57612cdb6126ee565b5b612ce885828601612bc4565b925050602083013567ffffffffffffffff811115612d0957612d086126ee565b5b612d1585828601612c79565b9150509250929050565b600067ffffffffffffffff821115612d3a57612d39612aaf565b5b612d43826127fd565b9050602081019050919050565b6000612d63612d5e84612d1f565b612b0f565b905082815260208101848484011115612d7f57612d7e612bf2565b5b612d8a848285612c28565b509392505050565b600082601f830112612da757612da6612aaa565b5b8135612db7848260208601612d50565b91505092915050565b60008060008060808587031215612dda57612dd96126e9565b5b6000612de88782880161293f565b9450506020612df98782880161293f565b9350506040612e0a8782880161288a565b925050606085013567ffffffffffffffff811115612e2b57612e2a6126ee565b5b612e3787828801612d92565b91505092959194509250565b60008060408385031215612e5a57612e596126e9565b5b6000612e688582860161293f565b9250506020612e798582860161293f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612eca57607f821691505b60208210811415612ede57612edd612e83565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612f40602c836127b9565b9150612f4b82612ee4565b604082019050919050565b60006020820190508181036000830152612f6f81612f33565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fd26021836127b9565b9150612fdd82612f76565b604082019050919050565b6000602082019050818103600083015261300181612fc5565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006130646038836127b9565b915061306f82613008565b604082019050919050565b6000602082019050818103600083015261309381613057565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006130f66031836127b9565b91506131018261309a565b604082019050919050565b60006020820190508181036000830152613125816130e9565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613188602b836127b9565b91506131938261312c565b604082019050919050565b600060208201905081810360008301526131b78161317b565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061321a602c836127b9565b9150613225826131be565b604082019050919050565b600060208201905081810360008301526132498161320d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006132db6029836127b9565b91506132e68261327f565b604082019050919050565b6000602082019050818103600083015261330a816132ce565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061336d602a836127b9565b915061337882613311565b604082019050919050565b6000602082019050818103600083015261339c81613360565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133d96020836127b9565b91506133e4826133a3565b602082019050919050565b60006020820190508181036000830152613408816133cc565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006134456019836127b9565b91506134508261340f565b602082019050919050565b6000602082019050818103600083015261347481613438565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff82169050919050565b60006134c2826134aa565b915060ff8214156134d6576134d561347b565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061353d6026836127b9565b9150613548826134e1565b604082019050919050565b6000602082019050818103600083015261356c81613530565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006135cf602c836127b9565b91506135da82613573565b604082019050919050565b600060208201905081810360008301526135fe816135c2565b9050919050565b7f696e73756666696369656e7420616d6f756e7400000000000000000000000000600082015250565b600061363b6013836127b9565b915061364682613605565b602082019050919050565b6000602082019050818103600083015261366a8161362e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006136cd6029836127b9565b91506136d882613671565b604082019050919050565b600060208201905081810360008301526136fc816136c0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061375f6024836127b9565b915061376a82613703565b604082019050919050565b6000602082019050818103600083015261378e81613752565b9050919050565b60006137a082612869565b91506137ab83612869565b9250828210156137be576137bd61347b565b5b828203905092915050565b60006137d482612869565b91506137df83612869565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138145761381361347b565b5b828201905092915050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b600061387b602e836127b9565b91506138868261381f565b604082019050919050565b600060208201905081810360008301526138aa8161386e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061390d6032836127b9565b9150613918826138b1565b604082019050919050565b6000602082019050818103600083015261393c81613900565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b600061399f6031836127b9565b91506139aa82613943565b604082019050919050565b600060208201905081810360008301526139ce81613992565b9050919050565b600081905092915050565b60006139eb826127ae565b6139f581856139d5565b9350613a058185602086016127ca565b80840191505092915050565b6000613a1d82856139e0565b9150613a2982846139e0565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613a5c82613a35565b613a668185613a40565b9350613a768185602086016127ca565b613a7f816127fd565b840191505092915050565b6000608082019050613a9f60008301876128fe565b613aac60208301866128fe565b613ab96040830185612994565b8181036060830152613acb8184613a51565b905095945050505050565b600081519050613ae58161271f565b92915050565b600060208284031215613b0157613b006126e9565b5b6000613b0f84828501613ad6565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613b74602f836127b9565b9150613b7f82613b18565b604082019050919050565b60006020820190508181036000830152613ba381613b67565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613be06020836127b9565b9150613beb82613baa565b602082019050919050565b60006020820190508181036000830152613c0f81613bd3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613c4c601c836127b9565b9150613c5782613c16565b602082019050919050565b60006020820190508181036000830152613c7b81613c3f565b9050919050565b6000613c8d82612869565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cc057613cbf61347b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d0582612869565b9150613d1083612869565b925082613d2057613d1f613ccb565b5b828204905092915050565b6000613d3682612869565b9150613d4183612869565b925082613d5157613d50613ccb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207633dc16e12a214014d94302b741b603c1830b193b4c53dbc2a3d13c2e2fd04e64736f6c634300080900330000000000000000000000002a14e56d14e2615cb6626b9dbc90a6f3940f8a4d

Deployed Bytecode

0x6080604052600436106101855760003560e01c806381530b68116100d1578063b6c320741161008a578063e941fa7811610064578063e941fa781461056b578063e985e9c514610582578063f2fde38b146105bf578063f8e76cc0146105e85761018c565b8063b6c32074146104f6578063b88d4fde14610512578063c87b56dd1461052e5761018c565b806381530b68146103f85780638da5cb5b1461042157806395d89b411461044c57806398d5fdca14610477578063a22cb465146104a2578063a38bffda146104cb5761018c565b80632f745c591161013e5780636352211e116101185780636352211e1461033c578063654ebbe71461037957806370a08231146103a4578063715018a6146103e15761018c565b80632f745c59146102a657806342842e0e146102e35780634f6ccce7146102ff5761018c565b806301ffc9a71461019157806306fdde03146101ce578063081812fc146101f9578063095ea7b31461023657806318160ddd1461025f57806323b872dd1461028a5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101b860048036038101906101b3919061274b565b610625565b6040516101c59190612793565b60405180910390f35b3480156101da57600080fd5b506101e3610637565b6040516101f09190612847565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b919061289f565b6106c9565b60405161022d919061290d565b60405180910390f35b34801561024257600080fd5b5061025d60048036038101906102589190612954565b61074e565b005b34801561026b57600080fd5b50610274610866565b60405161028191906129a3565b60405180910390f35b6102a4600480360381019061029f91906129be565b610873565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190612954565b6108d3565b6040516102da91906129a3565b60405180910390f35b6102fd60048036038101906102f891906129be565b610978565b005b34801561030b57600080fd5b506103266004803603810190610321919061289f565b610998565b60405161033391906129a3565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061289f565b610a09565b604051610370919061290d565b60405180910390f35b34801561038557600080fd5b5061038e610abb565b60405161039b91906129a3565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c69190612a11565b610acc565b6040516103d891906129a3565b60405180910390f35b3480156103ed57600080fd5b506103f6610b84565b005b34801561040457600080fd5b5061041f600480360381019061041a919061289f565b610c0c565b005b34801561042d57600080fd5b50610436610c92565b604051610443919061290d565b60405180910390f35b34801561045857600080fd5b50610461610cbc565b60405161046e9190612847565b60405180910390f35b34801561048357600080fd5b5061048c610d4e565b60405161049991906129a3565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190612a6a565b610d57565b005b3480156104d757600080fd5b506104e0610ed8565b6040516104ed91906129a3565b60405180910390f35b610510600480360381019061050b9190612ca7565b610ede565b005b61052c60048036038101906105279190612dc0565b610fc9565b005b34801561053a57600080fd5b506105556004803603810190610550919061289f565b61102b565b6040516105629190612847565b60405180910390f35b34801561057757600080fd5b5061058061103d565b005b34801561058e57600080fd5b506105a960048036038101906105a49190612e43565b611109565b6040516105b69190612793565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190612a11565b61119d565b005b3480156105f457600080fd5b5061060f600480360381019061060a919061289f565b611295565b60405161061c9190612793565b60405180910390f35b600061063082611301565b9050919050565b60606001805461064690612eb2565b80601f016020809104026020016040519081016040528092919081815260200182805461067290612eb2565b80156106bf5780601f10610694576101008083540402835291602001916106bf565b820191906000526020600020905b8154815290600101906020018083116106a257829003601f168201915b5050505050905090565b60006106d482611295565b610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a90612f56565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061075982610a09565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c190612fe8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107e961137b565b73ffffffffffffffffffffffffffffffffffffffff16148061081857506108178161081261137b565b611109565b5b610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e9061307a565b60405180910390fd5b6108618383611383565b505050565b6000600980549050905090565b61088461087e61137b565b8261143c565b6108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba9061310c565b60405180910390fd5b6108ce83838361151a565b505050565b60006108de83610acc565b821061091f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109169061319e565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61099383838360405180602001604052806000815250610fc9565b505050565b60006109a2610866565b82106109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90613230565b60405180910390fd5b600982815481106109f7576109f6613250565b5b90600052602060002001549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa9906132f1565b60405180910390fd5b80915050919050565b6000610ac7600e6117bb565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490613383565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b8c61137b565b73ffffffffffffffffffffffffffffffffffffffff16610baa610c92565b73ffffffffffffffffffffffffffffffffffffffff1614610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906133ef565b60405180910390fd5b610c0a60006117c9565b565b610c1461137b565b73ffffffffffffffffffffffffffffffffffffffff16610c32610c92565b73ffffffffffffffffffffffffffffffffffffffff1614610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f906133ef565b60405180910390fd5b8060008190555050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610ccb90612eb2565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf790612eb2565b8015610d445780601f10610d1957610100808354040283529160200191610d44565b820191906000526020600020905b815481529060010190602001808311610d2757829003601f168201915b5050505050905090565b60008054905090565b610d5f61137b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc49061345b565b60405180910390fd5b8060066000610dda61137b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e8761137b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ecc9190612793565b60405180910390a35050565b60005481565b610ee661137b565b73ffffffffffffffffffffffffffffffffffffffff16610f04610c92565b73ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51906133ef565b60405180910390fd5b60005b82518160ff161015610fc457610f73600e61188f565b6000610f7d610abb565b9050610fa6848360ff1681518110610f9857610f97613250565b5b6020026020010151826118a5565b610fb081846118c3565b508080610fbc906134b7565b915050610f5d565b505050565b610fda610fd461137b565b8361143c565b611019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110109061310c565b60405180910390fd5b61102584848484611937565b50505050565b606061103682611993565b9050919050565b61104561137b565b73ffffffffffffffffffffffffffffffffffffffff16611063610c92565b73ffffffffffffffffffffffffffffffffffffffff16146110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b0906133ef565b60405180910390fd5b6110c1610c92565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611106573d6000803e3d6000fd5b50565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111a561137b565b73ffffffffffffffffffffffffffffffffffffffff166111c3610c92565b73ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611210906133ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128090613553565b60405180910390fd5b611292816117c9565b50565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611374575061137382611ae5565b5b9050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113f683610a09565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061144782611295565b611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d906135e5565b60405180910390fd5b600061149183610a09565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061150057508373ffffffffffffffffffffffffffffffffffffffff166114e8846106c9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061151157506115108185611109565b5b91505092915050565b60005434101561155f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155690613651565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1661157f82610a09565b73ffffffffffffffffffffffffffffffffffffffff16146115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc906136e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c90613775565b60405180910390fd5b611650838383611bc7565b61165b600082611383565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116ab9190613795565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461170291906137c9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b6118bf828260405180602001604052806000815250611bd7565b5050565b6118cc82611295565b61190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190290613891565b60405180910390fd5b80600b6000848152602001908152602001600020908051906020019061193292919061263c565b505050565b61194284848461151a565b61194e84848484611c32565b61198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490613923565b60405180910390fd5b50505050565b606061199e82611295565b6119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d4906139b5565b60405180910390fd5b6000600b600084815260200190815260200160002080546119fd90612eb2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2990612eb2565b8015611a765780601f10611a4b57610100808354040283529160200191611a76565b820191906000526020600020905b815481529060010190602001808311611a5957829003601f168201915b505050505090506000611a87611db3565b9050600081511415611a9d578192505050611ae0565b600082511115611ad2578082604051602001611aba929190613a11565b60405160208183030381529060405292505050611ae0565b611adb84611dca565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bb057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bc05750611bbf82611e71565b5b9050919050565b611bd2838383611edb565b505050565b611be18383611fef565b611bee6000848484611c32565b611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490613923565b60405180910390fd5b505050565b6000611c3d846121bd565b15611da6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c6661137b565b8786866040518563ffffffff1660e01b8152600401611c889493929190613a8a565b602060405180830381600087803b158015611ca257600080fd5b505af1925050508015611cd357506040513d601f19601f82011682018060405250810190611cd09190613aeb565b60015b611d56573d8060008114611d03576040519150601f19603f3d011682016040523d82523d6000602084013e611d08565b606091505b50600081511415611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590613923565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611dab565b600190505b949350505050565b606060405180602001604052806000815250905090565b6060611dd582611295565b611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613b8a565b60405180910390fd5b6000611e1e611db3565b90506000815111611e3e5760405180602001604052806000815250611e69565b80611e48846121d0565b604051602001611e59929190613a11565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611ee6838383612331565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f2957611f2481612336565b611f68565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f6757611f66838261237f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fab57611fa6816124ec565b611fea565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611fe957611fe882826125bd565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690613bf6565b60405180910390fd5b61206881611295565b156120a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f90613c62565b60405180910390fd5b6120b460008383611bc7565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210491906137c9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612218576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061232c565b600082905060005b6000821461224a57808061223390613c82565b915050600a826122439190613cfa565b9150612220565b60008167ffffffffffffffff81111561226657612265612aaf565b5b6040519080825280601f01601f1916602001820160405280156122985781602001600182028036833780820191505090505b5090505b60008514612325576001826122b19190613795565b9150600a856122c09190613d2b565b60306122cc91906137c9565b60f81b8183815181106122e2576122e1613250565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561231e9190613cfa565b945061229c565b8093505050505b919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161238c84610acc565b6123969190613795565b905060006008600084815260200190815260200160002054905081811461247b576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506125009190613795565b90506000600a60008481526020019081526020016000205490506000600983815481106125305761252f613250565b5b90600052602060002001549050806009838154811061255257612551613250565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806125a1576125a0613d5c565b5b6001900381819060005260206000200160009055905550505050565b60006125c883610acc565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b82805461264890612eb2565b90600052602060002090601f01602090048101928261266a57600085556126b1565b82601f1061268357805160ff19168380011785556126b1565b828001600101855582156126b1579182015b828111156126b0578251825591602001919060010190612695565b5b5090506126be91906126c2565b5090565b5b808211156126db5760008160009055506001016126c3565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612728816126f3565b811461273357600080fd5b50565b6000813590506127458161271f565b92915050565b600060208284031215612761576127606126e9565b5b600061276f84828501612736565b91505092915050565b60008115159050919050565b61278d81612778565b82525050565b60006020820190506127a86000830184612784565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127e85780820151818401526020810190506127cd565b838111156127f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612819826127ae565b61282381856127b9565b93506128338185602086016127ca565b61283c816127fd565b840191505092915050565b60006020820190508181036000830152612861818461280e565b905092915050565b6000819050919050565b61287c81612869565b811461288757600080fd5b50565b60008135905061289981612873565b92915050565b6000602082840312156128b5576128b46126e9565b5b60006128c38482850161288a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128f7826128cc565b9050919050565b612907816128ec565b82525050565b600060208201905061292260008301846128fe565b92915050565b612931816128ec565b811461293c57600080fd5b50565b60008135905061294e81612928565b92915050565b6000806040838503121561296b5761296a6126e9565b5b60006129798582860161293f565b925050602061298a8582860161288a565b9150509250929050565b61299d81612869565b82525050565b60006020820190506129b86000830184612994565b92915050565b6000806000606084860312156129d7576129d66126e9565b5b60006129e58682870161293f565b93505060206129f68682870161293f565b9250506040612a078682870161288a565b9150509250925092565b600060208284031215612a2757612a266126e9565b5b6000612a358482850161293f565b91505092915050565b612a4781612778565b8114612a5257600080fd5b50565b600081359050612a6481612a3e565b92915050565b60008060408385031215612a8157612a806126e9565b5b6000612a8f8582860161293f565b9250506020612aa085828601612a55565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ae7826127fd565b810181811067ffffffffffffffff82111715612b0657612b05612aaf565b5b80604052505050565b6000612b196126df565b9050612b258282612ade565b919050565b600067ffffffffffffffff821115612b4557612b44612aaf565b5b602082029050602081019050919050565b600080fd5b6000612b6e612b6984612b2a565b612b0f565b90508083825260208201905060208402830185811115612b9157612b90612b56565b5b835b81811015612bba5780612ba6888261293f565b845260208401935050602081019050612b93565b5050509392505050565b600082601f830112612bd957612bd8612aaa565b5b8135612be9848260208601612b5b565b91505092915050565b600080fd5b600067ffffffffffffffff821115612c1257612c11612aaf565b5b612c1b826127fd565b9050602081019050919050565b82818337600083830152505050565b6000612c4a612c4584612bf7565b612b0f565b905082815260208101848484011115612c6657612c65612bf2565b5b612c71848285612c28565b509392505050565b600082601f830112612c8e57612c8d612aaa565b5b8135612c9e848260208601612c37565b91505092915050565b60008060408385031215612cbe57612cbd6126e9565b5b600083013567ffffffffffffffff811115612cdc57612cdb6126ee565b5b612ce885828601612bc4565b925050602083013567ffffffffffffffff811115612d0957612d086126ee565b5b612d1585828601612c79565b9150509250929050565b600067ffffffffffffffff821115612d3a57612d39612aaf565b5b612d43826127fd565b9050602081019050919050565b6000612d63612d5e84612d1f565b612b0f565b905082815260208101848484011115612d7f57612d7e612bf2565b5b612d8a848285612c28565b509392505050565b600082601f830112612da757612da6612aaa565b5b8135612db7848260208601612d50565b91505092915050565b60008060008060808587031215612dda57612dd96126e9565b5b6000612de88782880161293f565b9450506020612df98782880161293f565b9350506040612e0a8782880161288a565b925050606085013567ffffffffffffffff811115612e2b57612e2a6126ee565b5b612e3787828801612d92565b91505092959194509250565b60008060408385031215612e5a57612e596126e9565b5b6000612e688582860161293f565b9250506020612e798582860161293f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612eca57607f821691505b60208210811415612ede57612edd612e83565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612f40602c836127b9565b9150612f4b82612ee4565b604082019050919050565b60006020820190508181036000830152612f6f81612f33565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fd26021836127b9565b9150612fdd82612f76565b604082019050919050565b6000602082019050818103600083015261300181612fc5565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006130646038836127b9565b915061306f82613008565b604082019050919050565b6000602082019050818103600083015261309381613057565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006130f66031836127b9565b91506131018261309a565b604082019050919050565b60006020820190508181036000830152613125816130e9565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613188602b836127b9565b91506131938261312c565b604082019050919050565b600060208201905081810360008301526131b78161317b565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061321a602c836127b9565b9150613225826131be565b604082019050919050565b600060208201905081810360008301526132498161320d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006132db6029836127b9565b91506132e68261327f565b604082019050919050565b6000602082019050818103600083015261330a816132ce565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061336d602a836127b9565b915061337882613311565b604082019050919050565b6000602082019050818103600083015261339c81613360565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133d96020836127b9565b91506133e4826133a3565b602082019050919050565b60006020820190508181036000830152613408816133cc565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006134456019836127b9565b91506134508261340f565b602082019050919050565b6000602082019050818103600083015261347481613438565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff82169050919050565b60006134c2826134aa565b915060ff8214156134d6576134d561347b565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061353d6026836127b9565b9150613548826134e1565b604082019050919050565b6000602082019050818103600083015261356c81613530565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006135cf602c836127b9565b91506135da82613573565b604082019050919050565b600060208201905081810360008301526135fe816135c2565b9050919050565b7f696e73756666696369656e7420616d6f756e7400000000000000000000000000600082015250565b600061363b6013836127b9565b915061364682613605565b602082019050919050565b6000602082019050818103600083015261366a8161362e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006136cd6029836127b9565b91506136d882613671565b604082019050919050565b600060208201905081810360008301526136fc816136c0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061375f6024836127b9565b915061376a82613703565b604082019050919050565b6000602082019050818103600083015261378e81613752565b9050919050565b60006137a082612869565b91506137ab83612869565b9250828210156137be576137bd61347b565b5b828203905092915050565b60006137d482612869565b91506137df83612869565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138145761381361347b565b5b828201905092915050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b600061387b602e836127b9565b91506138868261381f565b604082019050919050565b600060208201905081810360008301526138aa8161386e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061390d6032836127b9565b9150613918826138b1565b604082019050919050565b6000602082019050818103600083015261393c81613900565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b600061399f6031836127b9565b91506139aa82613943565b604082019050919050565b600060208201905081810360008301526139ce81613992565b9050919050565b600081905092915050565b60006139eb826127ae565b6139f581856139d5565b9350613a058185602086016127ca565b80840191505092915050565b6000613a1d82856139e0565b9150613a2982846139e0565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613a5c82613a35565b613a668185613a40565b9350613a768185602086016127ca565b613a7f816127fd565b840191505092915050565b6000608082019050613a9f60008301876128fe565b613aac60208301866128fe565b613ab96040830185612994565b8181036060830152613acb8184613a51565b905095945050505050565b600081519050613ae58161271f565b92915050565b600060208284031215613b0157613b006126e9565b5b6000613b0f84828501613ad6565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613b74602f836127b9565b9150613b7f82613b18565b604082019050919050565b60006020820190508181036000830152613ba381613b67565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613be06020836127b9565b9150613beb82613baa565b602082019050919050565b60006020820190508181036000830152613c0f81613bd3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613c4c601c836127b9565b9150613c5782613c16565b602082019050919050565b60006020820190508181036000830152613c7b81613c3f565b9050919050565b6000613c8d82612869565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cc057613cbf61347b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d0582612869565b9150613d1083612869565b925082613d2057613d1f613ccb565b5b828204905092915050565b6000613d3682612869565b9150613d4183612869565b925082613d5157613d50613ccb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207633dc16e12a214014d94302b741b603c1830b193b4c53dbc2a3d13c2e2fd04e64736f6c63430008090033

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

0000000000000000000000002a14e56d14e2615cb6626b9dbc90a6f3940f8a4d

-----Decoded View---------------
Arg [0] : _owner (address): 0x2a14e56d14E2615CB6626B9Dbc90A6f3940F8A4D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002a14e56d14e2615cb6626b9dbc90a6f3940f8a4d


Deployed Bytecode Sourcemap

43463:2025:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44567:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14111:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15804:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15327:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26566:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16863:384;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26147:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17318:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26756:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13718:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43816:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13361:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34604:94;;;;;;;;;;;;;:::i;:::-;;45303:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33953:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14280:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45401:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16184:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12057:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44787:354;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17582:373;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44363:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45149:109;;;;;;;;;;;;;:::i;:::-;;16582:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34853:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18323:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44567:212;44706:4;44735:36;44759:11;44735:23;:36::i;:::-;44728:43;;44567:212;;;:::o;14111:100::-;14165:13;14198:5;14191:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14111:100;:::o;15804:308::-;15925:7;15972:16;15980:7;15972;:16::i;:::-;15950:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;16080:15;:24;16096:7;16080:24;;;;;;;;;;;;;;;;;;;;;16073:31;;15804:308;;;:::o;15327:411::-;15408:13;15424:23;15439:7;15424:14;:23::i;:::-;15408:39;;15472:5;15466:11;;:2;:11;;;;15458:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;15566:5;15550:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;15575:37;15592:5;15599:12;:10;:12::i;:::-;15575:16;:37::i;:::-;15550:62;15528:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;15709:21;15718:2;15722:7;15709:8;:21::i;:::-;15397:341;15327:411;;:::o;26566:113::-;26627:7;26654:10;:17;;;;26647:24;;26566:113;:::o;16863:384::-;17080:41;17099:12;:10;:12::i;:::-;17113:7;17080:18;:41::i;:::-;17058:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;17211:28;17221:4;17227:2;17231:7;17211:9;:28::i;:::-;16863:384;;;:::o;26147:343::-;26289:7;26344:23;26361:5;26344:16;:23::i;:::-;26336:5;:31;26314:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;26456:12;:19;26469:5;26456:19;;;;;;;;;;;;;;;:26;26476:5;26456:26;;;;;;;;;;;;26449:33;;26147:343;;;;:::o;17318:193::-;17464:39;17481:4;17487:2;17491:7;17464:39;;;;;;;;;;;;:16;:39::i;:::-;17318:193;;;:::o;26756:320::-;26876:7;26931:30;:28;:30::i;:::-;26923:5;:38;26901:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;27051:10;27062:5;27051:17;;;;;;;;:::i;:::-;;;;;;;;;;27044:24;;26756:320;;;:::o;13718:326::-;13835:7;13860:13;13876:7;:16;13884:7;13876:16;;;;;;;;;;;;;;;;;;;;;13860:32;;13942:1;13925:19;;:5;:19;;;;13903:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;14031:5;14024:12;;;13718:326;;;:::o;43816:102::-;43864:7;43891:19;:9;:17;:19::i;:::-;43884:26;;43816:102;:::o;13361:295::-;13478:7;13542:1;13525:19;;:5;:19;;;;13503:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;13632:9;:16;13642:5;13632:16;;;;;;;;;;;;;;;;13625:23;;13361:295;;;:::o;34604:94::-;34184:12;:10;:12::i;:::-;34173:23;;:7;:5;:7::i;:::-;:23;;;34165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34669:21:::1;34687:1;34669:9;:21::i;:::-;34604:94::o:0;45303:90::-;34184:12;:10;:12::i;:::-;34173:23;;:7;:5;:7::i;:::-;:23;;;34165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45379:6:::1;45368:8;:17;;;;45303:90:::0;:::o;33953:87::-;33999:7;34026:6;;;;;;;;;;;34019:13;;33953:87;:::o;14280:104::-;14336:13;14369:7;14362:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14280:104;:::o;45401:84::-;45442:7;45469:8;;45462:15;;45401:84;:::o;16184:327::-;16331:12;:10;:12::i;:::-;16319:24;;:8;:24;;;;16311:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16431:8;16386:18;:32;16405:12;:10;:12::i;:::-;16386:32;;;;;;;;;;;;;;;:42;16419:8;16386:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;16484:8;16455:48;;16470:12;:10;:12::i;:::-;16455:48;;;16494:8;16455:48;;;;;;:::i;:::-;;;;;;;;16184:327;;:::o;12057:35::-;;;;:::o;44787:354::-;34184:12;:10;:12::i;:::-;34173:23;;:7;:5;:7::i;:::-;:23;;;34165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44922:7:::1;44917:217;44939:2;:9;44935:1;:13;;;44917:217;;;44970:21;:9;:19;:21::i;:::-;45006:13;45022:17;:15;:17::i;:::-;45006:33;;45054:23;45064:2;45067:1;45064:5;;;;;;;;;;:::i;:::-;;;;;;;;45071;45054:9;:23::i;:::-;45092:30;45105:5;45112:9;45092:12;:30::i;:::-;44955:179;44950:3;;;;;:::i;:::-;;;;44917:217;;;;44787:354:::0;;:::o;17582:373::-;17779:41;17798:12;:10;:12::i;:::-;17812:7;17779:18;:41::i;:::-;17757:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;17908:39;17922:4;17928:2;17932:7;17941:5;17908:13;:39::i;:::-;17582:373;;;;:::o;44363:196::-;44490:13;44528:23;44543:7;44528:14;:23::i;:::-;44521:30;;44363:196;;;:::o;45149:109::-;34184:12;:10;:12::i;:::-;34173:23;;:7;:5;:7::i;:::-;:23;;;34165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45210:7:::1;:5;:7::i;:::-;45202:25;;:48;45228:21;45202:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45149:109::o:0;16582:214::-;16724:4;16753:18;:25;16772:5;16753:25;;;;;;;;;;;;;;;:35;16779:8;16753:35;;;;;;;;;;;;;;;;;;;;;;;;;16746:42;;16582:214;;;;:::o;34853:229::-;34184:12;:10;:12::i;:::-;34173:23;;:7;:5;:7::i;:::-;:23;;;34165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34976:1:::1;34956:22;;:8;:22;;;;34934:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35055:19;35065:8;35055:9;:19::i;:::-;34853:229:::0;:::o;18323:125::-;18386:4;18438:1;18410:30;;:7;:16;18418:7;18410:16;;;;;;;;;;;;;;;;;;;;;:30;;;;18403:37;;18323:125;;;:::o;25763:300::-;25910:4;25967:35;25952:50;;;:11;:50;;;;:103;;;;26019:36;26043:11;26019:23;:36::i;:::-;25952:103;25932:123;;25763:300;;;:::o;9119:98::-;9172:7;9199:10;9192:17;;9119:98;:::o;22349:174::-;22451:2;22424:15;:24;22440:7;22424:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;22507:7;22503:2;22469:46;;22478:23;22493:7;22478:14;:23::i;:::-;22469:46;;;;;;;;;;;;22349:174;;:::o;18456:452::-;18585:4;18629:16;18637:7;18629;:16::i;:::-;18607:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;18728:13;18744:23;18759:7;18744:14;:23::i;:::-;18728:39;;18797:5;18786:16;;:7;:16;;;:64;;;;18843:7;18819:31;;:20;18831:7;18819:11;:20::i;:::-;:31;;;18786:64;:113;;;;18867:32;18884:5;18891:7;18867:16;:32::i;:::-;18786:113;18778:122;;;18456:452;;;;:::o;21552:679::-;21697:8;;21684:9;:21;;21676:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21789:4;21762:31;;:23;21777:7;21762:14;:23::i;:::-;:31;;;21740:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;21895:1;21881:16;;:2;:16;;;;21873:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21951:39;21972:4;21978:2;21982:7;21951:20;:39::i;:::-;22055:29;22072:1;22076:7;22055:8;:29::i;:::-;22116:1;22097:9;:15;22107:4;22097:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;22145:1;22128:9;:13;22138:2;22128:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;22176:2;22157:7;:16;22165:7;22157:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;22215:7;22211:2;22196:27;;22205:4;22196:27;;;;;;;;;;;;21552:679;;;:::o;36001:114::-;36066:7;36093;:14;;;36086:21;;36001:114;;;:::o;35090:173::-;35146:16;35165:6;;;;;;;;;;;35146:25;;35191:8;35182:6;;:17;;;;;;;;;;;;;;;;;;35246:8;35215:40;;35236:8;35215:40;;;;;;;;;;;;35135:128;35090:173;:::o;36123:127::-;36230:1;36212:7;:14;;;:19;;;;;;;;;;;36123:127;:::o;19250:110::-;19326:26;19336:2;19340:7;19326:26;;;;;;;;;;;;:9;:26::i;:::-;19250:110;;:::o;32794:277::-;32931:16;32939:7;32931;:16::i;:::-;32909:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;33054:9;33032:10;:19;33043:7;33032:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;32794:277;;:::o;17963:352::-;18120:28;18130:4;18136:2;18140:7;18120:9;:28::i;:::-;18181:48;18204:4;18210:2;18214:7;18223:5;18181:22;:48::i;:::-;18159:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;17963:352;;;;:::o;31872:766::-;31990:13;32043:16;32051:7;32043;:16::i;:::-;32021:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;32149:23;32175:10;:19;32186:7;32175:19;;;;;;;;;;;32149:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32205:18;32226:10;:8;:10::i;:::-;32205:31;;32334:1;32318:4;32312:18;:23;32308:72;;;32359:9;32352:16;;;;;;32308:72;32510:1;32490:9;32484:23;:27;32480:108;;;32559:4;32565:9;32542:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32528:48;;;;;;32480:108;32607:23;32622:7;32607:14;:23::i;:::-;32600:30;;;;31872:766;;;;:::o;12942:355::-;13089:4;13146:25;13131:40;;;:11;:40;;;;:105;;;;13203:33;13188:48;;;:11;:48;;;;13131:105;:158;;;;13253:36;13277:11;13253:23;:36::i;:::-;13131:158;13111:178;;12942:355;;;:::o;43994:215::-;44156:45;44183:4;44189:2;44193:7;44156:26;:45::i;:::-;43994:215;;;:::o;19587:321::-;19717:18;19723:2;19727:7;19717:5;:18::i;:::-;19768:54;19799:1;19803:2;19807:7;19816:5;19768:22;:54::i;:::-;19746:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;19587:321;;;:::o;22926:979::-;23081:4;23102:14;23113:2;23102:10;:14::i;:::-;23098:800;;;23170:2;23154:36;;;23213:12;:10;:12::i;:::-;23248:4;23275:7;23305:5;23154:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23133:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23529:1;23512:6;:13;:18;23508:320;;;23555:108;;;;;;;;;;:::i;:::-;;;;;;;;23508:320;23778:6;23772:13;23763:6;23759:2;23755:15;23748:38;23133:710;23403:41;;;23393:51;;;:6;:51;;;;23386:58;;;;;23098:800;23882:4;23875:11;;22926:979;;;;;;;:::o;15171:94::-;15222:13;15248:9;;;;;;;;;;;;;;15171:94;:::o;14455:468::-;14573:13;14626:16;14634:7;14626;:16::i;:::-;14604:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;14730:21;14754:10;:8;:10::i;:::-;14730:34;;14819:1;14801:7;14795:21;:25;:120;;;;;;;;;;;;;;;;;14864:7;14873:18;:7;:16;:18::i;:::-;14847:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14795:120;14775:140;;;14455:468;;;:::o;11457:207::-;11587:4;11631:25;11616:40;;;:11;:40;;;;11609:47;;11457:207;;;:::o;27689:589::-;27833:45;27860:4;27866:2;27870:7;27833:26;:45::i;:::-;27911:1;27895:18;;:4;:18;;;27891:187;;;27930:40;27962:7;27930:31;:40::i;:::-;27891:187;;;28000:2;27992:10;;:4;:10;;;27988:90;;28019:47;28052:4;28058:7;28019:32;:47::i;:::-;27988:90;27891:187;28106:1;28092:16;;:2;:16;;;28088:183;;;28125:45;28162:7;28125:36;:45::i;:::-;28088:183;;;28198:4;28192:10;;:2;:10;;;28188:83;;28219:40;28247:2;28251:7;28219:27;:40::i;:::-;28188:83;28088:183;27689:589;;;:::o;20244:382::-;20338:1;20324:16;;:2;:16;;;;20316:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20397:16;20405:7;20397;:16::i;:::-;20396:17;20388:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;20459:45;20488:1;20492:2;20496:7;20459:20;:45::i;:::-;20534:1;20517:9;:13;20527:2;20517:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;20565:2;20546:7;:16;20554:7;20546:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;20610:7;20606:2;20585:33;;20602:1;20585:33;;;;;;;;;;;;20244:382;;:::o;22531:387::-;22591:4;22799:12;22866:7;22854:20;22846:28;;22909:1;22902:4;:8;22895:15;;;22531:387;;;:::o;9559:723::-;9615:13;9845:1;9836:5;:10;9832:53;;;9863:10;;;;;;;;;;;;;;;;;;;;;9832:53;9895:12;9910:5;9895:20;;9926:14;9951:78;9966:1;9958:4;:9;9951:78;;9984:8;;;;;:::i;:::-;;;;10015:2;10007:10;;;;;:::i;:::-;;;9951:78;;;10039:19;10071:6;10061:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10039:39;;10089:154;10105:1;10096:5;:10;10089:154;;10133:1;10123:11;;;;;:::i;:::-;;;10200:2;10192:5;:10;;;;:::i;:::-;10179:2;:24;;;;:::i;:::-;10166:39;;10149:6;10156;10149:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;10229:2;10220:11;;;;;:::i;:::-;;;10089:154;;;10267:6;10253:21;;;;;9559:723;;;;:::o;23913:126::-;;;;:::o;29001:164::-;29105:10;:17;;;;29078:15;:24;29094:7;29078:24;;;;;;;;;;;:44;;;;29133:10;29149:7;29133:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29001:164;:::o;29173:1002::-;29453:22;29503:1;29478:22;29495:4;29478:16;:22::i;:::-;:26;;;;:::i;:::-;29453:51;;29515:18;29536:17;:26;29554:7;29536:26;;;;;;;;;;;;29515:47;;29683:14;29669:10;:28;29665:328;;29714:19;29736:12;:18;29749:4;29736:18;;;;;;;;;;;;;;;:34;29755:14;29736:34;;;;;;;;;;;;29714:56;;29820:11;29787:12;:18;29800:4;29787:18;;;;;;;;;;;;;;;:30;29806:10;29787:30;;;;;;;;;;;:44;;;;29937:10;29904:17;:30;29922:11;29904:30;;;;;;;;;;;:43;;;;29699:294;29665:328;30089:17;:26;30107:7;30089:26;;;;;;;;;;;30082:33;;;30133:12;:18;30146:4;30133:18;;;;;;;;;;;;;;;:34;30152:14;30133:34;;;;;;;;;;;30126:41;;;29268:907;;29173:1002;;:::o;30470:1079::-;30723:22;30768:1;30748:10;:17;;;;:21;;;;:::i;:::-;30723:46;;30780:18;30801:15;:24;30817:7;30801:24;;;;;;;;;;;;30780:45;;31152:19;31174:10;31185:14;31174:26;;;;;;;;:::i;:::-;;;;;;;;;;31152:48;;31238:11;31213:10;31224;31213:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;31349:10;31318:15;:28;31334:11;31318:28;;;;;;;;;;;:41;;;;31490:15;:24;31506:7;31490:24;;;;;;;;;;;31483:31;;;31525:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30541:1008;;;30470:1079;:::o;28579:221::-;28664:14;28681:20;28698:2;28681:16;:20::i;:::-;28664:37;;28739:7;28712:12;:16;28725:2;28712:16;;;;;;;;;;;;;;;:24;28729:6;28712:24;;;;;;;;;;;:34;;;;28786:6;28757:17;:26;28775:7;28757:26;;;;;;;;;;;:35;;;;28653:147;28579:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:116::-;6320:21;6335:5;6320:21;:::i;:::-;6313:5;6310:32;6300:60;;6356:1;6353;6346:12;6300:60;6250:116;:::o;6372:133::-;6415:5;6453:6;6440:20;6431:29;;6469:30;6493:5;6469:30;:::i;:::-;6372:133;;;;:::o;6511:468::-;6576:6;6584;6633:2;6621:9;6612:7;6608:23;6604:32;6601:119;;;6639:79;;:::i;:::-;6601:119;6759:1;6784:53;6829:7;6820:6;6809:9;6805:22;6784:53;:::i;:::-;6774:63;;6730:117;6886:2;6912:50;6954:7;6945:6;6934:9;6930:22;6912:50;:::i;:::-;6902:60;;6857:115;6511:468;;;;;:::o;6985:117::-;7094:1;7091;7084:12;7108:180;7156:77;7153:1;7146:88;7253:4;7250:1;7243:15;7277:4;7274:1;7267:15;7294:281;7377:27;7399:4;7377:27;:::i;:::-;7369:6;7365:40;7507:6;7495:10;7492:22;7471:18;7459:10;7456:34;7453:62;7450:88;;;7518:18;;:::i;:::-;7450:88;7558:10;7554:2;7547:22;7337:238;7294:281;;:::o;7581:129::-;7615:6;7642:20;;:::i;:::-;7632:30;;7671:33;7699:4;7691:6;7671:33;:::i;:::-;7581:129;;;:::o;7716:311::-;7793:4;7883:18;7875:6;7872:30;7869:56;;;7905:18;;:::i;:::-;7869:56;7955:4;7947:6;7943:17;7935:25;;8015:4;8009;8005:15;7997:23;;7716:311;;;:::o;8033:117::-;8142:1;8139;8132:12;8173:710;8269:5;8294:81;8310:64;8367:6;8310:64;:::i;:::-;8294:81;:::i;:::-;8285:90;;8395:5;8424:6;8417:5;8410:21;8458:4;8451:5;8447:16;8440:23;;8511:4;8503:6;8499:17;8491:6;8487:30;8540:3;8532:6;8529:15;8526:122;;;8559:79;;:::i;:::-;8526:122;8674:6;8657:220;8691:6;8686:3;8683:15;8657:220;;;8766:3;8795:37;8828:3;8816:10;8795:37;:::i;:::-;8790:3;8783:50;8862:4;8857:3;8853:14;8846:21;;8733:144;8717:4;8712:3;8708:14;8701:21;;8657:220;;;8661:21;8275:608;;8173:710;;;;;:::o;8906:370::-;8977:5;9026:3;9019:4;9011:6;9007:17;9003:27;8993:122;;9034:79;;:::i;:::-;8993:122;9151:6;9138:20;9176:94;9266:3;9258:6;9251:4;9243:6;9239:17;9176:94;:::i;:::-;9167:103;;8983:293;8906:370;;;;:::o;9282:117::-;9391:1;9388;9381:12;9405:308;9467:4;9557:18;9549:6;9546:30;9543:56;;;9579:18;;:::i;:::-;9543:56;9617:29;9639:6;9617:29;:::i;:::-;9609:37;;9701:4;9695;9691:15;9683:23;;9405:308;;;:::o;9719:154::-;9803:6;9798:3;9793;9780:30;9865:1;9856:6;9851:3;9847:16;9840:27;9719:154;;;:::o;9879:412::-;9957:5;9982:66;9998:49;10040:6;9998:49;:::i;:::-;9982:66;:::i;:::-;9973:75;;10071:6;10064:5;10057:21;10109:4;10102:5;10098:16;10147:3;10138:6;10133:3;10129:16;10126:25;10123:112;;;10154:79;;:::i;:::-;10123:112;10244:41;10278:6;10273:3;10268;10244:41;:::i;:::-;9963:328;9879:412;;;;;:::o;10311:340::-;10367:5;10416:3;10409:4;10401:6;10397:17;10393:27;10383:122;;10424:79;;:::i;:::-;10383:122;10541:6;10528:20;10566:79;10641:3;10633:6;10626:4;10618:6;10614:17;10566:79;:::i;:::-;10557:88;;10373:278;10311:340;;;;:::o;10657:864::-;10760:6;10768;10817:2;10805:9;10796:7;10792:23;10788:32;10785:119;;;10823:79;;:::i;:::-;10785:119;10971:1;10960:9;10956:17;10943:31;11001:18;10993:6;10990:30;10987:117;;;11023:79;;:::i;:::-;10987:117;11128:78;11198:7;11189:6;11178:9;11174:22;11128:78;:::i;:::-;11118:88;;10914:302;11283:2;11272:9;11268:18;11255:32;11314:18;11306:6;11303:30;11300:117;;;11336:79;;:::i;:::-;11300:117;11441:63;11496:7;11487:6;11476:9;11472:22;11441:63;:::i;:::-;11431:73;;11226:288;10657:864;;;;;:::o;11527:307::-;11588:4;11678:18;11670:6;11667:30;11664:56;;;11700:18;;:::i;:::-;11664:56;11738:29;11760:6;11738:29;:::i;:::-;11730:37;;11822:4;11816;11812:15;11804:23;;11527:307;;;:::o;11840:410::-;11917:5;11942:65;11958:48;11999:6;11958:48;:::i;:::-;11942:65;:::i;:::-;11933:74;;12030:6;12023:5;12016:21;12068:4;12061:5;12057:16;12106:3;12097:6;12092:3;12088:16;12085:25;12082:112;;;12113:79;;:::i;:::-;12082:112;12203:41;12237:6;12232:3;12227;12203:41;:::i;:::-;11923:327;11840:410;;;;;:::o;12269:338::-;12324:5;12373:3;12366:4;12358:6;12354:17;12350:27;12340:122;;12381:79;;:::i;:::-;12340:122;12498:6;12485:20;12523:78;12597:3;12589:6;12582:4;12574:6;12570:17;12523:78;:::i;:::-;12514:87;;12330:277;12269:338;;;;:::o;12613:943::-;12708:6;12716;12724;12732;12781:3;12769:9;12760:7;12756:23;12752:33;12749:120;;;12788:79;;:::i;:::-;12749:120;12908:1;12933:53;12978:7;12969:6;12958:9;12954:22;12933:53;:::i;:::-;12923:63;;12879:117;13035:2;13061:53;13106:7;13097:6;13086:9;13082:22;13061:53;:::i;:::-;13051:63;;13006:118;13163:2;13189:53;13234:7;13225:6;13214:9;13210:22;13189:53;:::i;:::-;13179:63;;13134:118;13319:2;13308:9;13304:18;13291:32;13350:18;13342:6;13339:30;13336:117;;;13372:79;;:::i;:::-;13336:117;13477:62;13531:7;13522:6;13511:9;13507:22;13477:62;:::i;:::-;13467:72;;13262:287;12613:943;;;;;;;:::o;13562:474::-;13630:6;13638;13687:2;13675:9;13666:7;13662:23;13658:32;13655:119;;;13693:79;;:::i;:::-;13655:119;13813:1;13838:53;13883:7;13874:6;13863:9;13859:22;13838:53;:::i;:::-;13828:63;;13784:117;13940:2;13966:53;14011:7;14002:6;13991:9;13987:22;13966:53;:::i;:::-;13956:63;;13911:118;13562:474;;;;;:::o;14042:180::-;14090:77;14087:1;14080:88;14187:4;14184:1;14177:15;14211:4;14208:1;14201:15;14228:320;14272:6;14309:1;14303:4;14299:12;14289:22;;14356:1;14350:4;14346:12;14377:18;14367:81;;14433:4;14425:6;14421:17;14411:27;;14367:81;14495:2;14487:6;14484:14;14464:18;14461:38;14458:84;;;14514:18;;:::i;:::-;14458:84;14279:269;14228:320;;;:::o;14554:231::-;14694:34;14690:1;14682:6;14678:14;14671:58;14763:14;14758:2;14750:6;14746:15;14739:39;14554:231;:::o;14791:366::-;14933:3;14954:67;15018:2;15013:3;14954:67;:::i;:::-;14947:74;;15030:93;15119:3;15030:93;:::i;:::-;15148:2;15143:3;15139:12;15132:19;;14791:366;;;:::o;15163:419::-;15329:4;15367:2;15356:9;15352:18;15344:26;;15416:9;15410:4;15406:20;15402:1;15391:9;15387:17;15380:47;15444:131;15570:4;15444:131;:::i;:::-;15436:139;;15163:419;;;:::o;15588:220::-;15728:34;15724:1;15716:6;15712:14;15705:58;15797:3;15792:2;15784:6;15780:15;15773:28;15588:220;:::o;15814:366::-;15956:3;15977:67;16041:2;16036:3;15977:67;:::i;:::-;15970:74;;16053:93;16142:3;16053:93;:::i;:::-;16171:2;16166:3;16162:12;16155:19;;15814:366;;;:::o;16186:419::-;16352:4;16390:2;16379:9;16375:18;16367:26;;16439:9;16433:4;16429:20;16425:1;16414:9;16410:17;16403:47;16467:131;16593:4;16467:131;:::i;:::-;16459:139;;16186:419;;;:::o;16611:243::-;16751:34;16747:1;16739:6;16735:14;16728:58;16820:26;16815:2;16807:6;16803:15;16796:51;16611:243;:::o;16860:366::-;17002:3;17023:67;17087:2;17082:3;17023:67;:::i;:::-;17016:74;;17099:93;17188:3;17099:93;:::i;:::-;17217:2;17212:3;17208:12;17201:19;;16860:366;;;:::o;17232:419::-;17398:4;17436:2;17425:9;17421:18;17413:26;;17485:9;17479:4;17475:20;17471:1;17460:9;17456:17;17449:47;17513:131;17639:4;17513:131;:::i;:::-;17505:139;;17232:419;;;:::o;17657:236::-;17797:34;17793:1;17785:6;17781:14;17774:58;17866:19;17861:2;17853:6;17849:15;17842:44;17657:236;:::o;17899:366::-;18041:3;18062:67;18126:2;18121:3;18062:67;:::i;:::-;18055:74;;18138:93;18227:3;18138:93;:::i;:::-;18256:2;18251:3;18247:12;18240:19;;17899:366;;;:::o;18271:419::-;18437:4;18475:2;18464:9;18460:18;18452:26;;18524:9;18518:4;18514:20;18510:1;18499:9;18495:17;18488:47;18552:131;18678:4;18552:131;:::i;:::-;18544:139;;18271:419;;;:::o;18696:230::-;18836:34;18832:1;18824:6;18820:14;18813:58;18905:13;18900:2;18892:6;18888:15;18881:38;18696:230;:::o;18932:366::-;19074:3;19095:67;19159:2;19154:3;19095:67;:::i;:::-;19088:74;;19171:93;19260:3;19171:93;:::i;:::-;19289:2;19284:3;19280:12;19273:19;;18932:366;;;:::o;19304:419::-;19470:4;19508:2;19497:9;19493:18;19485:26;;19557:9;19551:4;19547:20;19543:1;19532:9;19528:17;19521:47;19585:131;19711:4;19585:131;:::i;:::-;19577:139;;19304:419;;;:::o;19729:231::-;19869:34;19865:1;19857:6;19853:14;19846:58;19938:14;19933:2;19925:6;19921:15;19914:39;19729:231;:::o;19966:366::-;20108:3;20129:67;20193:2;20188:3;20129:67;:::i;:::-;20122:74;;20205:93;20294:3;20205:93;:::i;:::-;20323:2;20318:3;20314:12;20307:19;;19966:366;;;:::o;20338:419::-;20504:4;20542:2;20531:9;20527:18;20519:26;;20591:9;20585:4;20581:20;20577:1;20566:9;20562:17;20555:47;20619:131;20745:4;20619:131;:::i;:::-;20611:139;;20338:419;;;:::o;20763:180::-;20811:77;20808:1;20801:88;20908:4;20905:1;20898:15;20932:4;20929:1;20922:15;20949:228;21089:34;21085:1;21077:6;21073:14;21066:58;21158:11;21153:2;21145:6;21141:15;21134:36;20949:228;:::o;21183:366::-;21325:3;21346:67;21410:2;21405:3;21346:67;:::i;:::-;21339:74;;21422:93;21511:3;21422:93;:::i;:::-;21540:2;21535:3;21531:12;21524:19;;21183:366;;;:::o;21555:419::-;21721:4;21759:2;21748:9;21744:18;21736:26;;21808:9;21802:4;21798:20;21794:1;21783:9;21779:17;21772:47;21836:131;21962:4;21836:131;:::i;:::-;21828:139;;21555:419;;;:::o;21980:229::-;22120:34;22116:1;22108:6;22104:14;22097:58;22189:12;22184:2;22176:6;22172:15;22165:37;21980:229;:::o;22215:366::-;22357:3;22378:67;22442:2;22437:3;22378:67;:::i;:::-;22371:74;;22454:93;22543:3;22454:93;:::i;:::-;22572:2;22567:3;22563:12;22556:19;;22215:366;;;:::o;22587:419::-;22753:4;22791:2;22780:9;22776:18;22768:26;;22840:9;22834:4;22830:20;22826:1;22815:9;22811:17;22804:47;22868:131;22994:4;22868:131;:::i;:::-;22860:139;;22587:419;;;:::o;23012:182::-;23152:34;23148:1;23140:6;23136:14;23129:58;23012:182;:::o;23200:366::-;23342:3;23363:67;23427:2;23422:3;23363:67;:::i;:::-;23356:74;;23439:93;23528:3;23439:93;:::i;:::-;23557:2;23552:3;23548:12;23541:19;;23200:366;;;:::o;23572:419::-;23738:4;23776:2;23765:9;23761:18;23753:26;;23825:9;23819:4;23815:20;23811:1;23800:9;23796:17;23789:47;23853:131;23979:4;23853:131;:::i;:::-;23845:139;;23572:419;;;:::o;23997:175::-;24137:27;24133:1;24125:6;24121:14;24114:51;23997:175;:::o;24178:366::-;24320:3;24341:67;24405:2;24400:3;24341:67;:::i;:::-;24334:74;;24417:93;24506:3;24417:93;:::i;:::-;24535:2;24530:3;24526:12;24519:19;;24178:366;;;:::o;24550:419::-;24716:4;24754:2;24743:9;24739:18;24731:26;;24803:9;24797:4;24793:20;24789:1;24778:9;24774:17;24767:47;24831:131;24957:4;24831:131;:::i;:::-;24823:139;;24550:419;;;:::o;24975:180::-;25023:77;25020:1;25013:88;25120:4;25117:1;25110:15;25144:4;25141:1;25134:15;25161:86;25196:7;25236:4;25229:5;25225:16;25214:27;;25161:86;;;:::o;25253:167::-;25290:3;25313:22;25329:5;25313:22;:::i;:::-;25304:31;;25357:4;25350:5;25347:15;25344:41;;;25365:18;;:::i;:::-;25344:41;25412:1;25405:5;25401:13;25394:20;;25253:167;;;:::o;25426:225::-;25566:34;25562:1;25554:6;25550:14;25543:58;25635:8;25630:2;25622:6;25618:15;25611:33;25426:225;:::o;25657:366::-;25799:3;25820:67;25884:2;25879:3;25820:67;:::i;:::-;25813:74;;25896:93;25985:3;25896:93;:::i;:::-;26014:2;26009:3;26005:12;25998:19;;25657:366;;;:::o;26029:419::-;26195:4;26233:2;26222:9;26218:18;26210:26;;26282:9;26276:4;26272:20;26268:1;26257:9;26253:17;26246:47;26310:131;26436:4;26310:131;:::i;:::-;26302:139;;26029:419;;;:::o;26454:231::-;26594:34;26590:1;26582:6;26578:14;26571:58;26663:14;26658:2;26650:6;26646:15;26639:39;26454:231;:::o;26691:366::-;26833:3;26854:67;26918:2;26913:3;26854:67;:::i;:::-;26847:74;;26930:93;27019:3;26930:93;:::i;:::-;27048:2;27043:3;27039:12;27032:19;;26691:366;;;:::o;27063:419::-;27229:4;27267:2;27256:9;27252:18;27244:26;;27316:9;27310:4;27306:20;27302:1;27291:9;27287:17;27280:47;27344:131;27470:4;27344:131;:::i;:::-;27336:139;;27063:419;;;:::o;27488:169::-;27628:21;27624:1;27616:6;27612:14;27605:45;27488:169;:::o;27663:366::-;27805:3;27826:67;27890:2;27885:3;27826:67;:::i;:::-;27819:74;;27902:93;27991:3;27902:93;:::i;:::-;28020:2;28015:3;28011:12;28004:19;;27663:366;;;:::o;28035:419::-;28201:4;28239:2;28228:9;28224:18;28216:26;;28288:9;28282:4;28278:20;28274:1;28263:9;28259:17;28252:47;28316:131;28442:4;28316:131;:::i;:::-;28308:139;;28035:419;;;:::o;28460:228::-;28600:34;28596:1;28588:6;28584:14;28577:58;28669:11;28664:2;28656:6;28652:15;28645:36;28460:228;:::o;28694:366::-;28836:3;28857:67;28921:2;28916:3;28857:67;:::i;:::-;28850:74;;28933:93;29022:3;28933:93;:::i;:::-;29051:2;29046:3;29042:12;29035:19;;28694:366;;;:::o;29066:419::-;29232:4;29270:2;29259:9;29255:18;29247:26;;29319:9;29313:4;29309:20;29305:1;29294:9;29290:17;29283:47;29347:131;29473:4;29347:131;:::i;:::-;29339:139;;29066:419;;;:::o;29491:223::-;29631:34;29627:1;29619:6;29615:14;29608:58;29700:6;29695:2;29687:6;29683:15;29676:31;29491:223;:::o;29720:366::-;29862:3;29883:67;29947:2;29942:3;29883:67;:::i;:::-;29876:74;;29959:93;30048:3;29959:93;:::i;:::-;30077:2;30072:3;30068:12;30061:19;;29720:366;;;:::o;30092:419::-;30258:4;30296:2;30285:9;30281:18;30273:26;;30345:9;30339:4;30335:20;30331:1;30320:9;30316:17;30309:47;30373:131;30499:4;30373:131;:::i;:::-;30365:139;;30092:419;;;:::o;30517:191::-;30557:4;30577:20;30595:1;30577:20;:::i;:::-;30572:25;;30611:20;30629:1;30611:20;:::i;:::-;30606:25;;30650:1;30647;30644:8;30641:34;;;30655:18;;:::i;:::-;30641:34;30700:1;30697;30693:9;30685:17;;30517:191;;;;:::o;30714:305::-;30754:3;30773:20;30791:1;30773:20;:::i;:::-;30768:25;;30807:20;30825:1;30807:20;:::i;:::-;30802:25;;30961:1;30893:66;30889:74;30886:1;30883:81;30880:107;;;30967:18;;:::i;:::-;30880:107;31011:1;31008;31004:9;30997:16;;30714:305;;;;:::o;31025:233::-;31165:34;31161:1;31153:6;31149:14;31142:58;31234:16;31229:2;31221:6;31217:15;31210:41;31025:233;:::o;31264:366::-;31406:3;31427:67;31491:2;31486:3;31427:67;:::i;:::-;31420:74;;31503:93;31592:3;31503:93;:::i;:::-;31621:2;31616:3;31612:12;31605:19;;31264:366;;;:::o;31636:419::-;31802:4;31840:2;31829:9;31825:18;31817:26;;31889:9;31883:4;31879:20;31875:1;31864:9;31860:17;31853:47;31917:131;32043:4;31917:131;:::i;:::-;31909:139;;31636:419;;;:::o;32061:237::-;32201:34;32197:1;32189:6;32185:14;32178:58;32270:20;32265:2;32257:6;32253:15;32246:45;32061:237;:::o;32304:366::-;32446:3;32467:67;32531:2;32526:3;32467:67;:::i;:::-;32460:74;;32543:93;32632:3;32543:93;:::i;:::-;32661:2;32656:3;32652:12;32645:19;;32304:366;;;:::o;32676:419::-;32842:4;32880:2;32869:9;32865:18;32857:26;;32929:9;32923:4;32919:20;32915:1;32904:9;32900:17;32893:47;32957:131;33083:4;32957:131;:::i;:::-;32949:139;;32676:419;;;:::o;33101:236::-;33241:34;33237:1;33229:6;33225:14;33218:58;33310:19;33305:2;33297:6;33293:15;33286:44;33101:236;:::o;33343:366::-;33485:3;33506:67;33570:2;33565:3;33506:67;:::i;:::-;33499:74;;33582:93;33671:3;33582:93;:::i;:::-;33700:2;33695:3;33691:12;33684:19;;33343:366;;;:::o;33715:419::-;33881:4;33919:2;33908:9;33904:18;33896:26;;33968:9;33962:4;33958:20;33954:1;33943:9;33939:17;33932:47;33996:131;34122:4;33996:131;:::i;:::-;33988:139;;33715:419;;;:::o;34140:148::-;34242:11;34279:3;34264:18;;34140:148;;;;:::o;34294:377::-;34400:3;34428:39;34461:5;34428:39;:::i;:::-;34483:89;34565:6;34560:3;34483:89;:::i;:::-;34476:96;;34581:52;34626:6;34621:3;34614:4;34607:5;34603:16;34581:52;:::i;:::-;34658:6;34653:3;34649:16;34642:23;;34404:267;34294:377;;;;:::o;34677:435::-;34857:3;34879:95;34970:3;34961:6;34879:95;:::i;:::-;34872:102;;34991:95;35082:3;35073:6;34991:95;:::i;:::-;34984:102;;35103:3;35096:10;;34677:435;;;;;:::o;35118:98::-;35169:6;35203:5;35197:12;35187:22;;35118:98;;;:::o;35222:168::-;35305:11;35339:6;35334:3;35327:19;35379:4;35374:3;35370:14;35355:29;;35222:168;;;;:::o;35396:360::-;35482:3;35510:38;35542:5;35510:38;:::i;:::-;35564:70;35627:6;35622:3;35564:70;:::i;:::-;35557:77;;35643:52;35688:6;35683:3;35676:4;35669:5;35665:16;35643:52;:::i;:::-;35720:29;35742:6;35720:29;:::i;:::-;35715:3;35711:39;35704:46;;35486:270;35396:360;;;;:::o;35762:640::-;35957:4;35995:3;35984:9;35980:19;35972:27;;36009:71;36077:1;36066:9;36062:17;36053:6;36009:71;:::i;:::-;36090:72;36158:2;36147:9;36143:18;36134:6;36090:72;:::i;:::-;36172;36240:2;36229:9;36225:18;36216:6;36172:72;:::i;:::-;36291:9;36285:4;36281:20;36276:2;36265:9;36261:18;36254:48;36319:76;36390:4;36381:6;36319:76;:::i;:::-;36311:84;;35762:640;;;;;;;:::o;36408:141::-;36464:5;36495:6;36489:13;36480:22;;36511:32;36537:5;36511:32;:::i;:::-;36408:141;;;;:::o;36555:349::-;36624:6;36673:2;36661:9;36652:7;36648:23;36644:32;36641:119;;;36679:79;;:::i;:::-;36641:119;36799:1;36824:63;36879:7;36870:6;36859:9;36855:22;36824:63;:::i;:::-;36814:73;;36770:127;36555:349;;;;:::o;36910:234::-;37050:34;37046:1;37038:6;37034:14;37027:58;37119:17;37114:2;37106:6;37102:15;37095:42;36910:234;:::o;37150:366::-;37292:3;37313:67;37377:2;37372:3;37313:67;:::i;:::-;37306:74;;37389:93;37478:3;37389:93;:::i;:::-;37507:2;37502:3;37498:12;37491:19;;37150:366;;;:::o;37522:419::-;37688:4;37726:2;37715:9;37711:18;37703:26;;37775:9;37769:4;37765:20;37761:1;37750:9;37746:17;37739:47;37803:131;37929:4;37803:131;:::i;:::-;37795:139;;37522:419;;;:::o;37947:182::-;38087:34;38083:1;38075:6;38071:14;38064:58;37947:182;:::o;38135:366::-;38277:3;38298:67;38362:2;38357:3;38298:67;:::i;:::-;38291:74;;38374:93;38463:3;38374:93;:::i;:::-;38492:2;38487:3;38483:12;38476:19;;38135:366;;;:::o;38507:419::-;38673:4;38711:2;38700:9;38696:18;38688:26;;38760:9;38754:4;38750:20;38746:1;38735:9;38731:17;38724:47;38788:131;38914:4;38788:131;:::i;:::-;38780:139;;38507:419;;;:::o;38932:178::-;39072:30;39068:1;39060:6;39056:14;39049:54;38932:178;:::o;39116:366::-;39258:3;39279:67;39343:2;39338:3;39279:67;:::i;:::-;39272:74;;39355:93;39444:3;39355:93;:::i;:::-;39473:2;39468:3;39464:12;39457:19;;39116:366;;;:::o;39488:419::-;39654:4;39692:2;39681:9;39677:18;39669:26;;39741:9;39735:4;39731:20;39727:1;39716:9;39712:17;39705:47;39769:131;39895:4;39769:131;:::i;:::-;39761:139;;39488:419;;;:::o;39913:233::-;39952:3;39975:24;39993:5;39975:24;:::i;:::-;39966:33;;40021:66;40014:5;40011:77;40008:103;;;40091:18;;:::i;:::-;40008:103;40138:1;40131:5;40127:13;40120:20;;39913:233;;;:::o;40152:180::-;40200:77;40197:1;40190:88;40297:4;40294:1;40287:15;40321:4;40318:1;40311:15;40338:185;40378:1;40395:20;40413:1;40395:20;:::i;:::-;40390:25;;40429:20;40447:1;40429:20;:::i;:::-;40424:25;;40468:1;40458:35;;40473:18;;:::i;:::-;40458:35;40515:1;40512;40508:9;40503:14;;40338:185;;;;:::o;40529:176::-;40561:1;40578:20;40596:1;40578:20;:::i;:::-;40573:25;;40612:20;40630:1;40612:20;:::i;:::-;40607:25;;40651:1;40641:35;;40656:18;;:::i;:::-;40641:35;40697:1;40694;40690:9;40685:14;;40529:176;;;;:::o;40711:180::-;40759:77;40756:1;40749:88;40856:4;40853:1;40846:15;40880:4;40877:1;40870:15

Swarm Source

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