ETH Price: $3,340.27 (-0.79%)
Gas: 4 Gwei

Token

tiny criminals (tc)
 

Overview

Max Total Supply

0 tc

Holders

347

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 tc
0x295fcb4e9277841c8d6dfbbe7f9f1d6ad0107ff2
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:
tinycriminals

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//tiny criminals robbing and stealing across all chains..claim new weapons, cars, tools, booze, and other fun things.
//SPDX-License-Identifier: MIT
// File: /ILayerZeroReceiver.sol



pragma solidity >=0.5.0;

interface ILayerZeroReceiver {
    // @notice LayerZero endpoint will invoke this function to deliver the message on the destination
    // @param _srcChainId - the source endpoint identifier
    // @param _srcAddress - the source sending contract address from the source chain
    // @param _nonce - the ordered message nonce
    // @param _payload - the signed payload is the UA bytes has encoded to be sent
    function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external;
}
// File: /ILayerZeroUserApplicationConfig.sol



pragma solidity >=0.5.0;

interface ILayerZeroUserApplicationConfig {
    // @notice set the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _configType - type of configuration. every messaging library has its own convention.
    // @param _config - configuration in the bytes. can encode arbitrary content.
    function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external;

    // @notice set the send() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setSendVersion(uint16 _version) external;

    // @notice set the lzReceive() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setReceiveVersion(uint16 _version) external;

    // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload
    // @param _srcChainId - the chainId of the source chain
    // @param _srcAddress - the contract address of the source contract at the source chain
    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external;
}
// File: /ILayerZeroEndpoint.sol



pragma solidity >=0.5.0;


interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {
    // @notice send a LayerZero message to the specified address at a LayerZero endpoint.
    // @param _dstChainId - the destination chain identifier
    // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains
    // @param _payload - a custom bytes payload to send to the destination contract
    // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
    // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction
    // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination
    function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable;

    // @notice used by the messaging library to publish verified payload
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source contract (as bytes) at the source chain
    // @param _dstAddress - the address on destination chain
    // @param _nonce - the unbound message ordering nonce
    // @param _gasLimit - the gas limit for external contract execution
    // @param _payload - verified payload to send to the destination contract
    function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external;

    // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64);

    // @notice get the outboundNonce from this source chain which, consequently, is always an EVM
    // @param _srcAddress - the source chain contract address
    function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64);

    // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery
    // @param _dstChainId - the destination chain identifier
    // @param _userApplication - the user app address on this EVM chain
    // @param _payload - the custom message to send over LayerZero
    // @param _payInZRO - if false, user app pays the protocol fee in native token
    // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain
    function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee);

    // @notice get this Endpoint's immutable source identifier
    function getChainId() external view returns (uint16);

    // @notice the interface to retry failed message on this Endpoint destination
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    // @param _payload - the payload to be retried
    function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external;

    // @notice query if any STORED payload (message blocking) at the endpoint.
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool);

    // @notice query if the _libraryAddress is valid for sending msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getSendLibraryAddress(address _userApplication) external view returns (address);

    // @notice query if the _libraryAddress is valid for receiving msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getReceiveLibraryAddress(address _userApplication) external view returns (address);

    // @notice query if the non-reentrancy guard for send() is on
    // @return true if the guard is on. false otherwise
    function isSendingPayload() external view returns (bool);

    // @notice query if the non-reentrancy guard for receive() is on
    // @return true if the guard is on. false otherwise
    function isReceivingPayload() external view returns (bool);

    // @notice get the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _userApplication - the contract address of the user application
    // @param _configType - type of configuration. every messaging library has its own convention.
    function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory);

    // @notice get the send() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getSendVersion(address _userApplication) external view returns (uint16);

    // @notice get the lzReceive() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getReceiveVersion(address _userApplication) external view returns (uint16);
}
// File: @openzeppelin/contracts/utils/Strings.sol


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

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


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

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: /NonblockingReceiver.sol


pragma solidity ^0.8.9;




abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver {

    ILayerZeroEndpoint internal endpoint;

    struct FailedMessages {
        uint payloadLength;
        bytes32 payloadHash;
    }

    mapping(uint16 => mapping(bytes => mapping(uint => FailedMessages))) public failedMessages;
    mapping(uint16 => bytes) public trustedRemoteLookup;

    event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload);

    function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) external override {
        require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security
        require(_srcAddress.length == trustedRemoteLookup[_srcChainId].length && keccak256(_srcAddress) == keccak256(trustedRemoteLookup[_srcChainId]),
            "NonblockingReceiver: invalid source sending contract");

        // try-catch all errors/exceptions
        // having failed messages does not block messages passing
        try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) {
            // do nothing
        } catch {
            // error / exception
            failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(_payload.length, keccak256(_payload));
            emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload);
        }
    }

    function onLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public {
        // only internal transaction
        require(msg.sender == address(this), "NonblockingReceiver: caller must be Bridge.");

        // handle incoming message
        _LzReceive( _srcChainId, _srcAddress, _nonce, _payload);
    }

    // abstract function
    function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) virtual internal;

    function _lzSend(uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _txParam) internal {
        endpoint.send{value: msg.value}(_dstChainId, trustedRemoteLookup[_dstChainId], _payload, _refundAddress, _zroPaymentAddress, _txParam);
    }

    function retryMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes calldata _payload) external payable {
        // assert there is message to retry
        FailedMessages storage failedMsg = failedMessages[_srcChainId][_srcAddress][_nonce];
        require(failedMsg.payloadHash != bytes32(0), "NonblockingReceiver: no stored message");
        require(_payload.length == failedMsg.payloadLength && keccak256(_payload) == failedMsg.payloadHash, "LayerZero: invalid payload");
        // clear the stored message
        failedMsg.payloadLength = 0;
        failedMsg.payloadHash = bytes32(0);
        // execute the message. revert if it fails again
        this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    function setTrustedRemote(uint16 _chainId, bytes calldata _trustedRemote) external onlyOwner {
        trustedRemoteLookup[_chainId] = _trustedRemote;
    }
}
// File: @openzeppelin/contracts/utils/Address.sol


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: tiny.sol


pragma solidity ^0.8.9;



