ETH Price: $3,394.86 (-0.68%)
Gas: 22 Gwei

Token

Project824 (P824)
 

Overview

Max Total Supply

664 P824

Holders

276

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
cryptoch3wie.eth
Balance
2 P824
0xedEFD80a920Ecb119C0F77728c7CAc89a96E9587
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:
Project824

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-22
*/

// SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/utils/Counters.sol

// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

library Counters {
    struct Counter {
        uint256 _value;
    }

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

// File: @openzeppelin/contracts/utils/Strings.sol

// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

    function toString(uint256 value) internal pure returns (string memory) {
        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);
    }

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

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

// File: @openzeppelin/contracts/utils/Context.sol

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol

// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

library Address {
    function isContract(address account) internal view returns (bool) {
        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);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol

// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

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

    function _efficientHash(bytes32 a, bytes32 b)
        private
        pure
        returns (bytes32 value)
    {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol

// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol

// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

interface IERC721 is IERC165 {
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );

    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

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

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

    function approve(address to, uint256 tokenId) external;

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

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 */
interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

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

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

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

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

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

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

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

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

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

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

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

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

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        _approve(address(0), tokenId);

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

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

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

pragma solidity >=0.7.0 <0.9.0;

contract Project824 is ERC721, Ownable {
    using Strings for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private supply;

    string public uriPrefix = "";
    string public uriSuffix = ".json";
    string public hiddenMetadataUri;

    uint256 public cost = 0 ether;
    uint256 public maxSupply = 2480;
    uint256 public maxMintAmountPerTx = 200;
    uint256 public nftPerAddressLimit = 200;

    bool public paused = false;
    bool public revealed = true;
    bool public onlyWhitelisted = true;

    bytes32 public merkleRoot;

    constructor() ERC721("Project824", "P824") {
        setUriPrefix("ipfs://QmSH13qwCPhHYhKKcTJh2Ec4xuxUdqG8HEgmVuAmiG16ma/");
    }

    modifier mintCompliance(uint256 _mintAmount) {
        require(
            _mintAmount > 0 && _mintAmount <= maxMintAmountPerTx,
            "Invalid mint amount!"
        );
        require(
            supply.current() + _mintAmount <= maxSupply,
            "Max supply exceeded!"
        );
        _;
    }

    function totalSupply() public view returns (uint256) {
        return supply.current();
    }

    function mint(uint256 _mintAmount)
        public
        payable
        mintCompliance(_mintAmount)
    {
        require(!paused, "The contract is paused!");
        require(msg.value >= cost * _mintAmount, "Insufficient funds!");
        require(!onlyWhitelisted, "Whitelisted is on!");
        uint256 ownerTokenCount = balanceOf(msg.sender);
        require(ownerTokenCount < nftPerAddressLimit, "Max supply exceeded!");
        _mintLoop(msg.sender, _mintAmount);
    }

     function mintForWhitelisted(uint256 _mintAmount, bytes32[] calldata _merkleProof)
        public
        payable
        mintCompliance(_mintAmount)
    {
        require(!paused, "The contract is paused!");
        require(msg.value >= cost * _mintAmount, "Insufficient funds!");
        if (onlyWhitelisted == true) {
            require(isWhitelisted(_merkleProof), "User is not whitelisted");
        }
        uint256 ownerTokenCount = balanceOf(msg.sender);
        require(ownerTokenCount < nftPerAddressLimit, "Max supply exceeded!");
        _mintLoop(msg.sender, _mintAmount);
    }

    function isWhitelisted(bytes32[] calldata _merkleProof)
        public
        view
        returns (bool)
    {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(_merkleProof, merkleRoot, leaf);
    }

    function checkingWhitelisted(address sender, bytes32[] calldata _merkleProof)
        public
        view
        returns (bool)
    {
        bytes32 leaf = keccak256(abi.encodePacked(sender));
        return MerkleProof.verify(_merkleProof, merkleRoot, leaf);
    }

    function mintForAddress(uint256 _mintAmount, address _receiver)
        public
        mintCompliance(_mintAmount)
        onlyOwner
    {
        _mintLoop(_receiver, _mintAmount);
    }

    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = 1;
        uint256 ownedTokenIndex = 0;

        while (
            ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply
        ) {
            address currentTokenOwner = ownerOf(currentTokenId);

            if (currentTokenOwner == _owner) {
                ownedTokenIds[ownedTokenIndex] = currentTokenId;

                ownedTokenIndex++;
            }

            currentTokenId++;
        }

        return ownedTokenIds;
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(_tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        if (revealed == false) {
            return hiddenMetadataUri;
        }

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

    function setRevealed(bool _state) public onlyOwner {
        revealed = _state;
    }

    function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
        nftPerAddressLimit = _limit;
    }

    function setCost(uint256 _cost) public onlyOwner {
        cost = _cost;
    }

    function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx)
        public
        onlyOwner
    {
        maxMintAmountPerTx = _maxMintAmountPerTx;
    }

    function setHiddenMetadataUri(string memory _hiddenMetadataUri)
        public
        onlyOwner
    {
        hiddenMetadataUri = _hiddenMetadataUri;
    }

    function setUriPrefix(string memory _uriPrefix) public onlyOwner {
        uriPrefix = _uriPrefix;
    }

    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
        uriSuffix = _uriSuffix;
    }

    function setPaused(bool _state) public onlyOwner {
        paused = _state;
    }

    function setOnlyWhitelisted(bool _state) public onlyOwner {
        onlyWhitelisted = _state;
    }
    
    function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function withdraw() public onlyOwner {
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
    }

    function _mintLoop(address _receiver, uint256 _mintAmount) internal {
        for (uint256 i = 0; i < _mintAmount; i++) {
            supply.increment();
            _safeMint(_receiver, supply.current());
        }
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"checkingWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintForWhitelisted","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040819052600060808190526200001b91600891620001f8565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a91600991620001f8565b506000600b556109b0600c5560c8600d819055600e55600f805462ffffff1916620101001790553480156200007e57600080fd5b50604080518082018252600a815269141c9bda9958dd0e0c8d60b21b602080830191825283518085019094526004845263140e0c8d60e21b908401528151919291620000cd91600091620001f8565b508051620000e3906001906020840190620001f8565b50505062000100620000fa6200012a60201b60201c565b6200012e565b6200012460405180606001604052806036815260200162002c3e6036913962000180565b620002db565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620001df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001f4906008906020840190620001f8565b5050565b82805462000206906200029e565b90600052602060002090601f0160209004810192826200022a576000855562000275565b82601f106200024557805160ff191683800117855562000275565b8280016001018555821562000275579182015b828111156200027557825182559160200191906001019062000258565b506200028392915062000287565b5090565b5b8082111562000283576000815560010162000288565b600181811c90821680620002b357607f821691505b60208210811415620002d557634e487b7160e01b600052602260045260246000fd5b50919050565b61295380620002eb6000396000f3fe6080604052600436106102725760003560e01c806370a082311161014f578063a22cb465116100c1578063d0eb26b01161007a578063d0eb26b01461070b578063d5abeb011461072b578063e0a8085314610741578063e985e9c514610761578063efbd73f4146107aa578063f2fde38b146107ca57600080fd5b8063a22cb46514610660578063a45ba8e714610680578063b071401b14610695578063b88d4fde146106b5578063ba7d2c76146106d5578063c87b56dd146106eb57600080fd5b80637f89449e116101135780637f89449e146105c45780638da5cb5b146105e457806394354fd01461060257806395d89b41146106185780639c70b5121461062d578063a0712d681461064d57600080fd5b806370a082311461053c578063715018a61461055c5780637892bdad146105715780637cb64759146105845780637ec4a659146105a457600080fd5b80633c952764116101e85780634fdd43cb116101ac5780634fdd43cb1461049957806351830227146104b95780635503a0e8146104d85780635c975abb146104ed57806362b99ad4146105075780636352211e1461051c57600080fd5b80633c952764146103f75780633ccfd60b1461041757806342842e0e1461042c578063438b63001461044c57806344a0d68a1461047957600080fd5b806313faede61161023a57806313faede61461034857806316ba10e01461036c57806316c38b3c1461038c57806318160ddd146103ac57806323b872dd146103c15780632eb4a7ab146103e157600080fd5b806301ffc9a714610277578063069824fb146102ac57806306fdde03146102cc578063081812fc146102ee578063095ea7b314610326575b600080fd5b34801561028357600080fd5b50610297610292366004612426565b6107ea565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102976102c73660046123b0565b61083c565b3480156102d857600080fd5b506102e16108c0565b6040516102a39190612670565b3480156102fa57600080fd5b5061030e61030936600461240d565b610952565b6040516001600160a01b0390911681526020016102a3565b34801561033257600080fd5b50610346610341366004612386565b6109ec565b005b34801561035457600080fd5b5061035e600b5481565b6040519081526020016102a3565b34801561037857600080fd5b50610346610387366004612460565b610b02565b34801561039857600080fd5b506103466103a73660046123f2565b610b43565b3480156103b857600080fd5b5061035e610b80565b3480156103cd57600080fd5b506103466103dc366004612251565b610b90565b3480156103ed57600080fd5b5061035e60105481565b34801561040357600080fd5b506103466104123660046123f2565b610bc1565b34801561042357600080fd5b50610346610c07565b34801561043857600080fd5b50610346610447366004612251565b610ca5565b34801561045857600080fd5b5061046c610467366004612203565b610cc0565b6040516102a3919061262c565b34801561048557600080fd5b5061034661049436600461240d565b610da1565b3480156104a557600080fd5b506103466104b4366004612460565b610dd0565b3480156104c557600080fd5b50600f5461029790610100900460ff1681565b3480156104e457600080fd5b506102e1610e0d565b3480156104f957600080fd5b50600f546102979060ff1681565b34801561051357600080fd5b506102e1610e9b565b34801561052857600080fd5b5061030e61053736600461240d565b610ea8565b34801561054857600080fd5b5061035e610557366004612203565b610f1f565b34801561056857600080fd5b50610346610fa6565b61034661057f3660046124cc565b610fdc565b34801561059057600080fd5b5061034661059f36600461240d565b61118b565b3480156105b057600080fd5b506103466105bf366004612460565b6111ba565b3480156105d057600080fd5b506102976105df366004612309565b6111f7565b3480156105f057600080fd5b506006546001600160a01b031661030e565b34801561060e57600080fd5b5061035e600d5481565b34801561062457600080fd5b506102e161127d565b34801561063957600080fd5b50600f546102979062010000900460ff1681565b61034661065b36600461240d565b61128c565b34801561066c57600080fd5b5061034661067b36600461235c565b611416565b34801561068c57600080fd5b506102e1611421565b3480156106a157600080fd5b506103466106b036600461240d565b61142e565b3480156106c157600080fd5b506103466106d036600461228d565b61145d565b3480156106e157600080fd5b5061035e600e5481565b3480156106f757600080fd5b506102e161070636600461240d565b611495565b34801561071757600080fd5b5061034661072636600461240d565b611614565b34801561073757600080fd5b5061035e600c5481565b34801561074d57600080fd5b5061034661075c3660046123f2565b611643565b34801561076d57600080fd5b5061029761077c36600461221e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107b657600080fd5b506103466107c53660046124a9565b611687565b3480156107d657600080fd5b506103466107e5366004612203565b61171f565b60006001600160e01b031982166380ac58cd60e01b148061081b57506001600160e01b03198216635b5e139f60e01b145b8061083657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081906034016040516020818303038152906040528051906020012090506108b88484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060105491508490506117b7565b949350505050565b6060600080546108cf90612845565b80601f01602080910402602001604051908101604052809291908181526020018280546108fb90612845565b80156109485780601f1061091d57610100808354040283529160200191610948565b820191906000526020600020905b81548152906001019060200180831161092b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109d05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006109f782610ea8565b9050806001600160a01b0316836001600160a01b03161415610a655760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109c7565b336001600160a01b0382161480610a815750610a81813361077c565b610af35760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109c7565b610afd83836117cd565b505050565b6006546001600160a01b03163314610b2c5760405162461bcd60e51b81526004016109c790612703565b8051610b3f90600990602084019061207c565b5050565b6006546001600160a01b03163314610b6d5760405162461bcd60e51b81526004016109c790612703565b600f805460ff1916911515919091179055565b6000610b8b60075490565b905090565b610b9a338261183b565b610bb65760405162461bcd60e51b81526004016109c790612766565b610afd83838361192e565b6006546001600160a01b03163314610beb5760405162461bcd60e51b81526004016109c790612703565b600f8054911515620100000262ff000019909216919091179055565b6006546001600160a01b03163314610c315760405162461bcd60e51b81526004016109c790612703565b6000610c456006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610c8f576040519150601f19603f3d011682016040523d82523d6000602084013e610c94565b606091505b5050905080610ca257600080fd5b50565b610afd8383836040518060200160405280600081525061145d565b60606000610ccd83610f1f565b905060008167ffffffffffffffff811115610cea57610cea6128f1565b604051908082528060200260200182016040528015610d13578160200160208202803683370190505b509050600160005b8381108015610d2c5750600c548211155b15610d97576000610d3c83610ea8565b9050866001600160a01b0316816001600160a01b03161415610d845782848381518110610d6b57610d6b6128db565b602090810291909101015281610d8081612880565b9250505b82610d8e81612880565b93505050610d1b565b5090949350505050565b6006546001600160a01b03163314610dcb5760405162461bcd60e51b81526004016109c790612703565b600b55565b6006546001600160a01b03163314610dfa5760405162461bcd60e51b81526004016109c790612703565b8051610b3f90600a90602084019061207c565b60098054610e1a90612845565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4690612845565b8015610e935780601f10610e6857610100808354040283529160200191610e93565b820191906000526020600020905b815481529060010190602001808311610e7657829003601f168201915b505050505081565b60088054610e1a90612845565b6000818152600260205260408120546001600160a01b0316806108365760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109c7565b60006001600160a01b038216610f8a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109c7565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610fd05760405162461bcd60e51b81526004016109c790612703565b610fda6000611ace565b565b82600081118015610fef5750600d548111155b61100b5760405162461bcd60e51b81526004016109c7906126d5565b600c548161101860075490565b61102291906127b7565b11156110405760405162461bcd60e51b81526004016109c790612738565b600f5460ff161561108d5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109c7565b83600b5461109b91906127e3565b3410156110e05760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109c7565b600f5462010000900460ff1615156001141561114c57611100838361083c565b61114c5760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f742077686974656c697374656400000000000000000060448201526064016109c7565b600061115733610f1f565b9050600e54811061117a5760405162461bcd60e51b81526004016109c790612738565b6111843386611b20565b5050505050565b6006546001600160a01b031633146111b55760405162461bcd60e51b81526004016109c790612703565b601055565b6006546001600160a01b031633146111e45760405162461bcd60e51b81526004016109c790612703565b8051610b3f90600890602084019061207c565b6040516bffffffffffffffffffffffff19606085901b16602082015260009081906034016040516020818303038152906040528051906020012090506112748484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060105491508490506117b7565b95945050505050565b6060600180546108cf90612845565b8060008111801561129f5750600d548111155b6112bb5760405162461bcd60e51b81526004016109c7906126d5565b600c54816112c860075490565b6112d291906127b7565b11156112f05760405162461bcd60e51b81526004016109c790612738565b600f5460ff161561133d5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109c7565b81600b5461134b91906127e3565b3410156113905760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109c7565b600f5462010000900460ff16156113de5760405162461bcd60e51b815260206004820152601260248201527157686974656c6973746564206973206f6e2160701b60448201526064016109c7565b60006113e933610f1f565b9050600e54811061140c5760405162461bcd60e51b81526004016109c790612738565b610afd3384611b20565b610b3f338383611b5d565b600a8054610e1a90612845565b6006546001600160a01b031633146114585760405162461bcd60e51b81526004016109c790612703565b600d55565b611467338361183b565b6114835760405162461bcd60e51b81526004016109c790612766565b61148f84848484611c2c565b50505050565b6000818152600260205260409020546060906001600160a01b03166115145760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109c7565b600f54610100900460ff166115b557600a805461153090612845565b80601f016020809104026020016040519081016040528092919081815260200182805461155c90612845565b80156115a95780601f1061157e576101008083540402835291602001916115a9565b820191906000526020600020905b81548152906001019060200180831161158c57829003601f168201915b50505050509050919050565b60006115bf611c5f565b905060008151116115df576040518060200160405280600081525061160d565b806115e984611c6e565b60096040516020016115fd9392919061252b565b6040516020818303038152906040525b9392505050565b6006546001600160a01b0316331461163e5760405162461bcd60e51b81526004016109c790612703565b600e55565b6006546001600160a01b0316331461166d5760405162461bcd60e51b81526004016109c790612703565b600f80549115156101000261ff0019909216919091179055565b8160008111801561169a5750600d548111155b6116b65760405162461bcd60e51b81526004016109c7906126d5565b600c54816116c360075490565b6116cd91906127b7565b11156116eb5760405162461bcd60e51b81526004016109c790612738565b6006546001600160a01b031633146117155760405162461bcd60e51b81526004016109c790612703565b610afd8284611b20565b6006546001600160a01b031633146117495760405162461bcd60e51b81526004016109c790612703565b6001600160a01b0381166117ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109c7565b610ca281611ace565b6000826117c48584611d6c565b14949350505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061180282610ea8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118b45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109c7565b60006118bf83610ea8565b9050806001600160a01b0316846001600160a01b031614806118fa5750836001600160a01b03166118ef84610952565b6001600160a01b0316145b806108b857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166108b8565b826001600160a01b031661194182610ea8565b6001600160a01b0316146119a95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109c7565b6001600160a01b038216611a0b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109c7565b611a166000826117cd565b6001600160a01b0383166000908152600360205260408120805460019290611a3f908490612802565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a6d9084906127b7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b81811015610afd57611b39600780546001019055565b611b4b83611b4660075490565b611de0565b80611b5581612880565b915050611b23565b816001600160a01b0316836001600160a01b03161415611bbf5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109c7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c3784848461192e565b611c4384848484611dfa565b61148f5760405162461bcd60e51b81526004016109c790612683565b6060600880546108cf90612845565b606081611c925750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611cbc5780611ca681612880565b9150611cb59050600a836127cf565b9150611c96565b60008167ffffffffffffffff811115611cd757611cd76128f1565b6040519080825280601f01601f191660200182016040528015611d01576020820181803683370190505b5090505b84156108b857611d16600183612802565b9150611d23600a8661289b565b611d2e9060306127b7565b60f81b818381518110611d4357611d436128db565b60200101906001600160f81b031916908160001a905350611d65600a866127cf565b9450611d05565b600081815b8451811015611dd8576000858281518110611d8e57611d8e6128db565b60200260200101519050808311611db45760008381526020829052604090209250611dc5565b600081815260208490526040902092505b5080611dd081612880565b915050611d71565b509392505050565b610b3f828260405180602001604052806000815250611f07565b60006001600160a01b0384163b15611efc57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e3e9033908990889088906004016125ef565b602060405180830381600087803b158015611e5857600080fd5b505af1925050508015611e88575060408051601f3d908101601f19168201909252611e8591810190612443565b60015b611ee2573d808015611eb6576040519150601f19603f3d011682016040523d82523d6000602084013e611ebb565b606091505b508051611eda5760405162461bcd60e51b81526004016109c790612683565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506108b8565b506001949350505050565b611f118383611f3a565b611f1e6000848484611dfa565b610afd5760405162461bcd60e51b81526004016109c790612683565b6001600160a01b038216611f905760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109c7565b6000818152600260205260409020546001600160a01b031615611ff55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109c7565b6001600160a01b038216600090815260036020526040812080546001929061201e9084906127b7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461208890612845565b90600052602060002090601f0160209004810192826120aa57600085556120f0565b82601f106120c357805160ff19168380011785556120f0565b828001600101855582156120f0579182015b828111156120f05782518255916020019190600101906120d5565b506120fc929150612100565b5090565b5b808211156120fc5760008155600101612101565b600067ffffffffffffffff80841115612130576121306128f1565b604051601f8501601f19908116603f01168101908282118183101715612158576121586128f1565b8160405280935085815286868601111561217157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146121a257600080fd5b919050565b60008083601f8401126121b957600080fd5b50813567ffffffffffffffff8111156121d157600080fd5b6020830191508360208260051b85010111156121ec57600080fd5b9250929050565b803580151581146121a257600080fd5b60006020828403121561221557600080fd5b61160d8261218b565b6000806040838503121561223157600080fd5b61223a8361218b565b91506122486020840161218b565b90509250929050565b60008060006060848603121561226657600080fd5b61226f8461218b565b925061227d6020850161218b565b9150604084013590509250925092565b600080600080608085870312156122a357600080fd5b6122ac8561218b565b93506122ba6020860161218b565b925060408501359150606085013567ffffffffffffffff8111156122dd57600080fd5b8501601f810187136122ee57600080fd5b6122fd87823560208401612115565b91505092959194509250565b60008060006040848603121561231e57600080fd5b6123278461218b565b9250602084013567ffffffffffffffff81111561234357600080fd5b61234f868287016121a7565b9497909650939450505050565b6000806040838503121561236f57600080fd5b6123788361218b565b9150612248602084016121f3565b6000806040838503121561239957600080fd5b6123a28361218b565b946020939093013593505050565b600080602083850312156123c357600080fd5b823567ffffffffffffffff8111156123da57600080fd5b6123e6858286016121a7565b90969095509350505050565b60006020828403121561240457600080fd5b61160d826121f3565b60006020828403121561241f57600080fd5b5035919050565b60006020828403121561243857600080fd5b813561160d81612907565b60006020828403121561245557600080fd5b815161160d81612907565b60006020828403121561247257600080fd5b813567ffffffffffffffff81111561248957600080fd5b8201601f8101841361249a57600080fd5b6108b884823560208401612115565b600080604083850312156124bc57600080fd5b823591506122486020840161218b565b6000806000604084860312156124e157600080fd5b83359250602084013567ffffffffffffffff81111561234357600080fd5b60008151808452612517816020860160208601612819565b601f01601f19169290920160200192915050565b60008451602061253e8285838a01612819565b8551918401916125518184848a01612819565b8554920191600090600181811c908083168061256e57607f831692505b85831081141561258c57634e487b7160e01b85526022600452602485fd5b8080156125a057600181146125b1576125de565b60ff198516885283880195506125de565b60008b81526020902060005b858110156125d65781548a8201529084019088016125bd565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612622908301846124ff565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561266457835183529284019291840191600101612648565b50909695505050505050565b60208152600061160d60208301846124ff565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156127ca576127ca6128af565b500190565b6000826127de576127de6128c5565b500490565b60008160001904831182151516156127fd576127fd6128af565b500290565b600082821015612814576128146128af565b500390565b60005b8381101561283457818101518382015260200161281c565b8381111561148f5750506000910152565b600181811c9082168061285957607f821691505b6020821081141561287a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612894576128946128af565b5060010190565b6000826128aa576128aa6128c5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610ca257600080fdfea2646970667358221220e2ad3b1a6d7681d817d9d99224960a2790c4d5960b46ad976564243ec434431b64736f6c63430008070033697066733a2f2f516d5348313371774350684859684b4b63544a683245633478757855647147384845676d5675416d694731366d612f

Deployed Bytecode

0x6080604052600436106102725760003560e01c806370a082311161014f578063a22cb465116100c1578063d0eb26b01161007a578063d0eb26b01461070b578063d5abeb011461072b578063e0a8085314610741578063e985e9c514610761578063efbd73f4146107aa578063f2fde38b146107ca57600080fd5b8063a22cb46514610660578063a45ba8e714610680578063b071401b14610695578063b88d4fde146106b5578063ba7d2c76146106d5578063c87b56dd146106eb57600080fd5b80637f89449e116101135780637f89449e146105c45780638da5cb5b146105e457806394354fd01461060257806395d89b41146106185780639c70b5121461062d578063a0712d681461064d57600080fd5b806370a082311461053c578063715018a61461055c5780637892bdad146105715780637cb64759146105845780637ec4a659146105a457600080fd5b80633c952764116101e85780634fdd43cb116101ac5780634fdd43cb1461049957806351830227146104b95780635503a0e8146104d85780635c975abb146104ed57806362b99ad4146105075780636352211e1461051c57600080fd5b80633c952764146103f75780633ccfd60b1461041757806342842e0e1461042c578063438b63001461044c57806344a0d68a1461047957600080fd5b806313faede61161023a57806313faede61461034857806316ba10e01461036c57806316c38b3c1461038c57806318160ddd146103ac57806323b872dd146103c15780632eb4a7ab146103e157600080fd5b806301ffc9a714610277578063069824fb146102ac57806306fdde03146102cc578063081812fc146102ee578063095ea7b314610326575b600080fd5b34801561028357600080fd5b50610297610292366004612426565b6107ea565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102976102c73660046123b0565b61083c565b3480156102d857600080fd5b506102e16108c0565b6040516102a39190612670565b3480156102fa57600080fd5b5061030e61030936600461240d565b610952565b6040516001600160a01b0390911681526020016102a3565b34801561033257600080fd5b50610346610341366004612386565b6109ec565b005b34801561035457600080fd5b5061035e600b5481565b6040519081526020016102a3565b34801561037857600080fd5b50610346610387366004612460565b610b02565b34801561039857600080fd5b506103466103a73660046123f2565b610b43565b3480156103b857600080fd5b5061035e610b80565b3480156103cd57600080fd5b506103466103dc366004612251565b610b90565b3480156103ed57600080fd5b5061035e60105481565b34801561040357600080fd5b506103466104123660046123f2565b610bc1565b34801561042357600080fd5b50610346610c07565b34801561043857600080fd5b50610346610447366004612251565b610ca5565b34801561045857600080fd5b5061046c610467366004612203565b610cc0565b6040516102a3919061262c565b34801561048557600080fd5b5061034661049436600461240d565b610da1565b3480156104a557600080fd5b506103466104b4366004612460565b610dd0565b3480156104c557600080fd5b50600f5461029790610100900460ff1681565b3480156104e457600080fd5b506102e1610e0d565b3480156104f957600080fd5b50600f546102979060ff1681565b34801561051357600080fd5b506102e1610e9b565b34801561052857600080fd5b5061030e61053736600461240d565b610ea8565b34801561054857600080fd5b5061035e610557366004612203565b610f1f565b34801561056857600080fd5b50610346610fa6565b61034661057f3660046124cc565b610fdc565b34801561059057600080fd5b5061034661059f36600461240d565b61118b565b3480156105b057600080fd5b506103466105bf366004612460565b6111ba565b3480156105d057600080fd5b506102976105df366004612309565b6111f7565b3480156105f057600080fd5b506006546001600160a01b031661030e565b34801561060e57600080fd5b5061035e600d5481565b34801561062457600080fd5b506102e161127d565b34801561063957600080fd5b50600f546102979062010000900460ff1681565b61034661065b36600461240d565b61128c565b34801561066c57600080fd5b5061034661067b36600461235c565b611416565b34801561068c57600080fd5b506102e1611421565b3480156106a157600080fd5b506103466106b036600461240d565b61142e565b3480156106c157600080fd5b506103466106d036600461228d565b61145d565b3480156106e157600080fd5b5061035e600e5481565b3480156106f757600080fd5b506102e161070636600461240d565b611495565b34801561071757600080fd5b5061034661072636600461240d565b611614565b34801561073757600080fd5b5061035e600c5481565b34801561074d57600080fd5b5061034661075c3660046123f2565b611643565b34801561076d57600080fd5b5061029761077c36600461221e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107b657600080fd5b506103466107c53660046124a9565b611687565b3480156107d657600080fd5b506103466107e5366004612203565b61171f565b60006001600160e01b031982166380ac58cd60e01b148061081b57506001600160e01b03198216635b5e139f60e01b145b8061083657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081906034016040516020818303038152906040528051906020012090506108b88484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060105491508490506117b7565b949350505050565b6060600080546108cf90612845565b80601f01602080910402602001604051908101604052809291908181526020018280546108fb90612845565b80156109485780601f1061091d57610100808354040283529160200191610948565b820191906000526020600020905b81548152906001019060200180831161092b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109d05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006109f782610ea8565b9050806001600160a01b0316836001600160a01b03161415610a655760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109c7565b336001600160a01b0382161480610a815750610a81813361077c565b610af35760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109c7565b610afd83836117cd565b505050565b6006546001600160a01b03163314610b2c5760405162461bcd60e51b81526004016109c790612703565b8051610b3f90600990602084019061207c565b5050565b6006546001600160a01b03163314610b6d5760405162461bcd60e51b81526004016109c790612703565b600f805460ff1916911515919091179055565b6000610b8b60075490565b905090565b610b9a338261183b565b610bb65760405162461bcd60e51b81526004016109c790612766565b610afd83838361192e565b6006546001600160a01b03163314610beb5760405162461bcd60e51b81526004016109c790612703565b600f8054911515620100000262ff000019909216919091179055565b6006546001600160a01b03163314610c315760405162461bcd60e51b81526004016109c790612703565b6000610c456006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610c8f576040519150601f19603f3d011682016040523d82523d6000602084013e610c94565b606091505b5050905080610ca257600080fd5b50565b610afd8383836040518060200160405280600081525061145d565b60606000610ccd83610f1f565b905060008167ffffffffffffffff811115610cea57610cea6128f1565b604051908082528060200260200182016040528015610d13578160200160208202803683370190505b509050600160005b8381108015610d2c5750600c548211155b15610d97576000610d3c83610ea8565b9050866001600160a01b0316816001600160a01b03161415610d845782848381518110610d6b57610d6b6128db565b602090810291909101015281610d8081612880565b9250505b82610d8e81612880565b93505050610d1b565b5090949350505050565b6006546001600160a01b03163314610dcb5760405162461bcd60e51b81526004016109c790612703565b600b55565b6006546001600160a01b03163314610dfa5760405162461bcd60e51b81526004016109c790612703565b8051610b3f90600a90602084019061207c565b60098054610e1a90612845565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4690612845565b8015610e935780601f10610e6857610100808354040283529160200191610e93565b820191906000526020600020905b815481529060010190602001808311610e7657829003601f168201915b505050505081565b60088054610e1a90612845565b6000818152600260205260408120546001600160a01b0316806108365760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109c7565b60006001600160a01b038216610f8a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109c7565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610fd05760405162461bcd60e51b81526004016109c790612703565b610fda6000611ace565b565b82600081118015610fef5750600d548111155b61100b5760405162461bcd60e51b81526004016109c7906126d5565b600c548161101860075490565b61102291906127b7565b11156110405760405162461bcd60e51b81526004016109c790612738565b600f5460ff161561108d5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109c7565b83600b5461109b91906127e3565b3410156110e05760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109c7565b600f5462010000900460ff1615156001141561114c57611100838361083c565b61114c5760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f742077686974656c697374656400000000000000000060448201526064016109c7565b600061115733610f1f565b9050600e54811061117a5760405162461bcd60e51b81526004016109c790612738565b6111843386611b20565b5050505050565b6006546001600160a01b031633146111b55760405162461bcd60e51b81526004016109c790612703565b601055565b6006546001600160a01b031633146111e45760405162461bcd60e51b81526004016109c790612703565b8051610b3f90600890602084019061207c565b6040516bffffffffffffffffffffffff19606085901b16602082015260009081906034016040516020818303038152906040528051906020012090506112748484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060105491508490506117b7565b95945050505050565b6060600180546108cf90612845565b8060008111801561129f5750600d548111155b6112bb5760405162461bcd60e51b81526004016109c7906126d5565b600c54816112c860075490565b6112d291906127b7565b11156112f05760405162461bcd60e51b81526004016109c790612738565b600f5460ff161561133d5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109c7565b81600b5461134b91906127e3565b3410156113905760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109c7565b600f5462010000900460ff16156113de5760405162461bcd60e51b815260206004820152601260248201527157686974656c6973746564206973206f6e2160701b60448201526064016109c7565b60006113e933610f1f565b9050600e54811061140c5760405162461bcd60e51b81526004016109c790612738565b610afd3384611b20565b610b3f338383611b5d565b600a8054610e1a90612845565b6006546001600160a01b031633146114585760405162461bcd60e51b81526004016109c790612703565b600d55565b611467338361183b565b6114835760405162461bcd60e51b81526004016109c790612766565b61148f84848484611c2c565b50505050565b6000818152600260205260409020546060906001600160a01b03166115145760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109c7565b600f54610100900460ff166115b557600a805461153090612845565b80601f016020809104026020016040519081016040528092919081815260200182805461155c90612845565b80156115a95780601f1061157e576101008083540402835291602001916115a9565b820191906000526020600020905b81548152906001019060200180831161158c57829003601f168201915b50505050509050919050565b60006115bf611c5f565b905060008151116115df576040518060200160405280600081525061160d565b806115e984611c6e565b60096040516020016115fd9392919061252b565b6040516020818303038152906040525b9392505050565b6006546001600160a01b0316331461163e5760405162461bcd60e51b81526004016109c790612703565b600e55565b6006546001600160a01b0316331461166d5760405162461bcd60e51b81526004016109c790612703565b600f80549115156101000261ff0019909216919091179055565b8160008111801561169a5750600d548111155b6116b65760405162461bcd60e51b81526004016109c7906126d5565b600c54816116c360075490565b6116cd91906127b7565b11156116eb5760405162461bcd60e51b81526004016109c790612738565b6006546001600160a01b031633146117155760405162461bcd60e51b81526004016109c790612703565b610afd8284611b20565b6006546001600160a01b031633146117495760405162461bcd60e51b81526004016109c790612703565b6001600160a01b0381166117ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109c7565b610ca281611ace565b6000826117c48584611d6c565b14949350505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061180282610ea8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118b45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109c7565b60006118bf83610ea8565b9050806001600160a01b0316846001600160a01b031614806118fa5750836001600160a01b03166118ef84610952565b6001600160a01b0316145b806108b857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166108b8565b826001600160a01b031661194182610ea8565b6001600160a01b0316146119a95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109c7565b6001600160a01b038216611a0b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109c7565b611a166000826117cd565b6001600160a01b0383166000908152600360205260408120805460019290611a3f908490612802565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a6d9084906127b7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b81811015610afd57611b39600780546001019055565b611b4b83611b4660075490565b611de0565b80611b5581612880565b915050611b23565b816001600160a01b0316836001600160a01b03161415611bbf5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109c7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c3784848461192e565b611c4384848484611dfa565b61148f5760405162461bcd60e51b81526004016109c790612683565b6060600880546108cf90612845565b606081611c925750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611cbc5780611ca681612880565b9150611cb59050600a836127cf565b9150611c96565b60008167ffffffffffffffff811115611cd757611cd76128f1565b6040519080825280601f01601f191660200182016040528015611d01576020820181803683370190505b5090505b84156108b857611d16600183612802565b9150611d23600a8661289b565b611d2e9060306127b7565b60f81b818381518110611d4357611d436128db565b60200101906001600160f81b031916908160001a905350611d65600a866127cf565b9450611d05565b600081815b8451811015611dd8576000858281518110611d8e57611d8e6128db565b60200260200101519050808311611db45760008381526020829052604090209250611dc5565b600081815260208490526040902092505b5080611dd081612880565b915050611d71565b509392505050565b610b3f828260405180602001604052806000815250611f07565b60006001600160a01b0384163b15611efc57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e3e9033908990889088906004016125ef565b602060405180830381600087803b158015611e5857600080fd5b505af1925050508015611e88575060408051601f3d908101601f19168201909252611e8591810190612443565b60015b611ee2573d808015611eb6576040519150601f19603f3d011682016040523d82523d6000602084013e611ebb565b606091505b508051611eda5760405162461bcd60e51b81526004016109c790612683565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506108b8565b506001949350505050565b611f118383611f3a565b611f1e6000848484611dfa565b610afd5760405162461bcd60e51b81526004016109c790612683565b6001600160a01b038216611f905760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109c7565b6000818152600260205260409020546001600160a01b031615611ff55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109c7565b6001600160a01b038216600090815260036020526040812080546001929061201e9084906127b7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461208890612845565b90600052602060002090601f0160209004810192826120aa57600085556120f0565b82601f106120c357805160ff19168380011785556120f0565b828001600101855582156120f0579182015b828111156120f05782518255916020019190600101906120d5565b506120fc929150612100565b5090565b5b808211156120fc5760008155600101612101565b600067ffffffffffffffff80841115612130576121306128f1565b604051601f8501601f19908116603f01168101908282118183101715612158576121586128f1565b8160405280935085815286868601111561217157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146121a257600080fd5b919050565b60008083601f8401126121b957600080fd5b50813567ffffffffffffffff8111156121d157600080fd5b6020830191508360208260051b85010111156121ec57600080fd5b9250929050565b803580151581146121a257600080fd5b60006020828403121561221557600080fd5b61160d8261218b565b6000806040838503121561223157600080fd5b61223a8361218b565b91506122486020840161218b565b90509250929050565b60008060006060848603121561226657600080fd5b61226f8461218b565b925061227d6020850161218b565b9150604084013590509250925092565b600080600080608085870312156122a357600080fd5b6122ac8561218b565b93506122ba6020860161218b565b925060408501359150606085013567ffffffffffffffff8111156122dd57600080fd5b8501601f810187136122ee57600080fd5b6122fd87823560208401612115565b91505092959194509250565b60008060006040848603121561231e57600080fd5b6123278461218b565b9250602084013567ffffffffffffffff81111561234357600080fd5b61234f868287016121a7565b9497909650939450505050565b6000806040838503121561236f57600080fd5b6123788361218b565b9150612248602084016121f3565b6000806040838503121561239957600080fd5b6123a28361218b565b946020939093013593505050565b600080602083850312156123c357600080fd5b823567ffffffffffffffff8111156123da57600080fd5b6123e6858286016121a7565b90969095509350505050565b60006020828403121561240457600080fd5b61160d826121f3565b60006020828403121561241f57600080fd5b5035919050565b60006020828403121561243857600080fd5b813561160d81612907565b60006020828403121561245557600080fd5b815161160d81612907565b60006020828403121561247257600080fd5b813567ffffffffffffffff81111561248957600080fd5b8201601f8101841361249a57600080fd5b6108b884823560208401612115565b600080604083850312156124bc57600080fd5b823591506122486020840161218b565b6000806000604084860312156124e157600080fd5b83359250602084013567ffffffffffffffff81111561234357600080fd5b60008151808452612517816020860160208601612819565b601f01601f19169290920160200192915050565b60008451602061253e8285838a01612819565b8551918401916125518184848a01612819565b8554920191600090600181811c908083168061256e57607f831692505b85831081141561258c57634e487b7160e01b85526022600452602485fd5b8080156125a057600181146125b1576125de565b60ff198516885283880195506125de565b60008b81526020902060005b858110156125d65781548a8201529084019088016125bd565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612622908301846124ff565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561266457835183529284019291840191600101612648565b50909695505050505050565b60208152600061160d60208301846124ff565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156127ca576127ca6128af565b500190565b6000826127de576127de6128c5565b500490565b60008160001904831182151516156127fd576127fd6128af565b500290565b600082821015612814576128146128af565b500390565b60005b8381101561283457818101518382015260200161281c565b8381111561148f5750506000910152565b600181811c9082168061285957607f821691505b6020821081141561287a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612894576128946128af565b5060010190565b6000826128aa576128aa6128c5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610ca257600080fdfea2646970667358221220e2ad3b1a6d7681d817d9d99224960a2790c4d5960b46ad976564243ec434431b64736f6c63430008070033

Deployed Bytecode Sourcemap

22296:6187:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14032:355;;;;;;;;;;-1:-1:-1;14032:355:0;;;;;:::i;:::-;;:::i;:::-;;;10325:14:1;;10318:22;10300:41;;10288:2;10273:18;14032:355:0;;;;;;;;24567:256;;;;;;;;;;-1:-1:-1;24567:256:0;;;;;:::i;:::-;;:::i;15032:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16249:308::-;;;;;;;;;;-1:-1:-1;16249:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8986:32:1;;;8968:51;;8956:2;8941:18;16249:308:0;8822:203:1;15830:411:0;;;;;;;;;;-1:-1:-1;15830:411:0;;;;;:::i;:::-;;:::i;:::-;;22573:29;;;;;;;;;;;;;;;;;;;10498:25:1;;;10486:2;10471:18;22573:29:0;10352:177:1;27551:106:0;;;;;;;;;;-1:-1:-1;27551:106:0;;;;;:::i;:::-;;:::i;27665:83::-;;;;;;;;;;-1:-1:-1;27665:83:0;;;;;:::i;:::-;;:::i;23355:95::-;;;;;;;;;;;;;:::i;16982:376::-;;;;;;;;;;-1:-1:-1;16982:376:0;;;;;:::i;:::-;;:::i;22851:25::-;;;;;;;;;;;;;;;;27756:101;;;;;;;;;;-1:-1:-1;27756:101:0;;;;;:::i;:::-;;:::i;27981:147::-;;;;;;;;;;;;;:::i;17366:185::-;;;;;;;;;;-1:-1:-1;17366:185:0;;;;;:::i;:::-;;:::i;25314:743::-;;;;;;;;;;-1:-1:-1;25314:743:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27013:80::-;;;;;;;;;;-1:-1:-1;27013:80:0;;;;;:::i;:::-;;:::i;27268:161::-;;;;;;;;;;-1:-1:-1;27268:161:0;;;;;:::i;:::-;;:::i;22774:27::-;;;;;;;;;;-1:-1:-1;22774:27:0;;;;;;;;;;;22493:33;;;;;;;;;;;;;:::i;22741:26::-;;;;;;;;;;-1:-1:-1;22741:26:0;;;;;;;;22458:28;;;;;;;;;;;;;:::i;14698:326::-;;;;;;;;;;-1:-1:-1;14698:326:0;;;;;:::i;:::-;;:::i;14395:295::-;;;;;;;;;;-1:-1:-1;14395:295:0;;;;;:::i;:::-;;:::i;3463:103::-;;;;;;;;;;;;;:::i;23954:605::-;;;;;;:::i;:::-;;:::i;27869:104::-;;;;;;;;;;-1:-1:-1;27869:104:0;;;;;:::i;:::-;;:::i;27437:106::-;;;;;;;;;;-1:-1:-1;27437:106:0;;;;;:::i;:::-;;:::i;24831:274::-;;;;;;;;;;-1:-1:-1;24831:274:0;;;;;:::i;:::-;;:::i;3240:87::-;;;;;;;;;;-1:-1:-1;3313:6:0;;-1:-1:-1;;;;;3313:6:0;3240:87;;22647:39;;;;;;;;;;;;;;;;15140:104;;;;;;;;;;;;;:::i;22808:34::-;;;;;;;;;;-1:-1:-1;22808:34:0;;;;;;;;;;;23458:487;;;;;;:::i;:::-;;:::i;16565:187::-;;;;;;;;;;-1:-1:-1;16565:187:0;;;;;:::i;:::-;;:::i;22533:31::-;;;;;;;;;;;;;:::i;27101:159::-;;;;;;;;;;-1:-1:-1;27101:159:0;;;;;:::i;:::-;;:::i;17559:365::-;;;;;;;;;;-1:-1:-1;17559:365:0;;;;;:::i;:::-;;:::i;22693:39::-;;;;;;;;;;;;;;;;26065:727;;;;;;;;;;-1:-1:-1;26065:727:0;;;;;:::i;:::-;;:::i;26895:110::-;;;;;;;;;;-1:-1:-1;26895:110:0;;;;;:::i;:::-;;:::i;22609:31::-;;;;;;;;;;;;;;;;26800:87;;;;;;;;;;-1:-1:-1;26800:87:0;;;;;:::i;:::-;;:::i;16760:214::-;;;;;;;;;;-1:-1:-1;16760:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;16931:25:0;;;16902:4;16931:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;16760:214;25113:193;;;;;;;;;;-1:-1:-1;25113:193:0;;;;;:::i;:::-;;:::i;3574:238::-;;;;;;;;;;-1:-1:-1;3574:238:0;;;;;:::i;:::-;;:::i;14032:355::-;14179:4;-1:-1:-1;;;;;;14221:40:0;;-1:-1:-1;;;14221:40:0;;:105;;-1:-1:-1;;;;;;;14278:48:0;;-1:-1:-1;;;14278:48:0;14221:105;:158;;;-1:-1:-1;;;;;;;;;;11245:40:0;;;14343:36;14201:178;14032:355;-1:-1:-1;;14032:355:0:o;24567:256::-;24718:28;;-1:-1:-1;;24735:10:0;6995:2:1;6991:15;6987:53;24718:28:0;;;6975:66:1;24671:4:0;;;;7057:12:1;;24718:28:0;;;;;;;;;;;;24708:39;;;;;;24693:54;;24765:50;24784:12;;24765:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24798:10:0;;;-1:-1:-1;24810:4:0;;-1:-1:-1;24765:18:0;:50::i;:::-;24758:57;24567:256;-1:-1:-1;;;;24567:256:0:o;15032:100::-;15086:13;15119:5;15112:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15032:100;:::o;16249:308::-;16370:7;18381:16;;;:7;:16;;;;;;-1:-1:-1;;;;;18381:16:0;16395:110;;;;-1:-1:-1;;;16395:110:0;;15970:2:1;16395:110:0;;;15952:21:1;16009:2;15989:18;;;15982:30;16048:34;16028:18;;;16021:62;-1:-1:-1;;;16099:18:1;;;16092:42;16151:19;;16395:110:0;;;;;;;;;-1:-1:-1;16525:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;16525:24:0;;16249:308::o;15830:411::-;15911:13;15927:23;15942:7;15927:14;:23::i;:::-;15911:39;;15975:5;-1:-1:-1;;;;;15969:11:0;:2;-1:-1:-1;;;;;15969:11:0;;;15961:57;;;;-1:-1:-1;;;15961:57:0;;17922:2:1;15961:57:0;;;17904:21:1;17961:2;17941:18;;;17934:30;18000:34;17980:18;;;17973:62;-1:-1:-1;;;18051:18:1;;;18044:31;18092:19;;15961:57:0;17720:397:1;15961:57:0;2702:10;-1:-1:-1;;;;;16053:21:0;;;;:62;;-1:-1:-1;16078:37:0;16095:5;2702:10;16760:214;:::i;16078:37::-;16031:168;;;;-1:-1:-1;;;16031:168:0;;14016:2:1;16031:168:0;;;13998:21:1;14055:2;14035:18;;;14028:30;14094:34;14074:18;;;14067:62;14165:26;14145:18;;;14138:54;14209:19;;16031:168:0;13814:420:1;16031:168:0;16212:21;16221:2;16225:7;16212:8;:21::i;:::-;15900:341;15830:411;;:::o;27551:106::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;27627:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;27551:106:::0;:::o;27665:83::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;27725:6:::1;:15:::0;;-1:-1:-1;;27725:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27665:83::o;23355:95::-;23399:7;23426:16;:6;346:14;;254:114;23426:16;23419:23;;23355:95;:::o;16982:376::-;17191:41;2702:10;17224:7;17191:18;:41::i;:::-;17169:140;;;;-1:-1:-1;;;17169:140:0;;;;;;;:::i;:::-;17322:28;17332:4;17338:2;17342:7;17322:9;:28::i;27756:101::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;27825:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;27825:24:0;;::::1;::::0;;;::::1;::::0;;27756:101::o;27981:147::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;28030:7:::1;28051;3313:6:::0;;-1:-1:-1;;;;;3313:6:0;;3240:87;28051:7:::1;-1:-1:-1::0;;;;;28043:21:0::1;28072;28043:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28029:69;;;28117:2;28109:11;;;::::0;::::1;;28018:110;27981:147::o:0;17366:185::-;17504:39;17521:4;17527:2;17531:7;17504:39;;;;;;;;;;;;:16;:39::i;25314:743::-;25401:16;25435:23;25461:17;25471:6;25461:9;:17::i;:::-;25435:43;;25489:30;25536:15;25522:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25522:30:0;-1:-1:-1;25489:63:0;-1:-1:-1;25588:1:0;25563:22;25640:377;25679:15;25661;:33;:64;;;;;25716:9;;25698:14;:27;;25661:64;25640:377;;;25752:25;25780:23;25788:14;25780:7;:23::i;:::-;25752:51;;25845:6;-1:-1:-1;;;;;25824:27:0;:17;-1:-1:-1;;;;;25824:27:0;;25820:153;;;25905:14;25872:13;25886:15;25872:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;25940:17;;;;:::i;:::-;;;;25820:153;25989:16;;;;:::i;:::-;;;;25737:280;25640:377;;;-1:-1:-1;26036:13:0;;25314:743;-1:-1:-1;;;;25314:743:0:o;27013:80::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;27073:4:::1;:12:::0;27013:80::o;27268:161::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;27383:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;22493:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22458:28::-;;;;;;;:::i;14698:326::-;14815:7;14856:16;;;:7;:16;;;;;;-1:-1:-1;;;;;14856:16:0;14905:19;14883:110;;;;-1:-1:-1;;;14883:110:0;;14852:2:1;14883:110:0;;;14834:21:1;14891:2;14871:18;;;14864:30;14930:34;14910:18;;;14903:62;-1:-1:-1;;;14981:18:1;;;14974:39;15030:19;;14883:110:0;14650:405:1;14395:295:0;14512:7;-1:-1:-1;;;;;14559:19:0;;14537:111;;;;-1:-1:-1;;;14537:111:0;;14441:2:1;14537:111:0;;;14423:21:1;14480:2;14460:18;;;14453:30;14519:34;14499:18;;;14492:62;-1:-1:-1;;;14570:18:1;;;14563:40;14620:19;;14537:111:0;14239:406:1;14537:111:0;-1:-1:-1;;;;;;14666:16:0;;;;;:9;:16;;;;;;;14395:295::o;3463:103::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;3528:30:::1;3555:1;3528:18;:30::i;:::-;3463:103::o:0;23954:605::-;24093:11;23117:1;23103:11;:15;:52;;;;;23137:18;;23122:11;:33;;23103:52;23081:122;;;;-1:-1:-1;;;23081:122:0;;;;;;;:::i;:::-;23270:9;;23255:11;23236:16;:6;346:14;;254:114;23236:16;:30;;;;:::i;:::-;:43;;23214:113;;;;-1:-1:-1;;;23214:113:0;;;;;;;:::i;:::-;24131:6:::1;::::0;::::1;;24130:7;24122:43;;;::::0;-1:-1:-1;;;24122:43:0;;16744:2:1;24122:43:0::1;::::0;::::1;16726:21:1::0;16783:2;16763:18;;;16756:30;-1:-1:-1;;;16802:18:1;;;16795:53;16865:18;;24122:43:0::1;16542:347:1::0;24122:43:0::1;24204:11;24197:4;;:18;;;;:::i;:::-;24184:9;:31;;24176:63;;;::::0;-1:-1:-1;;;24176:63:0;;19091:2:1;24176:63:0::1;::::0;::::1;19073:21:1::0;19130:2;19110:18;;;19103:30;-1:-1:-1;;;19149:18:1;;;19142:49;19208:18;;24176:63:0::1;18889:343:1::0;24176:63:0::1;24254:15;::::0;;;::::1;;;:23;;24273:4;24254:23;24250:119;;;24302:27;24316:12;;24302:13;:27::i;:::-;24294:63;;;::::0;-1:-1:-1;;;24294:63:0;;13664:2:1;24294:63:0::1;::::0;::::1;13646:21:1::0;13703:2;13683:18;;;13676:30;13742:25;13722:18;;;13715:53;13785:18;;24294:63:0::1;13462:347:1::0;24294:63:0::1;24379:23;24405:21;24415:10;24405:9;:21::i;:::-;24379:47;;24463:18;;24445:15;:36;24437:69;;;;-1:-1:-1::0;;;24437:69:0::1;;;;;;;:::i;:::-;24517:34;24527:10;24539:11;24517:9;:34::i;:::-;24111:448;23954:605:::0;;;;:::o;27869:104::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;27941:10:::1;:24:::0;27869:104::o;27437:106::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;27513:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;24831:274::-:0;25004:24;;-1:-1:-1;;6995:2:1;6991:15;;;6987:53;25004:24:0;;;6975:66:1;24957:4:0;;;;7057:12:1;;25004:24:0;;;;;;;;;;;;24994:35;;;;;;24979:50;;25047;25066:12;;25047:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25080:10:0;;;-1:-1:-1;25092:4:0;;-1:-1:-1;25047:18:0;:50::i;:::-;25040:57;24831:274;-1:-1:-1;;;;;24831:274:0:o;15140:104::-;15196:13;15229:7;15222:14;;;;;:::i;23458:487::-;23550:11;23117:1;23103:11;:15;:52;;;;;23137:18;;23122:11;:33;;23103:52;23081:122;;;;-1:-1:-1;;;23081:122:0;;;;;;;:::i;:::-;23270:9;;23255:11;23236:16;:6;346:14;;254:114;23236:16;:30;;;;:::i;:::-;:43;;23214:113;;;;-1:-1:-1;;;23214:113:0;;;;;;;:::i;:::-;23588:6:::1;::::0;::::1;;23587:7;23579:43;;;::::0;-1:-1:-1;;;23579:43:0;;16744:2:1;23579:43:0::1;::::0;::::1;16726:21:1::0;16783:2;16763:18;;;16756:30;-1:-1:-1;;;16802:18:1;;;16795:53;16865:18;;23579:43:0::1;16542:347:1::0;23579:43:0::1;23661:11;23654:4;;:18;;;;:::i;:::-;23641:9;:31;;23633:63;;;::::0;-1:-1:-1;;;23633:63:0;;19091:2:1;23633:63:0::1;::::0;::::1;19073:21:1::0;19130:2;19110:18;;;19103:30;-1:-1:-1;;;19149:18:1;;;19142:49;19208:18;;23633:63:0::1;18889:343:1::0;23633:63:0::1;23716:15;::::0;;;::::1;;;23715:16;23707:47;;;::::0;-1:-1:-1;;;23707:47:0;;15262:2:1;23707:47:0::1;::::0;::::1;15244:21:1::0;15301:2;15281:18;;;15274:30;-1:-1:-1;;;15320:18:1;;;15313:48;15378:18;;23707:47:0::1;15060:342:1::0;23707:47:0::1;23765:23;23791:21;23801:10;23791:9;:21::i;:::-;23765:47;;23849:18;;23831:15;:36;23823:69;;;;-1:-1:-1::0;;;23823:69:0::1;;;;;;;:::i;:::-;23903:34;23913:10;23925:11;23903:9;:34::i;16565:187::-:0;16692:52;2702:10;16725:8;16735;16692:18;:52::i;22533:31::-;;;;;;;:::i;27101:159::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;27212:18:::1;:40:::0;27101:159::o;17559:365::-;17748:41;2702:10;17781:7;17748:18;:41::i;:::-;17726:140;;;;-1:-1:-1;;;17726:140:0;;;;;;;:::i;:::-;17877:39;17891:4;17897:2;17901:7;17910:5;17877:13;:39::i;:::-;17559:365;;;;:::o;26065:727::-;18357:4;18381:16;;;:7;:16;;;;;;26184:13;;-1:-1:-1;;;;;18381:16:0;26215:114;;;;-1:-1:-1;;;26215:114:0;;17506:2:1;26215:114:0;;;17488:21:1;17545:2;17525:18;;;17518:30;17584:34;17564:18;;;17557:62;-1:-1:-1;;;17635:18:1;;;17628:45;17690:19;;26215:114:0;17304:411:1;26215:114:0;26346:8;;;;;;;26342:74;;26387:17;26380:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26065:727;;;:::o;26342:74::-;26428:28;26459:10;:8;:10::i;:::-;26428:41;;26531:1;26506:14;26500:28;:32;:284;;;;;;;;;;;;;;;;;26624:14;26665:19;:8;:17;:19::i;:::-;26711:9;26581:162;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26500:284;26480:304;26065:727;-1:-1:-1;;;26065:727:0:o;26895:110::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;26970:18:::1;:27:::0;26895:110::o;26800:87::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;26862:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;26862:17:0;;::::1;::::0;;;::::1;::::0;;26800:87::o;25113:193::-;25217:11;23117:1;23103:11;:15;:52;;;;;23137:18;;23122:11;:33;;23103:52;23081:122;;;;-1:-1:-1;;;23081:122:0;;;;;;;:::i;:::-;23270:9;;23255:11;23236:16;:6;346:14;;254:114;23236:16;:30;;;;:::i;:::-;:43;;23214:113;;;;-1:-1:-1;;;23214:113:0;;;;;;;:::i;:::-;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23:::1;3367:68;;;;-1:-1:-1::0;;;3367:68:0::1;;;;;;;:::i;:::-;25265:33:::2;25275:9;25286:11;25265:9;:33::i;3574:238::-:0;3313:6;;-1:-1:-1;;;;;3313:6:0;2702:10;3375:23;3367:68;;;;-1:-1:-1;;;3367:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3677:22:0;::::1;3655:110;;;::::0;-1:-1:-1;;;3655:110:0;;11379:2:1;3655:110:0::1;::::0;::::1;11361:21:1::0;11418:2;11398:18;;;11391:30;11457:34;11437:18;;;11430:62;-1:-1:-1;;;11508:18:1;;;11501:36;11554:19;;3655:110:0::1;11177:402:1::0;3655:110:0::1;3776:28;3795:8;3776:18;:28::i;8706:190::-:0;8831:4;8884;8855:25;8868:5;8875:4;8855:12;:25::i;:::-;:33;;8706:190;-1:-1:-1;;;;8706:190:0:o;20635:174::-;20710:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;20710:29:0;-1:-1:-1;;;;;20710:29:0;;;;;;;;:24;;20764:23;20710:24;20764:14;:23::i;:::-;-1:-1:-1;;;;;20755:46:0;;;;;;;;;;;20635:174;;:::o;18427:452::-;18556:4;18381:16;;;:7;:16;;;;;;-1:-1:-1;;;;;18381:16:0;18578:110;;;;-1:-1:-1;;;18578:110:0;;13251:2:1;18578:110:0;;;13233:21:1;13290:2;13270:18;;;13263:30;13329:34;13309:18;;;13302:62;-1:-1:-1;;;13380:18:1;;;13373:42;13432:19;;18578:110:0;13049:408:1;18578:110:0;18699:13;18715:23;18730:7;18715:14;:23::i;:::-;18699:39;;18768:5;-1:-1:-1;;;;;18757:16:0;:7;-1:-1:-1;;;;;18757:16:0;;:64;;;;18814:7;-1:-1:-1;;;;;18790:31:0;:20;18802:7;18790:11;:20::i;:::-;-1:-1:-1;;;;;18790:31:0;;18757:64;:113;;;-1:-1:-1;;;;;;16931:25:0;;;16902:4;16931:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;18838:32;16760:214;20064:563;20237:4;-1:-1:-1;;;;;20210:31:0;:23;20225:7;20210:14;:23::i;:::-;-1:-1:-1;;;;;20210:31:0;;20188:122;;;;-1:-1:-1;;;20188:122:0;;17096:2:1;20188:122:0;;;17078:21:1;17135:2;17115:18;;;17108:30;17174:34;17154:18;;;17147:62;-1:-1:-1;;;17225:18:1;;;17218:39;17274:19;;20188:122:0;16894:405:1;20188:122:0;-1:-1:-1;;;;;20329:16:0;;20321:65;;;;-1:-1:-1;;;20321:65:0;;12492:2:1;20321:65:0;;;12474:21:1;12531:2;12511:18;;;12504:30;12570:34;12550:18;;;12543:62;-1:-1:-1;;;12621:18:1;;;12614:34;12665:19;;20321:65:0;12290:400:1;20321:65:0;20451:29;20468:1;20472:7;20451:8;:29::i;:::-;-1:-1:-1;;;;;20493:15:0;;;;;;:9;:15;;;;;:20;;20512:1;;20493:15;:20;;20512:1;;20493:20;:::i;:::-;;;;-1:-1:-1;;;;;;;20524:13:0;;;;;;:9;:13;;;;;:18;;20541:1;;20524:13;:18;;20541:1;;20524:18;:::i;:::-;;;;-1:-1:-1;;20553:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;20553:21:0;-1:-1:-1;;;;;20553:21:0;;;;;;;;;20592:27;;20553:16;;20592:27;;;;;;;20064:563;;;:::o;3820:191::-;3913:6;;;-1:-1:-1;;;;;3930:17:0;;;-1:-1:-1;;;;;;3930:17:0;;;;;;;3963:40;;3913:6;;;3930:17;3913:6;;3963:40;;3894:16;;3963:40;3883:128;3820:191;:::o;28136:226::-;28220:9;28215:140;28239:11;28235:1;:15;28215:140;;;28272:18;:6;465:19;;483:1;465:19;;;376:127;28272:18;28305:38;28315:9;28326:16;:6;346:14;;254:114;28326:16;28305:9;:38::i;:::-;28252:3;;;;:::i;:::-;;;;28215:140;;20817:315;20972:8;-1:-1:-1;;;;;20963:17:0;:5;-1:-1:-1;;;;;20963:17:0;;;20955:55;;;;-1:-1:-1;;;20955:55:0;;12897:2:1;20955:55:0;;;12879:21:1;12936:2;12916:18;;;12909:30;12975:27;12955:18;;;12948:55;13020:18;;20955:55:0;12695:349:1;20955:55:0;-1:-1:-1;;;;;21021:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;21021:46:0;;;;;;;;;;21083:41;;10300::1;;;21083::0;;10273:18:1;21083:41:0;;;;;;;20817:315;;;:::o;17932:352::-;18089:28;18099:4;18105:2;18109:7;18089:9;:28::i;:::-;18150:48;18173:4;18179:2;18183:7;18192:5;18150:22;:48::i;:::-;18128:148;;;;-1:-1:-1;;;18128:148:0;;;;;;;:::i;28370:110::-;28430:13;28463:9;28456:16;;;;;:::i;1074:532::-;1130:13;1160:10;1156:53;;-1:-1:-1;;1187:10:0;;;;;;;;;;;;-1:-1:-1;;;1187:10:0;;;;;1074:532::o;1156:53::-;1234:5;1219:12;1275:78;1282:9;;1275:78;;1308:8;;;;:::i;:::-;;-1:-1:-1;1331:10:0;;-1:-1:-1;1339:2:0;1331:10;;:::i;:::-;;;1275:78;;;1363:19;1395:6;1385:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1385:17:0;;1363:39;;1413:154;1420:10;;1413:154;;1447:11;1457:1;1447:11;;:::i;:::-;;-1:-1:-1;1516:10:0;1524:2;1516:5;:10;:::i;:::-;1503:24;;:2;:24;:::i;:::-;1490:39;;1473:6;1480;1473:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1473:56:0;;;;;;;;-1:-1:-1;1544:11:0;1553:2;1544:11;;:::i;:::-;;;1413:154;;9257:707;9367:7;9415:4;9367:7;9430:497;9454:5;:12;9450:1;:16;9430:497;;;9488:20;9511:5;9517:1;9511:8;;;;;;;;:::i;:::-;;;;;;;9488:31;;9554:12;9538;:28;9534:382;;10067:13;10122:15;;;10158:4;10151:15;;;10205:4;10189:21;;9666:57;;9534:382;;;10067:13;10122:15;;;10158:4;10151:15;;;10205:4;10189:21;;9843:57;;9534:382;-1:-1:-1;9468:3:0;;;;:::i;:::-;;;;9430:497;;;-1:-1:-1;9944:12:0;9257:707;-1:-1:-1;;;9257:707:0:o;18887:110::-;18963:26;18973:2;18977:7;18963:26;;;;;;;;;;;;:9;:26::i;21140:980::-;21295:4;-1:-1:-1;;;;;21316:13:0;;4310:20;4358:8;21312:801;;21369:175;;-1:-1:-1;;;21369:175:0;;-1:-1:-1;;;;;21369:36:0;;;;;:175;;2702:10;;21463:4;;21490:7;;21520:5;;21369:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21369:175:0;;;;;;;;-1:-1:-1;;21369:175:0;;;;;;;;;;;;:::i;:::-;;;21348:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21727:13:0;;21723:320;;21770:108;;-1:-1:-1;;;21770:108:0;;;;;;;:::i;21723:320::-;21993:6;21987:13;21978:6;21974:2;21970:15;21963:38;21348:710;-1:-1:-1;;;;;;21608:51:0;-1:-1:-1;;;21608:51:0;;-1:-1:-1;21601:58:0;;21312:801;-1:-1:-1;22097:4:0;21140:980;;;;;;:::o;19005:321::-;19135:18;19141:2;19145:7;19135:5;:18::i;:::-;19186:54;19217:1;19221:2;19225:7;19234:5;19186:22;:54::i;:::-;19164:154;;;;-1:-1:-1;;;19164:154:0;;;;;;;:::i;19334:382::-;-1:-1:-1;;;;;19414:16:0;;19406:61;;;;-1:-1:-1;;;19406:61:0;;15609:2:1;19406:61:0;;;15591:21:1;;;15628:18;;;15621:30;15687:34;15667:18;;;15660:62;15739:18;;19406:61:0;15407:356:1;19406:61:0;18357:4;18381:16;;;:7;:16;;;;;;-1:-1:-1;;;;;18381:16:0;:30;19478:58;;;;-1:-1:-1;;;19478:58:0;;11786:2:1;19478:58:0;;;11768:21:1;11825:2;11805:18;;;11798:30;11864;11844:18;;;11837:58;11912:18;;19478:58:0;11584:352:1;19478:58:0;-1:-1:-1;;;;;19607:13:0;;;;;;:9;:13;;;;;:18;;19624:1;;19607:13;:18;;19624:1;;19607:18;:::i;:::-;;;;-1:-1:-1;;19636:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;19636:21:0;-1:-1:-1;;;;;19636:21:0;;;;;;;;19675:33;;19636:16;;;19675:33;;19636:16;;19675:33;19334:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:367::-;891:8;901:6;955:3;948:4;940:6;936:17;932:27;922:55;;973:1;970;963:12;922:55;-1:-1:-1;996:20:1;;1039:18;1028:30;;1025:50;;;1071:1;1068;1061:12;1025:50;1108:4;1100:6;1096:17;1084:29;;1168:3;1161:4;1151:6;1148:1;1144:14;1136:6;1132:27;1128:38;1125:47;1122:67;;;1185:1;1182;1175:12;1122:67;828:367;;;;;:::o;1200:160::-;1265:20;;1321:13;;1314:21;1304:32;;1294:60;;1350:1;1347;1340:12;1365:186;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;1516:29;1535:9;1516:29;:::i;1556:260::-;1624:6;1632;1685:2;1673:9;1664:7;1660:23;1656:32;1653:52;;;1701:1;1698;1691:12;1653:52;1724:29;1743:9;1724:29;:::i;:::-;1714:39;;1772:38;1806:2;1795:9;1791:18;1772:38;:::i;:::-;1762:48;;1556:260;;;;;:::o;1821:328::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2006:29;2025:9;2006:29;:::i;:::-;1996:39;;2054:38;2088:2;2077:9;2073:18;2054:38;:::i;:::-;2044:48;;2139:2;2128:9;2124:18;2111:32;2101:42;;1821:328;;;;;:::o;2154:666::-;2249:6;2257;2265;2273;2326:3;2314:9;2305:7;2301:23;2297:33;2294:53;;;2343:1;2340;2333:12;2294:53;2366:29;2385:9;2366:29;:::i;:::-;2356:39;;2414:38;2448:2;2437:9;2433:18;2414:38;:::i;:::-;2404:48;;2499:2;2488:9;2484:18;2471:32;2461:42;;2554:2;2543:9;2539:18;2526:32;2581:18;2573:6;2570:30;2567:50;;;2613:1;2610;2603:12;2567:50;2636:22;;2689:4;2681:13;;2677:27;-1:-1:-1;2667:55:1;;2718:1;2715;2708:12;2667:55;2741:73;2806:7;2801:2;2788:16;2783:2;2779;2775:11;2741:73;:::i;:::-;2731:83;;;2154:666;;;;;;;:::o;2825:511::-;2920:6;2928;2936;2989:2;2977:9;2968:7;2964:23;2960:32;2957:52;;;3005:1;3002;2995:12;2957:52;3028:29;3047:9;3028:29;:::i;:::-;3018:39;;3108:2;3097:9;3093:18;3080:32;3135:18;3127:6;3124:30;3121:50;;;3167:1;3164;3157:12;3121:50;3206:70;3268:7;3259:6;3248:9;3244:22;3206:70;:::i;:::-;2825:511;;3295:8;;-1:-1:-1;3180:96:1;;-1:-1:-1;;;;2825:511:1:o;3341:254::-;3406:6;3414;3467:2;3455:9;3446:7;3442:23;3438:32;3435:52;;;3483:1;3480;3473:12;3435:52;3506:29;3525:9;3506:29;:::i;:::-;3496:39;;3554:35;3585:2;3574:9;3570:18;3554:35;:::i;3600:254::-;3668:6;3676;3729:2;3717:9;3708:7;3704:23;3700:32;3697:52;;;3745:1;3742;3735:12;3697:52;3768:29;3787:9;3768:29;:::i;:::-;3758:39;3844:2;3829:18;;;;3816:32;;-1:-1:-1;;;3600:254:1:o;3859:437::-;3945:6;3953;4006:2;3994:9;3985:7;3981:23;3977:32;3974:52;;;4022:1;4019;4012:12;3974:52;4062:9;4049:23;4095:18;4087:6;4084:30;4081:50;;;4127:1;4124;4117:12;4081:50;4166:70;4228:7;4219:6;4208:9;4204:22;4166:70;:::i;:::-;4255:8;;4140:96;;-1:-1:-1;3859:437:1;-1:-1:-1;;;;3859:437:1:o;4301:180::-;4357:6;4410:2;4398:9;4389:7;4385:23;4381:32;4378:52;;;4426:1;4423;4416:12;4378:52;4449:26;4465:9;4449:26;:::i;4486:180::-;4545:6;4598:2;4586:9;4577:7;4573:23;4569:32;4566:52;;;4614:1;4611;4604:12;4566:52;-1:-1:-1;4637:23:1;;4486:180;-1:-1:-1;4486:180:1:o;4671:245::-;4729:6;4782:2;4770:9;4761:7;4757:23;4753:32;4750:52;;;4798:1;4795;4788:12;4750:52;4837:9;4824:23;4856:30;4880:5;4856:30;:::i;4921:249::-;4990:6;5043:2;5031:9;5022:7;5018:23;5014:32;5011:52;;;5059:1;5056;5049:12;5011:52;5091:9;5085:16;5110:30;5134:5;5110:30;:::i;5175:450::-;5244:6;5297:2;5285:9;5276:7;5272:23;5268:32;5265:52;;;5313:1;5310;5303:12;5265:52;5353:9;5340:23;5386:18;5378:6;5375:30;5372:50;;;5418:1;5415;5408:12;5372:50;5441:22;;5494:4;5486:13;;5482:27;-1:-1:-1;5472:55:1;;5523:1;5520;5513:12;5472:55;5546:73;5611:7;5606:2;5593:16;5588:2;5584;5580:11;5546:73;:::i;5815:254::-;5883:6;5891;5944:2;5932:9;5923:7;5919:23;5915:32;5912:52;;;5960:1;5957;5950:12;5912:52;5996:9;5983:23;5973:33;;6025:38;6059:2;6048:9;6044:18;6025:38;:::i;6074:505::-;6169:6;6177;6185;6238:2;6226:9;6217:7;6213:23;6209:32;6206:52;;;6254:1;6251;6244:12;6206:52;6290:9;6277:23;6267:33;;6351:2;6340:9;6336:18;6323:32;6378:18;6370:6;6367:30;6364:50;;;6410:1;6407;6400:12;6584:257;6625:3;6663:5;6657:12;6690:6;6685:3;6678:19;6706:63;6762:6;6755:4;6750:3;6746:14;6739:4;6732:5;6728:16;6706:63;:::i;:::-;6823:2;6802:15;-1:-1:-1;;6798:29:1;6789:39;;;;6830:4;6785:50;;6584:257;-1:-1:-1;;6584:257:1:o;7080:1527::-;7304:3;7342:6;7336:13;7368:4;7381:51;7425:6;7420:3;7415:2;7407:6;7403:15;7381:51;:::i;:::-;7495:13;;7454:16;;;;7517:55;7495:13;7454:16;7539:15;;;7517:55;:::i;:::-;7661:13;;7594:20;;;7634:1;;7721;7743:18;;;;7796;;;;7823:93;;7901:4;7891:8;7887:19;7875:31;;7823:93;7964:2;7954:8;7951:16;7931:18;7928:40;7925:167;;;-1:-1:-1;;;7991:33:1;;8047:4;8044:1;8037:15;8077:4;7998:3;8065:17;7925:167;8108:18;8135:110;;;;8259:1;8254:328;;;;8101:481;;8135:110;-1:-1:-1;;8170:24:1;;8156:39;;8215:20;;;;-1:-1:-1;8135:110:1;;8254:328;19492:1;19485:14;;;19529:4;19516:18;;8349:1;8363:169;8377:8;8374:1;8371:15;8363:169;;;8459:14;;8444:13;;;8437:37;8502:16;;;;8394:10;;8363:169;;;8367:3;;8563:8;8556:5;8552:20;8545:27;;8101:481;-1:-1:-1;8598:3:1;;7080:1527;-1:-1:-1;;;;;;;;;;;7080:1527:1:o;9030:488::-;-1:-1:-1;;;;;9299:15:1;;;9281:34;;9351:15;;9346:2;9331:18;;9324:43;9398:2;9383:18;;9376:34;;;9446:3;9441:2;9426:18;;9419:31;;;9224:4;;9467:45;;9492:19;;9484:6;9467:45;:::i;:::-;9459:53;9030:488;-1:-1:-1;;;;;;9030:488:1:o;9523:632::-;9694:2;9746:21;;;9816:13;;9719:18;;;9838:22;;;9665:4;;9694:2;9917:15;;;;9891:2;9876:18;;;9665:4;9960:169;9974:6;9971:1;9968:13;9960:169;;;10035:13;;10023:26;;10104:15;;;;10069:12;;;;9996:1;9989:9;9960:169;;;-1:-1:-1;10146:3:1;;9523:632;-1:-1:-1;;;;;;9523:632:1:o;10534:219::-;10683:2;10672:9;10665:21;10646:4;10703:44;10743:2;10732:9;10728:18;10720:6;10703:44;:::i;10758:414::-;10960:2;10942:21;;;10999:2;10979:18;;;10972:30;11038:34;11033:2;11018:18;;11011:62;-1:-1:-1;;;11104:2:1;11089:18;;11082:48;11162:3;11147:19;;10758:414::o;11941:344::-;12143:2;12125:21;;;12182:2;12162:18;;;12155:30;-1:-1:-1;;;12216:2:1;12201:18;;12194:50;12276:2;12261:18;;11941:344::o;16181:356::-;16383:2;16365:21;;;16402:18;;;16395:30;16461:34;16456:2;16441:18;;16434:62;16528:2;16513:18;;16181:356::o;18122:344::-;18324:2;18306:21;;;18363:2;18343:18;;;18336:30;-1:-1:-1;;;18397:2:1;18382:18;;18375:50;18457:2;18442:18;;18122:344::o;18471:413::-;18673:2;18655:21;;;18712:2;18692:18;;;18685:30;18751:34;18746:2;18731:18;;18724:62;-1:-1:-1;;;18817:2:1;18802:18;;18795:47;18874:3;18859:19;;18471:413::o;19545:128::-;19585:3;19616:1;19612:6;19609:1;19606:13;19603:39;;;19622:18;;:::i;:::-;-1:-1:-1;19658:9:1;;19545:128::o;19678:120::-;19718:1;19744;19734:35;;19749:18;;:::i;:::-;-1:-1:-1;19783:9:1;;19678:120::o;19803:168::-;19843:7;19909:1;19905;19901:6;19897:14;19894:1;19891:21;19886:1;19879:9;19872:17;19868:45;19865:71;;;19916:18;;:::i;:::-;-1:-1:-1;19956:9:1;;19803:168::o;19976:125::-;20016:4;20044:1;20041;20038:8;20035:34;;;20049:18;;:::i;:::-;-1:-1:-1;20086:9:1;;19976:125::o;20106:258::-;20178:1;20188:113;20202:6;20199:1;20196:13;20188:113;;;20278:11;;;20272:18;20259:11;;;20252:39;20224:2;20217:10;20188:113;;;20319:6;20316:1;20313:13;20310:48;;;-1:-1:-1;;20354:1:1;20336:16;;20329:27;20106:258::o;20369:380::-;20448:1;20444:12;;;;20491;;;20512:61;;20566:4;20558:6;20554:17;20544:27;;20512:61;20619:2;20611:6;20608:14;20588:18;20585:38;20582:161;;;20665:10;20660:3;20656:20;20653:1;20646:31;20700:4;20697:1;20690:15;20728:4;20725:1;20718:15;20582:161;;20369:380;;;:::o;20754:135::-;20793:3;-1:-1:-1;;20814:17:1;;20811:43;;;20834:18;;:::i;:::-;-1:-1:-1;20881:1:1;20870:13;;20754:135::o;20894:112::-;20926:1;20952;20942:35;;20957:18;;:::i;:::-;-1:-1:-1;20991:9:1;;20894:112::o;21011:127::-;21072:10;21067:3;21063:20;21060:1;21053:31;21103:4;21100:1;21093:15;21127:4;21124:1;21117:15;21143:127;21204:10;21199:3;21195:20;21192:1;21185:31;21235:4;21232:1;21225:15;21259:4;21256:1;21249:15;21275:127;21336:10;21331:3;21327:20;21324:1;21317:31;21367:4;21364:1;21357:15;21391:4;21388:1;21381:15;21407:127;21468:10;21463:3;21459:20;21456:1;21449:31;21499:4;21496:1;21489:15;21523:4;21520:1;21513:15;21539:131;-1:-1:-1;;;;;;21613:32:1;;21603:43;;21593:71;;21660:1;21657;21650:12

Swarm Source

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