ETH Price: $3,441.98 (+1.49%)
Gas: 5 Gwei

Token

Kings (KINGS)
 

Overview

Max Total Supply

634 KINGS

Holders

83

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
grip710.eth
Balance
3 KINGS
0x94f64856e55ab61447f22f90e49ebef60d39b9a1
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:
Kings

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


// File: contracts/Ownable.sol

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

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

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

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

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

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

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

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

// File: Strings.sol

/**
 * Source: Openzeppelin
 */

/**
 * @dev String operations.
 */
library Strings {

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

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

// File: ECDSA.sol

// OpenZeppelin Contracts v4.4.0 (utils/cryptography/ECDSA.sol)


/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

}

// File: Address.sol0

/**
 * Source: Openzeppelin
 */

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

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

// File: IERC721Receiver.sol

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

// File: IERC165.sol

// https://eips.ethereum.org/EIPS/eip-165 


interface IERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceID The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    ///  uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

// File: IERC2981.sol


/**
 * Source: Openzeppelin
 */


/**
 * @dev Interface for the NFT Royalty Standard
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Called with the sale price to determine how much royalty is owed and to whom.
     * @param tokenId - the NFT asset queried for royalty information
     * @param salePrice - the sale price of the NFT asset specified by `tokenId`
     * @return receiver - address of who should be sent the royalty payment
     * @return royaltyAmount - the royalty payment amount for `salePrice`
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

// File: ERC165.sol


/**
 * Source: Openzeppelin
 */


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: IERC721.sol

// https://eips.ethereum.org/EIPS/eip-721, http://erc721.org/ 


/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x80ac58cd.
interface IERC721 is IERC165 {
    /// @dev This emits when ownership of any NFT changes by any mechanism.
    ///  This event emits when NFTs are created (`from` == 0) and destroyed
    ///  (`to` == 0). Exception: during contract creation, any number of NFTs
    ///  may be created and assigned without emitting Transfer. At the time of
    ///  any transfer, the approved address for that NFT (if any) is reset to none.
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);

    /// @dev This emits when the approved address for an NFT is changed or
    ///  reaffirmed. The zero address indicates there is no approved address.
    ///  When a Transfer event emits, this also indicates that the approved
    ///  address for that NFT (if any) is reset to none.
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);

    /// @dev This emits when an operator is enabled or disabled for an owner.
    ///  The operator can manage all NFTs of the owner.
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    /// @notice Count all NFTs assigned to an owner
    /// @dev NFTs assigned to the zero address are considered invalid, and this
    ///  function throws for queries about the zero address.
    /// @param _owner An address for whom to query the balance
    /// @return The number of NFTs owned by `_owner`, possibly zero
    function balanceOf(address _owner) external view returns (uint256);

    /// @notice Find the owner of an NFT
    /// @dev NFTs assigned to zero address are considered invalid, and queries
    ///  about them do throw.
    /// @param _tokenId The identifier for an NFT
    /// @return The address of the owner of the NFT
    function ownerOf(uint256 _tokenId) external view returns (address);

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `_from` is
    ///  not the current owner. Throws if `_to` is the zero address. Throws if
    ///  `_tokenId` is not a valid NFT. When transfer is complete, this function
    ///  checks if `_to` is a smart contract (code size > 0). If so, it calls
    ///  `onERC721Received` on `_to` and throws if the return value is not
    ///  `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    /// @param data Additional data with no specified format, sent in call to `_to`
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external;

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev This works identically to the other function with an extra data parameter,
    ///  except this function just sets data to "".
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external;

    /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
    ///  TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
    ///  THEY MAY BE PERMANENTLY LOST
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `_from` is
    ///  not the current owner. Throws if `_to` is the zero address. Throws if
    ///  `_tokenId` is not a valid NFT.
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    function transferFrom(address _from, address _to, uint256 _tokenId) external;

    /// @notice Change or reaffirm the approved address for an NFT
    /// @dev The zero address indicates there is no approved address.
    ///  Throws unless `msg.sender` is the current NFT owner, or an authorized
    ///  operator of the current owner.
    /// @param _approved The new approved NFT controller
    /// @param _tokenId The NFT to approve
    function approve(address _approved, uint256 _tokenId) external;

    /// @notice Enable or disable approval for a third party ("operator") to manage
    ///  all of `msg.sender`'s assets
    /// @dev Emits the ApprovalForAll event. The contract MUST allow
    ///  multiple operators per owner.
    /// @param _operator Address to add to the set of authorized operators
    /// @param _approved True if the operator is approved, false to revoke approval
    function setApprovalForAll(address _operator, bool _approved) external;

    /// @notice Get the approved address for a single NFT
    /// @dev Throws if `_tokenId` is not a valid NFT.
    /// @param _tokenId The NFT to find the approved address for
    /// @return The approved address for this NFT, or the zero address if there is none
    function getApproved(uint256 _tokenId) external view returns (address);

    /// @notice Query if an address is an authorized operator for another address
    /// @param _owner The address that owns the NFTs
    /// @param _operator The address that acts on behalf of the owner
    /// @return True if `_operator` is an approved operator for `_owner`, false otherwise
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

// File: IERC721Metadata.sol


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

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

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

// File: ERC721.sol

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension
 * Made for efficiancy!
 */
contract ERC721 is ERC165, IERC721, IERC721Metadata, Ownable {
    using Address for address;
    using Strings for uint256;

    uint16 public totalSupply;

    address public proxyRegistryAddress;

    string public baseURI;

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

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

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

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


    constructor(address _openseaProxyRegistry, string memory _baseURI) {
        proxyRegistryAddress = _openseaProxyRegistry;
        baseURI = _baseURI;
    }

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

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

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

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() external pure override returns (string memory) {
        return "Kings";
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() external pure override returns (string memory) {
        return "KINGS";
    }

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

        return string(abi.encodePacked(baseURI, tokenId.toString(), ".json"));
    }

    function setBaseURI(string memory uri) external onlyOwner {
        baseURI = uri;
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) external override {
        _setApprovalForAll(msg.sender, operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view override returns (bool) {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return _operatorApprovals[owner][operator];
    }

    function setOpenseaProxyRegistry(address addr) external onlyOwner {
        proxyRegistryAddress = addr;
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

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

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(uint256 amount, address to) internal {
        uint tokenId = totalSupply;

        _balances[to] += amount;
        
        for (uint i; i < amount; i++) {
            tokenId++;

            _owners[tokenId] = to;
            emit Transfer(address(0), to, tokenId);
        }
        
        totalSupply += uint16(amount);

        require(
            _checkOnERC721Received(address(0), to, tokenId, ""),
            "ERC721: transfer to non ERC721Receiver implementer"
        ); // checking it once will make sure that the address can recieve NFTs
    }

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

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    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);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(msg.sender, 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;
        }
    }

}

contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}


// File: Kings.sol


