ETH Price: $2,982.45 (-4.79%)
Gas: 3 Gwei

Token

Tubby Kevins (TKEV)
 

Overview

Max Total Supply

6,708 TKEV

Holders

1,498

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
lilfrito.eth
Balance
4 TKEV
0xe73647c5f486975ecf2913f4f1263321c56aab4d
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:
TubbyKevin

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-11
*/

// SPDX-License-Identifier: APGL-3.0-Only AND MIT

/**

████████╗██╗   ██╗██████╗ ██████╗ ██╗   ██╗   
╚══██╔══╝██║   ██║██╔══██╗██╔══██╗╚██╗ ██╔╝   
   ██║   ██║   ██║██████╔╝██████╔╝ ╚████╔╝    
   ██║   ██║   ██║██╔══██╗██╔══██╗  ╚██╔╝     
   ██║   ╚██████╔╝██████╔╝██████╔╝   ██║      
   ╚═╝    ╚═════╝ ╚═════╝ ╚═════╝    ╚═╝      
                                              
██╗  ██╗███████╗██╗   ██╗██╗███╗   ██╗███████╗
██║ ██╔╝██╔════╝██║   ██║██║████╗  ██║██╔════╝
█████╔╝ █████╗  ██║   ██║██║██╔██╗ ██║███████╗
██╔═██╗ ██╔══╝  ╚██╗ ██╔╝██║██║╚██╗██║╚════██║
██║  ██╗███████╗ ╚████╔╝ ██║██║ ╚████║███████║
╚═╝  ╚═╝╚══════╝  ╚═══╝  ╚═╝╚═╝  ╚═══╝╚══════╝

        A TubbyCats Derivative Project
          TubbyCats:   @tubbycatsnft
          TubbyKevins: @tubbykevins

ERC721 contract created using Solmate and _batchMint
 forked from Azuki's ERC721A Contract and optimized
   to work with Solmate's Contract to create an
       extremely gas efficient contract.

**/


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @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 = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        uint8 v = uint8((uint256(vs) >> 255) + 27);
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @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 Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

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

    /**
     * @dev Returns an Ethereum Signed Message, created from `s`. 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(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

pragma solidity >=0.8.0;

/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
/// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC.
abstract contract ERC721 {
    /*///////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 indexed id);

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);

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

    error MintZeroAddress();
    error MintZeroQuantity();

    /*///////////////////////////////////////////////////////////////
                          METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    function tokenURI(uint256 id) public view virtual returns (string memory);

    /*///////////////////////////////////////////////////////////////
                            ERC721 STORAGE                        
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(uint256 => address) public ownerOf;

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*///////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*///////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 id) public virtual {
        address owner = ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            balanceOf[from]--;

            balanceOf[to]++;
        }

        ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes memory data
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    /*///////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _batchMint(address to, uint256 quantity) internal virtual {
        if (to == address(0)) revert MintZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        unchecked {
            balanceOf[to] += quantity;

            uint256 updatedIndex = totalSupply;
            uint256 end = updatedIndex + quantity;

            do {
                uint256 tokenId = updatedIndex+1;
                emit Transfer(address(0), to, tokenId);
                ownerOf[tokenId] = to;
                updatedIndex++;
            } while (updatedIndex != end);
            totalSupply = updatedIndex;
        }
    }

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            totalSupply++;

            balanceOf[to]++;
        }

        ownerOf[id] = to;

        emit Transfer(address(0), to, id);
    }

    function _burn(uint256 id) internal virtual {
        address owner = ownerOf[id];

        require(ownerOf[id] != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            totalSupply--;

            balanceOf[owner]--;
        }

        delete ownerOf[id];

        delete getApproved[id];

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

    /*///////////////////////////////////////////////////////////////
                       INTERNAL SAFE MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
interface ERC721TokenReceiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 id,
        bytes calldata data
    ) external returns (bytes4);
}

pragma solidity ^0.8.4;