contract tinycriminals is ERC721, NonblockingReceiver {

    string public baseURI = "ipfs://QmfQEsd3EyNxJ5FDck7N6SGWaVcRjze4aVDN48Hqywmsfm/";
    string public contractURI = "ipfs://QmSZ1pj3E74TCsDvJnfV9ZBstM3vNNW4HEntCQjxYoMz3e";
    string public constant baseExtension = ".json";

    uint256 nextTokenId;
    uint256 MAX_MINT;

    uint256 gasForDestinationLzReceive = 350000;

    uint256 public constant MAX_PER_TX = 2;
    uint256 public constant MAX_PER_WALLET = 30;
    mapping(address => uint256) public minted;

    bool public paused = false;

    constructor(
        address _endpoint,
        uint256 startId,
        uint256 _max
    ) ERC721("tiny criminals", "tc") {
        endpoint = ILayerZeroEndpoint(_endpoint);
        nextTokenId = startId;
        MAX_MINT = _max;
    }

    function mint(uint256 _amount) external payable {
        address _caller = _msgSender();
        require(!paused, "tinycriminals: Paused");
        require(nextTokenId + _amount <= MAX_MINT, "tinycriminals: Mint exceeds supply");
        require(MAX_PER_TX >= _amount , "tinycriminals: Excess max per tx");
        require(MAX_PER_WALLET >= minted[_caller] + _amount, "tinycriminals: Excess max per wallet");
        minted[_caller] += _amount;

        for(uint256 i = 0; i < _amount; i++) {
            _safeMint(_caller, ++nextTokenId);
        }
    }

    // This function transfers the nft from your address on the
    // source chain to the same address on the destination chain
    function traverseChains(uint16 _chainId, uint256 tokenId) public payable {
        require(
            msg.sender == ownerOf(tokenId),
            "You must own the token to traverse"
        );
        require(
            trustedRemoteLookup[_chainId].length > 0,
            "This chain is currently unavailable for travel"
        );

        // burn NFT, eliminating it from circulation on src chain
        _burn(tokenId);

        // abi.encode() the payload with the values to send
        bytes memory payload = abi.encode(msg.sender, tokenId);

        // encode adapterParams to specify more gas for the destination
        uint16 version = 1;
        bytes memory adapterParams = abi.encodePacked(
            version,
            gasForDestinationLzReceive
        );

        // get the fees we need to pay to LayerZero + Relayer to cover message delivery
        // you will be refunded for extra gas paid
        (uint256 messageFee, ) = endpoint.estimateFees(
            _chainId,
            address(this),
            payload,
            false,
            adapterParams
        );

        require(
            msg.value >= messageFee,
            "tinycriminals: msg.value not enough to cover messageFee. Send gas for message fees"
        );

        endpoint.send{value: msg.value}(
            _chainId, // destination chainId
            trustedRemoteLookup[_chainId], // destination address of nft contract
            payload, // abi.encoded()'ed bytes
            payable(msg.sender), // refund address
            address(0x0), // 'zroPaymentAddress' unused for this
            adapterParams // txParameters
        );
    }

    function getEstimatedFees(uint16 _chainId, uint256 tokenId) public view returns (uint) {
        bytes memory payload = abi.encode(msg.sender, tokenId);
        uint16 version = 1;
        bytes memory adapterParams = abi.encodePacked(version, gasForDestinationLzReceive);
        (uint quotedLayerZeroFee, ) = endpoint.estimateFees(_chainId, address(this), payload, false, adapterParams);
        return quotedLayerZeroFee;
    }

    function pause(bool _state) external onlyOwner {
        paused = _state;
    }

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

    function setContractURI(string memory _contractURI) external onlyOwner {
        contractURI = _contractURI;
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Token does not exist.");
        return bytes(baseURI).length > 0 ? string(
            abi.encodePacked(
              baseURI,
              Strings.toString(_tokenId),
              baseExtension
            )
        ) : "";
    }

    function setGasForDestinationLzReceive(uint256 _gasForDestinationLzReceive) external onlyOwner {
        gasForDestinationLzReceive = _gasForDestinationLzReceive;
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        (bool success, ) = _msgSender().call{value: balance}("");
        require(success, "Failed to send");
    }

    // ------------------
    // Internal Functions
    // ------------------

    function _LzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) internal override {
        // decode
        (address toAddr, uint256 tokenId) = abi.decode(
            _payload,
            (address, uint256)
        );

        // mint the tokens back into existence on destination chain
        _safeMint(toAddr, tokenId);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_endpoint","type":"address"},{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getEstimatedFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","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":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasForDestinationLzReceive","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedRemote","type":"bytes"}],"name":"setTrustedRemote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"traverseChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040526036608081815290620030ea60a03980516200002991600a91602090910190620001a2565b50604051806060016040528060358152602001620030b56035913980516200005a91600b91602090910190620001a2565b5062055730600e556010805460ff191690553480156200007957600080fd5b5060405162003120380380620031208339810160408190526200009c9162000248565b604080518082018252600e81526d74696e79206372696d696e616c7360901b602080830191825283518085019094526002845261746360f01b908401528151919291620000ec91600091620001a2565b50805162000102906001906020840190620001a2565b5050506200011f620001196200014c60201b60201c565b62000150565b600780546001600160a01b0319166001600160a01b039490941693909317909255600c55600d55620002c9565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001b0906200028d565b90600052602060002090601f016020900481019282620001d457600085556200021f565b82601f10620001ef57805160ff19168380011785556200021f565b828001600101855582156200021f579182015b828111156200021f57825182559160200191906001019062000202565b506200022d92915062000231565b5090565b5b808211156200022d576000815560010162000232565b6000806000606084860312156200025e57600080fd5b83516001600160a01b03811681146200027657600080fd5b602085015160409095015190969495509392505050565b600181811c90821680620002a257607f821691505b602082108103620002c357634e487b7160e01b600052602260045260246000fd5b50919050565b612ddc80620002d96000396000f3fe6080604052600436106102195760003560e01c80637533d78811610123578063c6682862116100ab578063e8a3d4851161006f578063e8a3d48514610660578063e985e9c514610675578063eb8d72b7146106be578063f2fde38b146106de578063f43a22dc146106fe57600080fd5b8063c6682862146105c9578063c7afa661146105fa578063c87b56dd1461061a578063cf89fa031461063a578063d1deba1f1461064d57600080fd5b8063943fb872116100f2578063943fb8721461054157806395d89b4114610561578063a0712d6814610576578063a22cb46514610589578063b88d4fde146105a957600080fd5b80637533d788146104785780638da5cb5b146104985780638ee74912146104b6578063938e3d7b1461052157600080fd5b806323b872dd116101a65780635c975abb116101755780635c975abb146103f45780636352211e1461040e5780636c0360eb1461042e57806370a0823114610443578063715018a61461046357600080fd5b806323b872dd1461037f5780633ccfd60b1461039f57806342842e0e146103b457806355f804b3146103d457600080fd5b8063081812fc116101ed578063081812fc146102b7578063095ea7b3146102ef5780630f2cdd6c1461030f5780631c37a822146103325780631e7269c51461035257600080fd5b80621d35671461021e57806301ffc9a71461024057806302329a291461027557806306fdde0314610295575b600080fd5b34801561022a57600080fd5b5061023e6102393660046123ac565b610713565b005b34801561024c57600080fd5b5061026061025b366004612446565b61090d565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061023e610290366004612473565b61095f565b3480156102a157600080fd5b506102aa61099c565b60405161026c91906124e6565b3480156102c357600080fd5b506102d76102d23660046124f9565b610a2e565b6040516001600160a01b03909116815260200161026c565b3480156102fb57600080fd5b5061023e61030a366004612527565b610ac3565b34801561031b57600080fd5b50610324601e81565b60405190815260200161026c565b34801561033e57600080fd5b5061023e61034d3660046123ac565b610bd8565b34801561035e57600080fd5b5061032461036d366004612553565b600f6020526000908152604090205481565b34801561038b57600080fd5b5061023e61039a366004612570565b610c47565b3480156103ab57600080fd5b5061023e610c78565b3480156103c057600080fd5b5061023e6103cf366004612570565b610d31565b3480156103e057600080fd5b5061023e6103ef3660046125b1565b610d4c565b34801561040057600080fd5b506010546102609060ff1681565b34801561041a57600080fd5b506102d76104293660046124f9565b610d89565b34801561043a57600080fd5b506102aa610e00565b34801561044f57600080fd5b5061032461045e366004612553565b610e8e565b34801561046f57600080fd5b5061023e610f15565b34801561048457600080fd5b506102aa6104933660046125f9565b610f4b565b3480156104a457600080fd5b506006546001600160a01b03166102d7565b3480156104c257600080fd5b5061050c6104d1366004612614565b600860209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b6040805192835260208301919091520161026c565b34801561052d57600080fd5b5061023e61053c3660046125b1565b610f64565b34801561054d57600080fd5b5061023e61055c3660046124f9565b610fa1565b34801561056d57600080fd5b506102aa610fd0565b61023e6105843660046124f9565b610fdf565b34801561059557600080fd5b5061023e6105a436600461266a565b6111cf565b3480156105b557600080fd5b5061023e6105c436600461269f565b6111da565b3480156105d557600080fd5b506102aa60405180604001604052806005815260200164173539b7b760d91b81525081565b34801561060657600080fd5b506103246106153660046126fe565b61120c565b34801561062657600080fd5b506102aa6106353660046124f9565b6112df565b61023e6106483660046126fe565b6113b9565b61023e61065b366004612762565b611696565b34801561066c57600080fd5b506102aa611823565b34801561068157600080fd5b506102606106903660046127ed565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106ca57600080fd5b5061023e6106d9366004612826565b611830565b3480156106ea57600080fd5b5061023e6106f9366004612553565b611878565b34801561070a57600080fd5b50610324600281565b6007546001600160a01b0316331461072a57600080fd5b61ffff84166000908152600960205260409020805461074890612878565b90508351148015610787575061ffff84166000908152600960205260409081902090516107759190612921565b60405180910390208380519060200120145b6107f55760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a8229061081e90879087908790879060040161292d565b600060405180830381600087803b15801561083857600080fd5b505af1925050508015610849575060015b610907576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff168152602001908152602001600020846040516108939190612976565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d906108fe90869086908690869061292d565b60405180910390a15b50505050565b60006001600160e01b031982166380ac58cd60e01b148061093e57506001600160e01b03198216635b5e139f60e01b145b8061095957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146109895760405162461bcd60e51b81526004016107ec90612992565b6010805460ff1916911515919091179055565b6060600080546109ab90612878565b80601f01602080910402602001604051908101604052809291908181526020018280546109d790612878565b8015610a245780601f106109f957610100808354040283529160200191610a24565b820191906000526020600020905b815481529060010190602001808311610a0757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610aa75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107ec565b506000908152600460205260409020546001600160a01b031690565b6000610ace82610d89565b9050806001600160a01b0316836001600160a01b031603610b3b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107ec565b336001600160a01b0382161480610b575750610b578133610690565b610bc95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107ec565b610bd38383611913565b505050565b333014610c3b5760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526a10313290213934b233b29760a91b60648201526084016107ec565b61090784848484611981565b610c5133826119ae565b610c6d5760405162461bcd60e51b81526004016107ec906129c7565b610bd3838383611aa5565b6006546001600160a01b03163314610ca25760405162461bcd60e51b81526004016107ec90612992565b6040514790600090339083908381818185875af1925050503d8060008114610ce6576040519150601f19603f3d011682016040523d82523d6000602084013e610ceb565b606091505b5050905080610d2d5760405162461bcd60e51b815260206004820152600e60248201526d11985a5b1959081d1bc81cd95b9960921b60448201526064016107ec565b5050565b610bd3838383604051806020016040528060008152506111da565b6006546001600160a01b03163314610d765760405162461bcd60e51b81526004016107ec90612992565b8051610d2d90600a9060208401906121bf565b6000818152600260205260408120546001600160a01b0316806109595760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107ec565b600a8054610e0d90612878565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3990612878565b8015610e865780601f10610e5b57610100808354040283529160200191610e86565b820191906000526020600020905b815481529060010190602001808311610e6957829003601f168201915b505050505081565b60006001600160a01b038216610ef95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107ec565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610f3f5760405162461bcd60e51b81526004016107ec90612992565b610f496000611c41565b565b60096020526000908152604090208054610e0d90612878565b6006546001600160a01b03163314610f8e5760405162461bcd60e51b81526004016107ec90612992565b8051610d2d90600b9060208401906121bf565b6006546001600160a01b03163314610fcb5760405162461bcd60e51b81526004016107ec90612992565b600e55565b6060600180546109ab90612878565b601054339060ff161561102c5760405162461bcd60e51b81526020600482015260156024820152741d1a5b9e58dc9a5b5a5b985b1cce8814185d5cd959605a1b60448201526064016107ec565b600d5482600c5461103d9190612a2e565b11156110965760405162461bcd60e51b815260206004820152602260248201527f74696e796372696d696e616c733a204d696e74206578636565647320737570706044820152616c7960f01b60648201526084016107ec565b81600210156110e75760405162461bcd60e51b815260206004820181905260248201527f74696e796372696d696e616c733a20457863657373206d61782070657220747860448201526064016107ec565b6001600160a01b0381166000908152600f602052604090205461110b908390612a2e565b601e10156111675760405162461bcd60e51b8152602060048201526024808201527f74696e796372696d696e616c733a20457863657373206d6178207065722077616044820152631b1b195d60e21b60648201526084016107ec565b6001600160a01b0381166000908152600f60205260408120805484929061118f908490612a2e565b90915550600090505b82811015610bd3576111bd82600c600081546111b390612a46565b9182905550611c93565b806111c781612a46565b915050611198565b610d2d338383611cad565b6111e433836119ae565b6112005760405162461bcd60e51b81526004016107ec906129c7565b61090784848484611d7b565b60408051336020820152808201839052815180820383018152606082018352600e54600160f01b60808401526082808401919091528351808403909101815260a283019384905260075463040a7bb160e41b909452600093919260019285916001600160a01b03909116906340a7bb1090611293908a90309089908790899060a601612a5f565b6040805180830381865afa1580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d39190612ab3565b50979650505050505050565b6000818152600260205260409020546060906001600160a01b031661133e5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016107ec565b6000600a805461134d90612878565b9050116113695760405180602001604052806000815250610959565b600a61137483611dae565b60405180604001604052806005815260200164173539b7b760d91b8152506040516020016113a493929190612ad7565b60405160208183030381529060405292915050565b6113c281610d89565b6001600160a01b0316336001600160a01b03161461142d5760405162461bcd60e51b815260206004820152602260248201527f596f75206d757374206f776e2074686520746f6b656e20746f20747261766572604482015261736560f01b60648201526084016107ec565b61ffff82166000908152600960205260408120805461144b90612878565b9050116114b15760405162461bcd60e51b815260206004820152602e60248201527f5468697320636861696e2069732063757272656e746c7920756e617661696c6160448201526d189b1948199bdc881d1c985d995b60921b60648201526084016107ec565b6114ba81611eae565b60408051336020820152808201839052815180820383018152606082018352600e54600160f01b60808401526082808401919091528351808403909101815260a283019384905260075463040a7bb160e41b90945290926001926000916001600160a01b0316906340a7bb109061153d908990309089908790899060a601612a5f565b6040805180830381865afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190612ab3565b509050803410156116115760405162461bcd60e51b815260206004820152605260248201527f74696e796372696d696e616c733a206d73672e76616c7565206e6f7420656e6f60448201527f75676820746f20636f766572206d6573736167654665652e2053656e642067616064820152717320666f72206d657373616765206665657360701b608482015260a4016107ec565b60075461ffff8716600090815260096020526040808220905162c5803160e81b81526001600160a01b039093169263c580310092349261165c928c928b913391908b90600401612b10565b6000604051808303818588803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b5050505050505050505050565b61ffff851660009081526008602052604080822090516116b7908790612976565b90815260408051602092819003830190206001600160401b038716600090815292529020600181015490915061173e5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b60648201526084016107ec565b80548214801561176857508060010154838360405161175e929190612bf0565b6040518091039020145b6117b45760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f616400000000000060448201526064016107ec565b60008082556001820155604051630e1bd41160e11b81523090631c37a822906117e99089908990899089908990600401612c00565b600060405180830381600087803b15801561180357600080fd5b505af1158015611817573d6000803e3d6000fd5b50505050505050505050565b600b8054610e0d90612878565b6006546001600160a01b0316331461185a5760405162461bcd60e51b81526004016107ec90612992565b61ffff83166000908152600960205260409020610907908383612243565b6006546001600160a01b031633146118a25760405162461bcd60e51b81526004016107ec90612992565b6001600160a01b0381166119075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ec565b61191081611c41565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061194882610d89565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080828060200190518101906119989190612c61565b915091506119a68282611c93565b505050505050565b6000818152600260205260408120546001600160a01b0316611a275760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107ec565b6000611a3283610d89565b9050806001600160a01b0316846001600160a01b03161480611a6d5750836001600160a01b0316611a6284610a2e565b6001600160a01b0316145b80611a9d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611ab882610d89565b6001600160a01b031614611b1c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016107ec565b6001600160a01b038216611b7e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107ec565b611b89600082611913565b6001600160a01b0383166000908152600360205260408120805460019290611bb2908490612c8f565b90915550506001600160a01b0382166000908152600360205260408120805460019290611be0908490612a2e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d2d828260405180602001604052806000815250611f49565b816001600160a01b0316836001600160a01b031603611d0e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107ec565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d86848484611aa5565b611d9284848484611f7c565b6109075760405162461bcd60e51b81526004016107ec90612ca6565b606081600003611dd55750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611dff5780611de981612a46565b9150611df89050600a83612d0e565b9150611dd9565b6000816001600160401b03811115611e1957611e196122e3565b6040519080825280601f01601f191660200182016040528015611e43576020820181803683370190505b5090505b8415611a9d57611e58600183612c8f565b9150611e65600a86612d22565b611e70906030612a2e565b60f81b818381518110611e8557611e85612d36565b60200101906001600160f81b031916908160001a905350611ea7600a86612d0e565b9450611e47565b6000611eb982610d89565b9050611ec6600083611913565b6001600160a01b0381166000908152600360205260408120805460019290611eef908490612c8f565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611f53838361207d565b611f606000848484611f7c565b610bd35760405162461bcd60e51b81526004016107ec90612ca6565b60006001600160a01b0384163b1561207257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611fc0903390899088908890600401612d4c565b6020604051808303816000875af1925050508015611ffb575060408051601f3d908101601f19168201909252611ff891810190612d89565b60015b612058573d808015612029576040519150601f19603f3d011682016040523d82523d6000602084013e61202e565b606091505b5080516000036120505760405162461bcd60e51b81526004016107ec90612ca6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a9d565b506001949350505050565b6001600160a01b0382166120d35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107ec565b6000818152600260205260409020546001600160a01b0316156121385760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107ec565b6001600160a01b0382166000908152600360205260408120805460019290612161908490612a2e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546121cb90612878565b90600052602060002090601f0160209004810192826121ed5760008555612233565b82601f1061220657805160ff1916838001178555612233565b82800160010185558215612233579182015b82811115612233578251825591602001919060010190612218565b5061223f9291506122b7565b5090565b82805461224f90612878565b90600052602060002090601f0160209004810192826122715760008555612233565b82601f1061228a5782800160ff19823516178555612233565b82800160010185558215612233579182015b8281111561223357823582559160200191906001019061229c565b5b8082111561223f57600081556001016122b8565b803561ffff811681146122de57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612313576123136122e3565b604051601f8501601f19908116603f0116810190828211818310171561233b5761233b6122e3565b8160405280935085815286868601111561235457600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261237f57600080fd5b61238e838335602085016122f9565b9392505050565b80356001600160401b03811681146122de57600080fd5b600080600080608085870312156123c257600080fd5b6123cb856122cc565b935060208501356001600160401b03808211156123e757600080fd5b6123f38883890161236e565b945061240160408801612395565b9350606087013591508082111561241757600080fd5b506124248782880161236e565b91505092959194509250565b6001600160e01b03198116811461191057600080fd5b60006020828403121561245857600080fd5b813561238e81612430565b803580151581146122de57600080fd5b60006020828403121561248557600080fd5b61238e82612463565b60005b838110156124a9578181015183820152602001612491565b838111156109075750506000910152565b600081518084526124d281602086016020860161248e565b601f01601f19169290920160200192915050565b60208152600061238e60208301846124ba565b60006020828403121561250b57600080fd5b5035919050565b6001600160a01b038116811461191057600080fd5b6000806040838503121561253a57600080fd5b823561254581612512565b946020939093013593505050565b60006020828403121561256557600080fd5b813561238e81612512565b60008060006060848603121561258557600080fd5b833561259081612512565b925060208401356125a081612512565b929592945050506040919091013590565b6000602082840312156125c357600080fd5b81356001600160401b038111156125d957600080fd5b8201601f810184136125ea57600080fd5b611a9d848235602084016122f9565b60006020828403121561260b57600080fd5b61238e826122cc565b60008060006060848603121561262957600080fd5b612632846122cc565b925060208401356001600160401b0381111561264d57600080fd5b6126598682870161236e565b925050604084013590509250925092565b6000806040838503121561267d57600080fd5b823561268881612512565b915061269660208401612463565b90509250929050565b600080600080608085870312156126b557600080fd5b84356126c081612512565b935060208501356126d081612512565b92506040850135915060608501356001600160401b038111156126f257600080fd5b6124248782880161236e565b6000806040838503121561271157600080fd5b612545836122cc565b60008083601f84011261272c57600080fd5b5081356001600160401b0381111561274357600080fd5b60208301915083602082850101111561275b57600080fd5b9250929050565b60008060008060006080868803121561277a57600080fd5b612783866122cc565b945060208601356001600160401b038082111561279f57600080fd5b6127ab89838a0161236e565b95506127b960408901612395565b945060608801359150808211156127cf57600080fd5b506127dc8882890161271a565b969995985093965092949392505050565b6000806040838503121561280057600080fd5b823561280b81612512565b9150602083013561281b81612512565b809150509250929050565b60008060006040848603121561283b57600080fd5b612844846122cc565b925060208401356001600160401b0381111561285f57600080fd5b61286b8682870161271a565b9497909650939450505050565b600181811c9082168061288c57607f821691505b6020821081036128ac57634e487b7160e01b600052602260045260246000fd5b50919050565b600081546128bf81612878565b600182811680156128d757600181146128e857612917565b60ff19841687528287019450612917565b8560005260208060002060005b8581101561290e5781548a8201529084019082016128f5565b50505082870194505b5050505092915050565b600061238e82846128b2565b61ffff8516815260806020820152600061294a60808301866124ba565b6001600160401b0385166040840152828103606084015261296b81856124ba565b979650505050505050565b6000825161298881846020870161248e565b9190910192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612a4157612a41612a18565b500190565b600060018201612a5857612a58612a18565b5060010190565b61ffff861681526001600160a01b038516602082015260a060408201819052600090612a8d908301866124ba565b84151560608401528281036080840152612aa781856124ba565b98975050505050505050565b60008060408385031215612ac657600080fd5b505080516020909101519092909150565b6000612ae382866128b2565b8451612af381836020890161248e565b8451910190612b0681836020880161248e565b0195945050505050565b61ffff871681526000602060c08184015260008854612b2e81612878565b8060c087015260e0600180841660008114612b505760018114612b6557612b93565b60ff1985168984015261010089019550612b93565b8d6000528660002060005b85811015612b8b5781548b8201860152908301908801612b70565b8a0184019650505b50505050508381036040850152612baa81896124ba565b915050612bc260608401876001600160a01b03169052565b6001600160a01b038516608084015282810360a0840152612be381856124ba565b9998505050505050505050565b8183823760009101908152919050565b61ffff86168152608060208201526000612c1d60808301876124ba565b6001600160401b03861660408401528281036060840152838152838560208301376000602085830101526020601f19601f8601168201019150509695505050505050565b60008060408385031215612c7457600080fd5b8251612c7f81612512565b6020939093015192949293505050565b600082821015612ca157612ca1612a18565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612d1d57612d1d612cf8565b500490565b600082612d3157612d31612cf8565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612d7f908301846124ba565b9695505050505050565b600060208284031215612d9b57600080fd5b815161238e8161243056fea2646970667358221220a00f490b092e1604d175c22e53b6e10e43cf269985b9e727cd86edec80e90eef64736f6c634300080d0033697066733a2f2f516d535a31706a3345373454437344764a6e6656395a4273744d33764e4e573448456e7443516a78596f4d7a3365697066733a2f2f516d66514573643345794e784a354644636b374e36534757615663526a7a65346156444e3438487179776d73666d2f000000000000000000000000b6b3ae896be734153f7c62832741f567f42a02dc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e7

Deployed Bytecode

0x6080604052600436106102195760003560e01c80637533d78811610123578063c6682862116100ab578063e8a3d4851161006f578063e8a3d48514610660578063e985e9c514610675578063eb8d72b7146106be578063f2fde38b146106de578063f43a22dc146106fe57600080fd5b8063c6682862146105c9578063c7afa661146105fa578063c87b56dd1461061a578063cf89fa031461063a578063d1deba1f1461064d57600080fd5b8063943fb872116100f2578063943fb8721461054157806395d89b4114610561578063a0712d6814610576578063a22cb46514610589578063b88d4fde146105a957600080fd5b80637533d788146104785780638da5cb5b146104985780638ee74912146104b6578063938e3d7b1461052157600080fd5b806323b872dd116101a65780635c975abb116101755780635c975abb146103f45780636352211e1461040e5780636c0360eb1461042e57806370a0823114610443578063715018a61461046357600080fd5b806323b872dd1461037f5780633ccfd60b1461039f57806342842e0e146103b457806355f804b3146103d457600080fd5b8063081812fc116101ed578063081812fc146102b7578063095ea7b3146102ef5780630f2cdd6c1461030f5780631c37a822146103325780631e7269c51461035257600080fd5b80621d35671461021e57806301ffc9a71461024057806302329a291461027557806306fdde0314610295575b600080fd5b34801561022a57600080fd5b5061023e6102393660046123ac565b610713565b005b34801561024c57600080fd5b5061026061025b366004612446565b61090d565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061023e610290366004612473565b61095f565b3480156102a157600080fd5b506102aa61099c565b60405161026c91906124e6565b3480156102c357600080fd5b506102d76102d23660046124f9565b610a2e565b6040516001600160a01b03909116815260200161026c565b3480156102fb57600080fd5b5061023e61030a366004612527565b610ac3565b34801561031b57600080fd5b50610324601e81565b60405190815260200161026c565b34801561033e57600080fd5b5061023e61034d3660046123ac565b610bd8565b34801561035e57600080fd5b5061032461036d366004612553565b600f6020526000908152604090205481565b34801561038b57600080fd5b5061023e61039a366004612570565b610c47565b3480156103ab57600080fd5b5061023e610c78565b3480156103c057600080fd5b5061023e6103cf366004612570565b610d31565b3480156103e057600080fd5b5061023e6103ef3660046125b1565b610d4c565b34801561040057600080fd5b506010546102609060ff1681565b34801561041a57600080fd5b506102d76104293660046124f9565b610d89565b34801561043a57600080fd5b506102aa610e00565b34801561044f57600080fd5b5061032461045e366004612553565b610e8e565b34801561046f57600080fd5b5061023e610f15565b34801561048457600080fd5b506102aa6104933660046125f9565b610f4b565b3480156104a457600080fd5b506006546001600160a01b03166102d7565b3480156104c257600080fd5b5061050c6104d1366004612614565b600860209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b6040805192835260208301919091520161026c565b34801561052d57600080fd5b5061023e61053c3660046125b1565b610f64565b34801561054d57600080fd5b5061023e61055c3660046124f9565b610fa1565b34801561056d57600080fd5b506102aa610fd0565b61023e6105843660046124f9565b610fdf565b34801561059557600080fd5b5061023e6105a436600461266a565b6111cf565b3480156105b557600080fd5b5061023e6105c436600461269f565b6111da565b3480156105d557600080fd5b506102aa60405180604001604052806005815260200164173539b7b760d91b81525081565b34801561060657600080fd5b506103246106153660046126fe565b61120c565b34801561062657600080fd5b506102aa6106353660046124f9565b6112df565b61023e6106483660046126fe565b6113b9565b61023e61065b366004612762565b611696565b34801561066c57600080fd5b506102aa611823565b34801561068157600080fd5b506102606106903660046127ed565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106ca57600080fd5b5061023e6106d9366004612826565b611830565b3480156106ea57600080fd5b5061023e6106f9366004612553565b611878565b34801561070a57600080fd5b50610324600281565b6007546001600160a01b0316331461072a57600080fd5b61ffff84166000908152600960205260409020805461074890612878565b90508351148015610787575061ffff84166000908152600960205260409081902090516107759190612921565b60405180910390208380519060200120145b6107f55760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a8229061081e90879087908790879060040161292d565b600060405180830381600087803b15801561083857600080fd5b505af1925050508015610849575060015b610907576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff168152602001908152602001600020846040516108939190612976565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d906108fe90869086908690869061292d565b60405180910390a15b50505050565b60006001600160e01b031982166380ac58cd60e01b148061093e57506001600160e01b03198216635b5e139f60e01b145b8061095957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146109895760405162461bcd60e51b81526004016107ec90612992565b6010805460ff1916911515919091179055565b6060600080546109ab90612878565b80601f01602080910402602001604051908101604052809291908181526020018280546109d790612878565b8015610a245780601f106109f957610100808354040283529160200191610a24565b820191906000526020600020905b815481529060010190602001808311610a0757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610aa75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107ec565b506000908152600460205260409020546001600160a01b031690565b6000610ace82610d89565b9050806001600160a01b0316836001600160a01b031603610b3b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107ec565b336001600160a01b0382161480610b575750610b578133610690565b610bc95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107ec565b610bd38383611913565b505050565b333014610c3b5760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526a10313290213934b233b29760a91b60648201526084016107ec565b61090784848484611981565b610c5133826119ae565b610c6d5760405162461bcd60e51b81526004016107ec906129c7565b610bd3838383611aa5565b6006546001600160a01b03163314610ca25760405162461bcd60e51b81526004016107ec90612992565b6040514790600090339083908381818185875af1925050503d8060008114610ce6576040519150601f19603f3d011682016040523d82523d6000602084013e610ceb565b606091505b5050905080610d2d5760405162461bcd60e51b815260206004820152600e60248201526d11985a5b1959081d1bc81cd95b9960921b60448201526064016107ec565b5050565b610bd3838383604051806020016040528060008152506111da565b6006546001600160a01b03163314610d765760405162461bcd60e51b81526004016107ec90612992565b8051610d2d90600a9060208401906121bf565b6000818152600260205260408120546001600160a01b0316806109595760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107ec565b600a8054610e0d90612878565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3990612878565b8015610e865780601f10610e5b57610100808354040283529160200191610e86565b820191906000526020600020905b815481529060010190602001808311610e6957829003601f168201915b505050505081565b60006001600160a01b038216610ef95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107ec565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610f3f5760405162461bcd60e51b81526004016107ec90612992565b610f496000611c41565b565b60096020526000908152604090208054610e0d90612878565b6006546001600160a01b03163314610f8e5760405162461bcd60e51b81526004016107ec90612992565b8051610d2d90600b9060208401906121bf565b6006546001600160a01b03163314610fcb5760405162461bcd60e51b81526004016107ec90612992565b600e55565b6060600180546109ab90612878565b601054339060ff161561102c5760405162461bcd60e51b81526020600482015260156024820152741d1a5b9e58dc9a5b5a5b985b1cce8814185d5cd959605a1b60448201526064016107ec565b600d5482600c5461103d9190612a2e565b11156110965760405162461bcd60e51b815260206004820152602260248201527f74696e796372696d696e616c733a204d696e74206578636565647320737570706044820152616c7960f01b60648201526084016107ec565b81600210156110e75760405162461bcd60e51b815260206004820181905260248201527f74696e796372696d696e616c733a20457863657373206d61782070657220747860448201526064016107ec565b6001600160a01b0381166000908152600f602052604090205461110b908390612a2e565b601e10156111675760405162461bcd60e51b8152602060048201526024808201527f74696e796372696d696e616c733a20457863657373206d6178207065722077616044820152631b1b195d60e21b60648201526084016107ec565b6001600160a01b0381166000908152600f60205260408120805484929061118f908490612a2e565b90915550600090505b82811015610bd3576111bd82600c600081546111b390612a46565b9182905550611c93565b806111c781612a46565b915050611198565b610d2d338383611cad565b6111e433836119ae565b6112005760405162461bcd60e51b81526004016107ec906129c7565b61090784848484611d7b565b60408051336020820152808201839052815180820383018152606082018352600e54600160f01b60808401526082808401919091528351808403909101815260a283019384905260075463040a7bb160e41b909452600093919260019285916001600160a01b03909116906340a7bb1090611293908a90309089908790899060a601612a5f565b6040805180830381865afa1580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d39190612ab3565b50979650505050505050565b6000818152600260205260409020546060906001600160a01b031661133e5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016107ec565b6000600a805461134d90612878565b9050116113695760405180602001604052806000815250610959565b600a61137483611dae565b60405180604001604052806005815260200164173539b7b760d91b8152506040516020016113a493929190612ad7565b60405160208183030381529060405292915050565b6113c281610d89565b6001600160a01b0316336001600160a01b03161461142d5760405162461bcd60e51b815260206004820152602260248201527f596f75206d757374206f776e2074686520746f6b656e20746f20747261766572604482015261736560f01b60648201526084016107ec565b61ffff82166000908152600960205260408120805461144b90612878565b9050116114b15760405162461bcd60e51b815260206004820152602e60248201527f5468697320636861696e2069732063757272656e746c7920756e617661696c6160448201526d189b1948199bdc881d1c985d995b60921b60648201526084016107ec565b6114ba81611eae565b60408051336020820152808201839052815180820383018152606082018352600e54600160f01b60808401526082808401919091528351808403909101815260a283019384905260075463040a7bb160e41b90945290926001926000916001600160a01b0316906340a7bb109061153d908990309089908790899060a601612a5f565b6040805180830381865afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190612ab3565b509050803410156116115760405162461bcd60e51b815260206004820152605260248201527f74696e796372696d696e616c733a206d73672e76616c7565206e6f7420656e6f60448201527f75676820746f20636f766572206d6573736167654665652e2053656e642067616064820152717320666f72206d657373616765206665657360701b608482015260a4016107ec565b60075461ffff8716600090815260096020526040808220905162c5803160e81b81526001600160a01b039093169263c580310092349261165c928c928b913391908b90600401612b10565b6000604051808303818588803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b5050505050505050505050565b61ffff851660009081526008602052604080822090516116b7908790612976565b90815260408051602092819003830190206001600160401b038716600090815292529020600181015490915061173e5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b60648201526084016107ec565b80548214801561176857508060010154838360405161175e929190612bf0565b6040518091039020145b6117b45760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f616400000000000060448201526064016107ec565b60008082556001820155604051630e1bd41160e11b81523090631c37a822906117e99089908990899089908990600401612c00565b600060405180830381600087803b15801561180357600080fd5b505af1158015611817573d6000803e3d6000fd5b50505050505050505050565b600b8054610e0d90612878565b6006546001600160a01b0316331461185a5760405162461bcd60e51b81526004016107ec90612992565b61ffff83166000908152600960205260409020610907908383612243565b6006546001600160a01b031633146118a25760405162461bcd60e51b81526004016107ec90612992565b6001600160a01b0381166119075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ec565b61191081611c41565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061194882610d89565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080828060200190518101906119989190612c61565b915091506119a68282611c93565b505050505050565b6000818152600260205260408120546001600160a01b0316611a275760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107ec565b6000611a3283610d89565b9050806001600160a01b0316846001600160a01b03161480611a6d5750836001600160a01b0316611a6284610a2e565b6001600160a01b0316145b80611a9d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611ab882610d89565b6001600160a01b031614611b1c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016107ec565b6001600160a01b038216611b7e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107ec565b611b89600082611913565b6001600160a01b0383166000908152600360205260408120805460019290611bb2908490612c8f565b90915550506001600160a01b0382166000908152600360205260408120805460019290611be0908490612a2e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d2d828260405180602001604052806000815250611f49565b816001600160a01b0316836001600160a01b031603611d0e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107ec565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d86848484611aa5565b611d9284848484611f7c565b6109075760405162461bcd60e51b81526004016107ec90612ca6565b606081600003611dd55750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611dff5780611de981612a46565b9150611df89050600a83612d0e565b9150611dd9565b6000816001600160401b03811115611e1957611e196122e3565b6040519080825280601f01601f191660200182016040528015611e43576020820181803683370190505b5090505b8415611a9d57611e58600183612c8f565b9150611e65600a86612d22565b611e70906030612a2e565b60f81b818381518110611e8557611e85612d36565b60200101906001600160f81b031916908160001a905350611ea7600a86612d0e565b9450611e47565b6000611eb982610d89565b9050611ec6600083611913565b6001600160a01b0381166000908152600360205260408120805460019290611eef908490612c8f565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611f53838361207d565b611f606000848484611f7c565b610bd35760405162461bcd60e51b81526004016107ec90612ca6565b60006001600160a01b0384163b1561207257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611fc0903390899088908890600401612d4c565b6020604051808303816000875af1925050508015611ffb575060408051601f3d908101601f19168201909252611ff891810190612d89565b60015b612058573d808015612029576040519150601f19603f3d011682016040523d82523d6000602084013e61202e565b606091505b5080516000036120505760405162461bcd60e51b81526004016107ec90612ca6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a9d565b506001949350505050565b6001600160a01b0382166120d35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107ec565b6000818152600260205260409020546001600160a01b0316156121385760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107ec565b6001600160a01b0382166000908152600360205260408120805460019290612161908490612a2e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546121cb90612878565b90600052602060002090601f0160209004810192826121ed5760008555612233565b82601f1061220657805160ff1916838001178555612233565b82800160010185558215612233579182015b82811115612233578251825591602001919060010190612218565b5061223f9291506122b7565b5090565b82805461224f90612878565b90600052602060002090601f0160209004810192826122715760008555612233565b82601f1061228a5782800160ff19823516178555612233565b82800160010185558215612233579182015b8281111561223357823582559160200191906001019061229c565b5b8082111561223f57600081556001016122b8565b803561ffff811681146122de57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612313576123136122e3565b604051601f8501601f19908116603f0116810190828211818310171561233b5761233b6122e3565b8160405280935085815286868601111561235457600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261237f57600080fd5b61238e838335602085016122f9565b9392505050565b80356001600160401b03811681146122de57600080fd5b600080600080608085870312156123c257600080fd5b6123cb856122cc565b935060208501356001600160401b03808211156123e757600080fd5b6123f38883890161236e565b945061240160408801612395565b9350606087013591508082111561241757600080fd5b506124248782880161236e565b91505092959194509250565b6001600160e01b03198116811461191057600080fd5b60006020828403121561245857600080fd5b813561238e81612430565b803580151581146122de57600080fd5b60006020828403121561248557600080fd5b61238e82612463565b60005b838110156124a9578181015183820152602001612491565b838111156109075750506000910152565b600081518084526124d281602086016020860161248e565b601f01601f19169290920160200192915050565b60208152600061238e60208301846124ba565b60006020828403121561250b57600080fd5b5035919050565b6001600160a01b038116811461191057600080fd5b6000806040838503121561253a57600080fd5b823561254581612512565b946020939093013593505050565b60006020828403121561256557600080fd5b813561238e81612512565b60008060006060848603121561258557600080fd5b833561259081612512565b925060208401356125a081612512565b929592945050506040919091013590565b6000602082840312156125c357600080fd5b81356001600160401b038111156125d957600080fd5b8201601f810184136125ea57600080fd5b611a9d848235602084016122f9565b60006020828403121561260b57600080fd5b61238e826122cc565b60008060006060848603121561262957600080fd5b612632846122cc565b925060208401356001600160401b0381111561264d57600080fd5b6126598682870161236e565b925050604084013590509250925092565b6000806040838503121561267d57600080fd5b823561268881612512565b915061269660208401612463565b90509250929050565b600080600080608085870312156126b557600080fd5b84356126c081612512565b935060208501356126d081612512565b92506040850135915060608501356001600160401b038111156126f257600080fd5b6124248782880161236e565b6000806040838503121561271157600080fd5b612545836122cc565b60008083601f84011261272c57600080fd5b5081356001600160401b0381111561274357600080fd5b60208301915083602082850101111561275b57600080fd5b9250929050565b60008060008060006080868803121561277a57600080fd5b612783866122cc565b945060208601356001600160401b038082111561279f57600080fd5b6127ab89838a0161236e565b95506127b960408901612395565b945060608801359150808211156127cf57600080fd5b506127dc8882890161271a565b969995985093965092949392505050565b6000806040838503121561280057600080fd5b823561280b81612512565b9150602083013561281b81612512565b809150509250929050565b60008060006040848603121561283b57600080fd5b612844846122cc565b925060208401356001600160401b0381111561285f57600080fd5b61286b8682870161271a565b9497909650939450505050565b600181811c9082168061288c57607f821691505b6020821081036128ac57634e487b7160e01b600052602260045260246000fd5b50919050565b600081546128bf81612878565b600182811680156128d757600181146128e857612917565b60ff19841687528287019450612917565b8560005260208060002060005b8581101561290e5781548a8201529084019082016128f5565b50505082870194505b5050505092915050565b600061238e82846128b2565b61ffff8516815260806020820152600061294a60808301866124ba565b6001600160401b0385166040840152828103606084015261296b81856124ba565b979650505050505050565b6000825161298881846020870161248e565b9190910192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612a4157612a41612a18565b500190565b600060018201612a5857612a58612a18565b5060010190565b61ffff861681526001600160a01b038516602082015260a060408201819052600090612a8d908301866124ba565b84151560608401528281036080840152612aa781856124ba565b98975050505050505050565b60008060408385031215612ac657600080fd5b505080516020909101519092909150565b6000612ae382866128b2565b8451612af381836020890161248e565b8451910190612b0681836020880161248e565b0195945050505050565b61ffff871681526000602060c08184015260008854612b2e81612878565b8060c087015260e0600180841660008114612b505760018114612b6557612b93565b60ff1985168984015261010089019550612b93565b8d6000528660002060005b85811015612b8b5781548b8201860152908301908801612b70565b8a0184019650505b50505050508381036040850152612baa81896124ba565b915050612bc260608401876001600160a01b03169052565b6001600160a01b038516608084015282810360a0840152612be381856124ba565b9998505050505050505050565b8183823760009101908152919050565b61ffff86168152608060208201526000612c1d60808301876124ba565b6001600160401b03861660408401528281036060840152838152838560208301376000602085830101526020601f19601f8601168201019150509695505050505050565b60008060408385031215612c7457600080fd5b8251612c7f81612512565b6020939093015192949293505050565b600082821015612ca157612ca1612a18565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612d1d57612d1d612cf8565b500490565b600082612d3157612d31612cf8565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612d7f908301846124ba565b9695505050505050565b600060208284031215612d9b57600080fd5b815161238e8161243056fea2646970667358221220a00f490b092e1604d175c22e53b6e10e43cf269985b9e727cd86edec80e90eef64736f6c634300080d0033

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

000000000000000000000000b6b3ae896be734153f7c62832741f567f42a02dc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e7

-----Decoded View---------------
Arg [0] : _endpoint (address): 0xb6B3ae896be734153F7c62832741F567F42a02dC
Arg [1] : startId (uint256): 0
Arg [2] : _max (uint256): 999

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b6b3ae896be734153f7c62832741f567f42a02dc
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 00000000000000000000000000000000000000000000000000000000000003e7


Deployed Bytecode Sourcemap

48441:5289:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13994:948;;;;;;;;;;-1:-1:-1;13994:948:0;;;;;:::i;:::-;;:::i;:::-;;35273:305;;;;;;;;;;-1:-1:-1;35273:305:0;;;;;:::i;:::-;;:::i;:::-;;;2587:14:1;;2580:22;2562:41;;2550:2;2535:18;35273:305:0;;;;;;;;52132:81;;;;;;;;;;-1:-1:-1;52132:81:0;;;;;:::i;:::-;;:::i;36218:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;37777:221::-;;;;;;;;;;-1:-1:-1;37777:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4173:32:1;;;4155:51;;4143:2;4128:18;37777:221:0;4009:203:1;37300:411:0;;;;;;;;;;-1:-1:-1;37300:411:0;;;;;:::i;:::-;;:::i;48884:43::-;;;;;;;;;;;;48925:2;48884:43;;;;;4819:25:1;;;4807:2;4792:18;48884:43:0;4673:177:1;14950:356:0;;;;;;;;;;-1:-1:-1;14950:356:0;;;;;:::i;:::-;;:::i;48934:41::-;;;;;;;;;;-1:-1:-1;48934:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;38527:339;;;;;;;;;;-1:-1:-1;38527:339:0;;;;;:::i;:::-;;:::i;53001:209::-;;;;;;;;;;;;;:::i;38937:185::-;;;;;;;;;;-1:-1:-1;38937:185:0;;;;;:::i;:::-;;:::i;52221:100::-;;;;;;;;;;-1:-1:-1;52221:100:0;;;;;:::i;:::-;;:::i;48984:26::-;;;;;;;;;;-1:-1:-1;48984:26:0;;;;;;;;35912:239;;;;;;;;;;-1:-1:-1;35912:239:0;;;;;:::i;:::-;;:::i;48504:80::-;;;;;;;;;;;;;:::i;35642:208::-;;;;;;;;;;-1:-1:-1;35642:208:0;;;;;:::i;:::-;;:::i;12630:103::-;;;;;;;;;;;;;:::i;13836:51::-;;;;;;;;;;-1:-1:-1;13836:51:0;;;;;:::i;:::-;;:::i;11979:87::-;;;;;;;;;;-1:-1:-1;12052:6:0;;-1:-1:-1;;;;;12052:6:0;11979:87;;13739:90;;;;;;;;;;-1:-1:-1;13739:90:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7074:25:1;;;7130:2;7115:18;;7108:34;;;;7047:18;13739:90:0;6900:248:1;52329:116:0;;;;;;;;;;-1:-1:-1;52329:116:0;;;;;:::i;:::-;;:::i;52823:170::-;;;;;;;;;;-1:-1:-1;52823:170:0;;;;;:::i;:::-;;:::i;36387:104::-;;;;;;;;;;;;;:::i;49271:567::-;;;;;;:::i;:::-;;:::i;38070:155::-;;;;;;;;;;-1:-1:-1;38070:155:0;;;;;:::i;:::-;;:::i;39193:328::-;;;;;;;;;;-1:-1:-1;39193:328:0;;;;;:::i;:::-;;:::i;48681:46::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;48681:46:0;;;;;51688:436;;;;;;;;;;-1:-1:-1;51688:436:0;;;;;:::i;:::-;;:::i;52453:362::-;;;;;;;;;;-1:-1:-1;52453:362:0;;;;;:::i;:::-;;:::i;49977:1703::-;;;;;;:::i;:::-;;:::i;15782:758::-;;;;;;:::i;:::-;;:::i;48591:83::-;;;;;;;;;;;;;:::i;38296:164::-;;;;;;;;;;-1:-1:-1;38296:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;38417:25:0;;;38393:4;38417:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;38296:164;16548:158;;;;;;;;;;-1:-1:-1;16548:158:0;;;;;:::i;:::-;;:::i;12888:201::-;;;;;;;;;;-1:-1:-1;12888:201:0;;;;;:::i;:::-;;:::i;48839:38::-;;;;;;;;;;;;48876:1;48839:38;;13994:948;14156:8;;-1:-1:-1;;;;;14156:8:0;14134:10;:31;14126:40;;;;;;14277:32;;;;;;;:19;:32;;;;;:39;;;;;:::i;:::-;;;14255:11;:18;:61;:134;;;;-1:-1:-1;14356:32:0;;;;;;;:19;:32;;;;;;;14346:43;;;;14356:32;14346:43;:::i;:::-;;;;;;;;14330:11;14320:22;;;;;;:69;14255:134;14247:212;;;;-1:-1:-1;;;14247:212:0;;11892:2:1;14247:212:0;;;11874:21:1;11931:2;11911:18;;;11904:30;11970:34;11950:18;;;11943:62;-1:-1:-1;;;12021:18:1;;;12014:50;12081:19;;14247:212:0;;;;;;;;;14587:60;;-1:-1:-1;;;14587:60:0;;:4;;:16;;:60;;14604:11;;14617;;14630:6;;14638:8;;14587:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14583:352;;14794:52;;;;;;;;14809:8;:15;14794:52;;;;14836:8;14826:19;;;;;;14794:52;;;14743:14;:27;14758:11;14743:27;;;;;;;;;;;;;;;14771:11;14743:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14743:48:0;;;;;;;;;;;;;:103;;;;;;;;;;;;;;;14866:57;;;;14880:11;;14893;;14784:6;;14914:8;;14866:57;:::i;:::-;;;;;;;;14583:352;13994:948;;;;:::o;35273:305::-;35375:4;-1:-1:-1;;;;;;35412:40:0;;-1:-1:-1;;;35412:40:0;;:105;;-1:-1:-1;;;;;;;35469:48:0;;-1:-1:-1;;;35469:48:0;35412:105;:158;;;-1:-1:-1;;;;;;;;;;28136:40:0;;;35534:36;35392:178;35273:305;-1:-1:-1;;35273:305:0:o;52132:81::-;12052:6;;-1:-1:-1;;;;;12052:6:0;10783:10;12199:23;12191:68;;;;-1:-1:-1;;;12191:68:0;;;;;;;:::i;:::-;52190:6:::1;:15:::0;;-1:-1:-1;;52190:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52132:81::o;36218:100::-;36272:13;36305:5;36298:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36218:100;:::o;37777:221::-;37853:7;41120:16;;;:7;:16;;;;;;-1:-1:-1;;;;;41120:16:0;37873:73;;;;-1:-1:-1;;;37873:73:0;;13515:2:1;37873:73:0;;;13497:21:1;13554:2;13534:18;;;13527:30;13593:34;13573:18;;;13566:62;-1:-1:-1;;;13644:18:1;;;13637:42;13696:19;;37873:73:0;13313:408:1;37873:73:0;-1:-1:-1;37966:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;37966:24:0;;37777:221::o;37300:411::-;37381:13;37397:23;37412:7;37397:14;:23::i;:::-;37381:39;;37445:5;-1:-1:-1;;;;;37439:11:0;:2;-1:-1:-1;;;;;37439:11:0;;37431:57;;;;-1:-1:-1;;;37431:57:0;;13928:2:1;37431:57:0;;;13910:21:1;13967:2;13947:18;;;13940:30;14006:34;13986:18;;;13979:62;-1:-1:-1;;;14057:18:1;;;14050:31;14098:19;;37431:57:0;13726:397:1;37431:57:0;10783:10;-1:-1:-1;;;;;37523:21:0;;;;:62;;-1:-1:-1;37548:37:0;37565:5;10783:10;38296:164;:::i;37548:37::-;37501:168;;;;-1:-1:-1;;;37501:168:0;;14330:2:1;37501:168:0;;;14312:21:1;14369:2;14349:18;;;14342:30;14408:34;14388:18;;;14381:62;14479:26;14459:18;;;14452:54;14523:19;;37501:168:0;14128:420:1;37501:168:0;37682:21;37691:2;37695:7;37682:8;:21::i;:::-;37370:341;37300:411;;:::o;14950:356::-;15119:10;15141:4;15119:27;15111:83;;;;-1:-1:-1;;;15111:83:0;;14755:2:1;15111:83:0;;;14737:21:1;14794:2;14774:18;;;14767:30;14833:34;14813:18;;;14806:62;-1:-1:-1;;;14884:18:1;;;14877:41;14935:19;;15111:83:0;14553:407:1;15111:83:0;15243:55;15255:11;15268;15281:6;15289:8;15243:10;:55::i;38527:339::-;38722:41;10783:10;38755:7;38722:18;:41::i;:::-;38714:103;;;;-1:-1:-1;;;38714:103:0;;;;;;;:::i;:::-;38830:28;38840:4;38846:2;38850:7;38830:9;:28::i;53001:209::-;12052:6;;-1:-1:-1;;;;;12052:6:0;10783:10;12199:23;12191:68;;;;-1:-1:-1;;;12191:68:0;;;;;;;:::i;:::-;53120:37:::1;::::0;53069:21:::1;::::0;53051:15:::1;::::0;10783:10;;53069:21;;53051:15;53120:37;53051:15;53120:37;53069:21;10783:10;53120:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53101:56;;;53176:7;53168:34;;;::::0;-1:-1:-1;;;53168:34:0;;15795:2:1;53168:34:0::1;::::0;::::1;15777:21:1::0;15834:2;15814:18;;;15807:30;-1:-1:-1;;;15853:18:1;;;15846:44;15907:18;;53168:34:0::1;15593:338:1::0;53168:34:0::1;53040:170;;53001:209::o:0;38937:185::-;39075:39;39092:4;39098:2;39102:7;39075:39;;;;;;;;;;;;:16;:39::i;52221:100::-;12052:6;;-1:-1:-1;;;;;12052:6:0;10783:10;12199:23;12191:68;;;;-1:-1:-1;;;12191:68:0;;;;;;;:::i;:::-;52295:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;35912:239::-:0;35984:7;36020:16;;;:7;:16;;;;;;-1:-1:-1;;;;;36020:16:0;;36047:73;;;;-1:-1:-1;;;36047:73:0;;16138:2:1;36047:73:0;;;16120:21:1;16177:2;16157:18;;;16150:30;16216:34;16196:18;;;16189:62;-1:-1:-1;;;16267:18:1;;;16260:39;16316:19;;36047:73:0;15936:405:1;48504:80:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35642:208::-;35714:7;-1:-1:-1;;;;;35742:19:0;;35734:74;;;;-1:-1:-1;;;35734:74:0;;16548:2:1;35734:74:0;;;16530:21:1;16587:2;16567:18;;;16560:30;16626:34;16606:18;;;16599:62;-1:-1:-1;;;16677:18:1;;;16670:40;16727:19;;35734:74:0;16346:406:1;35734:74:0;-1:-1:-1;;;;;;35826:16:0;;;;;:9;:16;;;;;;;35642:208::o;12630:103::-;12052:6;;-1:-1:-1;;;;;12052:6:0;10783:10;12199:23;12191:68;;;;-1:-1:-1;;;12191:68:0;;;;;;;:::i;:::-;12695:30:::1;12722:1;12695:18;:30::i;:::-;12630:103::o:0;13836:51::-;;;;;;;;;;;;;;;;:::i;52329:116::-;12052:6;;-1:-1:-1;;;;;12052:6:0;10783:10;12199:23;12191:68;;;;-1:-1:-1;;;12191:68:0;;;;;;;:::i;:::-;52411:26;;::::1;::::0;:11:::1;::::0;:26:::1;::::0;::::1;::::0;::::1;:::i;52823:170::-:0;12052:6;;-1:-1:-1;;;;;12052:6:0;10783:10;12199:23;12191:68;;;;-1:-1:-1;;;12191:68:0;;;;;;;:::i;:::-;52929:26:::1;:56:::0;52823:170::o;36387:104::-;36443:13;36476:7;36469:14;;;;;:::i;49271:567::-;49380:6;;10783:10;;49380:6;;49379:7;49371:41;;;;-1:-1:-1;;;49371:41:0;;16959:2:1;49371:41:0;;;16941:21:1;16998:2;16978:18;;;16971:30;-1:-1:-1;;;17017:18:1;;;17010:51;17078:18;;49371:41:0;16757:345:1;49371:41:0;49456:8;;49445:7;49431:11;;:21;;;;:::i;:::-;:33;;49423:80;;;;-1:-1:-1;;;49423:80:0;;17574:2:1;49423:80:0;;;17556:21:1;17613:2;17593:18;;;17586:30;17652:34;17632:18;;;17625:62;-1:-1:-1;;;17703:18:1;;;17696:32;17745:19;;49423:80:0;17372:398:1;49423:80:0;49536:7;48876:1;49522:21;;49514:67;;;;-1:-1:-1;;;49514:67:0;;17977:2:1;49514:67:0;;;17959:21:1;;;17996:18;;;17989:30;18055:34;18035:18;;;18028:62;18107:18;;49514:67:0;17775:356:1;49514:67:0;-1:-1:-1;;;;;49618:15:0;;;;;;:6;:15;;;;;;:25;;49636:7;;49618:25;:::i;:::-;48925:2;49600:43;;49592:92;;;;-1:-1:-1;;;49592:92:0;;18338:2:1;49592:92:0;;;18320:21:1;18377:2;18357:18;;;18350:30;18416:34;18396:18;;;18389:62;-1:-1:-1;;;18467:18:1;;;18460:34;18511:19;;49592:92:0;18136:400:1;49592:92:0;-1:-1:-1;;;;;49695:15:0;;;;;;:6;:15;;;;;:26;;49714:7;;49695:15;:26;;49714:7;;49695:26;:::i;:::-;;;;-1:-1:-1;49738:9:0;;-1:-1:-1;49734:97:0;49757:7;49753:1;:11;49734:97;;;49786:33;49796:7;49807:11;;49805:13;;;;;:::i;:::-;;;;;-1:-1:-1;49786:9:0;:33::i;:::-;49766:3;;;;:::i;:::-;;;;49734:97;;38070:155;38165:52;10783:10;38198:8;38208;38165:18;:52::i;39193:328::-;39368:41;10783:10;39401:7;39368:18;:41::i;:::-;39360:103;;;;-1:-1:-1;;;39360:103:0;;;;;;;:::i;:::-;39474:39;39488:4;39494:2;39498:7;39507:5;39474:13;:39::i;51688:436::-;51809:31;;;51820:10;51809:31;;;18855:51:1;18922:18;;;18915:34;;;51809:31:0;;;;;;;;;18828:18:1;;;51809:31:0;;51935:26;;-1:-1:-1;;;51909:53:0;;;19115:51:1;19182:11;;;;19175:27;;;;51909:53:0;;;;;;;;;;19218:12:1;;;51909:53:0;;;;52003:8;;-1:-1:-1;;;52003:77:0;;;-1:-1:-1;;51809:31:0;;51868:1;;-1:-1:-1;;;;;;;52003:8:0;;;;:21;;:77;;52025:8;;52043:4;;51809:31;;-1:-1:-1;;51909:53:0;;52003:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;51973:107:0;51688:436;-1:-1:-1;;;;;;;51688:436:0:o;52453:362::-;41096:4;41120:16;;;:7;:16;;;;;;52519:13;;-1:-1:-1;;;;;41120:16:0;52545:51;;;;-1:-1:-1;;;52545:51:0;;20340:2:1;52545:51:0;;;20322:21:1;20379:2;20359:18;;;20352:30;-1:-1:-1;;;20398:18:1;;;20391:51;20459:18;;52545:51:0;20138:345:1;52545:51:0;52638:1;52620:7;52614:21;;;;;:::i;:::-;;;:25;:193;;;;;;;;;;;;;;;;;52696:7;52720:26;52737:8;52720:16;:26::i;:::-;52763:13;;;;;;;;;;;;;-1:-1:-1;;;52763:13:0;;;52663:128;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52607:200;52453:362;-1:-1:-1;;52453:362:0:o;49977:1703::-;50097:16;50105:7;50097;:16::i;:::-;-1:-1:-1;;;;;50083:30:0;:10;-1:-1:-1;;;;;50083:30:0;;50061:114;;;;-1:-1:-1;;;50061:114:0;;21264:2:1;50061:114:0;;;21246:21:1;21303:2;21283:18;;;21276:30;21342:34;21322:18;;;21315:62;-1:-1:-1;;;21393:18:1;;;21386:32;21435:19;;50061:114:0;21062:398:1;50061:114:0;50208:29;;;50247:1;50208:29;;;:19;:29;;;;;:36;;;;;:::i;:::-;;;:40;50186:136;;;;-1:-1:-1;;;50186:136:0;;21667:2:1;50186:136:0;;;21649:21:1;21706:2;21686:18;;;21679:30;21745:34;21725:18;;;21718:62;-1:-1:-1;;;21796:18:1;;;21789:44;21850:19;;50186:136:0;21465:410:1;50186:136:0;50402:14;50408:7;50402:5;:14::i;:::-;50513:31;;;50524:10;50513:31;;;18855:51:1;18922:18;;;18915:34;;;50513:31:0;;;;;;;;;18828:18:1;;;50513:31:0;;50741:26;;-1:-1:-1;;;50688:90:0;;;19115:51:1;19182:11;;;;19175:27;;;;50688:90:0;;;;;;;;;;19218:12:1;;;50688:90:0;;;;50957:8;;-1:-1:-1;;;50957:153:0;;;50513:31;;50647:1;;-1:-1:-1;;;;;;;50957:8:0;;:21;;:153;;50993:8;;51024:4;;50513:31;;-1:-1:-1;;50688:90:0;;50957:153;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50932:178;;;51158:10;51145:9;:23;;51123:155;;;;-1:-1:-1;;;51123:155:0;;22082:2:1;51123:155:0;;;22064:21:1;22121:2;22101:18;;;22094:30;22160:34;22140:18;;;22133:62;22231:34;22211:18;;;22204:62;-1:-1:-1;;;22282:19:1;;;22275:49;22341:19;;51123:155:0;21880:486:1;51123:155:0;51291:8;;51383:29;;;51291:8;51383:29;;;:19;:29;;;;;;51291:381;;-1:-1:-1;;;51291:381:0;;-1:-1:-1;;;;;51291:8:0;;;;:13;;51312:9;;51291:381;;51337:8;;51466:7;;51522:10;;51291:8;51632:13;;51291:381;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50050:1630;;;;49977:1703;;:::o;15782:758::-;15998:27;;;15963:32;15998:27;;;:14;:27;;;;;;:40;;;;16026:11;;15998:40;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15998:48:0;;;;;;;;;;16065:21;;;;15998:48;;-1:-1:-1;16057:86:0;;;;-1:-1:-1;;;16057:86:0;;24062:2:1;16057:86:0;;;24044:21:1;24101:2;24081:18;;;24074:30;24140:34;24120:18;;;24113:62;-1:-1:-1;;;24191:18:1;;;24184:36;24237:19;;16057:86:0;23860:402:1;16057:86:0;16181:23;;16162:42;;:90;;;;;16231:9;:21;;;16218:8;;16208:19;;;;;;;:::i;:::-;;;;;;;;:44;16162:90;16154:129;;;;-1:-1:-1;;;16154:129:0;;24745:2:1;16154:129:0;;;24727:21:1;24784:2;24764:18;;;24757:30;24823:28;24803:18;;;24796:56;24869:18;;16154:129:0;24543:350:1;16154:129:0;16357:1;16331:27;;;16369:21;;;:34;16472:60;;-1:-1:-1;;;16472:60:0;;:4;;:16;;:60;;16489:11;;16502;;16515:6;;16523:8;;;;16472:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15907:633;15782:758;;;;;:::o;48591:83::-;;;;;;;:::i;16548:158::-;12052:6;;-1:-1:-1;;;;;12052:6:0;10783:10;12199:23;12191:68;;;;-1:-1:-1;;;12191:68:0;;;;;;;:::i;:::-;16652:29:::1;::::0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:46:::1;::::0;16684:14;;16652:46:::1;:::i;12888:201::-:0;12052:6;;-1:-1:-1;;;;;12052:6:0;10783:10;12199:23;12191:68;;;;-1:-1:-1;;;12191:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12977:22:0;::::1;12969:73;;;::::0;-1:-1:-1;;;12969:73:0;;25823:2:1;12969:73:0::1;::::0;::::1;25805:21:1::0;25862:2;25842:18;;;25835:30;25901:34;25881:18;;;25874:62;-1:-1:-1;;;25952:18:1;;;25945:36;25998:19;;12969:73:0::1;25621:402:1::0;12969:73:0::1;13053:28;13072:8;13053:18;:28::i;:::-;12888:201:::0;:::o;45177:174::-;45252:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;45252:29:0;-1:-1:-1;;;;;45252:29:0;;;;;;;;:24;;45306:23;45252:24;45306:14;:23::i;:::-;-1:-1:-1;;;;;45297:46:0;;;;;;;;;;;45177:174;;:::o;53301:424::-;53497:14;53513:15;53557:8;53532:77;;;;;;;;;;;;:::i;:::-;53496:113;;;;53691:26;53701:6;53709:7;53691:9;:26::i;:::-;53466:259;;53301:424;;;;:::o;41325:348::-;41418:4;41120:16;;;:7;:16;;;;;;-1:-1:-1;;;;;41120:16:0;41435:73;;;;-1:-1:-1;;;41435:73:0;;26555:2:1;41435:73:0;;;26537:21:1;26594:2;26574:18;;;26567:30;26633:34;26613:18;;;26606:62;-1:-1:-1;;;26684:18:1;;;26677:42;26736:19;;41435:73:0;26353:408:1;41435:73:0;41519:13;41535:23;41550:7;41535:14;:23::i;:::-;41519:39;;41588:5;-1:-1:-1;;;;;41577:16:0;:7;-1:-1:-1;;;;;41577:16:0;;:51;;;;41621:7;-1:-1:-1;;;;;41597:31:0;:20;41609:7;41597:11;:20::i;:::-;-1:-1:-1;;;;;41597:31:0;;41577:51;:87;;;-1:-1:-1;;;;;;38417:25:0;;;38393:4;38417:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;41632:32;41569:96;41325:348;-1:-1:-1;;;;41325:348:0:o;44434:625::-;44593:4;-1:-1:-1;;;;;44566:31:0;:23;44581:7;44566:14;:23::i;:::-;-1:-1:-1;;;;;44566:31:0;;44558:81;;;;-1:-1:-1;;;44558:81:0;;26968:2:1;44558:81:0;;;26950:21:1;27007:2;26987:18;;;26980:30;27046:34;27026:18;;;27019:62;-1:-1:-1;;;27097:18:1;;;27090:35;27142:19;;44558:81:0;26766:401:1;44558:81:0;-1:-1:-1;;;;;44658:16:0;;44650:65;;;;-1:-1:-1;;;44650:65:0;;27374:2:1;44650:65:0;;;27356:21:1;27413:2;27393:18;;;27386:30;27452:34;27432:18;;;27425:62;-1:-1:-1;;;27503:18:1;;;27496:34;27547:19;;44650:65:0;27172:400:1;44650:65:0;44832:29;44849:1;44853:7;44832:8;:29::i;:::-;-1:-1:-1;;;;;44874:15:0;;;;;;:9;:15;;;;;:20;;44893:1;;44874:15;:20;;44893:1;;44874:20;:::i;:::-;;;;-1:-1:-1;;;;;;;44905:13:0;;;;;;:9;:13;;;;;:18;;44922:1;;44905:13;:18;;44922:1;;44905:18;:::i;:::-;;;;-1:-1:-1;;44934:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;44934:21:0;-1:-1:-1;;;;;44934:21:0;;;;;;;;;44973:27;;44934:16;;44973:27;;;;;;;37370:341;37300:411;;:::o;13249:191::-;13342:6;;;-1:-1:-1;;;;;13359:17:0;;;-1:-1:-1;;;;;;13359:17:0;;;;;;;13392:40;;13342:6;;;13359:17;13342:6;;13392:40;;13323:16;;13392:40;13312:128;13249:191;:::o;42015:110::-;42091:26;42101:2;42105:7;42091:26;;;;;;;;;;;;:9;:26::i;45493:315::-;45648:8;-1:-1:-1;;;;;45639:17:0;:5;-1:-1:-1;;;;;45639:17:0;;45631:55;;;;-1:-1:-1;;;45631:55:0;;27909:2:1;45631:55:0;;;27891:21:1;27948:2;27928:18;;;27921:30;27987:27;27967:18;;;27960:55;28032:18;;45631:55:0;27707:349:1;45631:55:0;-1:-1:-1;;;;;45697:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;45697:46:0;;;;;;;;;;45759:41;;2562::1;;;45759::0;;2535:18:1;45759:41:0;;;;;;;45493:315;;;:::o;40403:::-;40560:28;40570:4;40576:2;40580:7;40560:9;:28::i;:::-;40607:48;40630:4;40636:2;40640:7;40649:5;40607:22;:48::i;:::-;40599:111;;;;-1:-1:-1;;;40599:111:0;;;;;;;:::i;8265:723::-;8321:13;8542:5;8551:1;8542:10;8538:53;;-1:-1:-1;;8569:10:0;;;;;;;;;;;;-1:-1:-1;;;8569:10:0;;;;;8265:723::o;8538:53::-;8616:5;8601:12;8657:78;8664:9;;8657:78;;8690:8;;;;:::i;:::-;;-1:-1:-1;8713:10:0;;-1:-1:-1;8721:2:0;8713:10;;:::i;:::-;;;8657:78;;;8745:19;8777:6;-1:-1:-1;;;;;8767:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8767:17:0;;8745:39;;8795:154;8802:10;;8795:154;;8829:11;8839:1;8829:11;;:::i;:::-;;-1:-1:-1;8898:10:0;8906:2;8898:5;:10;:::i;:::-;8885:24;;:2;:24;:::i;:::-;8872:39;;8855:6;8862;8855:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8855:56:0;;;;;;;;-1:-1:-1;8926:11:0;8935:2;8926:11;;:::i;:::-;;;8795:154;;43677:420;43737:13;43753:23;43768:7;43753:14;:23::i;:::-;43737:39;;43878:29;43895:1;43899:7;43878:8;:29::i;:::-;-1:-1:-1;;;;;43920:16:0;;;;;;:9;:16;;;;;:21;;43940:1;;43920:16;:21;;43940:1;;43920:21;:::i;:::-;;;;-1:-1:-1;;43959:16:0;;;;:7;:16;;;;;;43952:23;;-1:-1:-1;;;;;;43952:23:0;;;43993:36;43967:7;;43959:16;-1:-1:-1;;;;;43993:36:0;;;;;43959:16;;43993:36;53040:170:::1;;53001:209::o:0;42352:321::-;42482:18;42488:2;42492:7;42482:5;:18::i;:::-;42533:54;42564:1;42568:2;42572:7;42581:5;42533:22;:54::i;:::-;42511:154;;;;-1:-1:-1;;;42511:154:0;;;;;;;:::i;46373:799::-;46528:4;-1:-1:-1;;;;;46549:13:0;;18239:19;:23;46545:620;;46585:72;;-1:-1:-1;;;46585:72:0;;-1:-1:-1;;;;;46585:36:0;;;;;:72;;10783:10;;46636:4;;46642:7;;46651:5;;46585:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46585:72:0;;;;;;;;-1:-1:-1;;46585:72:0;;;;;;;;;;;;:::i;:::-;;;46581:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46827:6;:13;46844:1;46827:18;46823:272;;46870:60;;-1:-1:-1;;;46870:60:0;;;;;;;:::i;46823:272::-;47045:6;47039:13;47030:6;47026:2;47022:15;47015:38;46581:529;-1:-1:-1;;;;;;46708:51:0;-1:-1:-1;;;46708:51:0;;-1:-1:-1;46701:58:0;;46545:620;-1:-1:-1;47149:4:0;46373:799;;;;;;:::o;43009:439::-;-1:-1:-1;;;;;43089:16:0;;43081:61;;;;-1:-1:-1;;;43081:61:0;;29936:2:1;43081:61:0;;;29918:21:1;;;29955:18;;;29948:30;30014:34;29994:18;;;29987:62;30066:18;;43081:61:0;29734:356:1;43081:61:0;41096:4;41120:16;;;:7;:16;;;;;;-1:-1:-1;;;;;41120:16:0;:30;43153:58;;;;-1:-1:-1;;;43153:58:0;;30297:2:1;43153:58:0;;;30279:21:1;30336:2;30316:18;;;30309:30;30375;30355:18;;;30348:58;30423:18;;43153:58:0;30095:352:1;43153:58:0;-1:-1:-1;;;;;43282:13:0;;;;;;:9;:13;;;;;:18;;43299:1;;43282:13;:18;;43299:1;;43282:18;:::i;:::-;;;;-1:-1:-1;;43311:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;43311:21:0;-1:-1:-1;;;;;43311:21:0;;;;;;;;43350:33;;43311:16;;;43350:33;;43311:16;;43350:33;53040:170:::1;;53001:209::o:0;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:159:1;81:20;;141:6;130:18;;120:29;;110:57;;163:1;160;153:12;110:57;14:159;;;:::o;178:127::-;239:10;234:3;230:20;227:1;220:31;270:4;267:1;260:15;294:4;291:1;284:15;310:631;374:5;-1:-1:-1;;;;;445:2:1;437:6;434:14;431:40;;;451:18;;:::i;:::-;526:2;520:9;494:2;580:15;;-1:-1:-1;;576:24:1;;;602:2;572:33;568:42;556:55;;;626:18;;;646:22;;;623:46;620:72;;;672:18;;:::i;:::-;712:10;708:2;701:22;741:6;732:15;;771:6;763;756:22;811:3;802:6;797:3;793:16;790:25;787:45;;;828:1;825;818:12;787:45;878:6;873:3;866:4;858:6;854:17;841:44;933:1;926:4;917:6;909;905:19;901:30;894:41;;;;310:631;;;;;:::o;946:220::-;988:5;1041:3;1034:4;1026:6;1022:17;1018:27;1008:55;;1059:1;1056;1049:12;1008:55;1081:79;1156:3;1147:6;1134:20;1127:4;1119:6;1115:17;1081:79;:::i;:::-;1072:88;946:220;-1:-1:-1;;;946:220:1:o;1171:171::-;1238:20;;-1:-1:-1;;;;;1287:30:1;;1277:41;;1267:69;;1332:1;1329;1322:12;1347:684;1449:6;1457;1465;1473;1526:3;1514:9;1505:7;1501:23;1497:33;1494:53;;;1543:1;1540;1533:12;1494:53;1566:28;1584:9;1566:28;:::i;:::-;1556:38;;1645:2;1634:9;1630:18;1617:32;-1:-1:-1;;;;;1709:2:1;1701:6;1698:14;1695:34;;;1725:1;1722;1715:12;1695:34;1748:49;1789:7;1780:6;1769:9;1765:22;1748:49;:::i;:::-;1738:59;;1816:37;1849:2;1838:9;1834:18;1816:37;:::i;:::-;1806:47;;1906:2;1895:9;1891:18;1878:32;1862:48;;1935:2;1925:8;1922:16;1919:36;;;1951:1;1948;1941:12;1919:36;;1974:51;2017:7;2006:8;1995:9;1991:24;1974:51;:::i;:::-;1964:61;;;1347:684;;;;;;;:::o;2036:131::-;-1:-1:-1;;;;;;2110:32:1;;2100:43;;2090:71;;2157:1;2154;2147:12;2172:245;2230:6;2283:2;2271:9;2262:7;2258:23;2254:32;2251:52;;;2299:1;2296;2289:12;2251:52;2338:9;2325:23;2357:30;2381:5;2357:30;:::i;2614:160::-;2679:20;;2735:13;;2728:21;2718:32;;2708:60;;2764:1;2761;2754:12;2779:180;2835:6;2888:2;2876:9;2867:7;2863:23;2859:32;2856:52;;;2904:1;2901;2894:12;2856:52;2927:26;2943:9;2927:26;:::i;2964:258::-;3036:1;3046:113;3060:6;3057:1;3054:13;3046:113;;;3136:11;;;3130:18;3117:11;;;3110:39;3082:2;3075:10;3046:113;;;3177:6;3174:1;3171:13;3168:48;;;-1:-1:-1;;3212:1:1;3194:16;;3187:27;2964:258::o;3227:::-;3269:3;3307:5;3301:12;3334:6;3329:3;3322:19;3350:63;3406:6;3399:4;3394:3;3390:14;3383:4;3376:5;3372:16;3350:63;:::i;:::-;3467:2;3446:15;-1:-1:-1;;3442:29:1;3433:39;;;;3474:4;3429:50;;3227:258;-1:-1:-1;;3227:258:1:o;3490:220::-;3639:2;3628:9;3621:21;3602:4;3659:45;3700:2;3689:9;3685:18;3677:6;3659:45;:::i;3715:180::-;3774:6;3827:2;3815:9;3806:7;3802:23;3798:32;3795:52;;;3843:1;3840;3833:12;3795:52;-1:-1:-1;3866:23:1;;3715:180;-1:-1:-1;3715:180:1:o;4217:131::-;-1:-1:-1;;;;;4292:31:1;;4282:42;;4272:70;;4338:1;4335;4328:12;4353:315;4421:6;4429;4482:2;4470:9;4461:7;4457:23;4453:32;4450:52;;;4498:1;4495;4488:12;4450:52;4537:9;4524:23;4556:31;4581:5;4556:31;:::i;:::-;4606:5;4658:2;4643:18;;;;4630:32;;-1:-1:-1;;;4353:315:1:o;4855:247::-;4914:6;4967:2;4955:9;4946:7;4942:23;4938:32;4935:52;;;4983:1;4980;4973:12;4935:52;5022:9;5009:23;5041:31;5066:5;5041:31;:::i;5107:456::-;5184:6;5192;5200;5253:2;5241:9;5232:7;5228:23;5224:32;5221:52;;;5269:1;5266;5259:12;5221:52;5308:9;5295:23;5327:31;5352:5;5327:31;:::i;:::-;5377:5;-1:-1:-1;5434:2:1;5419:18;;5406:32;5447:33;5406:32;5447:33;:::i;:::-;5107:456;;5499:7;;-1:-1:-1;;;5553:2:1;5538:18;;;;5525:32;;5107:456::o;5568:450::-;5637:6;5690:2;5678:9;5669:7;5665:23;5661:32;5658:52;;;5706:1;5703;5696:12;5658:52;5746:9;5733:23;-1:-1:-1;;;;;5771:6:1;5768:30;5765:50;;;5811:1;5808;5801:12;5765:50;5834:22;;5887:4;5879:13;;5875:27;-1:-1:-1;5865:55:1;;5916:1;5913;5906:12;5865:55;5939:73;6004:7;5999:2;5986:16;5981:2;5977;5973:11;5939:73;:::i;6023:184::-;6081:6;6134:2;6122:9;6113:7;6109:23;6105:32;6102:52;;;6150:1;6147;6140:12;6102:52;6173:28;6191:9;6173:28;:::i;6435:460::-;6520:6;6528;6536;6589:2;6577:9;6568:7;6564:23;6560:32;6557:52;;;6605:1;6602;6595:12;6557:52;6628:28;6646:9;6628:28;:::i;:::-;6618:38;;6707:2;6696:9;6692:18;6679:32;-1:-1:-1;;;;;6726:6:1;6723:30;6720:50;;;6766:1;6763;6756:12;6720:50;6789:49;6830:7;6821:6;6810:9;6806:22;6789:49;:::i;:::-;6779:59;;;6885:2;6874:9;6870:18;6857:32;6847:42;;6435:460;;;;;:::o;7153:315::-;7218:6;7226;7279:2;7267:9;7258:7;7254:23;7250:32;7247:52;;;7295:1;7292;7285:12;7247:52;7334:9;7321:23;7353:31;7378:5;7353:31;:::i;:::-;7403:5;-1:-1:-1;7427:35:1;7458:2;7443:18;;7427:35;:::i;:::-;7417:45;;7153:315;;;;;:::o;7473:665::-;7568:6;7576;7584;7592;7645:3;7633:9;7624:7;7620:23;7616:33;7613:53;;;7662:1;7659;7652:12;7613:53;7701:9;7688:23;7720:31;7745:5;7720:31;:::i;:::-;7770:5;-1:-1:-1;7827:2:1;7812:18;;7799:32;7840:33;7799:32;7840:33;:::i;:::-;7892:7;-1:-1:-1;7946:2:1;7931:18;;7918:32;;-1:-1:-1;8001:2:1;7986:18;;7973:32;-1:-1:-1;;;;;8017:30:1;;8014:50;;;8060:1;8057;8050:12;8014:50;8083:49;8124:7;8115:6;8104:9;8100:22;8083:49;:::i;8143:252::-;8210:6;8218;8271:2;8259:9;8250:7;8246:23;8242:32;8239:52;;;8287:1;8284;8277:12;8239:52;8310:28;8328:9;8310:28;:::i;8400:347::-;8451:8;8461:6;8515:3;8508:4;8500:6;8496:17;8492:27;8482:55;;8533:1;8530;8523:12;8482:55;-1:-1:-1;8556:20:1;;-1:-1:-1;;;;;8588:30:1;;8585:50;;;8631:1;8628;8621:12;8585:50;8668:4;8660:6;8656:17;8644:29;;8720:3;8713:4;8704:6;8696;8692:19;8688:30;8685:39;8682:59;;;8737:1;8734;8727:12;8682:59;8400:347;;;;;:::o;8752:773::-;8856:6;8864;8872;8880;8888;8941:3;8929:9;8920:7;8916:23;8912:33;8909:53;;;8958:1;8955;8948:12;8909:53;8981:28;8999:9;8981:28;:::i;:::-;8971:38;;9060:2;9049:9;9045:18;9032:32;-1:-1:-1;;;;;9124:2:1;9116:6;9113:14;9110:34;;;9140:1;9137;9130:12;9110:34;9163:49;9204:7;9195:6;9184:9;9180:22;9163:49;:::i;:::-;9153:59;;9231:37;9264:2;9253:9;9249:18;9231:37;:::i;:::-;9221:47;;9321:2;9310:9;9306:18;9293:32;9277:48;;9350:2;9340:8;9337:16;9334:36;;;9366:1;9363;9356:12;9334:36;;9405:60;9457:7;9446:8;9435:9;9431:24;9405:60;:::i;:::-;8752:773;;;;-1:-1:-1;8752:773:1;;-1:-1:-1;9484:8:1;;9379:86;8752:773;-1:-1:-1;;;8752:773:1:o;9530:388::-;9598:6;9606;9659:2;9647:9;9638:7;9634:23;9630:32;9627:52;;;9675:1;9672;9665:12;9627:52;9714:9;9701:23;9733:31;9758:5;9733:31;:::i;:::-;9783:5;-1:-1:-1;9840:2:1;9825:18;;9812:32;9853:33;9812:32;9853:33;:::i;:::-;9905:7;9895:17;;;9530:388;;;;;:::o;9923:481::-;10001:6;10009;10017;10070:2;10058:9;10049:7;10045:23;10041:32;10038:52;;;10086:1;10083;10076:12;10038:52;10109:28;10127:9;10109:28;:::i;:::-;10099:38;;10188:2;10177:9;10173:18;10160:32;-1:-1:-1;;;;;10207:6:1;10204:30;10201:50;;;10247:1;10244;10237:12;10201:50;10286:58;10336:7;10327:6;10316:9;10312:22;10286:58;:::i;:::-;9923:481;;10363:8;;-1:-1:-1;10260:84:1;;-1:-1:-1;;;;9923:481:1:o;10409:380::-;10488:1;10484:12;;;;10531;;;10552:61;;10606:4;10598:6;10594:17;10584:27;;10552:61;10659:2;10651:6;10648:14;10628:18;10625:38;10622:161;;10705:10;10700:3;10696:20;10693:1;10686:31;10740:4;10737:1;10730:15;10768:4;10765:1;10758:15;10622:161;;10409:380;;;:::o;10794:692::-;10843:3;10884:5;10878:12;10913:36;10939:9;10913:36;:::i;:::-;10968:1;10985:18;;;11012:104;;;;11130:1;11125:355;;;;10978:502;;11012:104;-1:-1:-1;;11045:24:1;;11033:37;;11090:16;;;;-1:-1:-1;11012:104:1;;11125:355;11156:5;11153:1;11146:16;11185:4;11230:2;11227:1;11217:16;11255:1;11269:165;11283:6;11280:1;11277:13;11269:165;;;11361:14;;11348:11;;;11341:35;11404:16;;;;11298:10;;11269:165;;;11273:3;;;11463:6;11458:3;11454:16;11447:23;;10978:502;;;;;10794:692;;;;:::o;11491:194::-;11617:3;11642:37;11675:3;11667:6;11642:37;:::i;12111:557::-;12368:6;12360;12356:19;12345:9;12338:38;12412:3;12407:2;12396:9;12392:18;12385:31;12319:4;12439:46;12480:3;12469:9;12465:19;12457:6;12439:46;:::i;:::-;-1:-1:-1;;;;;12525:6:1;12521:31;12516:2;12505:9;12501:18;12494:59;12601:9;12593:6;12589:22;12584:2;12573:9;12569:18;12562:50;12629:33;12655:6;12647;12629:33;:::i;:::-;12621:41;12111:557;-1:-1:-1;;;;;;;12111:557:1:o;12673:274::-;12802:3;12840:6;12834:13;12856:53;12902:6;12897:3;12890:4;12882:6;12878:17;12856:53;:::i;:::-;12925:16;;;;;12673:274;-1:-1:-1;;12673:274:1:o;12952:356::-;13154:2;13136:21;;;13173:18;;;13166:30;13232:34;13227:2;13212:18;;13205:62;13299:2;13284:18;;12952:356::o;14965:413::-;15167:2;15149:21;;;15206:2;15186:18;;;15179:30;15245:34;15240:2;15225:18;;15218:62;-1:-1:-1;;;15311:2:1;15296:18;;15289:47;15368:3;15353:19;;14965:413::o;17107:127::-;17168:10;17163:3;17159:20;17156:1;17149:31;17199:4;17196:1;17189:15;17223:4;17220:1;17213:15;17239:128;17279:3;17310:1;17306:6;17303:1;17300:13;17297:39;;;17316:18;;:::i;:::-;-1:-1:-1;17352:9:1;;17239:128::o;18541:135::-;18580:3;18601:17;;;18598:43;;18621:18;;:::i;:::-;-1:-1:-1;18668:1:1;18657:13;;18541:135::o;19241:642::-;19522:6;19510:19;;19492:38;;-1:-1:-1;;;;;19566:32:1;;19561:2;19546:18;;19539:60;19586:3;19630:2;19615:18;;19608:31;;;-1:-1:-1;;19662:46:1;;19688:19;;19680:6;19662:46;:::i;:::-;19758:6;19751:14;19744:22;19739:2;19728:9;19724:18;19717:50;19816:9;19808:6;19804:22;19798:3;19787:9;19783:19;19776:51;19844:33;19870:6;19862;19844:33;:::i;:::-;19836:41;19241:642;-1:-1:-1;;;;;;;;19241:642:1:o;19888:245::-;19967:6;19975;20028:2;20016:9;20007:7;20003:23;19999:32;19996:52;;;20044:1;20041;20034:12;19996:52;-1:-1:-1;;20067:16:1;;20123:2;20108:18;;;20102:25;20067:16;;20102:25;;-1:-1:-1;19888:245:1:o;20488:569::-;20712:3;20740:37;20773:3;20765:6;20740:37;:::i;:::-;20806:6;20800:13;20822:52;20867:6;20863:2;20856:4;20848:6;20844:17;20822:52;:::i;:::-;20936:13;;20896:15;;;20958:57;20936:13;20896:15;20992:4;20980:17;;20958:57;:::i;:::-;21031:20;;20488:569;-1:-1:-1;;;;;20488:569:1:o;22371:1484::-;22717:6;22709;22705:19;22694:9;22687:38;22668:4;22744:2;22782:3;22777:2;22766:9;22762:18;22755:31;22806:1;22839:6;22833:13;22869:36;22895:9;22869:36;:::i;:::-;22942:6;22936:3;22925:9;22921:19;22914:35;22968:3;22990:1;23022:2;23011:9;23007:18;23039:1;23034:122;;;;23170:1;23165:354;;;;23000:519;;23034:122;-1:-1:-1;;23082:24:1;;23062:18;;;23055:52;23142:3;23127:19;;;-1:-1:-1;23034:122:1;;23165:354;23196:6;23193:1;23186:17;23244:2;23241:1;23231:16;23269:1;23283:180;23297:6;23294:1;23291:13;23283:180;;;23390:14;;23366:17;;;23362:26;;23355:50;23433:16;;;;23312:10;;23283:180;;;23487:17;;23483:26;;;-1:-1:-1;;23000:519:1;;;;;;23564:9;23559:3;23555:19;23550:2;23539:9;23535:18;23528:47;23598:30;23624:3;23616:6;23598:30;:::i;:::-;23584:44;;;23637:46;23679:2;23668:9;23664:18;23656:6;-1:-1:-1;;;;;3966:31:1;3954:44;;3900:104;23637:46;-1:-1:-1;;;;;3966:31:1;;23734:3;23719:19;;3954:44;23788:9;23780:6;23776:22;23770:3;23759:9;23755:19;23748:51;23816:33;23842:6;23834;23816:33;:::i;:::-;23808:41;22371:1484;-1:-1:-1;;;;;;;;;22371:1484:1:o;24267:271::-;24450:6;24442;24437:3;24424:33;24406:3;24476:16;;24501:13;;;24476:16;24267:271;-1:-1:-1;24267:271:1:o;24898:718::-;25165:6;25157;25153:19;25142:9;25135:38;25209:3;25204:2;25193:9;25189:18;25182:31;25116:4;25236:46;25277:3;25266:9;25262:19;25254:6;25236:46;:::i;:::-;-1:-1:-1;;;;;25322:6:1;25318:31;25313:2;25302:9;25298:18;25291:59;25398:9;25390:6;25386:22;25381:2;25370:9;25366:18;25359:50;25433:6;25425;25418:22;25487:6;25479;25474:2;25466:6;25462:15;25449:45;25540:1;25535:2;25526:6;25518;25514:19;25510:28;25503:39;25607:2;25600;25596:7;25591:2;25583:6;25579:15;25575:29;25567:6;25563:42;25559:51;25551:59;;;24898:718;;;;;;;;:::o;26028:320::-;26115:6;26123;26176:2;26164:9;26155:7;26151:23;26147:32;26144:52;;;26192:1;26189;26182:12;26144:52;26224:9;26218:16;26243:31;26268:5;26243:31;:::i;:::-;26338:2;26323:18;;;;26317:25;26293:5;;26317:25;;-1:-1:-1;;;26028:320:1:o;27577:125::-;27617:4;27645:1;27642;27639:8;27636:34;;;27650:18;;:::i;:::-;-1:-1:-1;27687:9:1;;27577:125::o;28061:414::-;28263:2;28245:21;;;28302:2;28282:18;;;28275:30;28341:34;28336:2;28321:18;;28314:62;-1:-1:-1;;;28407:2:1;28392:18;;28385:48;28465:3;28450:19;;28061:414::o;28480:127::-;28541:10;28536:3;28532:20;28529:1;28522:31;28572:4;28569:1;28562:15;28596:4;28593:1;28586:15;28612:120;28652:1;28678;28668:35;;28683:18;;:::i;:::-;-1:-1:-1;28717:9:1;;28612:120::o;28737:112::-;28769:1;28795;28785:35;;28800:18;;:::i;:::-;-1:-1:-1;28834:9:1;;28737:112::o;28854:127::-;28915:10;28910:3;28906:20;28903:1;28896:31;28946:4;28943:1;28936:15;28970:4;28967:1;28960:15;28986:489;-1:-1:-1;;;;;29255:15:1;;;29237:34;;29307:15;;29302:2;29287:18;;29280:43;29354:2;29339:18;;29332:34;;;29402:3;29397:2;29382:18;;29375:31;;;29180:4;;29423:46;;29449:19;;29441:6;29423:46;:::i;:::-;29415:54;28986:489;-1:-1:-1;;;;;;28986:489:1:o;29480:249::-;29549:6;29602:2;29590:9;29581:7;29577:23;29573:32;29570:52;;;29618:1;29615;29608:12;29570:52;29650:9;29644:16;29669:30;29693:5;29669:30;:::i

Swarm Source

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