contract Kings is Ownable, IERC2981, ERC721 {
    
    bool private _mintingEnabled;

    uint private EIP2981RoyaltyPercent;

    mapping (address => uint8) private amountMinted;

    constructor(
        uint _royalty, 
        address _openseaProxyRegistry,
        string memory _tempBaseURI
    ) ERC721(_openseaProxyRegistry, _tempBaseURI) {
        EIP2981RoyaltyPercent = _royalty;
    }

    function mintFromReserve(uint amount, address to) external onlyOwner {
        require(amount + totalSupply < 2201, "Request will exceed max supply!");
        _mint(amount, to);
    }

    function mint(uint256 amount) external payable {
        require(totalSupply > 599, "Minting is not enabled!");
        require(amount < 21 && amount != 0, "Invalid request amount!");
        require(amount + totalSupply < 2201, "Request exceeds max supply!");
        require(msg.value == amount * 15e15, "ETH Amount is not correct!");

        _mint(amount, msg.sender);
    }

    function freeMint(uint256 amount) external {
        require(_mintingEnabled, "Minting is not enabled!");
        require(amount + totalSupply < 601, "Request exceeds max supply!");
        require(amount + amountMinted[msg.sender] < 4 && amount != 0, "Request exceeds max per wallet!");

        amountMinted[msg.sender] += uint8(amount);
        _mint(amount, msg.sender);
    }

    /**
     * @notice returns public sale status
     */
    function mintingEnabled() external view returns(bool) {
        return _mintingEnabled;
    }

    /**
     * @notice returns royalty info for EIP2981 supporting marketplaces
     * @dev Called with the sale price to determine how much royalty is owed and to whom.
     * @param tokenId - the NFT asset queried for royalty information
     * @param salePrice - the sale price of the NFT asset specified by `tokenId`
     * @return receiver - address of who should be sent the royalty payment
     * @return royaltyAmount - the royalty payment amount for `salePrice`
     */
    function royaltyInfo(uint tokenId, uint salePrice) external view override returns(address receiver, uint256 royaltyAmount) {
        require(_exists(tokenId), "Royality querry for non-existant token!");
        return(owner(), salePrice * EIP2981RoyaltyPercent / 10000);
    }

    /**
     * @notice sets the royalty percentage for EIP2981 supporting marketplaces
     * @dev percentage is in bassis points (parts per 10,000).
            Example: 5% = 500, 0.5% = 50 
     * @param amount - percent amount
     */
    function setRoyaltyPercent(uint256 amount) external onlyOwner {
        EIP2981RoyaltyPercent = amount; 
    }

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

    function withdraw() onlyOwner external {
        uint bal = address(this).balance;
        bool success;
        (success, ) = payable(msg.sender).call{value: (bal * 93) / 100, gas: 3000}("");
        require(success, "Transfer to contract owner failed!");
        (success, ) = payable(0xC52a2331679404cB7DE9405e15303eEf122280A6).call{value: (bal * 7) / 100, gas: 3000}("");
        require(success, "Transfer to core devs failed!");
        
    }

    /**
     * @notice toggles the public sale
     */
    function togglePublicSale() external onlyOwner {
        _mintingEnabled = !_mintingEnabled;
    }

    function tokensOfOwner(address owner) external view returns(uint[] memory) {
        uint[] memory tokens = new uint[](_balances[owner]);
        uint y = totalSupply + 1;
        uint x;

        for (uint i = 1; i < y; i++) {
            if (ownerOf(i) == owner) {
                tokens[x] = i;
                x++;
            }
        }

        return tokens;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_royalty","type":"uint256"},{"internalType":"address","name":"_openseaProxyRegistry","type":"address"},{"internalType":"string","name":"_tempBaseURI","type":"string"}],"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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"mintFromReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setOpenseaProxyRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRoyaltyPercent","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":"pure","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162002eca38038062002eca833981016040819052620000349162000179565b8181620000413362000083565b600180546001600160a01b0319166001600160a01b038416179055805162000071906002906020840190620000d3565b50505060089290925550620002d69050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620000e19062000283565b90600052602060002090601f01602090048101928262000105576000855562000150565b82601f106200012057805160ff191683800117855562000150565b8280016001018555821562000150579182015b828111156200015057825182559160200191906001019062000133565b506200015e92915062000162565b5090565b5b808211156200015e576000815560010162000163565b6000806000606084860312156200018f57600080fd5b8351602080860151919450906001600160a01b0381168114620001b157600080fd5b60408601519093506001600160401b0380821115620001cf57600080fd5b818701915087601f830112620001e457600080fd5b815181811115620001f957620001f9620002c0565b604051601f8201601f19908116603f01168101908382118183101715620002245762000224620002c0565b816040528281528a868487010111156200023d57600080fd5b600093505b8284101562000261578484018601518185018701529285019262000242565b82841115620002735760008684830101525b8096505050505050509250925092565b600181811c908216806200029857607f821691505b60208210811415620002ba57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612be480620002e66000396000f3fe6080604052600436106101cd5760003560e01c80638462151c116100f7578063adb03e4f11610095578063cd7c032611610064578063cd7c0326146105be578063e222c7f9146105de578063e985e9c5146105f3578063f2fde38b1461061357600080fd5b8063adb03e4f1461053e578063b88d4fde1461055e578063bd2f52441461057e578063c87b56dd1461059e57600080fd5b80639a4fc640116100d15780639a4fc640146104d35780639fd6db12146104f3578063a0712d681461050b578063a22cb4651461051e57600080fd5b80638462151c146104425780638da5cb5b1461046f57806395d89b411461048d57600080fd5b80633ccfd60b1161016f5780636c0360eb1161013e5780636c0360eb146103ca57806370a08231146103df578063715018a61461040d5780637c928fe91461042257600080fd5b80633ccfd60b1461035557806342842e0e1461036a57806355f804b31461038a5780636352211e146103aa57600080fd5b8063095ea7b3116101ab578063095ea7b31461028e57806318160ddd146102b057806323b872dd146102f65780632a55205a1461031657600080fd5b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610256575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046125df565b610633565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5060408051808201909152600581527f4b696e677300000000000000000000000000000000000000000000000000000060208201525b6040516101fe91906128cf565b34801561026257600080fd5b5061027661027136600461267f565b61068f565b6040516001600160a01b0390911681526020016101fe565b34801561029a57600080fd5b506102ae6102a93660046125b3565b61073a565b005b3480156102bc57600080fd5b506000546102e39074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016101fe565b34801561030257600080fd5b506102ae6103113660046124bf565b610869565b34801561032257600080fd5b506103366103313660046126bd565b6108f0565b604080516001600160a01b0390931683526020830191909152016101fe565b34801561036157600080fd5b506102ae6109ae565b34801561037657600080fd5b506102ae6103853660046124bf565b610bbc565b34801561039657600080fd5b506102ae6103a5366004612636565b610bd7565b3480156103b657600080fd5b506102766103c536600461267f565b610c53565b3480156103d657600080fd5b50610249610cde565b3480156103eb57600080fd5b506103ff6103fa366004612462565b610d6c565b6040519081526020016101fe565b34801561041957600080fd5b506102ae610e06565b34801561042e57600080fd5b506102ae61043d36600461267f565b610e7b565b34801561044e57600080fd5b5061046261045d366004612462565b611006565b6040516101fe919061288b565b34801561047b57600080fd5b506000546001600160a01b0316610276565b34801561049957600080fd5b5060408051808201909152600581527f4b494e47530000000000000000000000000000000000000000000000000000006020820152610249565b3480156104df57600080fd5b506102ae6104ee36600461267f565b611111565b3480156104ff57600080fd5b5060075460ff166101f2565b6102ae61051936600461267f565b61117f565b34801561052a57600080fd5b506102ae610539366004612580565b61132d565b34801561054a57600080fd5b506102ae610559366004612698565b611338565b34801561056a57600080fd5b506102ae610579366004612500565b611425565b34801561058a57600080fd5b506102ae610599366004612462565b6114b3565b3480156105aa57600080fd5b506102496105b936600461267f565b611556565b3480156105ca57600080fd5b50600154610276906001600160a01b031681565b3480156105ea57600080fd5b506102ae611615565b3480156105ff57600080fd5b506101f261060e366004612486565b6116b0565b34801561061f57600080fd5b506102ae61062e366004612462565b611797565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480610689575061068982611885565b92915050565b6000818152600360205260408120546001600160a01b031661071e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000818152600360205260409020546001600160a01b039081169083168114156107cc5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610715565b336001600160a01b03821614806107e857506107e881336116b0565b61085a5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610715565b6108648383611968565b505050565b61087333826119ee565b6108e55760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610715565b610864838383611ad3565b60008281526003602052604081205481906001600160a01b031661097c5760405162461bcd60e51b815260206004820152602760248201527f526f79616c6974792071756572727920666f72206e6f6e2d6578697374616e7460448201527f20746f6b656e21000000000000000000000000000000000000000000000000006064820152608401610715565b6000546001600160a01b0316612710600854856109999190612959565b6109a39190612945565b915091509250929050565b336109c16000546001600160a01b031690565b6001600160a01b031614610a175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b476000336064610a2884605d612959565b610a329190612945565b604051610bb891906000818181858888f193505050503d8060008114610a74576040519150601f19603f3d011682016040523d82523d6000602084013e610a79565b606091505b50508091505080610af25760405162461bcd60e51b815260206004820152602260248201527f5472616e7366657220746f20636f6e7472616374206f776e6572206661696c6560448201527f64210000000000000000000000000000000000000000000000000000000000006064820152608401610715565b73c52a2331679404cb7de9405e15303eef122280a66064610b14846007612959565b610b1e9190612945565b604051610bb891906000818181858888f193505050503d8060008114610b60576040519150601f19603f3d011682016040523d82523d6000602084013e610b65565b606091505b50508091505080610bb85760405162461bcd60e51b815260206004820152601d60248201527f5472616e7366657220746f20636f72652064657673206661696c6564210000006044820152606401610715565b5050565b61086483838360405180602001604052806000815250611425565b33610bea6000546001600160a01b031690565b6001600160a01b031614610c405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b8051610bb8906002906020840190612335565b6000818152600360205260408120546001600160a01b0316806106895760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610715565b60028054610ceb90612a0e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1790612a0e565b8015610d645780601f10610d3957610100808354040283529160200191610d64565b820191906000526020600020905b815481529060010190602001808311610d4757829003601f168201915b505050505081565b60006001600160a01b038216610dea5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610715565b506001600160a01b031660009081526004602052604090205490565b33610e196000546001600160a01b031690565b6001600160a01b031614610e6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b610e796000611cae565b565b60075460ff16610ecd5760405162461bcd60e51b815260206004820152601760248201527f4d696e74696e67206973206e6f7420656e61626c6564210000000000000000006044820152606401610715565b60005461025990610efa9074010000000000000000000000000000000000000000900461ffff1683612908565b10610f475760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c792100000000006044820152606401610715565b33600090815260096020526040902054600490610f679060ff1683612908565b108015610f7357508015155b610fbf5760405162461bcd60e51b815260206004820152601f60248201527f526571756573742065786365656473206d6178207065722077616c6c657421006044820152606401610715565b3360009081526009602052604081208054839290610fe190849060ff16612920565b92506101000a81548160ff021916908360ff1602179055506110038133611d16565b50565b6001600160a01b0381166000908152600460205260408120546060919067ffffffffffffffff81111561103b5761103b612b3c565b604051908082528060200260200182016040528015611064578160200160208202803683370190505b5060008054919250906110949074010000000000000000000000000000000000000000900461ffff1660016128e2565b61ffff169050600060015b8281101561110757856001600160a01b03166110ba82610c53565b6001600160a01b031614156110f557808483815181106110dc576110dc612b0d565b6020908102919091010152816110f181612a62565b9250505b806110ff81612a62565b91505061109f565b5091949350505050565b336111246000546001600160a01b031690565b6001600160a01b03161461117a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b600855565b6000546102577401000000000000000000000000000000000000000090910461ffff16116111ef5760405162461bcd60e51b815260206004820152601760248201527f4d696e74696e67206973206e6f7420656e61626c6564210000000000000000006044820152606401610715565b6015811080156111fe57508015155b61124a5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964207265717565737420616d6f756e74210000000000000000006044820152606401610715565b600054610899906112779074010000000000000000000000000000000000000000900461ffff1683612908565b106112c45760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c792100000000006044820152606401610715565b6112d58166354a6ba7a18000612959565b34146113235760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f7272656374210000000000006044820152606401610715565b6110038133611d16565b610bb8338383611ec2565b3361134b6000546001600160a01b031690565b6001600160a01b0316146113a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b600054610899906113ce9074010000000000000000000000000000000000000000900461ffff1684612908565b1061141b5760405162461bcd60e51b815260206004820152601f60248201527f526571756573742077696c6c20657863656564206d617820737570706c7921006044820152606401610715565b610bb88282611d16565b61142f33836119ee565b6114a15760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610715565b6114ad84848484611faf565b50505050565b336114c66000546001600160a01b031690565b6001600160a01b03161461151c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000818152600360205260409020546060906001600160a01b03166115e35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610715565b60026115ee83612038565b6040516020016115ff929190612745565b6040516020818303038152906040529050919050565b336116286000546001600160a01b031690565b6001600160a01b03161461167e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b6001546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174e9190612619565b6001600160a01b03161415611767576001915050610689565b50506001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b336117aa6000546001600160a01b031690565b6001600160a01b0316146118005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b6001600160a01b03811661187c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610715565b61100381611cae565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061191857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061068957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610689565b600081815260056020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915581906119b582610c53565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b0316611a785760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610715565b6000828152600360205260409020546001600160a01b03908116908416811480611abb5750836001600160a01b0316611ab08461068f565b6001600160a01b0316145b80611acb5750611acb81856116b0565b949350505050565b6000818152600360205260409020546001600160a01b03848116911614611b625760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610715565b6001600160a01b038216611bdd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610715565b611be8600082611968565b6001600160a01b0383166000908152600460205260408120805491611c0c836129d9565b90915550506001600160a01b0382166000908152600460205260408120805491611c3583612a62565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080546001600160a01b038316825260046020526040822080547401000000000000000000000000000000000000000090920461ffff16928592611d5c908490612908565b90915550600090505b83811015611dfa5781611d7781612a62565b60008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389169081179091559051929550859350917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480611df281612a62565b915050611d65565b5082600060148282829054906101000a900461ffff16611e1a91906128e2565b92506101000a81548161ffff021916908361ffff160217905550611e50600083836040518060200160405280600081525061216a565b6108645760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610715565b816001600160a01b0316836001600160a01b03161415611f245760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610715565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611fba848484611ad3565b611fc68484848461216a565b6114ad5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610715565b60608161207857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120a2578061208c81612a62565b915061209b9050600a83612945565b915061207c565b60008167ffffffffffffffff8111156120bd576120bd612b3c565b6040519080825280601f01601f1916602001820160405280156120e7576020820181803683370190505b5090505b8415611acb576120fc600183612996565b9150612109600a86612a9b565b612114906030612908565b60f81b81838151811061212957612129612b0d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612163600a86612945565b94506120eb565b60006001600160a01b0384163b1561232a576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906121c790339089908890889060040161284f565b602060405180830381600087803b1580156121e157600080fd5b505af192505050801561222f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261222c918101906125fc565b60015b6122df573d80801561225d576040519150601f19603f3d011682016040523d82523d6000602084013e612262565b606091505b5080516122d75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610715565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611acb565b506001949350505050565b82805461234190612a0e565b90600052602060002090601f01602090048101928261236357600085556123a9565b82601f1061237c57805160ff19168380011785556123a9565b828001600101855582156123a9579182015b828111156123a957825182559160200191906001019061238e565b506123b59291506123b9565b5090565b5b808211156123b557600081556001016123ba565b600067ffffffffffffffff808411156123e9576123e9612b3c565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561242f5761242f612b3c565b8160405280935085815286868601111561244857600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561247457600080fd5b813561247f81612b6b565b9392505050565b6000806040838503121561249957600080fd5b82356124a481612b6b565b915060208301356124b481612b6b565b809150509250929050565b6000806000606084860312156124d457600080fd5b83356124df81612b6b565b925060208401356124ef81612b6b565b929592945050506040919091013590565b6000806000806080858703121561251657600080fd5b843561252181612b6b565b9350602085013561253181612b6b565b925060408501359150606085013567ffffffffffffffff81111561255457600080fd5b8501601f8101871361256557600080fd5b612574878235602084016123ce565b91505092959194509250565b6000806040838503121561259357600080fd5b823561259e81612b6b565b9150602083013580151581146124b457600080fd5b600080604083850312156125c657600080fd5b82356125d181612b6b565b946020939093013593505050565b6000602082840312156125f157600080fd5b813561247f81612b80565b60006020828403121561260e57600080fd5b815161247f81612b80565b60006020828403121561262b57600080fd5b815161247f81612b6b565b60006020828403121561264857600080fd5b813567ffffffffffffffff81111561265f57600080fd5b8201601f8101841361267057600080fd5b611acb848235602084016123ce565b60006020828403121561269157600080fd5b5035919050565b600080604083850312156126ab57600080fd5b8235915060208301356124b481612b6b565b600080604083850312156126d057600080fd5b50508035926020909101359150565b600081518084526126f78160208601602086016129ad565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815161273b8185602086016129ad565b9290920192915050565b600080845481600182811c91508083168061276157607f831692505b602080841082141561279a577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156127ae57600181146127dd5761280a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952848901965061280a565b60008b81526020902060005b868110156128025781548b8201529085019083016127e9565b505084890196505b50505050505061284661281d8286612729565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b95945050505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261288160808301846126df565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156128c3578351835292840192918401916001016128a7565b50909695505050505050565b60208152600061247f60208301846126df565b600061ffff8083168185168083038211156128ff576128ff612aaf565b01949350505050565b6000821982111561291b5761291b612aaf565b500190565b600060ff821660ff84168060ff0382111561293d5761293d612aaf565b019392505050565b60008261295457612954612ade565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561299157612991612aaf565b500290565b6000828210156129a8576129a8612aaf565b500390565b60005b838110156129c85781810151838201526020016129b0565b838111156114ad5750506000910152565b6000816129e8576129e8612aaf565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c90821680612a2257607f821691505b60208210811415612a5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a9457612a94612aaf565b5060010190565b600082612aaa57612aaa612ade565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b038116811461100357600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461100357600080fdfea26469706673582212205a532598c7b0dad352d782994dc0f0c7cfcdbb79f0dddafc6c3408e89e9318e864736f6c6343000807003300000000000000000000000000000000000000000000000000000000000002ee0000000000000000000000000919ab9d49fc16ff3656bcd82703c0c06854252a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003626f620000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c80638462151c116100f7578063adb03e4f11610095578063cd7c032611610064578063cd7c0326146105be578063e222c7f9146105de578063e985e9c5146105f3578063f2fde38b1461061357600080fd5b8063adb03e4f1461053e578063b88d4fde1461055e578063bd2f52441461057e578063c87b56dd1461059e57600080fd5b80639a4fc640116100d15780639a4fc640146104d35780639fd6db12146104f3578063a0712d681461050b578063a22cb4651461051e57600080fd5b80638462151c146104425780638da5cb5b1461046f57806395d89b411461048d57600080fd5b80633ccfd60b1161016f5780636c0360eb1161013e5780636c0360eb146103ca57806370a08231146103df578063715018a61461040d5780637c928fe91461042257600080fd5b80633ccfd60b1461035557806342842e0e1461036a57806355f804b31461038a5780636352211e146103aa57600080fd5b8063095ea7b3116101ab578063095ea7b31461028e57806318160ddd146102b057806323b872dd146102f65780632a55205a1461031657600080fd5b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610256575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046125df565b610633565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5060408051808201909152600581527f4b696e677300000000000000000000000000000000000000000000000000000060208201525b6040516101fe91906128cf565b34801561026257600080fd5b5061027661027136600461267f565b61068f565b6040516001600160a01b0390911681526020016101fe565b34801561029a57600080fd5b506102ae6102a93660046125b3565b61073a565b005b3480156102bc57600080fd5b506000546102e39074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016101fe565b34801561030257600080fd5b506102ae6103113660046124bf565b610869565b34801561032257600080fd5b506103366103313660046126bd565b6108f0565b604080516001600160a01b0390931683526020830191909152016101fe565b34801561036157600080fd5b506102ae6109ae565b34801561037657600080fd5b506102ae6103853660046124bf565b610bbc565b34801561039657600080fd5b506102ae6103a5366004612636565b610bd7565b3480156103b657600080fd5b506102766103c536600461267f565b610c53565b3480156103d657600080fd5b50610249610cde565b3480156103eb57600080fd5b506103ff6103fa366004612462565b610d6c565b6040519081526020016101fe565b34801561041957600080fd5b506102ae610e06565b34801561042e57600080fd5b506102ae61043d36600461267f565b610e7b565b34801561044e57600080fd5b5061046261045d366004612462565b611006565b6040516101fe919061288b565b34801561047b57600080fd5b506000546001600160a01b0316610276565b34801561049957600080fd5b5060408051808201909152600581527f4b494e47530000000000000000000000000000000000000000000000000000006020820152610249565b3480156104df57600080fd5b506102ae6104ee36600461267f565b611111565b3480156104ff57600080fd5b5060075460ff166101f2565b6102ae61051936600461267f565b61117f565b34801561052a57600080fd5b506102ae610539366004612580565b61132d565b34801561054a57600080fd5b506102ae610559366004612698565b611338565b34801561056a57600080fd5b506102ae610579366004612500565b611425565b34801561058a57600080fd5b506102ae610599366004612462565b6114b3565b3480156105aa57600080fd5b506102496105b936600461267f565b611556565b3480156105ca57600080fd5b50600154610276906001600160a01b031681565b3480156105ea57600080fd5b506102ae611615565b3480156105ff57600080fd5b506101f261060e366004612486565b6116b0565b34801561061f57600080fd5b506102ae61062e366004612462565b611797565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480610689575061068982611885565b92915050565b6000818152600360205260408120546001600160a01b031661071e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000818152600360205260409020546001600160a01b039081169083168114156107cc5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610715565b336001600160a01b03821614806107e857506107e881336116b0565b61085a5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610715565b6108648383611968565b505050565b61087333826119ee565b6108e55760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610715565b610864838383611ad3565b60008281526003602052604081205481906001600160a01b031661097c5760405162461bcd60e51b815260206004820152602760248201527f526f79616c6974792071756572727920666f72206e6f6e2d6578697374616e7460448201527f20746f6b656e21000000000000000000000000000000000000000000000000006064820152608401610715565b6000546001600160a01b0316612710600854856109999190612959565b6109a39190612945565b915091509250929050565b336109c16000546001600160a01b031690565b6001600160a01b031614610a175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b476000336064610a2884605d612959565b610a329190612945565b604051610bb891906000818181858888f193505050503d8060008114610a74576040519150601f19603f3d011682016040523d82523d6000602084013e610a79565b606091505b50508091505080610af25760405162461bcd60e51b815260206004820152602260248201527f5472616e7366657220746f20636f6e7472616374206f776e6572206661696c6560448201527f64210000000000000000000000000000000000000000000000000000000000006064820152608401610715565b73c52a2331679404cb7de9405e15303eef122280a66064610b14846007612959565b610b1e9190612945565b604051610bb891906000818181858888f193505050503d8060008114610b60576040519150601f19603f3d011682016040523d82523d6000602084013e610b65565b606091505b50508091505080610bb85760405162461bcd60e51b815260206004820152601d60248201527f5472616e7366657220746f20636f72652064657673206661696c6564210000006044820152606401610715565b5050565b61086483838360405180602001604052806000815250611425565b33610bea6000546001600160a01b031690565b6001600160a01b031614610c405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b8051610bb8906002906020840190612335565b6000818152600360205260408120546001600160a01b0316806106895760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610715565b60028054610ceb90612a0e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1790612a0e565b8015610d645780601f10610d3957610100808354040283529160200191610d64565b820191906000526020600020905b815481529060010190602001808311610d4757829003601f168201915b505050505081565b60006001600160a01b038216610dea5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610715565b506001600160a01b031660009081526004602052604090205490565b33610e196000546001600160a01b031690565b6001600160a01b031614610e6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b610e796000611cae565b565b60075460ff16610ecd5760405162461bcd60e51b815260206004820152601760248201527f4d696e74696e67206973206e6f7420656e61626c6564210000000000000000006044820152606401610715565b60005461025990610efa9074010000000000000000000000000000000000000000900461ffff1683612908565b10610f475760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c792100000000006044820152606401610715565b33600090815260096020526040902054600490610f679060ff1683612908565b108015610f7357508015155b610fbf5760405162461bcd60e51b815260206004820152601f60248201527f526571756573742065786365656473206d6178207065722077616c6c657421006044820152606401610715565b3360009081526009602052604081208054839290610fe190849060ff16612920565b92506101000a81548160ff021916908360ff1602179055506110038133611d16565b50565b6001600160a01b0381166000908152600460205260408120546060919067ffffffffffffffff81111561103b5761103b612b3c565b604051908082528060200260200182016040528015611064578160200160208202803683370190505b5060008054919250906110949074010000000000000000000000000000000000000000900461ffff1660016128e2565b61ffff169050600060015b8281101561110757856001600160a01b03166110ba82610c53565b6001600160a01b031614156110f557808483815181106110dc576110dc612b0d565b6020908102919091010152816110f181612a62565b9250505b806110ff81612a62565b91505061109f565b5091949350505050565b336111246000546001600160a01b031690565b6001600160a01b03161461117a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b600855565b6000546102577401000000000000000000000000000000000000000090910461ffff16116111ef5760405162461bcd60e51b815260206004820152601760248201527f4d696e74696e67206973206e6f7420656e61626c6564210000000000000000006044820152606401610715565b6015811080156111fe57508015155b61124a5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964207265717565737420616d6f756e74210000000000000000006044820152606401610715565b600054610899906112779074010000000000000000000000000000000000000000900461ffff1683612908565b106112c45760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c792100000000006044820152606401610715565b6112d58166354a6ba7a18000612959565b34146113235760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f7272656374210000000000006044820152606401610715565b6110038133611d16565b610bb8338383611ec2565b3361134b6000546001600160a01b031690565b6001600160a01b0316146113a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b600054610899906113ce9074010000000000000000000000000000000000000000900461ffff1684612908565b1061141b5760405162461bcd60e51b815260206004820152601f60248201527f526571756573742077696c6c20657863656564206d617820737570706c7921006044820152606401610715565b610bb88282611d16565b61142f33836119ee565b6114a15760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610715565b6114ad84848484611faf565b50505050565b336114c66000546001600160a01b031690565b6001600160a01b03161461151c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000818152600360205260409020546060906001600160a01b03166115e35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610715565b60026115ee83612038565b6040516020016115ff929190612745565b6040516020818303038152906040529050919050565b336116286000546001600160a01b031690565b6001600160a01b03161461167e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b6001546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174e9190612619565b6001600160a01b03161415611767576001915050610689565b50506001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b336117aa6000546001600160a01b031690565b6001600160a01b0316146118005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610715565b6001600160a01b03811661187c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610715565b61100381611cae565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061191857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061068957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610689565b600081815260056020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915581906119b582610c53565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b0316611a785760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610715565b6000828152600360205260409020546001600160a01b03908116908416811480611abb5750836001600160a01b0316611ab08461068f565b6001600160a01b0316145b80611acb5750611acb81856116b0565b949350505050565b6000818152600360205260409020546001600160a01b03848116911614611b625760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610715565b6001600160a01b038216611bdd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610715565b611be8600082611968565b6001600160a01b0383166000908152600460205260408120805491611c0c836129d9565b90915550506001600160a01b0382166000908152600460205260408120805491611c3583612a62565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080546001600160a01b038316825260046020526040822080547401000000000000000000000000000000000000000090920461ffff16928592611d5c908490612908565b90915550600090505b83811015611dfa5781611d7781612a62565b60008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389169081179091559051929550859350917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480611df281612a62565b915050611d65565b5082600060148282829054906101000a900461ffff16611e1a91906128e2565b92506101000a81548161ffff021916908361ffff160217905550611e50600083836040518060200160405280600081525061216a565b6108645760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610715565b816001600160a01b0316836001600160a01b03161415611f245760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610715565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611fba848484611ad3565b611fc68484848461216a565b6114ad5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610715565b60608161207857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120a2578061208c81612a62565b915061209b9050600a83612945565b915061207c565b60008167ffffffffffffffff8111156120bd576120bd612b3c565b6040519080825280601f01601f1916602001820160405280156120e7576020820181803683370190505b5090505b8415611acb576120fc600183612996565b9150612109600a86612a9b565b612114906030612908565b60f81b81838151811061212957612129612b0d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612163600a86612945565b94506120eb565b60006001600160a01b0384163b1561232a576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906121c790339089908890889060040161284f565b602060405180830381600087803b1580156121e157600080fd5b505af192505050801561222f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261222c918101906125fc565b60015b6122df573d80801561225d576040519150601f19603f3d011682016040523d82523d6000602084013e612262565b606091505b5080516122d75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610715565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611acb565b506001949350505050565b82805461234190612a0e565b90600052602060002090601f01602090048101928261236357600085556123a9565b82601f1061237c57805160ff19168380011785556123a9565b828001600101855582156123a9579182015b828111156123a957825182559160200191906001019061238e565b506123b59291506123b9565b5090565b5b808211156123b557600081556001016123ba565b600067ffffffffffffffff808411156123e9576123e9612b3c565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561242f5761242f612b3c565b8160405280935085815286868601111561244857600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561247457600080fd5b813561247f81612b6b565b9392505050565b6000806040838503121561249957600080fd5b82356124a481612b6b565b915060208301356124b481612b6b565b809150509250929050565b6000806000606084860312156124d457600080fd5b83356124df81612b6b565b925060208401356124ef81612b6b565b929592945050506040919091013590565b6000806000806080858703121561251657600080fd5b843561252181612b6b565b9350602085013561253181612b6b565b925060408501359150606085013567ffffffffffffffff81111561255457600080fd5b8501601f8101871361256557600080fd5b612574878235602084016123ce565b91505092959194509250565b6000806040838503121561259357600080fd5b823561259e81612b6b565b9150602083013580151581146124b457600080fd5b600080604083850312156125c657600080fd5b82356125d181612b6b565b946020939093013593505050565b6000602082840312156125f157600080fd5b813561247f81612b80565b60006020828403121561260e57600080fd5b815161247f81612b80565b60006020828403121561262b57600080fd5b815161247f81612b6b565b60006020828403121561264857600080fd5b813567ffffffffffffffff81111561265f57600080fd5b8201601f8101841361267057600080fd5b611acb848235602084016123ce565b60006020828403121561269157600080fd5b5035919050565b600080604083850312156126ab57600080fd5b8235915060208301356124b481612b6b565b600080604083850312156126d057600080fd5b50508035926020909101359150565b600081518084526126f78160208601602086016129ad565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815161273b8185602086016129ad565b9290920192915050565b600080845481600182811c91508083168061276157607f831692505b602080841082141561279a577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156127ae57600181146127dd5761280a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952848901965061280a565b60008b81526020902060005b868110156128025781548b8201529085019083016127e9565b505084890196505b50505050505061284661281d8286612729565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b95945050505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261288160808301846126df565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156128c3578351835292840192918401916001016128a7565b50909695505050505050565b60208152600061247f60208301846126df565b600061ffff8083168185168083038211156128ff576128ff612aaf565b01949350505050565b6000821982111561291b5761291b612aaf565b500190565b600060ff821660ff84168060ff0382111561293d5761293d612aaf565b019392505050565b60008261295457612954612ade565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561299157612991612aaf565b500290565b6000828210156129a8576129a8612aaf565b500390565b60005b838110156129c85781810151838201526020016129b0565b838111156114ad5750506000910152565b6000816129e8576129e8612aaf565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c90821680612a2257607f821691505b60208210811415612a5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a9457612a94612aaf565b5060010190565b600082612aaa57612aaa612ade565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b038116811461100357600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461100357600080fdfea26469706673582212205a532598c7b0dad352d782994dc0f0c7cfcdbb79f0dddafc6c3408e89e9318e864736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000002ee0000000000000000000000000919ab9d49fc16ff3656bcd82703c0c06854252a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003626f620000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _royalty (uint256): 750
Arg [1] : _openseaProxyRegistry (address): 0x0919AB9d49Fc16fF3656bCd82703C0c06854252a
Arg [2] : _tempBaseURI (string): bob

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000002ee
Arg [1] : 0000000000000000000000000919ab9d49fc16ff3656bcd82703c0c06854252a
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [4] : 626f620000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

33111:4034:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35877:241;;;;;;;;;;-1:-1:-1;35877:241:0;;;;;:::i;:::-;;:::i;:::-;;;9468:14:1;;9461:22;9443:41;;9431:2;9416:18;35877:241:0;;;;;;;;23701:96;;;;;;;;;;-1:-1:-1;23775:14:0;;;;;;;;;;;;;;;;;23701:96;;;;;;;:::i;24914:213::-;;;;;;;;;;-1:-1:-1;24914:213:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7781:55:1;;;7763:74;;7751:2;7736:18;24914:213:0;7617:226:1;24454:394:0;;;;;;;;;;-1:-1:-1;24454:394:0;;;;;:::i;:::-;;:::i;:::-;;21990:25;;;;;;;;;;-1:-1:-1;21990:25:0;;;;;;;;;;;;;;18857:6:1;18845:19;;;18827:38;;18815:2;18800:18;21990:25:0;18683:188:1;26004:331:0;;;;;;;;;;-1:-1:-1;26004:331:0;;;;;:::i;:::-;;:::i;35162:279::-;;;;;;;;;;-1:-1:-1;35162:279:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;8556:55:1;;;8538:74;;8643:2;8628:18;;8621:34;;;;8511:18;35162:279:0;8364:297:1;36126:457:0;;;;;;;;;;;;;:::i;26406:179::-;;;;;;;;;;-1:-1:-1;26406:179:0;;;;;:::i;:::-;;:::i;24302:90::-;;;;;;;;;;-1:-1:-1;24302:90:0;;;;;:::i;:::-;;:::i;23403:231::-;;;;;;;;;;-1:-1:-1;23403:231:0;;;;;:::i;:::-;;:::i;22068:21::-;;;;;;;;;;;;;:::i;23139:202::-;;;;;;;;;;-1:-1:-1;23139:202:0;;;;;:::i;:::-;;:::i;:::-;;;19022:25:1;;;19010:2;18995:18;23139:202:0;18876:177:1;1675:96:0;;;;;;;;;;;;;:::i;34116:387::-;;;;;;;;;;-1:-1:-1;34116:387:0;;;;;:::i;:::-;;:::i;36757:385::-;;;;;;;;;;-1:-1:-1;36757:385:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1026:87::-;;;;;;;;;;-1:-1:-1;1072:7:0;1099:6;-1:-1:-1;;;;;1099:6:0;1026:87;;23866:98;;;;;;;;;;-1:-1:-1;23942:14:0;;;;;;;;;;;;;;;;;23866:98;;35693:112;;;;;;;;;;-1:-1:-1;35693:112:0;;;;;:::i;:::-;;:::i;34572:95::-;;;;;;;;;;-1:-1:-1;34644:15:0;;;;34572:95;;33723:385;;;;;;:::i;:::-;;:::i;25199:147::-;;;;;;;;;;-1:-1:-1;25199:147:0;;;;;:::i;:::-;;:::i;33528:187::-;;;;;;;;;;-1:-1:-1;33528:187:0;;;;;:::i;:::-;;:::i;26656:318::-;;;;;;;;;;-1:-1:-1;26656:318:0;;;;;:::i;:::-;;:::i;25825:112::-;;;;;;;;;;-1:-1:-1;25825:112:0;;;;;:::i;:::-;;:::i;24035:259::-;;;;;;;;;;-1:-1:-1;24035:259:0;;;;;:::i;:::-;;:::i;22024:35::-;;;;;;;;;;-1:-1:-1;22024:35:0;;;;-1:-1:-1;;;;;22024:35:0;;;36649:100;;;;;;;;;;;;;:::i;25417:400::-;;;;;;;;;;-1:-1:-1;25417:400:0;;;;;:::i;:::-;;:::i;1926:194::-;;;;;;;;;;-1:-1:-1;1926:194:0;;;;;:::i;:::-;;:::i;35877:241::-;35979:4;36016:41;;;36031:26;36016:41;;:94;;;36074:36;36098:11;36074:23;:36::i;:::-;35996:114;35877:241;-1:-1:-1;;35877:241:0:o;24914:213::-;24982:7;28504:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28504:16:0;25002:73;;;;-1:-1:-1;;;25002:73:0;;15807:2:1;25002:73:0;;;15789:21:1;15846:2;15826:18;;;15819:30;15885:34;15865:18;;;15858:62;15956:14;15936:18;;;15929:42;15988:19;;25002:73:0;;;;;;;;;-1:-1:-1;25095:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25095:24:0;;24914:213::o;24454:394::-;24529:13;24545:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24545:16:0;;;;24580:11;;;;;24572:57;;;;-1:-1:-1;;;24572:57:0;;17357:2:1;24572:57:0;;;17339:21:1;17396:2;17376:18;;;17369:30;17435:34;17415:18;;;17408:62;17506:3;17486:18;;;17479:31;17527:19;;24572:57:0;17155:397:1;24572:57:0;24664:10;-1:-1:-1;;;;;24664:19:0;;;;:58;;;24687:35;24704:5;24711:10;24687:16;:35::i;:::-;24642:164;;;;-1:-1:-1;;;24642:164:0;;14153:2:1;24642:164:0;;;14135:21:1;14192:2;14172:18;;;14165:30;14231:34;14211:18;;;14204:62;14302:26;14282:18;;;14275:54;14346:19;;24642:164:0;13951:420:1;24642:164:0;24819:21;24828:2;24832:7;24819:8;:21::i;:::-;24518:330;24454:394;;:::o;26004:331::-;26193:39;26212:10;26224:7;26193:18;:39::i;:::-;26185:101;;;;-1:-1:-1;;;26185:101:0;;17759:2:1;26185:101:0;;;17741:21:1;17798:2;17778:18;;;17771:30;17837:34;17817:18;;;17810:62;17908:19;17888:18;;;17881:47;17945:19;;26185:101:0;17557:413:1;26185:101:0;26299:28;26309:4;26315:2;26319:7;26299:9;:28::i;35162:279::-;35244:16;28504;;;:7;:16;;;;;;35244;;-1:-1:-1;;;;;28504:16:0;35296:68;;;;-1:-1:-1;;;35296:68:0;;15399:2:1;35296:68:0;;;15381:21:1;15438:2;15418:18;;;15411:30;15477:34;15457:18;;;15450:62;15548:9;15528:18;;;15521:37;15575:19;;35296:68:0;15197:403:1;35296:68:0;1072:7;1099:6;-1:-1:-1;;;;;1099:6:0;35427:5;35403:21;;35391:9;:33;;;;:::i;:::-;:41;;;;:::i;:::-;35375:58;;;;35162:279;;;;;:::o;36126:457::-;1257:10;1246:7;1072;1099:6;-1:-1:-1;;;;;1099:6:0;;1026:87;1246:7;-1:-1:-1;;;;;1246:21:0;;1238:66;;;;-1:-1:-1;;;1238:66:0;;16220:2:1;1238:66:0;;;16202:21:1;;;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16350:18;;1238:66:0;16018:356:1;1238:66:0;36187:21:::1;36176:8;36264:10;36301:3;36289:8;36187:21:::0;36295:2:::1;36289:8;:::i;:::-;36288:16;;;;:::i;:::-;36256:64;::::0;36311:4:::1;::::0;36256:64;::::1;::::0;;;;;36311:4;36256:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36242:78;;;;;36339:7;36331:54;;;::::0;-1:-1:-1;;;36331:54:0;;11153:2:1;36331:54:0::1;::::0;::::1;11135:21:1::0;11192:2;11172:18;;;11165:30;11231:34;11211:18;;;11204:62;11302:4;11282:18;;;11275:32;11324:19;;36331:54:0::1;10951:398:1::0;36331:54:0::1;36418:42;36486:3;36475:7;:3:::0;36481:1:::1;36475:7;:::i;:::-;36474:15;;;;:::i;:::-;36410:95;::::0;36496:4:::1;::::0;36410:95;::::1;::::0;;;;;36496:4;36410:95:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36396:109;;;;;36524:7;36516:49;;;::::0;-1:-1:-1;;;36516:49:0;;12315:2:1;36516:49:0::1;::::0;::::1;12297:21:1::0;12354:2;12334:18;;;12327:30;12393:31;12373:18;;;12366:59;12442:18;;36516:49:0::1;12113:353:1::0;36516:49:0::1;36165:418;;36126:457::o:0;26406:179::-;26538:39;26555:4;26561:2;26565:7;26538:39;;;;;;;;;;;;:16;:39::i;24302:90::-;1257:10;1246:7;1072;1099:6;-1:-1:-1;;;;;1099:6:0;;1026:87;1246:7;-1:-1:-1;;;;;1246:21:0;;1238:66;;;;-1:-1:-1;;;1238:66:0;;16220:2:1;1238:66:0;;;16202:21:1;;;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16350:18;;1238:66:0;16018:356:1;1238:66:0;24371:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;23403:231::-:0;23467:7;23503:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23503:16:0;23538:19;23530:73;;;;-1:-1:-1;;;23530:73:0;;14989:2:1;23530:73:0;;;14971:21:1;15028:2;15008:18;;;15001:30;15067:34;15047:18;;;15040:62;15138:11;15118:18;;;15111:39;15167:19;;23530:73:0;14787:405:1;22068:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23139:202::-;23205:7;-1:-1:-1;;;;;23233:19:0;;23225:74;;;;-1:-1:-1;;;23225:74:0;;14578:2:1;23225:74:0;;;14560:21:1;14617:2;14597:18;;;14590:30;14656:34;14636:18;;;14629:62;14727:12;14707:18;;;14700:40;14757:19;;23225:74:0;14376:406:1;23225:74:0;-1:-1:-1;;;;;;23317:16:0;;;;;:9;:16;;;;;;;23139:202::o;1675:96::-;1257:10;1246:7;1072;1099:6;-1:-1:-1;;;;;1099:6:0;;1026:87;1246:7;-1:-1:-1;;;;;1246:21:0;;1238:66;;;;-1:-1:-1;;;1238:66:0;;16220:2:1;1238:66:0;;;16202:21:1;;;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16350:18;;1238:66:0;16018:356:1;1238:66:0;1742:21:::1;1760:1;1742:9;:21::i;:::-;1675:96::o:0;34116:387::-;34178:15;;;;34170:51;;;;-1:-1:-1;;;34170:51:0;;12673:2:1;34170:51:0;;;12655:21:1;12712:2;12692:18;;;12685:30;12751:25;12731:18;;;12724:53;12794:18;;34170:51:0;12471:347:1;34170:51:0;34249:11;;34263:3;;34240:20;;34249:11;;;;;34240:6;:20;:::i;:::-;:26;34232:66;;;;-1:-1:-1;;;34232:66:0;;18177:2:1;34232:66:0;;;18159:21:1;18216:2;18196:18;;;18189:30;18255:29;18235:18;;;18228:57;18302:18;;34232:66:0;17975:351:1;34232:66:0;34339:10;34326:24;;;;:12;:24;;;;;;34353:1;;34317:33;;34326:24;;34317:6;:33;:::i;:::-;:37;:52;;;;-1:-1:-1;34358:11:0;;;34317:52;34309:96;;;;-1:-1:-1;;;34309:96:0;;13793:2:1;34309:96:0;;;13775:21:1;13832:2;13812:18;;;13805:30;13871:33;13851:18;;;13844:61;13922:18;;34309:96:0;13591:355:1;34309:96:0;34431:10;34418:24;;;;:12;:24;;;;;:41;;34452:6;;34418:24;:41;;34452:6;;34418:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34470:25;34476:6;34484:10;34470:5;:25::i;:::-;34116:387;:::o;36757:385::-;-1:-1:-1;;;;;36877:16:0;;36843:20;36877:16;;;:9;:16;;;;;;36817:13;;36843:20;36866:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36866:28:0;-1:-1:-1;36905:6:0;36914:11;;36843:51;;-1:-1:-1;36905:6:0;36914:15;;:11;;;;;36928:1;36914:15;:::i;:::-;36905:24;;;-1:-1:-1;36940:6:0;36973:1;36959:150;36980:1;36976;:5;36959:150;;;37021:5;-1:-1:-1;;;;;37007:19:0;:10;37015:1;37007:7;:10::i;:::-;-1:-1:-1;;;;;37007:19:0;;37003:95;;;37059:1;37047:6;37054:1;37047:9;;;;;;;;:::i;:::-;;;;;;;;;;:13;37079:3;;;;:::i;:::-;;;;37003:95;36983:3;;;;:::i;:::-;;;;36959:150;;;-1:-1:-1;37128:6:0;;36757:385;-1:-1:-1;;;;36757:385:0:o;35693:112::-;1257:10;1246:7;1072;1099:6;-1:-1:-1;;;;;1099:6:0;;1026:87;1246:7;-1:-1:-1;;;;;1246:21:0;;1238:66;;;;-1:-1:-1;;;1238:66:0;;16220:2:1;1238:66:0;;;16202:21:1;;;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16350:18;;1238:66:0;16018:356:1;1238:66:0;35766:21:::1;:30:::0;35693:112::o;33723:385::-;33789:11;;33803:3;33789:11;;;;;;:17;33781:53;;;;-1:-1:-1;;;33781:53:0;;12673:2:1;33781:53:0;;;12655:21:1;12712:2;12692:18;;;12685:30;12751:25;12731:18;;;12724:53;12794:18;;33781:53:0;12471:347:1;33781:53:0;33862:2;33853:6;:11;:26;;;;-1:-1:-1;33868:11:0;;;33853:26;33845:62;;;;-1:-1:-1;;;33845:62:0;;18533:2:1;33845:62:0;;;18515:21:1;18572:2;18552:18;;;18545:30;18611:25;18591:18;;;18584:53;18654:18;;33845:62:0;18331:347:1;33845:62:0;33935:11;;33949:4;;33926:20;;33935:11;;;;;33926:6;:20;:::i;:::-;:27;33918:67;;;;-1:-1:-1;;;33918:67:0;;18177:2:1;33918:67:0;;;18159:21:1;18216:2;18196:18;;;18189:30;18255:29;18235:18;;;18228:57;18302:18;;33918:67:0;17975:351:1;33918:67:0;34017:14;:6;34026:5;34017:14;:::i;:::-;34004:9;:27;33996:66;;;;-1:-1:-1;;;33996:66:0;;13025:2:1;33996:66:0;;;13007:21:1;13064:2;13044:18;;;13037:30;13103:28;13083:18;;;13076:56;13149:18;;33996:66:0;12823:350:1;33996:66:0;34075:25;34081:6;34089:10;34075:5;:25::i;25199:147::-;25288:50;25307:10;25319:8;25329;25288:18;:50::i;33528:187::-;1257:10;1246:7;1072;1099:6;-1:-1:-1;;;;;1099:6:0;;1026:87;1246:7;-1:-1:-1;;;;;1246:21:0;;1238:66;;;;-1:-1:-1;;;1238:66:0;;16220:2:1;1238:66:0;;;16202:21:1;;;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16350:18;;1238:66:0;16018:356:1;1238:66:0;33625:11:::1;::::0;33639:4:::1;::::0;33616:20:::1;::::0;33625:11;;::::1;;;33616:6:::0;:20:::1;:::i;:::-;:27;33608:71;;;::::0;-1:-1:-1;;;33608:71:0;;16997:2:1;33608:71:0::1;::::0;::::1;16979:21:1::0;17036:2;17016:18;;;17009:30;17075:33;17055:18;;;17048:61;17126:18;;33608:71:0::1;16795:355:1::0;33608:71:0::1;33690:17;33696:6;33704:2;33690:5;:17::i;26656:318::-:0;26823:39;26842:10;26854:7;26823:18;:39::i;:::-;26815:101;;;;-1:-1:-1;;;26815:101:0;;17759:2:1;26815:101:0;;;17741:21:1;17798:2;17778:18;;;17771:30;17837:34;17817:18;;;17810:62;17908:19;17888:18;;;17881:47;17945:19;;26815:101:0;17557:413:1;26815:101:0;26927:39;26941:4;26947:2;26951:7;26960:5;26927:13;:39::i;:::-;26656:318;;;;:::o;25825:112::-;1257:10;1246:7;1072;1099:6;-1:-1:-1;;;;;1099:6:0;;1026:87;1246:7;-1:-1:-1;;;;;1246:21:0;;1238:66;;;;-1:-1:-1;;;1238:66:0;;16220:2:1;1238:66:0;;;16202:21:1;;;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16350:18;;1238:66:0;16018:356:1;1238:66:0;25902:20:::1;:27:::0;;;::::1;-1:-1:-1::0;;;;;25902:27:0;;;::::1;::::0;;;::::1;::::0;;25825:112::o;24035:259::-;28480:4;28504:16;;;:7;:16;;;;;;24102:13;;-1:-1:-1;;;;;28504:16:0;24128:76;;;;-1:-1:-1;;;24128:76:0;;16581:2:1;24128:76:0;;;16563:21:1;16620:2;16600:18;;;16593:30;16659:34;16639:18;;;16632:62;16730:17;16710:18;;;16703:45;16765:19;;24128:76:0;16379:411:1;24128:76:0;24248:7;24257:18;:7;:16;:18::i;:::-;24231:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24217:69;;24035:259;;;:::o;36649:100::-;1257:10;1246:7;1072;1099:6;-1:-1:-1;;;;;1099:6:0;;1026:87;1246:7;-1:-1:-1;;;;;1246:21:0;;1238:66;;;;-1:-1:-1;;;1238:66:0;;16220:2:1;1238:66:0;;;16202:21:1;;;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16350:18;;1238:66:0;16018:356:1;1238:66:0;36726:15:::1;::::0;;36707:34;;::::1;36726:15;::::0;;::::1;36725:16;36707:34;::::0;;36649:100::o;25417:400::-;25630:20;;25674:28;;;;;-1:-1:-1;;;;;7781:55:1;;;25674:28:0;;;7763:74:1;25506:4:0;;25630:20;;;25666:49;;;;25630:20;;25674:21;;7736:18:1;;25674:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25666:49:0;;25662:93;;;25739:4;25732:11;;;;;25662:93;-1:-1:-1;;;;;;;25774:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25417:400::o;1926:194::-;1257:10;1246:7;1072;1099:6;-1:-1:-1;;;;;1099:6:0;;1026:87;1246:7;-1:-1:-1;;;;;1246:21:0;;1238:66;;;;-1:-1:-1;;;1238:66:0;;16220:2:1;1238:66:0;;;16202:21:1;;;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16350:18;;1238:66:0;16018:356:1;1238:66:0;-1:-1:-1;;;;;2017:22:0;::::1;2009:73;;;::::0;-1:-1:-1;;;2009:73:0;;10340:2:1;2009:73:0::1;::::0;::::1;10322:21:1::0;10379:2;10359:18;;;10352:30;10418:34;10398:18;;;10391:62;10489:8;10469:18;;;10462:36;10515:19;;2009:73:0::1;10138:402:1::0;2009:73:0::1;2093:19;2103:8;2093:9;:19::i;22770:305::-:0;22872:4;22909:40;;;22924:25;22909:40;;:105;;-1:-1:-1;22966:48:0;;;22981:33;22966:48;22909:105;:158;;;-1:-1:-1;15078:25:0;15063:40;;;;23031:36;14954:157;30953:174;31028:24;;;;:15;:24;;;;;:29;;;;-1:-1:-1;;;;;31028:29:0;;;;;;;;:24;;31082:23;31028:24;31082:14;:23::i;:::-;-1:-1:-1;;;;;31073:46:0;;;;;;;;;;;30953:174;;:::o;28709:341::-;28802:4;28504:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28504:16:0;28819:73;;;;-1:-1:-1;;;28819:73:0;;13380:2:1;28819:73:0;;;13362:21:1;13419:2;13399:18;;;13392:30;13458:34;13438:18;;;13431:62;13529:14;13509:18;;;13502:42;13561:19;;28819:73:0;13178:408:1;28819:73:0;28903:13;28919:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28919:16:0;;;;28954;;;;;:51;;;28998:7;-1:-1:-1;;;;;28974:31:0;:20;28986:7;28974:11;:20::i;:::-;-1:-1:-1;;;;;28974:31:0;;28954:51;:87;;;;29009:32;29026:5;29033:7;29009:16;:32::i;:::-;28946:96;28709:341;-1:-1:-1;;;;28709:341:0:o;30316:519::-;30448:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;30448:24:0;;;:16;;:24;30440:74;;;;-1:-1:-1;;;30440:74:0;;10747:2:1;30440:74:0;;;10729:21:1;10786:2;10766:18;;;10759:30;10825:34;10805:18;;;10798:62;10896:7;10876:18;;;10869:35;10921:19;;30440:74:0;10545:401:1;30440:74:0;-1:-1:-1;;;;;30533:16:0;;30525:65;;;;-1:-1:-1;;;30525:65:0;;11556:2:1;30525:65:0;;;11538:21:1;11595:2;11575:18;;;11568:30;11634:34;11614:18;;;11607:62;11705:6;11685:18;;;11678:34;11729:19;;30525:65:0;11354:400:1;30525:65:0;30655:29;30672:1;30676:7;30655:8;:29::i;:::-;-1:-1:-1;;;;;30697:15:0;;;;;;:9;:15;;;;;:17;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30725:13:0;;;;;;:9;:13;;;;;:15;;;;;;:::i;:::-;;;;-1:-1:-1;;30761:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;30761:21:0;;;;;;;;;30800:27;;30761:16;;30800:27;;;;;;;30316:519;;;:::o;2128:173::-;2184:16;2203:6;;-1:-1:-1;;;;;2220:17:0;;;;;;;;;;2253:40;;2203:6;;;;;;;2253:40;;2184:16;2253:40;2173:128;2128:173;:::o;29386:593::-;29449:12;29464:11;;-1:-1:-1;;;;;29488:13:0;;;;:9;:13;;;;;:23;;29464:11;;;;;;;29505:6;;29488:23;;29505:6;;29488:23;:::i;:::-;;;;-1:-1:-1;29537:6:0;;-1:-1:-1;29532:157:0;29549:6;29545:1;:10;29532:157;;;29577:9;;;;:::i;:::-;29603:16;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;29603:21:0;;;;;;;;29644:33;;29603:16;;-1:-1:-1;29603:16:0;;-1:-1:-1;29603:21:0;29644:33;;29603:16;;29644:33;29557:3;;;;:::i;:::-;;;;29532:157;;;;29731:6;29709:11;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29773:51;29804:1;29808:2;29812:7;29773:51;;;;;;;;;;;;:22;:51::i;:::-;29751:151;;;;-1:-1:-1;;;29751:151:0;;9921:2:1;29751:151:0;;;9903:21:1;9960:2;9940:18;;;9933:30;9999:34;9979:18;;;9972:62;10070:20;10050:18;;;10043:48;10108:19;;29751:151:0;9719:414:1;31269:315:0;31424:8;-1:-1:-1;;;;;31415:17:0;:5;-1:-1:-1;;;;;31415:17:0;;;31407:55;;;;-1:-1:-1;;;31407:55:0;;11961:2:1;31407:55:0;;;11943:21:1;12000:2;11980:18;;;11973:30;12039:27;12019:18;;;12012:55;12084:18;;31407:55:0;11759:349:1;31407:55:0;-1:-1:-1;;;;;31473:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;;;;;;;;;;;;31535:41;;9443::1;;;31535::0;;9416:18:1;31535:41:0;;;;;;;31269:315;;;:::o;27856:::-;28013:28;28023:4;28029:2;28033:7;28013:9;:28::i;:::-;28060:48;28083:4;28089:2;28093:7;28102:5;28060:22;:48::i;:::-;28052:111;;;;-1:-1:-1;;;28052:111:0;;9921:2:1;28052:111:0;;;9903:21:1;9960:2;9940:18;;;9933:30;9999:34;9979:18;;;9972:62;10070:20;10050:18;;;10043:48;10108:19;;28052:111:0;9719:414:1;2530:723:0;2586:13;2807:10;2803:53;;-1:-1:-1;;2834:10:0;;;;;;;;;;;;;;;;;;2530:723::o;2803:53::-;2881:5;2866:12;2922:78;2929:9;;2922:78;;2955:8;;;;:::i;:::-;;-1:-1:-1;2978:10:0;;-1:-1:-1;2986:2:0;2978:10;;:::i;:::-;;;2922:78;;;3010:19;3042:6;3032:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3032:17:0;;3010:39;;3060:154;3067:10;;3060:154;;3094:11;3104:1;3094:11;;:::i;:::-;;-1:-1:-1;3163:10:0;3171:2;3163:5;:10;:::i;:::-;3150:24;;:2;:24;:::i;:::-;3137:39;;3120:6;3127;3120:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;3191:11:0;3200:2;3191:11;;:::i;:::-;;;3060:154;;32149:798;32305:4;-1:-1:-1;;;;;32326:13:0;;11933:20;11981:8;32322:618;;32362:70;;;;;-1:-1:-1;;;;;32362:36:0;;;;;:70;;32399:10;;32411:4;;32417:7;;32426:5;;32362:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32362:70:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32358:527;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32602:13:0;;32598:272;;32645:60;;-1:-1:-1;;;32645:60:0;;9921:2:1;32645:60:0;;;9903:21:1;9960:2;9940:18;;;9933:30;9999:34;9979:18;;;9972:62;10070:20;10050:18;;;10043:48;10108:19;;32645:60:0;9719:414:1;32598:272:0;32820:6;32814:13;32805:6;32801:2;32797:15;32790:38;32358:527;32483:51;;32493:41;32483:51;;-1:-1:-1;32476:58:0;;32322:618;-1:-1:-1;32924:4:0;32149:798;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:690:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;289:2;283:9;355:2;343:15;;194:66;339:24;;;365:2;335:33;331:42;319:55;;;389:18;;;409:22;;;386:46;383:72;;;435:18;;:::i;:::-;475:10;471:2;464:22;504:6;495:15;;534:6;526;519:22;574:3;565:6;560:3;556:16;553:25;550:45;;;591:1;588;581:12;550:45;641:6;636:3;629:4;621:6;617:17;604:44;696:1;689:4;680:6;672;668:19;664:30;657:41;;;;14:690;;;;;:::o;709:247::-;768:6;821:2;809:9;800:7;796:23;792:32;789:52;;;837:1;834;827:12;789:52;876:9;863:23;895:31;920:5;895:31;:::i;:::-;945:5;709:247;-1:-1:-1;;;709:247:1:o;961:388::-;1029:6;1037;1090:2;1078:9;1069:7;1065:23;1061:32;1058:52;;;1106:1;1103;1096:12;1058:52;1145:9;1132:23;1164:31;1189:5;1164:31;:::i;:::-;1214:5;-1:-1:-1;1271:2:1;1256:18;;1243:32;1284:33;1243:32;1284:33;:::i;:::-;1336:7;1326:17;;;961:388;;;;;:::o;1354:456::-;1431:6;1439;1447;1500:2;1488:9;1479:7;1475:23;1471:32;1468:52;;;1516:1;1513;1506:12;1468:52;1555:9;1542:23;1574:31;1599:5;1574:31;:::i;:::-;1624:5;-1:-1:-1;1681:2:1;1666:18;;1653:32;1694:33;1653:32;1694:33;:::i;:::-;1354:456;;1746:7;;-1:-1:-1;;;1800:2:1;1785:18;;;;1772:32;;1354:456::o;1815:794::-;1910:6;1918;1926;1934;1987:3;1975:9;1966:7;1962:23;1958:33;1955:53;;;2004:1;2001;1994:12;1955:53;2043:9;2030:23;2062:31;2087:5;2062:31;:::i;:::-;2112:5;-1:-1:-1;2169:2:1;2154:18;;2141:32;2182:33;2141:32;2182:33;:::i;:::-;2234:7;-1:-1:-1;2288:2:1;2273:18;;2260:32;;-1:-1:-1;2343:2:1;2328:18;;2315:32;2370:18;2359:30;;2356:50;;;2402:1;2399;2392:12;2356:50;2425:22;;2478:4;2470:13;;2466:27;-1:-1:-1;2456:55:1;;2507:1;2504;2497:12;2456:55;2530:73;2595:7;2590:2;2577:16;2572:2;2568;2564:11;2530:73;:::i;:::-;2520:83;;;1815:794;;;;;;;:::o;2614:416::-;2679:6;2687;2740:2;2728:9;2719:7;2715:23;2711:32;2708:52;;;2756:1;2753;2746:12;2708:52;2795:9;2782:23;2814:31;2839:5;2814:31;:::i;:::-;2864:5;-1:-1:-1;2921:2:1;2906:18;;2893:32;2963:15;;2956:23;2944:36;;2934:64;;2994:1;2991;2984:12;3035:315;3103:6;3111;3164:2;3152:9;3143:7;3139:23;3135:32;3132:52;;;3180:1;3177;3170:12;3132:52;3219:9;3206:23;3238:31;3263:5;3238:31;:::i;:::-;3288:5;3340:2;3325:18;;;;3312:32;;-1:-1:-1;;;3035:315:1:o;3355:245::-;3413:6;3466:2;3454:9;3445:7;3441:23;3437:32;3434:52;;;3482:1;3479;3472:12;3434:52;3521:9;3508:23;3540:30;3564:5;3540:30;:::i;3605:249::-;3674:6;3727:2;3715:9;3706:7;3702:23;3698:32;3695:52;;;3743:1;3740;3733:12;3695:52;3775:9;3769:16;3794:30;3818:5;3794:30;:::i;3859:280::-;3958:6;4011:2;3999:9;3990:7;3986:23;3982:32;3979:52;;;4027:1;4024;4017:12;3979:52;4059:9;4053:16;4078:31;4103:5;4078:31;:::i;4144:450::-;4213:6;4266:2;4254:9;4245:7;4241:23;4237:32;4234:52;;;4282:1;4279;4272:12;4234:52;4322:9;4309:23;4355:18;4347:6;4344:30;4341:50;;;4387:1;4384;4377:12;4341:50;4410:22;;4463:4;4455:13;;4451:27;-1:-1:-1;4441:55:1;;4492:1;4489;4482:12;4441:55;4515:73;4580:7;4575:2;4562:16;4557:2;4553;4549:11;4515:73;:::i;4599:180::-;4658:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:52;;;4727:1;4724;4717:12;4679:52;-1:-1:-1;4750:23:1;;4599:180;-1:-1:-1;4599:180:1:o;4784:315::-;4852:6;4860;4913:2;4901:9;4892:7;4888:23;4884:32;4881:52;;;4929:1;4926;4919:12;4881:52;4965:9;4952:23;4942:33;;5025:2;5014:9;5010:18;4997:32;5038:31;5063:5;5038:31;:::i;5104:248::-;5172:6;5180;5233:2;5221:9;5212:7;5208:23;5204:32;5201:52;;;5249:1;5246;5239:12;5201:52;-1:-1:-1;;5272:23:1;;;5342:2;5327:18;;;5314:32;;-1:-1:-1;5104:248:1:o;5357:316::-;5398:3;5436:5;5430:12;5463:6;5458:3;5451:19;5479:63;5535:6;5528:4;5523:3;5519:14;5512:4;5505:5;5501:16;5479:63;:::i;:::-;5587:2;5575:15;5592:66;5571:88;5562:98;;;;5662:4;5558:109;;5357:316;-1:-1:-1;;5357:316:1:o;5678:185::-;5720:3;5758:5;5752:12;5773:52;5818:6;5813:3;5806:4;5799:5;5795:16;5773:52;:::i;:::-;5841:16;;;;;5678:185;-1:-1:-1;;5678:185:1:o;5986:1416::-;6263:3;6292:1;6325:6;6319:13;6355:3;6377:1;6405:9;6401:2;6397:18;6387:28;;6465:2;6454:9;6450:18;6487;6477:61;;6531:4;6523:6;6519:17;6509:27;;6477:61;6557:2;6605;6597:6;6594:14;6574:18;6571:38;6568:222;;;6644:77;6639:3;6632:90;6745:4;6742:1;6735:15;6775:4;6770:3;6763:17;6568:222;6806:18;6833:162;;;;7009:1;7004:320;;;;6799:525;;6833:162;6881:66;6870:9;6866:82;6861:3;6854:95;6978:6;6973:3;6969:16;6962:23;;6833:162;;7004:320;19131:1;19124:14;;;19168:4;19155:18;;7099:1;7113:165;7127:6;7124:1;7121:13;7113:165;;;7205:14;;7192:11;;;7185:35;7248:16;;;;7142:10;;7113:165;;;7117:3;;7307:6;7302:3;7298:16;7291:23;;6799:525;;;;;;;7340:56;7365:30;7391:3;7383:6;7365:30;:::i;:::-;5940:7;5928:20;;5973:1;5964:11;;5868:113;7340:56;7333:63;5986:1416;-1:-1:-1;;;;;5986:1416:1:o;7848:511::-;8042:4;-1:-1:-1;;;;;8152:2:1;8144:6;8140:15;8129:9;8122:34;8204:2;8196:6;8192:15;8187:2;8176:9;8172:18;8165:43;;8244:6;8239:2;8228:9;8224:18;8217:34;8287:3;8282:2;8271:9;8267:18;8260:31;8308:45;8348:3;8337:9;8333:19;8325:6;8308:45;:::i;:::-;8300:53;7848:511;-1:-1:-1;;;;;;7848:511:1:o;8666:632::-;8837:2;8889:21;;;8959:13;;8862:18;;;8981:22;;;8808:4;;8837:2;9060:15;;;;9034:2;9019:18;;;8808:4;9103:169;9117:6;9114:1;9111:13;9103:169;;;9178:13;;9166:26;;9247:15;;;;9212:12;;;;9139:1;9132:9;9103:169;;;-1:-1:-1;9289:3:1;;8666:632;-1:-1:-1;;;;;;8666:632:1:o;9495:219::-;9644:2;9633:9;9626:21;9607:4;9664:44;9704:2;9693:9;9689:18;9681:6;9664:44;:::i;19184:224::-;19223:3;19251:6;19284:2;19281:1;19277:10;19314:2;19311:1;19307:10;19345:3;19341:2;19337:12;19332:3;19329:21;19326:47;;;19353:18;;:::i;:::-;19389:13;;19184:224;-1:-1:-1;;;;19184:224:1:o;19413:128::-;19453:3;19484:1;19480:6;19477:1;19474:13;19471:39;;;19490:18;;:::i;:::-;-1:-1:-1;19526:9:1;;19413:128::o;19546:204::-;19584:3;19620:4;19617:1;19613:12;19652:4;19649:1;19645:12;19687:3;19681:4;19677:14;19672:3;19669:23;19666:49;;;19695:18;;:::i;:::-;19731:13;;19546:204;-1:-1:-1;;;19546:204:1:o;19755:120::-;19795:1;19821;19811:35;;19826:18;;:::i;:::-;-1:-1:-1;19860:9:1;;19755:120::o;19880:228::-;19920:7;20046:1;19978:66;19974:74;19971:1;19968:81;19963:1;19956:9;19949:17;19945:105;19942:131;;;20053:18;;:::i;:::-;-1:-1:-1;20093:9:1;;19880:228::o;20113:125::-;20153:4;20181:1;20178;20175:8;20172:34;;;20186:18;;:::i;:::-;-1:-1:-1;20223:9:1;;20113:125::o;20243:258::-;20315:1;20325:113;20339:6;20336:1;20333:13;20325:113;;;20415:11;;;20409:18;20396:11;;;20389:39;20361:2;20354:10;20325:113;;;20456:6;20453:1;20450:13;20447:48;;;-1:-1:-1;;20491:1:1;20473:16;;20466:27;20243:258::o;20506:196::-;20545:3;20573:5;20563:39;;20582:18;;:::i;:::-;-1:-1:-1;20629:66:1;20618:78;;20506:196::o;20707:437::-;20786:1;20782:12;;;;20829;;;20850:61;;20904:4;20896:6;20892:17;20882:27;;20850:61;20957:2;20949:6;20946:14;20926:18;20923:38;20920:218;;;20994:77;20991:1;20984:88;21095:4;21092:1;21085:15;21123:4;21120:1;21113:15;20920:218;;20707:437;;;:::o;21149:195::-;21188:3;21219:66;21212:5;21209:77;21206:103;;;21289:18;;:::i;:::-;-1:-1:-1;21336:1:1;21325:13;;21149:195::o;21349:112::-;21381:1;21407;21397:35;;21412:18;;:::i;:::-;-1:-1:-1;21446:9:1;;21349:112::o;21466:184::-;21518:77;21515:1;21508:88;21615:4;21612:1;21605:15;21639:4;21636:1;21629:15;21655:184;21707:77;21704:1;21697:88;21804:4;21801:1;21794:15;21828:4;21825:1;21818:15;21844:184;21896:77;21893:1;21886:88;21993:4;21990:1;21983:15;22017:4;22014:1;22007:15;22033:184;22085:77;22082:1;22075:88;22182:4;22179:1;22172:15;22206:4;22203:1;22196:15;22222:154;-1:-1:-1;;;;;22301:5:1;22297:54;22290:5;22287:65;22277:93;;22366:1;22363;22356:12;22381:177;22466:66;22459:5;22455:78;22448:5;22445:89;22435:117;;22548:1;22545;22538:12

Swarm Source

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