contract TubbyKevin is ERC721 {

    using ECDSA for bytes32;

    enum SaleState {
        CLOSED,
        CLAIM,
        MINT
    }

    uint256 public maxSupply = 6666;
    uint256 public mintPrice = 0.03 ether;
    uint256 public immutable maxMintable = 10;
    uint256 public immutable maxTubbyClaim = 4000;

    SaleState public saleState;

    string public baseURI;

    address private dev1;
    address private dev2;
    address private mktng;
    address private signer;
    
    mapping(address => uint256) private sharePercs;
    mapping(address => bool) private didntWorkVote;
    mapping(uint256 => bool) public claimed;

    bool public useIpfs = false;

    modifier onlyShareholder() {
        require(sharePercs[msg.sender] > 0 || msg.sender == signer,"MUST_BE_SHAREHOLDER");
        _;
    }

    constructor(
        string memory _baseURI,
        address _dev1,
        address _dev2,
        address _mktng,
        address _signer
    ) 
    ERC721("Tubby Kevins", "TKEV"){
        baseURI = _baseURI;
        sharePercs[_dev1] = 20;
        sharePercs[_dev2] = 20;
        sharePercs[_mktng] = 60;
        dev1 = _dev1;
        dev2 = _dev2;
        mktng = _mktng;
        signer = _signer;
    }

    function tubbyClaim(
        uint256[] memory _nftIds,
        uint256 _nonce,
        bytes memory _signature
    ) public {
        require(saleState == SaleState.CLAIM, "CLAIM_INACTIVE");
        bytes32 hash = hashTransaction(msg.sender, _nftIds, _nonce);
        require(matchSignerAdmin(signTransaction(hash), _signature), "SIGNATURE_MISMATCH");
        require(totalSupply+_nftIds.length <= maxTubbyClaim, "NOT_ENOUGH_LEFT");
        for (uint i=0;i<_nftIds.length;i++) {
            require(!claimed[_nftIds[i]], "ALREADY_CLAIMED");
            claimed[_nftIds[i]] = true;
        }
        _batchMint(msg.sender, _nftIds.length);
    }

    function adminMint(
        address[] memory addresses,
        uint256[] memory amounts
    ) public onlyShareholder {
        for (uint i=0;i<addresses.length;i++) {
            _batchMint(addresses[i], amounts[i]);
        }
    }

    function mint(
        uint256 _amount
    ) public payable {
        require(saleState == SaleState.MINT, "MINT_INACTIVE");
        require(msg.value == (_amount * mintPrice), "INSUFFICIENT_FUNDS");
        require(_amount <= maxMintable || _amount + totalSupply <= maxSupply, "REQUESTING_TOO_MANY");
        if (_amount == 1) {
            _mint(msg.sender, totalSupply+1);
        } else {
            _batchMint(msg.sender, _amount);
        }
    }

    function updateSaleState(
        SaleState code
    ) public onlyShareholder {
        saleState = code;
    }

    function didntWorkOut() public onlyShareholder {
        require(!didntWorkVote[msg.sender], "ALREADY_VOTED");
        didntWorkVote[msg.sender] = true;
        if (didntWorkVote[dev1] && didntWorkVote[dev2] && didntWorkVote[mktng]) {
            sharePercs[dev1] = 33;
            sharePercs[dev2] = 33;
            sharePercs[mktng] = 33;
            saleState = SaleState.CLOSED;
        }
    }

    function updateMintPrice(
        uint256 _gweiPrice
    ) public onlyShareholder {
        mintPrice = _gweiPrice;
    }

    function withdraw() public onlyShareholder {
        require(address(this).balance > (0.1 * 1 ether), "INSUFFICIENT_FUNDS");
        uint256 dev_amnt = (address(this).balance * 20) / 100;
        uint256 mktg_amnt = (address(this).balance - (dev_amnt * 2));
        payable(dev1).transfer(dev_amnt);
        payable(dev2).transfer(dev_amnt);
        payable(mktng).transfer(mktg_amnt);
    }

    function uint2str(uint _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len;
        while (_i != 0) {
            k = k-1;
            uint8 temp = (48 + uint8(_i - _i / 10 * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }
        return string(bstr);
    }

    function tokenURI(
        uint256 id
    ) public view override returns (string memory) {
        if (!useIpfs) {
            return string(abi.encodePacked(baseURI, uint2str(id)));
        } else {
            return string(abi.encodePacked(baseURI, uint2str(id), ".json"));
        }
    }

    function updateSigner(
        address _signer
    ) public onlyShareholder {
        signer = _signer;
    }

    function updateMetadata(
        string memory _uri,
        bool _useIpfs
    ) public onlyShareholder {
        baseURI = _uri;
        useIpfs = _useIpfs;
    }

    function hashTransaction(address _sender, uint256[] memory _nftIds, uint256 _nonce) public pure returns (bytes32) {
        bytes32 _hash = keccak256(abi.encodePacked(_sender, _nftIds, _nonce));
        return _hash;
    }
        
    function signTransaction(bytes32 _hash) public pure returns (bytes32) {
        return _hash.toEthSignedMessageHash();
    }

    function matchSignerAdmin(bytes32 _payload, bytes memory _signature) public view returns (bool) {
        return signer == _payload.recover(_signature);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"address","name":"_dev1","type":"address"},{"internalType":"address","name":"_dev2","type":"address"},{"internalType":"address","name":"_mktng","type":"address"},{"internalType":"address","name":"_signer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MintZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"","type":"uint256"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"didntWorkOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256[]","name":"_nftIds","type":"uint256[]"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"hashTransaction","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_payload","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"matchSignerAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTubbyClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"enum TubbyKevin.SaleState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"name":"signTransaction","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_nftIds","type":"uint256[]"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"tubbyClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bool","name":"_useIpfs","type":"bool"}],"name":"updateMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gweiPrice","type":"uint256"}],"name":"updateMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum TubbyKevin.SaleState","name":"code","type":"uint8"}],"name":"updateSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"updateSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useIpfs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052611a0a600755666a94d74f430000600855600a608052610fa060a0526012805460ff191690553480156200003757600080fd5b5060405162002a3a38038062002a3a8339810160408190526200005a9162000217565b604080518082018252600c81526b5475626279204b6576696e7360a01b6020808301918252835180850190945260048452632a25a2ab60e11b908401528151919291620000aa9160009162000154565b508051620000c090600190602084019062000154565b50508551620000d89150600a90602088019062000154565b506001600160a01b039384166000818152600f602052604080822060149081905595871680835281832096909655938616808252939020603c9055600b80546001600160a01b03199081169092179055600c80548216909417909355600d80548416909217909155600e80549190931691161790555062000393565b828054620001629062000340565b90600052602060002090601f016020900481019282620001865760008555620001d1565b82601f10620001a157805160ff1916838001178555620001d1565b82800160010185558215620001d1579182015b82811115620001d1578251825591602001919060010190620001b4565b50620001df929150620001e3565b5090565b5b80821115620001df5760008155600101620001e4565b80516001600160a01b03811681146200021257600080fd5b919050565b600080600080600060a086880312156200023057600080fd5b85516001600160401b03808211156200024857600080fd5b818801915088601f8301126200025d57600080fd5b8151818111156200027257620002726200037d565b604051601f8201601f19908116603f011681019083821181831017156200029d576200029d6200037d565b81604052828152602093508b84848701011115620002ba57600080fd5b600091505b82821015620002de5784820184015181830185015290830190620002bf565b82821115620002f05760008484830101525b985062000302915050888201620001fa565b955050506200031460408701620001fa565b92506200032460608701620001fa565b91506200033460808701620001fa565b90509295509295909350565b600181811c908216806200035557607f821691505b602082108114156200037757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a051612673620003c76000396000818161069001526114b10152600081816103540152610ec301526126736000f3fe6080604052600436106101f85760003560e01c8063955c20b21161010d578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb01146105dd578063dbe7e3bd146105f3578063e0f4ea9014610623578063e985e9c514610643578063ff3f48d81461067e57600080fd5b8063b88d4fde14610568578063c073925e14610588578063c87b56dd1461059d578063ca0c6321146105bd57600080fd5b8063a22cb465116100dc578063a22cb465146104e8578063a49340cc14610508578063a7ecd37e14610528578063a9eaee301461054857600080fd5b8063955c20b21461048057806395d89b41146104a05780639ff9baf8146104b5578063a0712d68146104d557600080fd5b80632154dc3911610190578063603f4d521161015f578063603f4d52146103cb5780636352211e146103f25780636817c76c146104285780636c0360eb1461043e57806370a082311461045357600080fd5b80632154dc391461034257806323b872dd146103765780633ccfd60b1461039657806342842e0e146103ab57600080fd5b8063095ea7b3116101cc578063095ea7b3146102c45780630e37a71a146102e45780631508c2901461031257806318160ddd1461032c57600080fd5b8062728e46146101fd57806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276575b600080fd5b34801561020957600080fd5b5061021d610218366004612142565b6106b2565b005b34801561022b57600080fd5b5061023f61023a366004612198565b610703565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b50610269610755565b60405161024b9190612423565b34801561028257600080fd5b506102ac610291366004612142565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b3480156102d057600080fd5b5061021d6102df366004611fe4565b6107e3565b3480156102f057600080fd5b506103046102ff366004611f63565b6108c5565b60405190815260200161024b565b34801561031e57600080fd5b5060125461023f9060ff1681565b34801561033857600080fd5b5061030460025481565b34801561034e57600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000081565b34801561038257600080fd5b5061021d610391366004611ebf565b6108fe565b3480156103a257600080fd5b5061021d610ac5565b3480156103b757600080fd5b5061021d6103c6366004611ebf565b610c3c565b3480156103d757600080fd5b506009546103e59060ff1681565b60405161024b91906123fb565b3480156103fe57600080fd5b506102ac61040d366004612142565b6004602052600090815260409020546001600160a01b031681565b34801561043457600080fd5b5061030460085481565b34801561044a57600080fd5b50610269610d3e565b34801561045f57600080fd5b5061030461046e366004611e71565b60036020526000908152604090205481565b34801561048c57600080fd5b5061030461049b366004612142565b610d4b565b3480156104ac57600080fd5b50610269610da4565b3480156104c157600080fd5b5061021d6104d03660046121d2565b610db1565b61021d6104e3366004612142565b610e1b565b3480156104f457600080fd5b5061021d610503366004611fba565b610f6e565b34801561051457600080fd5b5061021d61052336600461200e565b610fda565b34801561053457600080fd5b5061021d610543366004611e71565b611077565b34801561055457600080fd5b5061021d6105633660046121f3565b6110dc565b34801561057457600080fd5b5061021d610583366004611efb565b611147565b34801561059457600080fd5b5061021d61123b565b3480156105a957600080fd5b506102696105b8366004612142565b611396565b3480156105c957600080fd5b5061021d6105d83660046120d5565b6113f6565b3480156105e957600080fd5b5061030460075481565b3480156105ff57600080fd5b5061023f61060e366004612142565b60116020526000908152604090205460ff1681565b34801561062f57600080fd5b5061023f61063e36600461215b565b611602565b34801561064f57600080fd5b5061023f61065e366004611e8c565b600660209081526000928352604080842090915290825290205460ff1681565b34801561068a57600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000081565b336000908152600f60205260409020541515806106d95750600e546001600160a01b031633145b6106fe5760405162461bcd60e51b81526004016106f590612436565b60405180910390fd5b600855565b60006301ffc9a760e01b6001600160e01b03198316148061073457506380ac58cd60e01b6001600160e01b03198316145b8061074f5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000805461076290612579565b80601f016020809104026020016040519081016040528092919081815260200182805461078e90612579565b80156107db5780601f106107b0576101008083540402835291602001916107db565b820191906000526020600020905b8154815290600101906020018083116107be57829003601f168201915b505050505081565b6000818152600460205260409020546001600160a01b03163381148061082c57506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b6108695760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016106f5565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000808484846040516020016108dd93929190612312565b60408051808303601f19018152919052805160209091012095945050505050565b6000818152600460205260409020546001600160a01b038481169116146109545760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b60448201526064016106f5565b6001600160a01b03821661099e5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016106f5565b336001600160a01b03841614806109cb57506000818152600560205260409020546001600160a01b031633145b806109f957506001600160a01b038316600090815260066020908152604080832033845290915290205460ff165b610a365760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016106f5565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526004825284832080546001600160a01b03199081168317909155600590925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b336000908152600f6020526040902054151580610aec5750600e546001600160a01b031633145b610b085760405162461bcd60e51b81526004016106f590612436565b67016345785d8a00004711610b545760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f46554e445360701b60448201526064016106f5565b60006064610b63476014612517565b610b6d91906124f5565b90506000610b7c826002612517565b610b869047612536565b600b546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015610bc1573d6000803e3d6000fd5b50600c546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610bfc573d6000803e3d6000fd5b50600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610c37573d6000803e3d6000fd5b505050565b610c478383836108fe565b6001600160a01b0382163b1580610cff5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a401602060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf391906121b5565b6001600160e01b031916145b610c375760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b60448201526064016106f5565b600a805461076290612579565b600061074f826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6001805461076290612579565b336000908152600f6020526040902054151580610dd85750600e546001600160a01b031633145b610df45760405162461bcd60e51b81526004016106f590612436565b6009805482919060ff19166001836002811115610e1357610e136125e5565b021790555050565b600260095460ff166002811115610e3457610e346125e5565b14610e715760405162461bcd60e51b815260206004820152600d60248201526c4d494e545f494e41435449564560981b60448201526064016106f5565b600854610e7e9082612517565b3414610ec15760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f46554e445360701b60448201526064016106f5565b7f000000000000000000000000000000000000000000000000000000000000000081111580610efe5750600754600254610efb90836124b8565b11155b610f405760405162461bcd60e51b815260206004820152601360248201527252455155455354494e475f544f4f5f4d414e5960681b60448201526064016106f5565b8060011415610f6457610f61336002546001610f5c91906124b8565b611626565b50565b610f61338261173d565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b336000908152600f60205260409020541515806110015750600e546001600160a01b031633145b61101d5760405162461bcd60e51b81526004016106f590612436565b60005b8251811015610c375761106583828151811061103e5761103e6125fb565b6020026020010151838381518110611058576110586125fb565b602002602001015161173d565b8061106f816125b4565b915050611020565b336000908152600f602052604090205415158061109e5750600e546001600160a01b031633145b6110ba5760405162461bcd60e51b81526004016106f590612436565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600f60205260409020541515806111035750600e546001600160a01b031633145b61111f5760405162461bcd60e51b81526004016106f590612436565b815161113290600a906020850190611cc0565b506012805460ff191691151591909117905550565b6111528484846108fe565b6001600160a01b0383163b15806111f65750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906111989033908990889088906004016123be565b602060405180830381600087803b1580156111b257600080fd5b505af11580156111c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ea91906121b5565b6001600160e01b031916145b6112355760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b60448201526064016106f5565b50505050565b336000908152600f60205260409020541515806112625750600e546001600160a01b031633145b61127e5760405162461bcd60e51b81526004016106f590612436565b3360009081526010602052604090205460ff16156112ce5760405162461bcd60e51b815260206004820152600d60248201526c1053149150511657d593d51151609a1b60448201526064016106f5565b33600090815260106020526040808220805460ff19166001179055600b546001600160a01b0316825290205460ff1680156113235750600c546001600160a01b031660009081526010602052604090205460ff165b80156113495750600d546001600160a01b031660009081526010602052604090205460ff165b1561139457600b546001600160a01b039081166000908152600f6020526040808220602190819055600c5484168352818320819055600d5490931682529020556009805460ff191690555b565b60125460609060ff166113d557600a6113ae83611822565b6040516020016113bf929190612364565b6040516020818303038152906040529050919050565b600a6113e083611822565b6040516020016113bf929190612389565b919050565b600160095460ff16600281111561140f5761140f6125e5565b1461144d5760405162461bcd60e51b815260206004820152600e60248201526d434c41494d5f494e41435449564560901b60448201526064016106f5565b600061145a3385856108c5565b905061146e61146882610d4b565b83611602565b6114af5760405162461bcd60e51b81526020600482015260126024820152710a6928e9c82a8aaa48abe9a92a69a82a886960731b60448201526064016106f5565b7f000000000000000000000000000000000000000000000000000000000000000084516002546114df91906124b8565b111561151f5760405162461bcd60e51b815260206004820152600f60248201526e1393d517d15393d551d217d3115195608a1b60448201526064016106f5565b60005b84518110156115f65760116000868381518110611541576115416125fb565b60209081029190910181015182528101919091526040016000205460ff161561159e5760405162461bcd60e51b815260206004820152600f60248201526e1053149150511657d0d31052535151608a1b60448201526064016106f5565b6001601160008784815181106115b6576115b66125fb565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806115ee906125b4565b915050611522565b5061123533855161173d565b600061160e838361194b565b600e546001600160a01b039182169116149392505050565b6001600160a01b0382166116705760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016106f5565b6000818152600460205260409020546001600160a01b0316156116c65760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b60448201526064016106f5565b6002805460019081019091556001600160a01b038316600081815260036020908152604080832080549095019094558482526004905282812080546001600160a01b0319168317905591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166117645760405163023a409560e11b815260040160405180910390fd5b806117825760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03821660009081526003602052604090208054820190556002548082015b604051600183019081906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600090815260046020526040902080546001600160a01b0319166001600160a01b03861617905560019190910190818114156117a757506002555050565b6060816118465750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611870578061185a816125b4565b91506118699050600a836124f5565b915061184a565b60008167ffffffffffffffff81111561188b5761188b612611565b6040519080825280601f01601f1916602001820160405280156118b5576020820181803683370190505b509050815b8515611942576118cb600182612536565b905060006118da600a886124f5565b6118e590600a612517565b6118ef9088612536565b6118fa9060306124d0565b905060008160f81b905080848481518110611917576119176125fb565b60200101906001600160f81b031916908160001a905350611939600a896124f5565b975050506118ba565b50949350505050565b600080600061195a858561196f565b91509150611967816119df565b509392505050565b6000808251604114156119a65760208301516040840151606085015160001a61199a87828585611b9a565b945094505050506119d8565b8251604014156119d057602083015160408401516119c5868383611c87565b9350935050506119d8565b506000905060025b9250929050565b60008160048111156119f3576119f36125e5565b14156119fc5750565b6001816004811115611a1057611a106125e5565b1415611a5e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106f5565b6002816004811115611a7257611a726125e5565b1415611ac05760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106f5565b6003816004811115611ad457611ad46125e5565b1415611b2d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106f5565b6004816004811115611b4157611b416125e5565b1415610f615760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106f5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611bd15750600090506003611c7e565b8460ff16601b14158015611be957508460ff16601c14155b15611bfa5750600090506004611c7e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611c4e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611c7757600060019250925050611c7e565b9150600090505b94509492505050565b6000806001600160ff1b03831681611ca460ff86901c601b6124b8565b9050611cb287828885611b9a565b935093505050935093915050565b828054611ccc90612579565b90600052602060002090601f016020900481019282611cee5760008555611d34565b82601f10611d0757805160ff1916838001178555611d34565b82800160010185558215611d34579182015b82811115611d34578251825591602001919060010190611d19565b50611d40929150611d44565b5090565b5b80821115611d405760008155600101611d45565b600067ffffffffffffffff831115611d7357611d73612611565b611d86601f8401601f1916602001612463565b9050828152838383011115611d9a57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146113f157600080fd5b600082601f830112611dd957600080fd5b81356020611dee611de983612494565b612463565b80838252828201915082860187848660051b8901011115611e0e57600080fd5b60005b85811015611e2d57813584529284019290840190600101611e11565b5090979650505050505050565b803580151581146113f157600080fd5b600082601f830112611e5b57600080fd5b611e6a83833560208501611d59565b9392505050565b600060208284031215611e8357600080fd5b611e6a82611db1565b60008060408385031215611e9f57600080fd5b611ea883611db1565b9150611eb660208401611db1565b90509250929050565b600080600060608486031215611ed457600080fd5b611edd84611db1565b9250611eeb60208501611db1565b9150604084013590509250925092565b60008060008060808587031215611f1157600080fd5b611f1a85611db1565b9350611f2860208601611db1565b925060408501359150606085013567ffffffffffffffff811115611f4b57600080fd5b611f5787828801611e4a565b91505092959194509250565b600080600060608486031215611f7857600080fd5b611f8184611db1565b9250602084013567ffffffffffffffff811115611f9d57600080fd5b611fa986828701611dc8565b925050604084013590509250925092565b60008060408385031215611fcd57600080fd5b611fd683611db1565b9150611eb660208401611e3a565b60008060408385031215611ff757600080fd5b61200083611db1565b946020939093013593505050565b6000806040838503121561202157600080fd5b823567ffffffffffffffff8082111561203957600080fd5b818501915085601f83011261204d57600080fd5b8135602061205d611de983612494565b8083825282820191508286018a848660051b890101111561207d57600080fd5b600096505b848710156120a75761209381611db1565b835260019690960195918301918301612082565b50965050860135925050808211156120be57600080fd5b506120cb85828601611dc8565b9150509250929050565b6000806000606084860312156120ea57600080fd5b833567ffffffffffffffff8082111561210257600080fd5b61210e87838801611dc8565b945060208601359350604086013591508082111561212b57600080fd5b5061213886828701611e4a565b9150509250925092565b60006020828403121561215457600080fd5b5035919050565b6000806040838503121561216e57600080fd5b82359150602083013567ffffffffffffffff81111561218c57600080fd5b6120cb85828601611e4a565b6000602082840312156121aa57600080fd5b8135611e6a81612627565b6000602082840312156121c757600080fd5b8151611e6a81612627565b6000602082840312156121e457600080fd5b813560038110611e6a57600080fd5b6000806040838503121561220657600080fd5b823567ffffffffffffffff81111561221d57600080fd5b8301601f8101851361222e57600080fd5b61223d85823560208401611d59565b925050611eb660208401611e3a565b6000815180845261226481602086016020860161254d565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061229257607f831692505b60208084108214156122b457634e487b7160e01b600052602260045260246000fd5b8180156122c857600181146122d957612306565b60ff19861689528489019650612306565b60008881526020902060005b868110156122fe5781548b8201529085019083016122e5565b505084890196505b50505050505092915050565b6bffffffffffffffffffffffff198460601b1681526000601482018451602080870160005b8381101561235357815185529382019390820190600101612337565b505094825250909201949350505050565b60006123708285612278565b835161238081836020880161254d565b01949350505050565b60006123958285612278565b83516123a581836020880161254d565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123f19083018461224c565b9695505050505050565b602081016003831061241d57634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000611e6a602083018461224c565b60208082526013908201527226aaa9aa2fa122afa9a420a922a427a62222a960691b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561248c5761248c612611565b604052919050565b600067ffffffffffffffff8211156124ae576124ae612611565b5060051b60200190565b600082198211156124cb576124cb6125cf565b500190565b600060ff821660ff84168060ff038211156124ed576124ed6125cf565b019392505050565b60008261251257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612531576125316125cf565b500290565b600082821015612548576125486125cf565b500390565b60005b83811015612568578181015183820152602001612550565b838111156112355750506000910152565b600181811c9082168061258d57607f821691505b602082108114156125ae57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125c8576125c86125cf565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f6157600080fdfea2646970667358221220a44e7c819c7f5215e930f4fd0361951ead8e923f27902bf1d0f1b7b286b94fcf64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000044f6498d1403321890f3f2917e00f22dbde3577a0000000000000000000000000644ba9a8bd4ef8cf11a93886e17d5a5279adff200000000000000000000000043ba92091718b94c6afd5bebc8fd462ef51a5aca0000000000000000000000004806a568d5c87ce5337a1fc1e6a7d13565235b59000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f6170692e74756262796b6576696e732e636f6d2f6170692f746f6b656e2f0000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101f85760003560e01c8063955c20b21161010d578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb01146105dd578063dbe7e3bd146105f3578063e0f4ea9014610623578063e985e9c514610643578063ff3f48d81461067e57600080fd5b8063b88d4fde14610568578063c073925e14610588578063c87b56dd1461059d578063ca0c6321146105bd57600080fd5b8063a22cb465116100dc578063a22cb465146104e8578063a49340cc14610508578063a7ecd37e14610528578063a9eaee301461054857600080fd5b8063955c20b21461048057806395d89b41146104a05780639ff9baf8146104b5578063a0712d68146104d557600080fd5b80632154dc3911610190578063603f4d521161015f578063603f4d52146103cb5780636352211e146103f25780636817c76c146104285780636c0360eb1461043e57806370a082311461045357600080fd5b80632154dc391461034257806323b872dd146103765780633ccfd60b1461039657806342842e0e146103ab57600080fd5b8063095ea7b3116101cc578063095ea7b3146102c45780630e37a71a146102e45780631508c2901461031257806318160ddd1461032c57600080fd5b8062728e46146101fd57806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276575b600080fd5b34801561020957600080fd5b5061021d610218366004612142565b6106b2565b005b34801561022b57600080fd5b5061023f61023a366004612198565b610703565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b50610269610755565b60405161024b9190612423565b34801561028257600080fd5b506102ac610291366004612142565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b3480156102d057600080fd5b5061021d6102df366004611fe4565b6107e3565b3480156102f057600080fd5b506103046102ff366004611f63565b6108c5565b60405190815260200161024b565b34801561031e57600080fd5b5060125461023f9060ff1681565b34801561033857600080fd5b5061030460025481565b34801561034e57600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000a81565b34801561038257600080fd5b5061021d610391366004611ebf565b6108fe565b3480156103a257600080fd5b5061021d610ac5565b3480156103b757600080fd5b5061021d6103c6366004611ebf565b610c3c565b3480156103d757600080fd5b506009546103e59060ff1681565b60405161024b91906123fb565b3480156103fe57600080fd5b506102ac61040d366004612142565b6004602052600090815260409020546001600160a01b031681565b34801561043457600080fd5b5061030460085481565b34801561044a57600080fd5b50610269610d3e565b34801561045f57600080fd5b5061030461046e366004611e71565b60036020526000908152604090205481565b34801561048c57600080fd5b5061030461049b366004612142565b610d4b565b3480156104ac57600080fd5b50610269610da4565b3480156104c157600080fd5b5061021d6104d03660046121d2565b610db1565b61021d6104e3366004612142565b610e1b565b3480156104f457600080fd5b5061021d610503366004611fba565b610f6e565b34801561051457600080fd5b5061021d61052336600461200e565b610fda565b34801561053457600080fd5b5061021d610543366004611e71565b611077565b34801561055457600080fd5b5061021d6105633660046121f3565b6110dc565b34801561057457600080fd5b5061021d610583366004611efb565b611147565b34801561059457600080fd5b5061021d61123b565b3480156105a957600080fd5b506102696105b8366004612142565b611396565b3480156105c957600080fd5b5061021d6105d83660046120d5565b6113f6565b3480156105e957600080fd5b5061030460075481565b3480156105ff57600080fd5b5061023f61060e366004612142565b60116020526000908152604090205460ff1681565b34801561062f57600080fd5b5061023f61063e36600461215b565b611602565b34801561064f57600080fd5b5061023f61065e366004611e8c565b600660209081526000928352604080842090915290825290205460ff1681565b34801561068a57600080fd5b506103047f0000000000000000000000000000000000000000000000000000000000000fa081565b336000908152600f60205260409020541515806106d95750600e546001600160a01b031633145b6106fe5760405162461bcd60e51b81526004016106f590612436565b60405180910390fd5b600855565b60006301ffc9a760e01b6001600160e01b03198316148061073457506380ac58cd60e01b6001600160e01b03198316145b8061074f5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000805461076290612579565b80601f016020809104026020016040519081016040528092919081815260200182805461078e90612579565b80156107db5780601f106107b0576101008083540402835291602001916107db565b820191906000526020600020905b8154815290600101906020018083116107be57829003601f168201915b505050505081565b6000818152600460205260409020546001600160a01b03163381148061082c57506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b6108695760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016106f5565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000808484846040516020016108dd93929190612312565b60408051808303601f19018152919052805160209091012095945050505050565b6000818152600460205260409020546001600160a01b038481169116146109545760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b60448201526064016106f5565b6001600160a01b03821661099e5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016106f5565b336001600160a01b03841614806109cb57506000818152600560205260409020546001600160a01b031633145b806109f957506001600160a01b038316600090815260066020908152604080832033845290915290205460ff165b610a365760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016106f5565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526004825284832080546001600160a01b03199081168317909155600590925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b336000908152600f6020526040902054151580610aec5750600e546001600160a01b031633145b610b085760405162461bcd60e51b81526004016106f590612436565b67016345785d8a00004711610b545760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f46554e445360701b60448201526064016106f5565b60006064610b63476014612517565b610b6d91906124f5565b90506000610b7c826002612517565b610b869047612536565b600b546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015610bc1573d6000803e3d6000fd5b50600c546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610bfc573d6000803e3d6000fd5b50600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610c37573d6000803e3d6000fd5b505050565b610c478383836108fe565b6001600160a01b0382163b1580610cff5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a401602060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf391906121b5565b6001600160e01b031916145b610c375760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b60448201526064016106f5565b600a805461076290612579565b600061074f826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6001805461076290612579565b336000908152600f6020526040902054151580610dd85750600e546001600160a01b031633145b610df45760405162461bcd60e51b81526004016106f590612436565b6009805482919060ff19166001836002811115610e1357610e136125e5565b021790555050565b600260095460ff166002811115610e3457610e346125e5565b14610e715760405162461bcd60e51b815260206004820152600d60248201526c4d494e545f494e41435449564560981b60448201526064016106f5565b600854610e7e9082612517565b3414610ec15760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f46554e445360701b60448201526064016106f5565b7f000000000000000000000000000000000000000000000000000000000000000a81111580610efe5750600754600254610efb90836124b8565b11155b610f405760405162461bcd60e51b815260206004820152601360248201527252455155455354494e475f544f4f5f4d414e5960681b60448201526064016106f5565b8060011415610f6457610f61336002546001610f5c91906124b8565b611626565b50565b610f61338261173d565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b336000908152600f60205260409020541515806110015750600e546001600160a01b031633145b61101d5760405162461bcd60e51b81526004016106f590612436565b60005b8251811015610c375761106583828151811061103e5761103e6125fb565b6020026020010151838381518110611058576110586125fb565b602002602001015161173d565b8061106f816125b4565b915050611020565b336000908152600f602052604090205415158061109e5750600e546001600160a01b031633145b6110ba5760405162461bcd60e51b81526004016106f590612436565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600f60205260409020541515806111035750600e546001600160a01b031633145b61111f5760405162461bcd60e51b81526004016106f590612436565b815161113290600a906020850190611cc0565b506012805460ff191691151591909117905550565b6111528484846108fe565b6001600160a01b0383163b15806111f65750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906111989033908990889088906004016123be565b602060405180830381600087803b1580156111b257600080fd5b505af11580156111c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ea91906121b5565b6001600160e01b031916145b6112355760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b60448201526064016106f5565b50505050565b336000908152600f60205260409020541515806112625750600e546001600160a01b031633145b61127e5760405162461bcd60e51b81526004016106f590612436565b3360009081526010602052604090205460ff16156112ce5760405162461bcd60e51b815260206004820152600d60248201526c1053149150511657d593d51151609a1b60448201526064016106f5565b33600090815260106020526040808220805460ff19166001179055600b546001600160a01b0316825290205460ff1680156113235750600c546001600160a01b031660009081526010602052604090205460ff165b80156113495750600d546001600160a01b031660009081526010602052604090205460ff165b1561139457600b546001600160a01b039081166000908152600f6020526040808220602190819055600c5484168352818320819055600d5490931682529020556009805460ff191690555b565b60125460609060ff166113d557600a6113ae83611822565b6040516020016113bf929190612364565b6040516020818303038152906040529050919050565b600a6113e083611822565b6040516020016113bf929190612389565b919050565b600160095460ff16600281111561140f5761140f6125e5565b1461144d5760405162461bcd60e51b815260206004820152600e60248201526d434c41494d5f494e41435449564560901b60448201526064016106f5565b600061145a3385856108c5565b905061146e61146882610d4b565b83611602565b6114af5760405162461bcd60e51b81526020600482015260126024820152710a6928e9c82a8aaa48abe9a92a69a82a886960731b60448201526064016106f5565b7f0000000000000000000000000000000000000000000000000000000000000fa084516002546114df91906124b8565b111561151f5760405162461bcd60e51b815260206004820152600f60248201526e1393d517d15393d551d217d3115195608a1b60448201526064016106f5565b60005b84518110156115f65760116000868381518110611541576115416125fb565b60209081029190910181015182528101919091526040016000205460ff161561159e5760405162461bcd60e51b815260206004820152600f60248201526e1053149150511657d0d31052535151608a1b60448201526064016106f5565b6001601160008784815181106115b6576115b66125fb565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806115ee906125b4565b915050611522565b5061123533855161173d565b600061160e838361194b565b600e546001600160a01b039182169116149392505050565b6001600160a01b0382166116705760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016106f5565b6000818152600460205260409020546001600160a01b0316156116c65760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b60448201526064016106f5565b6002805460019081019091556001600160a01b038316600081815260036020908152604080832080549095019094558482526004905282812080546001600160a01b0319168317905591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166117645760405163023a409560e11b815260040160405180910390fd5b806117825760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03821660009081526003602052604090208054820190556002548082015b604051600183019081906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600090815260046020526040902080546001600160a01b0319166001600160a01b03861617905560019190910190818114156117a757506002555050565b6060816118465750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611870578061185a816125b4565b91506118699050600a836124f5565b915061184a565b60008167ffffffffffffffff81111561188b5761188b612611565b6040519080825280601f01601f1916602001820160405280156118b5576020820181803683370190505b509050815b8515611942576118cb600182612536565b905060006118da600a886124f5565b6118e590600a612517565b6118ef9088612536565b6118fa9060306124d0565b905060008160f81b905080848481518110611917576119176125fb565b60200101906001600160f81b031916908160001a905350611939600a896124f5565b975050506118ba565b50949350505050565b600080600061195a858561196f565b91509150611967816119df565b509392505050565b6000808251604114156119a65760208301516040840151606085015160001a61199a87828585611b9a565b945094505050506119d8565b8251604014156119d057602083015160408401516119c5868383611c87565b9350935050506119d8565b506000905060025b9250929050565b60008160048111156119f3576119f36125e5565b14156119fc5750565b6001816004811115611a1057611a106125e5565b1415611a5e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106f5565b6002816004811115611a7257611a726125e5565b1415611ac05760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106f5565b6003816004811115611ad457611ad46125e5565b1415611b2d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106f5565b6004816004811115611b4157611b416125e5565b1415610f615760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106f5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611bd15750600090506003611c7e565b8460ff16601b14158015611be957508460ff16601c14155b15611bfa5750600090506004611c7e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611c4e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611c7757600060019250925050611c7e565b9150600090505b94509492505050565b6000806001600160ff1b03831681611ca460ff86901c601b6124b8565b9050611cb287828885611b9a565b935093505050935093915050565b828054611ccc90612579565b90600052602060002090601f016020900481019282611cee5760008555611d34565b82601f10611d0757805160ff1916838001178555611d34565b82800160010185558215611d34579182015b82811115611d34578251825591602001919060010190611d19565b50611d40929150611d44565b5090565b5b80821115611d405760008155600101611d45565b600067ffffffffffffffff831115611d7357611d73612611565b611d86601f8401601f1916602001612463565b9050828152838383011115611d9a57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146113f157600080fd5b600082601f830112611dd957600080fd5b81356020611dee611de983612494565b612463565b80838252828201915082860187848660051b8901011115611e0e57600080fd5b60005b85811015611e2d57813584529284019290840190600101611e11565b5090979650505050505050565b803580151581146113f157600080fd5b600082601f830112611e5b57600080fd5b611e6a83833560208501611d59565b9392505050565b600060208284031215611e8357600080fd5b611e6a82611db1565b60008060408385031215611e9f57600080fd5b611ea883611db1565b9150611eb660208401611db1565b90509250929050565b600080600060608486031215611ed457600080fd5b611edd84611db1565b9250611eeb60208501611db1565b9150604084013590509250925092565b60008060008060808587031215611f1157600080fd5b611f1a85611db1565b9350611f2860208601611db1565b925060408501359150606085013567ffffffffffffffff811115611f4b57600080fd5b611f5787828801611e4a565b91505092959194509250565b600080600060608486031215611f7857600080fd5b611f8184611db1565b9250602084013567ffffffffffffffff811115611f9d57600080fd5b611fa986828701611dc8565b925050604084013590509250925092565b60008060408385031215611fcd57600080fd5b611fd683611db1565b9150611eb660208401611e3a565b60008060408385031215611ff757600080fd5b61200083611db1565b946020939093013593505050565b6000806040838503121561202157600080fd5b823567ffffffffffffffff8082111561203957600080fd5b818501915085601f83011261204d57600080fd5b8135602061205d611de983612494565b8083825282820191508286018a848660051b890101111561207d57600080fd5b600096505b848710156120a75761209381611db1565b835260019690960195918301918301612082565b50965050860135925050808211156120be57600080fd5b506120cb85828601611dc8565b9150509250929050565b6000806000606084860312156120ea57600080fd5b833567ffffffffffffffff8082111561210257600080fd5b61210e87838801611dc8565b945060208601359350604086013591508082111561212b57600080fd5b5061213886828701611e4a565b9150509250925092565b60006020828403121561215457600080fd5b5035919050565b6000806040838503121561216e57600080fd5b82359150602083013567ffffffffffffffff81111561218c57600080fd5b6120cb85828601611e4a565b6000602082840312156121aa57600080fd5b8135611e6a81612627565b6000602082840312156121c757600080fd5b8151611e6a81612627565b6000602082840312156121e457600080fd5b813560038110611e6a57600080fd5b6000806040838503121561220657600080fd5b823567ffffffffffffffff81111561221d57600080fd5b8301601f8101851361222e57600080fd5b61223d85823560208401611d59565b925050611eb660208401611e3a565b6000815180845261226481602086016020860161254d565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061229257607f831692505b60208084108214156122b457634e487b7160e01b600052602260045260246000fd5b8180156122c857600181146122d957612306565b60ff19861689528489019650612306565b60008881526020902060005b868110156122fe5781548b8201529085019083016122e5565b505084890196505b50505050505092915050565b6bffffffffffffffffffffffff198460601b1681526000601482018451602080870160005b8381101561235357815185529382019390820190600101612337565b505094825250909201949350505050565b60006123708285612278565b835161238081836020880161254d565b01949350505050565b60006123958285612278565b83516123a581836020880161254d565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123f19083018461224c565b9695505050505050565b602081016003831061241d57634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000611e6a602083018461224c565b60208082526013908201527226aaa9aa2fa122afa9a420a922a427a62222a960691b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561248c5761248c612611565b604052919050565b600067ffffffffffffffff8211156124ae576124ae612611565b5060051b60200190565b600082198211156124cb576124cb6125cf565b500190565b600060ff821660ff84168060ff038211156124ed576124ed6125cf565b019392505050565b60008261251257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612531576125316125cf565b500290565b600082821015612548576125486125cf565b500390565b60005b83811015612568578181015183820152602001612550565b838111156112355750506000910152565b600181811c9082168061258d57607f821691505b602082108114156125ae57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125c8576125c86125cf565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f6157600080fdfea2646970667358221220a44e7c819c7f5215e930f4fd0361951ead8e923f27902bf1d0f1b7b286b94fcf64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000044f6498d1403321890f3f2917e00f22dbde3577a0000000000000000000000000644ba9a8bd4ef8cf11a93886e17d5a5279adff200000000000000000000000043ba92091718b94c6afd5bebc8fd462ef51a5aca0000000000000000000000004806a568d5c87ce5337a1fc1e6a7d13565235b59000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f6170692e74756262796b6576696e732e636f6d2f6170692f746f6b656e2f0000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): https://api.tubbykevins.com/api/token/
Arg [1] : _dev1 (address): 0x44f6498D1403321890F3f2917E00F22dBDE3577a
Arg [2] : _dev2 (address): 0x0644BA9A8BD4ef8Cf11a93886E17D5A5279AdFF2
Arg [3] : _mktng (address): 0x43Ba92091718B94c6aFd5Bebc8Fd462eF51A5aca
Arg [4] : _signer (address): 0x4806a568d5C87CE5337a1Fc1E6a7D13565235b59

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000044f6498d1403321890f3f2917e00f22dbde3577a
Arg [2] : 0000000000000000000000000644ba9a8bd4ef8cf11a93886e17d5a5279adff2
Arg [3] : 00000000000000000000000043ba92091718b94c6afd5bebc8fd462ef51a5aca
Arg [4] : 0000000000000000000000004806a568d5c87ce5337a1fc1e6a7d13565235b59
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000026
Arg [6] : 68747470733a2f2f6170692e74756262796b6576696e732e636f6d2f6170692f
Arg [7] : 746f6b656e2f0000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

21312:5470:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24518:125;;;;;;;;;;-1:-1:-1;24518:125:0;;;;;:::i;:::-;;:::i;:::-;;17896:340;;;;;;;;;;-1:-1:-1;17896:340:0;;;;;:::i;:::-;;:::i;:::-;;;12595:14:1;;12588:22;12570:41;;12558:2;12543:18;17896:340:0;;;;;;;;14446:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14934:46::-;;;;;;;;;;-1:-1:-1;14934:46:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;14934:46:0;;;;;;-1:-1:-1;;;;;11333:32:1;;;11315:51;;11303:2;11288:18;14934:46:0;11169:203:1;15561:289:0;;;;;;;;;;-1:-1:-1;15561:289:0;;;;;:::i;:::-;;:::i;26244:225::-;;;;;;;;;;-1:-1:-1;26244:225:0;;;;;:::i;:::-;;:::i;:::-;;;12768:25:1;;;12756:2;12741:18;26244:225:0;12622:177:1;21981:27:0;;;;;;;;;;-1:-1:-1;21981:27:0;;;;;;;;14795:26;;;;;;;;;;;;;;;;21543:41;;;;;;;;;;;;;;;16073:764;;;;;;;;;;-1:-1:-1;16073:764:0;;;;;:::i;:::-;;:::i;24651:398::-;;;;;;;;;;;;;:::i;16845:409::-;;;;;;;;;;-1:-1:-1;16845:409:0;;;;;:::i;:::-;;:::i;21645:26::-;;;;;;;;;;-1:-1:-1;21645:26:0;;;;;;;;;;;;;;;:::i;14883:42::-;;;;;;;;;;-1:-1:-1;14883:42:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;14883:42:0;;;21499:37;;;;;;;;;;;;;;;;21680:21;;;;;;;;;;;;;:::i;14830:44::-;;;;;;;;;;-1:-1:-1;14830:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;26485:126;;;;;;;;;;-1:-1:-1;26485:126:0;;;;;:::i;:::-;;:::i;14473:20::-;;;;;;;;;;;;;:::i;23980:115::-;;;;;;;;;;-1:-1:-1;23980:115:0;;;;;:::i;:::-;;:::i;23508:464::-;;;;;;:::i;:::-;;:::i;15858:207::-;;;;;;;;;;-1:-1:-1;15858:207:0;;;;;:::i;:::-;;:::i;23260:240::-;;;;;;;;;;-1:-1:-1;23260:240:0;;;;;:::i;:::-;;:::i;25946:113::-;;;;;;;;;;-1:-1:-1;25946:113:0;;;;;:::i;:::-;;:::i;26067:169::-;;;;;;;;;;-1:-1:-1;26067:169:0;;;;;:::i;:::-;;:::i;17262:439::-;;;;;;;;;;-1:-1:-1;17262:439:0;;;;;:::i;:::-;;:::i;24103:407::-;;;;;;;;;;;;;:::i;25638:300::-;;;;;;;;;;-1:-1:-1;25638:300:0;;;;;:::i;:::-;;:::i;22594:658::-;;;;;;;;;;-1:-1:-1;22594:658:0;;;;;:::i;:::-;;:::i;21461:31::-;;;;;;;;;;;;;;;;21933:39;;;;;;;;;;-1:-1:-1;21933:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26619:160;;;;;;;;;;-1:-1:-1;26619:160:0;;;;;:::i;:::-;;:::i;14989:68::-;;;;;;;;;;-1:-1:-1;14989:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;21591:45;;;;;;;;;;;;;;;24518:125;22074:10;22088:1;22063:22;;;:10;:22;;;;;;:26;;;:50;;-1:-1:-1;22107:6:0;;-1:-1:-1;;;;;22107:6:0;22093:10;:20;22063:50;22055:81;;;;-1:-1:-1;;;22055:81:0;;;;;;;:::i;:::-;;;;;;;;;24613:9:::1;:22:::0;24518:125::o;17896:340::-;17972:4;-1:-1:-1;;;;;;;;;18009:25:0;;;;:101;;-1:-1:-1;;;;;;;;;;18085:25:0;;;18009:101;:177;;;-1:-1:-1;;;;;;;;;;18161:25:0;;;18009:177;17989:197;17896:340;-1:-1:-1;;17896:340:0:o;14446:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15561:289::-;15633:13;15649:11;;;:7;:11;;;;;;-1:-1:-1;;;;;15649:11:0;15681:10;:19;;;:58;;-1:-1:-1;;;;;;15704:23:0;;;;;;:16;:23;;;;;;;;15728:10;15704:35;;;;;;;;;;15681:58;15673:85;;;;-1:-1:-1;;;15673:85:0;;18950:2:1;15673:85:0;;;18932:21:1;18989:2;18969:18;;;18962:30;-1:-1:-1;;;19008:18:1;;;19001:44;19062:18;;15673:85:0;18748:338:1;15673:85:0;15771:15;;;;:11;:15;;;;;;:25;;-1:-1:-1;;;;;;15771:25:0;-1:-1:-1;;;;;15771:25:0;;;;;;;;;15814:28;;15771:15;;15814:28;;;;;;;15622:228;15561:289;;:::o;26244:225::-;26349:7;26369:13;26412:7;26421;26430:6;26395:42;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;26395:42:0;;;;;;26385:53;;26395:42;26385:53;;;;;26244:225;-1:-1:-1;;;;;26244:225:0:o;16073:764::-;16209:11;;;;:7;:11;;;;;;-1:-1:-1;;;;;16201:19:0;;;16209:11;;16201:19;16193:42;;;;-1:-1:-1;;;16193:42:0;;19637:2:1;16193:42:0;;;19619:21:1;19676:2;19656:18;;;19649:30;-1:-1:-1;;;19695:18:1;;;19688:40;19745:18;;16193:42:0;19435:334:1;16193:42:0;-1:-1:-1;;;;;16256:16:0;;16248:46;;;;-1:-1:-1;;;16248:46:0;;16138:2:1;16248:46:0;;;16120:21:1;16177:2;16157:18;;;16150:30;-1:-1:-1;;;16196:18:1;;;16189:47;16253:18;;16248:46:0;15936:341:1;16248:46:0;16329:10;-1:-1:-1;;;;;16329:18:0;;;;:51;;-1:-1:-1;16365:15:0;;;;:11;:15;;;;;;-1:-1:-1;;;;;16365:15:0;16351:10;:29;16329:51;:89;;;-1:-1:-1;;;;;;16384:22:0;;;;;;:16;:22;;;;;;;;16407:10;16384:34;;;;;;;;;;16329:89;16307:153;;;;-1:-1:-1;;;16307:153:0;;18950:2:1;16307:153:0;;;18932:21:1;18989:2;18969:18;;;18962:30;-1:-1:-1;;;19008:18:1;;;19001:44;19062:18;;16307:153:0;18748:338:1;16307:153:0;-1:-1:-1;;;;;16665:15:0;;;;;;;:9;:15;;;;;;;;:17;;-1:-1:-1;;16665:17:0;;;16699:13;;;;;;;;;:15;;16665:17;16699:15;;;16738:11;;;:7;:11;;;;;:16;;-1:-1:-1;;;;;;16738:16:0;;;;;;;;16774:11;:15;;;;;;16767:22;;;;;;;;16807;;16746:2;;16699:13;16665:15;16807:22;;;16073:764;;;:::o;24651:398::-;22074:10;22088:1;22063:22;;;:10;:22;;;;;;:26;;;:50;;-1:-1:-1;22107:6:0;;-1:-1:-1;;;;;22107:6:0;22093:10;:20;22063:50;22055:81;;;;-1:-1:-1;;;22055:81:0;;;;;;;:::i;:::-;24738:13:::1;24713:21;:39;24705:70;;;::::0;-1:-1:-1;;;24705:70:0;;14693:2:1;24705:70:0::1;::::0;::::1;14675:21:1::0;14732:2;14712:18;;;14705:30;-1:-1:-1;;;14751:18:1;;;14744:48;14809:18;;24705:70:0::1;14491:342:1::0;24705:70:0::1;24786:16;24836:3;24806:26;:21;24830:2;24806:26;:::i;:::-;24805:34;;;;:::i;:::-;24786:53:::0;-1:-1:-1;24850:17:0::1;24896:12;24786:53:::0;24907:1:::1;24896:12;:::i;:::-;24871:38;::::0;:21:::1;:38;:::i;:::-;24929:4;::::0;24921:32:::1;::::0;24850:60;;-1:-1:-1;;;;;;24929:4:0::1;::::0;24921:32;::::1;;;::::0;24944:8;;24929:4:::1;24921:32:::0;24929:4;24921:32;24944:8;24929:4;24921:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24972:4:0::1;::::0;24964:32:::1;::::0;-1:-1:-1;;;;;24972:4:0;;::::1;::::0;24964:32;::::1;;;::::0;24987:8;;24972:4:::1;24964:32:::0;24972:4;24964:32;24987:8;24972:4;24964:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;25015:5:0::1;::::0;25007:34:::1;::::0;-1:-1:-1;;;;;25015:5:0;;::::1;::::0;25007:34;::::1;;;::::0;25031:9;;25015:5:::1;25007:34:::0;25015:5;25007:34;25031:9;25015:5;25007:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24694:355;;24651:398::o:0;16845:409::-;16969:26;16982:4;16988:2;16992;16969:12;:26::i;:::-;-1:-1:-1;;;;;17030:14:0;;;:19;;:172;;-1:-1:-1;17070:66:0;;-1:-1:-1;;;17070:66:0;;;17111:10;17070:66;;;12175:34:1;-1:-1:-1;;;;;12245:15:1;;;12225:18;;;12218:43;12277:18;;;12270:34;;;12340:3;12320:18;;;12313:31;-1:-1:-1;12360:19:1;;;12353:30;17157:45:0;;17070:40;;;;17157:45;;12400:19:1;;17070:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;17070:132:0;;17030:172;17008:238;;;;-1:-1:-1;;;17008:238:0;;17571:2:1;17008:238:0;;;17553:21:1;17610:2;17590:18;;;17583:30;-1:-1:-1;;;17629:18:1;;;17622:46;17685:18;;17008:238:0;17369:340:1;21680:21:0;;;;;;;:::i;26485:126::-;26546:7;26573:30;:5;12296:58;;11026:66:1;12296:58:0;;;11014:79:1;11109:12;;;11102:28;;;12163:7:0;;11146:12:1;;12296:58:0;;;;;;;;;;;;12286:69;;;;;;12279:76;;12094:269;;;;14473:20;;;;;;;:::i;23980:115::-;22074:10;22088:1;22063:22;;;:10;:22;;;;;;:26;;;:50;;-1:-1:-1;22107:6:0;;-1:-1:-1;;;;;22107:6:0;22093:10;:20;22063:50;22055:81;;;;-1:-1:-1;;;22055:81:0;;;;;;;:::i;:::-;24071:9:::1;:16:::0;;24083:4;;24071:9;-1:-1:-1;;24071:16:0::1;::::0;24083:4;24071:16:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;23980:115:::0;:::o;23508:464::-;23602:14;23589:9;;;;:27;;;;;;;;:::i;:::-;;23581:53;;;;-1:-1:-1;;;23581:53:0;;17229:2:1;23581:53:0;;;17211:21:1;17268:2;17248:18;;;17241:30;-1:-1:-1;;;17287:18:1;;;17280:43;17340:18;;23581:53:0;17027:337:1;23581:53:0;23677:9;;23667:19;;:7;:19;:::i;:::-;23653:9;:34;23645:65;;;;-1:-1:-1;;;23645:65:0;;14693:2:1;23645:65:0;;;14675:21:1;14732:2;14712:18;;;14705:30;-1:-1:-1;;;14751:18:1;;;14744:48;14809:18;;23645:65:0;14491:342:1;23645:65:0;23740:11;23729:7;:22;;:60;;;-1:-1:-1;23780:9:0;;23765:11;;23755:21;;:7;:21;:::i;:::-;:34;;23729:60;23721:92;;;;-1:-1:-1;;;23721:92:0;;15790:2:1;23721:92:0;;;15772:21:1;15829:2;15809:18;;;15802:30;-1:-1:-1;;;15848:18:1;;;15841:49;15907:18;;23721:92:0;15588:343:1;23721:92:0;23828:7;23839:1;23828:12;23824:141;;;23857:32;23863:10;23875:11;;23887:1;23875:13;;;;:::i;:::-;23857:5;:32::i;:::-;23508:464;:::o;23824:141::-;23922:31;23933:10;23945:7;23922:10;:31::i;15858:207::-;15961:10;15944:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;15944:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;15944:49:0;;;;;;;;;;16011:46;;12570:41:1;;;15944:38:0;;15961:10;16011:46;;12543:18:1;16011:46:0;;;;;;;15858:207;;:::o;23260:240::-;22074:10;22088:1;22063:22;;;:10;:22;;;;;;:26;;;:50;;-1:-1:-1;22107:6:0;;-1:-1:-1;;;;;22107:6:0;22093:10;:20;22063:50;22055:81;;;;-1:-1:-1;;;22055:81:0;;;;;;;:::i;:::-;23397:6:::1;23392:101;23408:9;:16;23406:1;:18;23392:101;;;23445:36;23456:9;23466:1;23456:12;;;;;;;;:::i;:::-;;;;;;;23470:7;23478:1;23470:10;;;;;;;;:::i;:::-;;;;;;;23445;:36::i;:::-;23425:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23392:101;;25946:113:::0;22074:10;22088:1;22063:22;;;:10;:22;;;;;;:26;;;:50;;-1:-1:-1;22107:6:0;;-1:-1:-1;;;;;22107:6:0;22093:10;:20;22063:50;22055:81;;;;-1:-1:-1;;;22055:81:0;;;;;;;:::i;:::-;26035:6:::1;:16:::0;;-1:-1:-1;;;;;;26035:16:0::1;-1:-1:-1::0;;;;;26035:16:0;;;::::1;::::0;;;::::1;::::0;;25946:113::o;26067:169::-;22074:10;22088:1;22063:22;;;:10;:22;;;;;;:26;;;:50;;-1:-1:-1;22107:6:0;;-1:-1:-1;;;;;22107:6:0;22093:10;:20;22063:50;22055:81;;;;-1:-1:-1;;;22055:81:0;;;;;;;:::i;:::-;26185:14;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;26210:7:0::1;:18:::0;;-1:-1:-1;;26210:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;26067:169:0:o;17262:439::-;17414:26;17427:4;17433:2;17437;17414:12;:26::i;:::-;-1:-1:-1;;;;;17475:14:0;;;:19;;:174;;-1:-1:-1;17515:68:0;;-1:-1:-1;;;17515:68:0;;;17604:45;-1:-1:-1;;;;;17515:40:0;;;17604:45;;17515:68;;17556:10;;17568:4;;17574:2;;17578:4;;17515:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;17515:134:0;;17475:174;17453:240;;;;-1:-1:-1;;;17453:240:0;;17571:2:1;17453:240:0;;;17553:21:1;17610:2;17590:18;;;17583:30;-1:-1:-1;;;17629:18:1;;;17622:46;17685:18;;17453:240:0;17369:340:1;17453:240:0;17262:439;;;;:::o;24103:407::-;22074:10;22088:1;22063:22;;;:10;:22;;;;;;:26;;;:50;;-1:-1:-1;22107:6:0;;-1:-1:-1;;;;;22107:6:0;22093:10;:20;22063:50;22055:81;;;;-1:-1:-1;;;22055:81:0;;;;;;;:::i;:::-;24184:10:::1;24170:25;::::0;;;:13:::1;:25;::::0;;;;;::::1;;24169:26;24161:52;;;::::0;-1:-1:-1;;;24161:52:0;;16484:2:1;24161:52:0::1;::::0;::::1;16466:21:1::0;16523:2;16503:18;;;16496:30;-1:-1:-1;;;16542:18:1;;;16535:43;16595:18;;24161:52:0::1;16282:337:1::0;24161:52:0::1;24238:10;24224:25;::::0;;;:13:::1;:25;::::0;;;;;:32;;-1:-1:-1;;24224:32:0::1;24252:4;24224:32;::::0;;24285:4:::1;::::0;-1:-1:-1;;;;;24285:4:0::1;24271:19:::0;;;;;24224:32:::1;24271:19;:42:::0;::::1;;;-1:-1:-1::0;24308:4:0::1;::::0;-1:-1:-1;;;;;24308:4:0::1;24294:19;::::0;;;:13:::1;:19;::::0;;;;;::::1;;24271:42;:66;;;;-1:-1:-1::0;24331:5:0::1;::::0;-1:-1:-1;;;;;24331:5:0::1;24317:20;::::0;;;:13:::1;:20;::::0;;;;;::::1;;24271:66;24267:236;;;24365:4;::::0;-1:-1:-1;;;;;24365:4:0;;::::1;24354:16;::::0;;;:10:::1;:16;::::0;;;;;24373:2:::1;24354:21:::0;;;;24401:4:::1;::::0;;::::1;24390:16:::0;;;;;:21;;;24437:5:::1;::::0;;;::::1;24426:17:::0;;;;:22;24463:9:::1;:28:::0;;-1:-1:-1;;24463:28:0::1;::::0;;24267:236:::1;24103:407::o:0;25638:300::-;25745:7;;25714:13;;25745:7;;25740:191;;25800:7;25809:12;25818:2;25809:8;:12::i;:::-;25783:39;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25769:54;;25638:300;;;:::o;25740:191::-;25887:7;25896:12;25905:2;25896:8;:12::i;:::-;25870:48;;;;;;;;;:::i;25740:191::-;25638:300;;;:::o;22594:658::-;22754:15;22741:9;;;;:28;;;;;;;;:::i;:::-;;22733:55;;;;-1:-1:-1;;;22733:55:0;;17916:2:1;22733:55:0;;;17898:21:1;17955:2;17935:18;;;17928:30;-1:-1:-1;;;17974:18:1;;;17967:44;18028:18;;22733:55:0;17714:338:1;22733:55:0;22799:12;22814:44;22830:10;22842:7;22851:6;22814:15;:44::i;:::-;22799:59;;22877:51;22894:21;22910:4;22894:15;:21::i;:::-;22917:10;22877:16;:51::i;:::-;22869:82;;;;-1:-1:-1;;;22869:82:0;;15040:2:1;22869:82:0;;;15022:21:1;15079:2;15059:18;;;15052:30;-1:-1:-1;;;15098:18:1;;;15091:48;15156:18;;22869:82:0;14838:342:1;22869:82:0;23000:13;22982:7;:14;22970:11;;:26;;;;:::i;:::-;:43;;22962:71;;;;-1:-1:-1;;;22962:71:0;;19293:2:1;22962:71:0;;;19275:21:1;19332:2;19312:18;;;19305:30;-1:-1:-1;;;19351:18:1;;;19344:45;19406:18;;22962:71:0;19091:339:1;22962:71:0;23049:6;23044:152;23060:7;:14;23058:1;:16;23044:152;;;23104:7;:19;23112:7;23120:1;23112:10;;;;;;;;:::i;:::-;;;;;;;;;;;;23104:19;;;;;;;;;;-1:-1:-1;23104:19:0;;;;23103:20;23095:48;;;;-1:-1:-1;;;23095:48:0;;19976:2:1;23095:48:0;;;19958:21:1;20015:2;19995:18;;;19988:30;-1:-1:-1;;;20034:18:1;;;20027:45;20089:18;;23095:48:0;19774:339:1;23095:48:0;23180:4;23158:7;:19;23166:7;23174:1;23166:10;;;;;;;;:::i;:::-;;;;;;;23158:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;23075:3;;;;;:::i;:::-;;;;23044:152;;;;23206:38;23217:10;23229:7;:14;23206:10;:38::i;26619:160::-;26709:4;26743:28;:8;26760:10;26743:16;:28::i;:::-;26733:6;;-1:-1:-1;;;;;26733:38:0;;;:6;;:38;;26619:160;-1:-1:-1;;;26619:160:0:o;19094:411::-;-1:-1:-1;;;;;19169:16:0;;19161:46;;;;-1:-1:-1;;;19161:46:0;;16138:2:1;19161:46:0;;;16120:21:1;16177:2;16157:18;;;16150:30;-1:-1:-1;;;16196:18:1;;;16189:47;16253:18;;19161:46:0;15936:341:1;19161:46:0;19251:1;19228:11;;;:7;:11;;;;;;-1:-1:-1;;;;;19228:11:0;:25;19220:52;;;;-1:-1:-1;;;19220:52:0;;18259:2:1;19220:52:0;;;18241:21:1;18298:2;18278:18;;;18271:30;-1:-1:-1;;;18317:18:1;;;18310:44;18371:18;;19220:52:0;18057:338:1;19220:52:0;19366:11;:13;;;;;;;;;-1:-1:-1;;;;;19396:13:0;;19366:11;19396:13;;;:9;:13;;;;;;;;:15;;;;;;;;19435:11;;;:7;:11;;;;;:16;;-1:-1:-1;;;;;;19435:16:0;;;;;19469:28;;19443:2;;19366:11;19469:28;;19366:11;;19469:28;19094:411;;:::o;18436:650::-;-1:-1:-1;;;;;18518:16:0;;18514:46;;18543:17;;-1:-1:-1;;;18543:17:0;;;;;;;;;;;18514:46;18575:13;18571:44;;18597:18;;-1:-1:-1;;;18597:18:0;;;;;;;;;;;18571:44;-1:-1:-1;;;;;18653:13:0;;;;;;:9;:13;;;;;:25;;;;;;18718:11;;18758:23;;;18798:229;18876:33;;18851:1;18838:14;;;;;-1:-1:-1;;;;;18876:33:0;;;18820:15;;18876:33;;18820:15;;18876:33;18928:16;;;;:7;:16;;;;;:21;;-1:-1:-1;;;;;;18928:21:0;-1:-1:-1;;;;;18928:21:0;;;;;-1:-1:-1;18968:14:0;;;;;19006:19;;;;18798:229;;-1:-1:-1;19041:11:0;:26;-1:-1:-1;;18436:650:0:o;25057:573::-;25107:27;25151:7;25147:50;;-1:-1:-1;;25175:10:0;;;;;;;;;;;;-1:-1:-1;;;25175:10:0;;;;;25057:573::o;25147:50::-;25216:2;25207:6;25248:69;25255:6;;25248:69;;25278:5;;;;:::i;:::-;;-1:-1:-1;25298:7:0;;-1:-1:-1;25303:2:0;25298:7;;:::i;:::-;;;25248:69;;;25327:17;25357:3;25347:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25347:14:0;-1:-1:-1;25327:34:0;-1:-1:-1;25381:3:0;25395:198;25402:7;;25395:198;;25430:3;25432:1;25430;:3;:::i;:::-;25426:7;-1:-1:-1;25448:10:0;25478:7;25483:2;25478;:7;:::i;:::-;:12;;25488:2;25478:12;:::i;:::-;25473:17;;:2;:17;:::i;:::-;25462:29;;:2;:29;:::i;:::-;25448:44;;25507:9;25526:4;25519:12;;25507:24;;25556:2;25546:4;25551:1;25546:7;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;25546:12:0;;;;;;;;-1:-1:-1;25573:8:0;25579:2;25573:8;;:::i;:::-;;;25411:182;;25395:198;;;-1:-1:-1;25617:4:0;25057:573;-1:-1:-1;;;;25057:573:0:o;8292:231::-;8370:7;8391:17;8410:18;8432:27;8443:4;8449:9;8432:10;:27::i;:::-;8390:69;;;;8470:18;8482:5;8470:11;:18::i;:::-;-1:-1:-1;8506:9:0;8292:231;-1:-1:-1;;;8292:231:0:o;6182:1308::-;6263:7;6272:12;6497:9;:16;6517:2;6497:22;6493:990;;;6793:4;6778:20;;6772:27;6843:4;6828:20;;6822:27;6901:4;6886:20;;6880:27;6536:9;6872:36;6944:25;6955:4;6872:36;6772:27;6822;6944:10;:25::i;:::-;6937:32;;;;;;;;;6493:990;6991:9;:16;7011:2;6991:22;6987:496;;;7266:4;7251:20;;7245:27;7317:4;7302:20;;7296:27;7359:23;7370:4;7245:27;7296;7359:10;:23::i;:::-;7352:30;;;;;;;;6987:496;-1:-1:-1;7431:1:0;;-1:-1:-1;7435:35:0;6987:496;6182:1308;;;;;:::o;4453:643::-;4531:20;4522:5;:29;;;;;;;;:::i;:::-;;4518:571;;;4453:643;:::o;4518:571::-;4629:29;4620:5;:38;;;;;;;;:::i;:::-;;4616:473;;;4675:34;;-1:-1:-1;;;4675:34:0;;13980:2:1;4675:34:0;;;13962:21:1;14019:2;13999:18;;;13992:30;14058:26;14038:18;;;14031:54;14102:18;;4675:34:0;13778:348:1;4616:473:0;4740:35;4731:5;:44;;;;;;;;:::i;:::-;;4727:362;;;4792:41;;-1:-1:-1;;;4792:41:0;;14333:2:1;4792:41:0;;;14315:21:1;14372:2;14352:18;;;14345:30;14411:33;14391:18;;;14384:61;14462:18;;4792:41:0;14131:355:1;4727:362:0;4864:30;4855:5;:39;;;;;;;;:::i;:::-;;4851:238;;;4911:44;;-1:-1:-1;;;4911:44:0;;15387:2:1;4911:44:0;;;15369:21:1;15426:2;15406:18;;;15399:30;15465:34;15445:18;;;15438:62;-1:-1:-1;;;15516:18:1;;;15509:32;15558:19;;4911:44:0;15185:398:1;4851:238:0;4986:30;4977:5;:39;;;;;;;;:::i;:::-;;4973:116;;;5033:44;;-1:-1:-1;;;5033:44:0;;16826:2:1;5033:44:0;;;16808:21:1;16865:2;16845:18;;;16838:30;16904:34;16884:18;;;16877:62;-1:-1:-1;;;16955:18:1;;;16948:32;16997:19;;5033:44:0;16624:398:1;9744:1632:0;9875:7;;10809:66;10796:79;;10792:163;;;-1:-1:-1;10908:1:0;;-1:-1:-1;10912:30:0;10892:51;;10792:163;10969:1;:7;;10974:2;10969:7;;:18;;;;;10980:1;:7;;10985:2;10980:7;;10969:18;10965:102;;;-1:-1:-1;11020:1:0;;-1:-1:-1;11024:30:0;11004:51;;10965:102;11181:24;;;11164:14;11181:24;;;;;;;;;13031:25:1;;;13104:4;13092:17;;13072:18;;;13065:45;;;;13126:18;;;13119:34;;;13169:18;;;13162:34;;;11181:24:0;;13003:19:1;;11181:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11181:24:0;;-1:-1:-1;;11181:24:0;;;-1:-1:-1;;;;;;;11220:20:0;;11216:103;;11273:1;11277:29;11257:50;;;;;;;11216:103;11339:6;-1:-1:-1;11347:20:0;;-1:-1:-1;9744:1632:0;;;;;;;;:::o;8786:344::-;8900:7;;-1:-1:-1;;;;;8946:80:0;;8900:7;9053:25;9069:3;9054:18;;;9076:2;9053:25;:::i;:::-;9037:42;;9097:25;9108:4;9114:1;9117;9120;9097:10;:25::i;:::-;9090:32;;;;;;8786:344;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;603:673;657:5;710:3;703:4;695:6;691:17;687:27;677:55;;728:1;725;718:12;677:55;764:6;751:20;790:4;814:60;830:43;870:2;830:43;:::i;:::-;814:60;:::i;:::-;896:3;920:2;915:3;908:15;948:2;943:3;939:12;932:19;;983:2;975:6;971:15;1035:3;1030:2;1024;1021:1;1017:10;1009:6;1005:23;1001:32;998:41;995:61;;;1052:1;1049;1042:12;995:61;1074:1;1084:163;1098:2;1095:1;1092:9;1084:163;;;1155:17;;1143:30;;1193:12;;;;1225;;;;1116:1;1109:9;1084:163;;;-1:-1:-1;1265:5:1;;603:673;-1:-1:-1;;;;;;;603:673:1:o;1281:160::-;1346:20;;1402:13;;1395:21;1385:32;;1375:60;;1431:1;1428;1421:12;1446:220;1488:5;1541:3;1534:4;1526:6;1522:17;1518:27;1508:55;;1559:1;1556;1549:12;1508:55;1581:79;1656:3;1647:6;1634:20;1627:4;1619:6;1615:17;1581:79;:::i;:::-;1572:88;1446:220;-1:-1:-1;;;1446:220:1:o;1671:186::-;1730:6;1783:2;1771:9;1762:7;1758:23;1754:32;1751:52;;;1799:1;1796;1789:12;1751:52;1822:29;1841:9;1822:29;:::i;1862:260::-;1930:6;1938;1991:2;1979:9;1970:7;1966:23;1962:32;1959:52;;;2007:1;2004;1997:12;1959:52;2030:29;2049:9;2030:29;:::i;:::-;2020:39;;2078:38;2112:2;2101:9;2097:18;2078:38;:::i;:::-;2068:48;;1862:260;;;;;:::o;2127:328::-;2204:6;2212;2220;2273:2;2261:9;2252:7;2248:23;2244:32;2241:52;;;2289:1;2286;2279:12;2241:52;2312:29;2331:9;2312:29;:::i;:::-;2302:39;;2360:38;2394:2;2383:9;2379:18;2360:38;:::i;:::-;2350:48;;2445:2;2434:9;2430:18;2417:32;2407:42;;2127:328;;;;;:::o;2460:537::-;2555:6;2563;2571;2579;2632:3;2620:9;2611:7;2607:23;2603:33;2600:53;;;2649:1;2646;2639:12;2600:53;2672:29;2691:9;2672:29;:::i;:::-;2662:39;;2720:38;2754:2;2743:9;2739:18;2720:38;:::i;:::-;2710:48;;2805:2;2794:9;2790:18;2777:32;2767:42;;2860:2;2849:9;2845:18;2832:32;2887:18;2879:6;2876:30;2873:50;;;2919:1;2916;2909:12;2873:50;2942:49;2983:7;2974:6;2963:9;2959:22;2942:49;:::i;:::-;2932:59;;;2460:537;;;;;;;:::o;3002:490::-;3104:6;3112;3120;3173:2;3161:9;3152:7;3148:23;3144:32;3141:52;;;3189:1;3186;3179:12;3141:52;3212:29;3231:9;3212:29;:::i;:::-;3202:39;;3292:2;3281:9;3277:18;3264:32;3319:18;3311:6;3308:30;3305:50;;;3351:1;3348;3341:12;3305:50;3374:61;3427:7;3418:6;3407:9;3403:22;3374:61;:::i;:::-;3364:71;;;3482:2;3471:9;3467:18;3454:32;3444:42;;3002:490;;;;;:::o;3497:254::-;3562:6;3570;3623:2;3611:9;3602:7;3598:23;3594:32;3591:52;;;3639:1;3636;3629:12;3591:52;3662:29;3681:9;3662:29;:::i;:::-;3652:39;;3710:35;3741:2;3730:9;3726:18;3710:35;:::i;3756:254::-;3824:6;3832;3885:2;3873:9;3864:7;3860:23;3856:32;3853:52;;;3901:1;3898;3891:12;3853:52;3924:29;3943:9;3924:29;:::i;:::-;3914:39;4000:2;3985:18;;;;3972:32;;-1:-1:-1;;;3756:254:1:o;4015:1157::-;4133:6;4141;4194:2;4182:9;4173:7;4169:23;4165:32;4162:52;;;4210:1;4207;4200:12;4162:52;4250:9;4237:23;4279:18;4320:2;4312:6;4309:14;4306:34;;;4336:1;4333;4326:12;4306:34;4374:6;4363:9;4359:22;4349:32;;4419:7;4412:4;4408:2;4404:13;4400:27;4390:55;;4441:1;4438;4431:12;4390:55;4477:2;4464:16;4499:4;4523:60;4539:43;4579:2;4539:43;:::i;4523:60::-;4605:3;4629:2;4624:3;4617:15;4657:2;4652:3;4648:12;4641:19;;4688:2;4684;4680:11;4736:7;4731:2;4725;4722:1;4718:10;4714:2;4710:19;4706:28;4703:41;4700:61;;;4757:1;4754;4747:12;4700:61;4779:1;4770:10;;4789:169;4803:2;4800:1;4797:9;4789:169;;;4860:23;4879:3;4860:23;:::i;:::-;4848:36;;4821:1;4814:9;;;;;4904:12;;;;4936;;4789:169;;;-1:-1:-1;4977:5:1;-1:-1:-1;;5020:18:1;;5007:32;;-1:-1:-1;;5051:16:1;;;5048:36;;;5080:1;5077;5070:12;5048:36;;5103:63;5158:7;5147:8;5136:9;5132:24;5103:63;:::i;:::-;5093:73;;;4015:1157;;;;;:::o;5177:635::-;5288:6;5296;5304;5357:2;5345:9;5336:7;5332:23;5328:32;5325:52;;;5373:1;5370;5363:12;5325:52;5413:9;5400:23;5442:18;5483:2;5475:6;5472:14;5469:34;;;5499:1;5496;5489:12;5469:34;5522:61;5575:7;5566:6;5555:9;5551:22;5522:61;:::i;:::-;5512:71;;5630:2;5619:9;5615:18;5602:32;5592:42;;5687:2;5676:9;5672:18;5659:32;5643:48;;5716:2;5706:8;5703:16;5700:36;;;5732:1;5729;5722:12;5700:36;;5755:51;5798:7;5787:8;5776:9;5772:24;5755:51;:::i;:::-;5745:61;;;5177:635;;;;;:::o;5817:180::-;5876:6;5929:2;5917:9;5908:7;5904:23;5900:32;5897:52;;;5945:1;5942;5935:12;5897:52;-1:-1:-1;5968:23:1;;5817:180;-1:-1:-1;5817:180:1:o;6002:388::-;6079:6;6087;6140:2;6128:9;6119:7;6115:23;6111:32;6108:52;;;6156:1;6153;6146:12;6108:52;6192:9;6179:23;6169:33;;6253:2;6242:9;6238:18;6225:32;6280:18;6272:6;6269:30;6266:50;;;6312:1;6309;6302:12;6266:50;6335:49;6376:7;6367:6;6356:9;6352:22;6335:49;:::i;6395:245::-;6453:6;6506:2;6494:9;6485:7;6481:23;6477:32;6474:52;;;6522:1;6519;6512:12;6474:52;6561:9;6548:23;6580:30;6604:5;6580:30;:::i;6645:249::-;6714:6;6767:2;6755:9;6746:7;6742:23;6738:32;6735:52;;;6783:1;6780;6773:12;6735:52;6815:9;6809:16;6834:30;6858:5;6834:30;:::i;6899:270::-;6972:6;7025:2;7013:9;7004:7;7000:23;6996:32;6993:52;;;7041:1;7038;7031:12;6993:52;7080:9;7067:23;7119:1;7112:5;7109:12;7099:40;;7135:1;7132;7125:12;7174:522;7249:6;7257;7310:2;7298:9;7289:7;7285:23;7281:32;7278:52;;;7326:1;7323;7316:12;7278:52;7366:9;7353:23;7399:18;7391:6;7388:30;7385:50;;;7431:1;7428;7421:12;7385:50;7454:22;;7507:4;7499:13;;7495:27;-1:-1:-1;7485:55:1;;7536:1;7533;7526:12;7485:55;7559:75;7626:7;7621:2;7608:16;7601:4;7597:2;7593:13;7559:75;:::i;:::-;7549:85;;;7653:37;7684:4;7673:9;7669:20;7653:37;:::i;7886:257::-;7927:3;7965:5;7959:12;7992:6;7987:3;7980:19;8008:63;8064:6;8057:4;8052:3;8048:14;8041:4;8034:5;8030:16;8008:63;:::i;:::-;8125:2;8104:15;-1:-1:-1;;8100:29:1;8091:39;;;;8132:4;8087:50;;7886:257;-1:-1:-1;;7886:257:1:o;8148:973::-;8233:12;;8198:3;;8288:1;8308:18;;;;8361;;;;8388:61;;8442:4;8434:6;8430:17;8420:27;;8388:61;8468:2;8516;8508:6;8505:14;8485:18;8482:38;8479:161;;;8562:10;8557:3;8553:20;8550:1;8543:31;8597:4;8594:1;8587:15;8625:4;8622:1;8615:15;8479:161;8656:18;8683:104;;;;8801:1;8796:319;;;;8649:466;;8683:104;-1:-1:-1;;8716:24:1;;8704:37;;8761:16;;;;-1:-1:-1;8683:104:1;;8796:319;20841:1;20834:14;;;20878:4;20865:18;;8890:1;8904:165;8918:6;8915:1;8912:13;8904:165;;;8996:14;;8983:11;;;8976:35;9039:16;;;;8933:10;;8904:165;;;8908:3;;9098:6;9093:3;9089:16;9082:23;;8649:466;;;;;;;8148:973;;;;:::o;9126:724::-;9398:26;9394:31;9385:6;9381:2;9377:15;9373:53;9368:3;9361:66;9343:3;9458:2;9453:3;9449:12;9490:6;9484:13;9539:4;9578:2;9570:6;9566:15;9599:1;9609:175;9623:6;9620:1;9617:13;9609:175;;;9686:13;;9672:28;;9722:14;;;;9759:15;;;;9645:1;9638:9;9609:175;;;-1:-1:-1;;9793:21:1;;;-1:-1:-1;9830:14:1;;;;;-1:-1:-1;;;;9126:724:1:o;9855:376::-;10031:3;10059:38;10093:3;10085:6;10059:38;:::i;:::-;10126:6;10120:13;10142:52;10187:6;10183:2;10176:4;10168:6;10164:17;10142:52;:::i;:::-;10210:15;;9855:376;-1:-1:-1;;;;9855:376:1:o;10236:543::-;10513:3;10541:38;10575:3;10567:6;10541:38;:::i;:::-;10608:6;10602:13;10624:52;10669:6;10665:2;10658:4;10650:6;10646:17;10624:52;:::i;:::-;-1:-1:-1;;;10698:15:1;;10722:22;;;10771:1;10760:13;;10236:543;-1:-1:-1;;;;10236:543:1:o;11377:488::-;-1:-1:-1;;;;;11646:15:1;;;11628:34;;11698:15;;11693:2;11678:18;;11671:43;11745:2;11730:18;;11723:34;;;11793:3;11788:2;11773:18;;11766:31;;;11571:4;;11814:45;;11839:19;;11831:6;11814:45;:::i;:::-;11806:53;11377:488;-1:-1:-1;;;;;;11377:488:1:o;13207:342::-;13353:2;13338:18;;13386:1;13375:13;;13365:144;;13431:10;13426:3;13422:20;13419:1;13412:31;13466:4;13463:1;13456:15;13494:4;13491:1;13484:15;13365:144;13518:25;;;13207:342;:::o;13554:219::-;13703:2;13692:9;13685:21;13666:4;13723:44;13763:2;13752:9;13748:18;13740:6;13723:44;:::i;18400:343::-;18602:2;18584:21;;;18641:2;18621:18;;;18614:30;-1:-1:-1;;;18675:2:1;18660:18;;18653:49;18734:2;18719:18;;18400:343::o;20300:275::-;20371:2;20365:9;20436:2;20417:13;;-1:-1:-1;;20413:27:1;20401:40;;20471:18;20456:34;;20492:22;;;20453:62;20450:88;;;20518:18;;:::i;:::-;20554:2;20547:22;20300:275;;-1:-1:-1;20300:275:1:o;20580:183::-;20640:4;20673:18;20665:6;20662:30;20659:56;;;20695:18;;:::i;:::-;-1:-1:-1;20740:1:1;20736:14;20752:4;20732:25;;20580:183::o;20894:128::-;20934:3;20965:1;20961:6;20958:1;20955:13;20952:39;;;20971:18;;:::i;:::-;-1:-1:-1;21007:9:1;;20894:128::o;21027:204::-;21065:3;21101:4;21098:1;21094:12;21133:4;21130:1;21126:12;21168:3;21162:4;21158:14;21153:3;21150:23;21147:49;;;21176:18;;:::i;:::-;21212:13;;21027:204;-1:-1:-1;;;21027:204:1:o;21236:217::-;21276:1;21302;21292:132;;21346:10;21341:3;21337:20;21334:1;21327:31;21381:4;21378:1;21371:15;21409:4;21406:1;21399:15;21292:132;-1:-1:-1;21438:9:1;;21236:217::o;21458:168::-;21498:7;21564:1;21560;21556:6;21552:14;21549:1;21546:21;21541:1;21534:9;21527:17;21523:45;21520:71;;;21571:18;;:::i;:::-;-1:-1:-1;21611:9:1;;21458:168::o;21631:125::-;21671:4;21699:1;21696;21693:8;21690:34;;;21704:18;;:::i;:::-;-1:-1:-1;21741:9:1;;21631:125::o;21761:258::-;21833:1;21843:113;21857:6;21854:1;21851:13;21843:113;;;21933:11;;;21927:18;21914:11;;;21907:39;21879:2;21872:10;21843:113;;;21974:6;21971:1;21968:13;21965:48;;;-1:-1:-1;;22009:1:1;21991:16;;21984:27;21761:258::o;22024:380::-;22103:1;22099:12;;;;22146;;;22167:61;;22221:4;22213:6;22209:17;22199:27;;22167:61;22274:2;22266:6;22263:14;22243:18;22240:38;22237:161;;;22320:10;22315:3;22311:20;22308:1;22301:31;22355:4;22352:1;22345:15;22383:4;22380:1;22373:15;22237:161;;22024:380;;;:::o;22409:135::-;22448:3;-1:-1:-1;;22469:17:1;;22466:43;;;22489:18;;:::i;:::-;-1:-1:-1;22536:1:1;22525:13;;22409:135::o;22549:127::-;22610:10;22605:3;22601:20;22598:1;22591:31;22641:4;22638:1;22631:15;22665:4;22662:1;22655:15;22681:127;22742:10;22737:3;22733:20;22730:1;22723:31;22773:4;22770:1;22763:15;22797:4;22794:1;22787:15;22813:127;22874:10;22869:3;22865:20;22862:1;22855:31;22905:4;22902:1;22895:15;22929:4;22926:1;22919:15;22945:127;23006:10;23001:3;22997:20;22994:1;22987:31;23037:4;23034:1;23027:15;23061:4;23058:1;23051:15;23077:131;-1:-1:-1;;;;;;23151:32:1;;23141:43;;23131:71;;23198:1;23195;23188:12

Swarm Source

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