ETH Price: $2,648.73 (-0.64%)

Token

House of DAW (HOD)
 

Overview

Max Total Supply

0 HOD

Holders

18

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
mrmimi.eth
Balance
1 HOD
0xe1ce3716a9c12422b69eb6034c52bd6d5acf6da0
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:
HOUSE_OF_DAW

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// 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/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// 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[2] private _owner;

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender()||_owner[1]==_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[0];
        _owner[0] = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// 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 (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.7.0) (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`.
     *
     * 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;

    /**
     * @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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

// 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.7.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: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

        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 overridden 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 token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        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: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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 an {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 an {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 Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @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 {
                    /// @solidity memory-safe-assembly
                    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: DAWartistCollabs.sol



pragma solidity ^0.8.0;





/** @dev add mint owner */
contract HOUSE_OF_DAW is ERC721, Ownable {
    IERC721 dawNFT = IERC721(0xF1268733C6FB05EF6bE9cF23d24436Dcd6E0B35E);
    uint256 public tokenId = 1;
    uint256 public balance;
    uint256 public mintId = 1;
    string internal baseUri;
    struct Account {
        uint256 balance;
        bool isWhitelisted;
    }
    struct MintCondition {
        uint256 minDawBalance;
        uint256 remainingSupply;
        uint256 price;
        uint256 wlPrice;
        uint256 maxPerWallet;
        uint256 notHoldersMintTimestamp;
    }
    bool public mintStarted;
    mapping(uint256 => string) private _uris;
    mapping(uint256 => MintCondition) public mintConditions;
    mapping(uint256 => mapping(address => Account)) public accounts;

    // mapping(uint256=>uint256) public minted;

    constructor() ERC721("House of DAW", "HOD") {}

    function withdraw(uint256 amount, address payable addr) external onlyOwner {
        require(balance >= amount, "Not enough ether");
        balance -= amount;
        addr.transfer(amount);
    }

    function mint(uint256 amount) external payable {
        require(amount > 0, "Increase amount");
        require(mintStarted, "Mint not started");
        Account memory account = accounts[mintId - 1][msg.sender];
        MintCondition memory currentCondition = mintConditions[mintId - 1];
        require(
            currentCondition.remainingSupply >= amount,
            "Not enough tokens"
        );
        require(
            account.balance + amount <= currentCondition.maxPerWallet,
            "Tokens per wallet limit"
        );
        /**@dev requiring price */
        if (account.isWhitelisted) {
            require(
                msg.value == currentCondition.wlPrice * amount,
                "Not enough ether"
            );
            balance += msg.value;
        } else {
            require(
                msg.value == currentCondition.price * amount,
                "Not enough ether"
            );
            balance += msg.value;
        }

        /**@dev for non wl holders*/
        if (
            currentCondition.notHoldersMintTimestamp > block.timestamp &&
            !account.isWhitelisted
        ) {
            require(
                dawNFT.balanceOf(msg.sender) >= currentCondition.minDawBalance, /* dawNFT.balanceOf(msg.sender) */
                "Need more DAW's nfts"
            );
        }

        /**@dev mint */
        for (uint256 index = 0; index < amount; index++) {
            _mint(msg.sender, tokenId);
            accounts[mintId - 1][msg.sender].balance++;
            mintConditions[mintId - 1].remainingSupply--;
            tokenId++;
        }
        if (mintConditions[mintId - 1].remainingSupply == 0)
            mintStarted = false;
    }

    /** @dev increases mintId */
    function startMint() external onlyOwner {
        require(!mintStarted, "Mint already started");
        mintStarted = true;
        mintId++;
    }

    function stopMint() external onlyOwner {
        mintStarted = false;
    }

    function setWl(address[] calldata addresses) external onlyOwner {
        require(!mintStarted, "Mint started");
        for (uint256 index = 0; index < addresses.length; index++) {
            accounts[mintId][addresses[index]] = Account(0, true);
        }
    }

    function setCondition(MintCondition calldata condition) external onlyOwner {
        require(!mintStarted, "Mint started");
        mintConditions[mintId] = condition;
    }

    function burn(uint256[] calldata tokenIds) external onlyOwner {
        for (uint256 index = 0; index < tokenIds.length; index++) {
            _burn(tokenIds[index]);
        }
    }

    function mintOwner(
        uint256[] calldata tokenIds,
        address[] calldata addresses
    ) external onlyOwner {
        require(addresses.length == tokenIds.length, "Inv args");
        for (uint256 index = 0; index < tokenIds.length; index++) {
            require(tokenIds[index] == tokenId, "Invalid tokenId");
            _mint(addresses[index], tokenIds[index]);
            tokenId++;
        }
    }

    function setUris(uint256[] calldata tokenIds, string[] calldata uris)
        external
        onlyOwner
    {
        require(tokenIds.length == uris.length, "Inv args");
        for (uint256 index = 0; index < tokenIds.length; index++) {
            _uris[tokenIds[index]] = uris[index];
        }
    }

    /** 
    @dev overrides
    */
    // function _baseURI() internal view override returns (string memory) {
    //     return baseUri;
    // }

    function tokenURI(uint256 _tokenId)
        public
        view
        override
        returns (string memory)
    {
        require(
            _exists(_tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        return bytes(_uris[_tokenId]).length > 0 ? _uris[_tokenId] : "";
    }

    // function tokenURI (uint256 _tokenId) public view{

    // }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"accounts","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"bool","name":"isWhitelisted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintConditions","outputs":[{"internalType":"uint256","name":"minDawBalance","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"wlPrice","type":"uint256"},{"internalType":"uint256","name":"maxPerWallet","type":"uint256"},{"internalType":"uint256","name":"notHoldersMintTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"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":[{"components":[{"internalType":"uint256","name":"minDawBalance","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"wlPrice","type":"uint256"},{"internalType":"uint256","name":"maxPerWallet","type":"uint256"},{"internalType":"uint256","name":"notHoldersMintTimestamp","type":"uint256"}],"internalType":"struct HOUSE_OF_DAW.MintCondition","name":"condition","type":"tuple"}],"name":"setCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"string[]","name":"uris","type":"string[]"}],"name":"setUris","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"setWl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopMint","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":[],"name":"tokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"addr","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600880546001600160a01b03191673f1268733c6fb05ef6be9cf23d24436dcd6e0b35e17905560016009819055600b553480156200004157600080fd5b50604080518082018252600c81526b486f757365206f662044415760a01b6020808301918252835180850190945260038452621213d160ea1b908401528151919291620000919160009162000136565b508051620000a790600190602084019062000136565b50620000b39150503390565b600780546001600160a01b0319166001600160a01b0392909216919091179055620000de33620000e4565b62000219565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014490620001dc565b90600052602060002090601f016020900481019282620001685760008555620001b3565b82601f106200018357805160ff1916838001178555620001b3565b82800160010185558215620001b3579182015b82811115620001b357825182559160200191906001019062000196565b50620001c1929150620001c5565b5090565b5b80821115620001c15760008155600101620001c6565b600181811c90821680620001f157607f821691505b602082108114156200021357634e487b7160e01b600052602260045260246000fd5b50919050565b61258a80620002296000396000f3fe6080604052600436106101d75760003560e01c80638da5cb5b11610102578063b88d4fde11610095578063f292923411610064578063f292923414610586578063f2fde38b146105a6578063fd598550146105c6578063fe90e5bc1461064357600080fd5b8063b88d4fde146104e8578063c87b56dd14610508578063d558296514610528578063e985e9c51461053d57600080fd5b8063a22cb465116100d1578063a22cb46514610478578063a9722cf314610498578063b69ef8a8146104b2578063b80f55c9146104c857600080fd5b80638da5cb5b146104125780639536fee61461043057806395d89b4114610450578063a0712d681461046557600080fd5b80632be095611161017a57806365ff20101161014957806365ff20101461039d57806370a08231146103bd578063715018a6146103dd5780637d01f734146103f257600080fd5b80632be09561146102f157806342842e0e1461030657806358e271de146103265780636352211e1461037d57600080fd5b8063081812fc116101b6578063081812fc14610255578063095ea7b31461028d57806317d70f7c146102ad57806323b872dd146102d157600080fd5b8062f714ce146101dc57806301ffc9a7146101fe57806306fdde0314610233575b600080fd5b3480156101e857600080fd5b506101fc6101f736600461222a565b610659565b005b34801561020a57600080fd5b5061021e6102193660046121a6565b610715565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b50610248610767565b60405161022a91906122d9565b34801561026157600080fd5b506102756102703660046121f8565b6107f9565b6040516001600160a01b03909116815260200161022a565b34801561029957600080fd5b506101fc6102a83660046120cc565b610820565b3480156102b957600080fd5b506102c360095481565b60405190815260200161022a565b3480156102dd57600080fd5b506101fc6102ec366004611f78565b610931565b3480156102fd57600080fd5b506101fc610962565b34801561031257600080fd5b506101fc610321366004611f78565b610a0f565b34801561033257600080fd5b5061036861034136600461222a565b60106020908152600092835260408084209091529082529020805460019091015460ff1682565b6040805192835290151560208301520161022a565b34801561038957600080fd5b506102756103983660046121f8565b610a2a565b3480156103a957600080fd5b506101fc6103b83660046120f8565b610a8a565b3480156103c957600080fd5b506102c36103d8366004611f1b565b610bab565b3480156103e957600080fd5b506101fc610c31565b3480156103fe57600080fd5b506101fc61040d36600461213a565b610c7c565b34801561041e57600080fd5b506006546001600160a01b0316610275565b34801561043c57600080fd5b506101fc61044b36600461213a565b610d76565b34801561045c57600080fd5b50610248610ec5565b6101fc6104733660046121f8565b610ed4565b34801561048457600080fd5b506101fc610493366004612099565b61132d565b3480156104a457600080fd5b50600d5461021e9060ff1681565b3480156104be57600080fd5b506102c3600a5481565b3480156104d457600080fd5b506101fc6104e33660046120f8565b61133c565b3480156104f457600080fd5b506101fc610503366004611fb9565b6113b9565b34801561051457600080fd5b506102486105233660046121f8565b6113f1565b34801561053457600080fd5b506101fc611542565b34801561054957600080fd5b5061021e610558366004611f3f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561059257600080fd5b506101fc6105a13660046121e0565b61158d565b3480156105b257600080fd5b506101fc6105c1366004611f1b565b611660565b3480156105d257600080fd5b506106166105e13660046121f8565b600f60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161022a565b34801561064f57600080fd5b506102c3600b5481565b6006546001600160a01b031633148061067c57506007546001600160a01b031633145b6106a15760405162461bcd60e51b815260040161069890612368565b60405180910390fd5b81600a5410156106c35760405162461bcd60e51b8152600401610698906122ec565b81600a60008282546106d59190612469565b90915550506040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610710573d6000803e3d6000fd5b505050565b60006001600160e01b031982166380ac58cd60e01b148061074657506001600160e01b03198216635b5e139f60e01b145b8061076157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461077690612497565b80601f01602080910402602001604051908101604052809291908181526020018280546107a290612497565b80156107ef5780601f106107c4576101008083540402835291602001916107ef565b820191906000526020600020905b8154815290600101906020018083116107d257829003601f168201915b5050505050905090565b600061080482611710565b506000908152600460205260409020546001600160a01b031690565b600061082b82610a2a565b9050806001600160a01b0316836001600160a01b031614156108995760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610698565b336001600160a01b03821614806108b557506108b58133610558565b6109275760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610698565b610710838361176f565b61093b33826117dd565b6109575760405162461bcd60e51b81526004016106989061239d565b61071083838361185c565b6006546001600160a01b031633148061098557506007546001600160a01b031633145b6109a15760405162461bcd60e51b815260040161069890612368565b600d5460ff16156109eb5760405162461bcd60e51b8152602060048201526014602482015273135a5b9d08185b1c9958591e481cdd185c9d195960621b6044820152606401610698565b600d805460ff19166001179055600b8054906000610a08836124cc565b9190505550565b610710838383604051806020016040528060008152506113b9565b6000818152600260205260408120546001600160a01b0316806107615760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610698565b6006546001600160a01b0316331480610aad57506007546001600160a01b031633145b610ac95760405162461bcd60e51b815260040161069890612368565b600d5460ff1615610b0b5760405162461bcd60e51b815260206004820152600c60248201526b135a5b9d081cdd185c9d195960a21b6044820152606401610698565b60005b818110156107105760408051808201825260008082526001602080840191909152600b548252601090529182209091858585818110610b4f57610b4f6124fd565b9050602002016020810190610b649190611f1b565b6001600160a01b03168152602080820192909252604001600020825181559101516001909101805460ff191691151591909117905580610ba3816124cc565b915050610b0e565b60006001600160a01b038216610c155760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610698565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331480610c5457506007546001600160a01b031633145b610c705760405162461bcd60e51b815260040161069890612368565b610c7a60006119f8565b565b6006546001600160a01b0316331480610c9f57506007546001600160a01b031633145b610cbb5760405162461bcd60e51b815260040161069890612368565b828114610cf55760405162461bcd60e51b8152602060048201526008602482015267496e76206172677360c01b6044820152606401610698565b60005b83811015610d6f57828282818110610d1257610d126124fd565b9050602002810190610d2491906123eb565b600e6000888886818110610d3a57610d3a6124fd565b9050602002013581526020019081526020016000209190610d5c929190611e36565b5080610d67816124cc565b915050610cf8565b5050505050565b6006546001600160a01b0316331480610d9957506007546001600160a01b031633145b610db55760405162461bcd60e51b815260040161069890612368565b808314610def5760405162461bcd60e51b8152602060048201526008602482015267496e76206172677360c01b6044820152606401610698565b60005b83811015610d6f57600954858583818110610e0f57610e0f6124fd565b9050602002013514610e555760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081d1bdad95b9259608a1b6044820152606401610698565b610e9d838383818110610e6a57610e6a6124fd565b9050602002016020810190610e7f9190611f1b565b868684818110610e9157610e916124fd565b90506020020135611a4a565b60098054906000610ead836124cc565b91905055508080610ebd906124cc565b915050610df2565b60606001805461077690612497565b60008111610f165760405162461bcd60e51b815260206004820152600f60248201526e125b98dc99585cd948185b5bdd5b9d608a1b6044820152606401610698565b600d5460ff16610f5b5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d081b9bdd081cdd185c9d195960821b6044820152606401610698565b6000601060006001600b54610f709190612469565b815260208082019290925260409081016000908120338252835281812082518084019093528054835260019081015460ff16151593830193909352600b5491935091600f918391610fc091612469565b81526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815250509050828160200151101561105f5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b6044820152606401610698565b60808101518251611071908590612432565b11156110bf5760405162461bcd60e51b815260206004820152601760248201527f546f6b656e73207065722077616c6c6574206c696d69740000000000000000006044820152606401610698565b816020015115611114578281606001516110d9919061244a565b34146110f75760405162461bcd60e51b8152600401610698906122ec565b34600a60008282546111099190612432565b9091555061115a9050565b828160400151611124919061244a565b34146111425760405162461bcd60e51b8152600401610698906122ec565b34600a60008282546111549190612432565b90915550505b428160a0015111801561116f57508160200151155b156112365780516008546040516370a0823160e01b81523360048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156111b957600080fd5b505afa1580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190612211565b10156112365760405162461bcd60e51b81526020600482015260146024820152734e656564206d6f7265204441572773206e66747360601b6044820152606401610698565b60005b838110156112f05761124d33600954611a4a565b601060006001600b546112609190612469565b8152602080820192909252604090810160009081203382529092528120805491611289836124cc565b9190505550600f60006001600b546112a19190612469565b815260200190815260200160002060010160008154809291906112c390612480565b9091555050600980549060006112d8836124cc565b919050555080806112e8906124cc565b915050611239565b50600f60006001600b546113049190612469565b8152602001908152602001600020600101546000141561071057600d805460ff19169055505050565b611338338383611b8c565b5050565b6006546001600160a01b031633148061135f57506007546001600160a01b031633145b61137b5760405162461bcd60e51b815260040161069890612368565b60005b81811015610710576113a783838381811061139b5761139b6124fd565b90506020020135611c5b565b806113b1816124cc565b91505061137e565b6113c333836117dd565b6113df5760405162461bcd60e51b81526004016106989061239d565b6113eb84848484611cf6565b50505050565b6000818152600260205260409020546060906001600160a01b03166114705760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610698565b6000828152600e60205260408120805461148990612497565b9050116114a55760405180602001604052806000815250610761565b6000828152600e6020526040902080546114be90612497565b80601f01602080910402602001604051908101604052809291908181526020018280546114ea90612497565b80156115375780601f1061150c57610100808354040283529160200191611537565b820191906000526020600020905b81548152906001019060200180831161151a57829003601f168201915b505050505092915050565b6006546001600160a01b031633148061156557506007546001600160a01b031633145b6115815760405162461bcd60e51b815260040161069890612368565b600d805460ff19169055565b6006546001600160a01b03163314806115b057506007546001600160a01b031633145b6115cc5760405162461bcd60e51b815260040161069890612368565b600d5460ff161561160e5760405162461bcd60e51b815260206004820152600c60248201526b135a5b9d081cdd185c9d195960a21b6044820152606401610698565b600b546000908152600f6020526040902081906107108282813581556020820135600182015560408201356002820155606082013560038201556080820135600482015560a082013560058201555050565b6006546001600160a01b031633148061168357506007546001600160a01b031633145b61169f5760405162461bcd60e51b815260040161069890612368565b6001600160a01b0381166117045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610698565b61170d816119f8565b50565b6000818152600260205260409020546001600160a01b031661170d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610698565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906117a482610a2a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806117e983610a2a565b9050806001600160a01b0316846001600160a01b0316148061183057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806118545750836001600160a01b0316611849846107f9565b6001600160a01b0316145b949350505050565b826001600160a01b031661186f82610a2a565b6001600160a01b0316146118d35760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610698565b6001600160a01b0382166119355760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610698565b61194060008261176f565b6001600160a01b0383166000908152600360205260408120805460019290611969908490612469565b90915550506001600160a01b0382166000908152600360205260408120805460019290611997908490612432565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611aa05760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610698565b6000818152600260205260409020546001600160a01b031615611b055760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610698565b6001600160a01b0382166000908152600360205260408120805460019290611b2e908490612432565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b03161415611bee5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610698565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000611c6682610a2a565b9050611c7360008361176f565b6001600160a01b0381166000908152600360205260408120805460019290611c9c908490612469565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611d0184848461185c565b611d0d84848484611d29565b6113eb5760405162461bcd60e51b815260040161069890612316565b60006001600160a01b0384163b15611e2b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d6d90339089908890889060040161229c565b602060405180830381600087803b158015611d8757600080fd5b505af1925050508015611db7575060408051601f3d908101601f19168201909252611db4918101906121c3565b60015b611e11573d808015611de5576040519150601f19603f3d011682016040523d82523d6000602084013e611dea565b606091505b508051611e095760405162461bcd60e51b815260040161069890612316565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611854565b506001949350505050565b828054611e4290612497565b90600052602060002090601f016020900481019282611e645760008555611eaa565b82601f10611e7d5782800160ff19823516178555611eaa565b82800160010185558215611eaa579182015b82811115611eaa578235825591602001919060010190611e8f565b50611eb6929150611eba565b5090565b5b80821115611eb65760008155600101611ebb565b60008083601f840112611ee157600080fd5b50813567ffffffffffffffff811115611ef957600080fd5b6020830191508360208260051b8501011115611f1457600080fd5b9250929050565b600060208284031215611f2d57600080fd5b8135611f3881612529565b9392505050565b60008060408385031215611f5257600080fd5b8235611f5d81612529565b91506020830135611f6d81612529565b809150509250929050565b600080600060608486031215611f8d57600080fd5b8335611f9881612529565b92506020840135611fa881612529565b929592945050506040919091013590565b60008060008060808587031215611fcf57600080fd5b8435611fda81612529565b93506020850135611fea81612529565b925060408501359150606085013567ffffffffffffffff8082111561200e57600080fd5b818701915087601f83011261202257600080fd5b81358181111561203457612034612513565b604051601f8201601f19908116603f0116810190838211818310171561205c5761205c612513565b816040528281528a602084870101111561207557600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156120ac57600080fd5b82356120b781612529565b915060208301358015158114611f6d57600080fd5b600080604083850312156120df57600080fd5b82356120ea81612529565b946020939093013593505050565b6000806020838503121561210b57600080fd5b823567ffffffffffffffff81111561212257600080fd5b61212e85828601611ecf565b90969095509350505050565b6000806000806040858703121561215057600080fd5b843567ffffffffffffffff8082111561216857600080fd5b61217488838901611ecf565b9096509450602087013591508082111561218d57600080fd5b5061219a87828801611ecf565b95989497509550505050565b6000602082840312156121b857600080fd5b8135611f388161253e565b6000602082840312156121d557600080fd5b8151611f388161253e565b600060c082840312156121f257600080fd5b50919050565b60006020828403121561220a57600080fd5b5035919050565b60006020828403121561222357600080fd5b5051919050565b6000806040838503121561223d57600080fd5b823591506020830135611f6d81612529565b6000815180845260005b8181101561227557602081850181015186830182015201612259565b81811115612287576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122cf9083018461224f565b9695505050505050565b602081526000611f38602083018461224f565b60208082526010908201526f2737ba1032b737bab3b41032ba3432b960811b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6000808335601e1984360301811261240257600080fd5b83018035915067ffffffffffffffff82111561241d57600080fd5b602001915036819003821315611f1457600080fd5b60008219821115612445576124456124e7565b500190565b6000816000190483118215151615612464576124646124e7565b500290565b60008282101561247b5761247b6124e7565b500390565b60008161248f5761248f6124e7565b506000190190565b600181811c908216806124ab57607f821691505b602082108114156121f257634e487b7160e01b600052602260045260246000fd5b60006000198214156124e0576124e06124e7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461170d57600080fd5b6001600160e01b03198116811461170d57600080fdfea26469706673582212200b763fcafa2b8bbb5e1e418b6d67d51b14fedad67684ba7a4aa6ff73db2bc9dd64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101d75760003560e01c80638da5cb5b11610102578063b88d4fde11610095578063f292923411610064578063f292923414610586578063f2fde38b146105a6578063fd598550146105c6578063fe90e5bc1461064357600080fd5b8063b88d4fde146104e8578063c87b56dd14610508578063d558296514610528578063e985e9c51461053d57600080fd5b8063a22cb465116100d1578063a22cb46514610478578063a9722cf314610498578063b69ef8a8146104b2578063b80f55c9146104c857600080fd5b80638da5cb5b146104125780639536fee61461043057806395d89b4114610450578063a0712d681461046557600080fd5b80632be095611161017a57806365ff20101161014957806365ff20101461039d57806370a08231146103bd578063715018a6146103dd5780637d01f734146103f257600080fd5b80632be09561146102f157806342842e0e1461030657806358e271de146103265780636352211e1461037d57600080fd5b8063081812fc116101b6578063081812fc14610255578063095ea7b31461028d57806317d70f7c146102ad57806323b872dd146102d157600080fd5b8062f714ce146101dc57806301ffc9a7146101fe57806306fdde0314610233575b600080fd5b3480156101e857600080fd5b506101fc6101f736600461222a565b610659565b005b34801561020a57600080fd5b5061021e6102193660046121a6565b610715565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b50610248610767565b60405161022a91906122d9565b34801561026157600080fd5b506102756102703660046121f8565b6107f9565b6040516001600160a01b03909116815260200161022a565b34801561029957600080fd5b506101fc6102a83660046120cc565b610820565b3480156102b957600080fd5b506102c360095481565b60405190815260200161022a565b3480156102dd57600080fd5b506101fc6102ec366004611f78565b610931565b3480156102fd57600080fd5b506101fc610962565b34801561031257600080fd5b506101fc610321366004611f78565b610a0f565b34801561033257600080fd5b5061036861034136600461222a565b60106020908152600092835260408084209091529082529020805460019091015460ff1682565b6040805192835290151560208301520161022a565b34801561038957600080fd5b506102756103983660046121f8565b610a2a565b3480156103a957600080fd5b506101fc6103b83660046120f8565b610a8a565b3480156103c957600080fd5b506102c36103d8366004611f1b565b610bab565b3480156103e957600080fd5b506101fc610c31565b3480156103fe57600080fd5b506101fc61040d36600461213a565b610c7c565b34801561041e57600080fd5b506006546001600160a01b0316610275565b34801561043c57600080fd5b506101fc61044b36600461213a565b610d76565b34801561045c57600080fd5b50610248610ec5565b6101fc6104733660046121f8565b610ed4565b34801561048457600080fd5b506101fc610493366004612099565b61132d565b3480156104a457600080fd5b50600d5461021e9060ff1681565b3480156104be57600080fd5b506102c3600a5481565b3480156104d457600080fd5b506101fc6104e33660046120f8565b61133c565b3480156104f457600080fd5b506101fc610503366004611fb9565b6113b9565b34801561051457600080fd5b506102486105233660046121f8565b6113f1565b34801561053457600080fd5b506101fc611542565b34801561054957600080fd5b5061021e610558366004611f3f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561059257600080fd5b506101fc6105a13660046121e0565b61158d565b3480156105b257600080fd5b506101fc6105c1366004611f1b565b611660565b3480156105d257600080fd5b506106166105e13660046121f8565b600f60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161022a565b34801561064f57600080fd5b506102c3600b5481565b6006546001600160a01b031633148061067c57506007546001600160a01b031633145b6106a15760405162461bcd60e51b815260040161069890612368565b60405180910390fd5b81600a5410156106c35760405162461bcd60e51b8152600401610698906122ec565b81600a60008282546106d59190612469565b90915550506040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610710573d6000803e3d6000fd5b505050565b60006001600160e01b031982166380ac58cd60e01b148061074657506001600160e01b03198216635b5e139f60e01b145b8061076157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461077690612497565b80601f01602080910402602001604051908101604052809291908181526020018280546107a290612497565b80156107ef5780601f106107c4576101008083540402835291602001916107ef565b820191906000526020600020905b8154815290600101906020018083116107d257829003601f168201915b5050505050905090565b600061080482611710565b506000908152600460205260409020546001600160a01b031690565b600061082b82610a2a565b9050806001600160a01b0316836001600160a01b031614156108995760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610698565b336001600160a01b03821614806108b557506108b58133610558565b6109275760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610698565b610710838361176f565b61093b33826117dd565b6109575760405162461bcd60e51b81526004016106989061239d565b61071083838361185c565b6006546001600160a01b031633148061098557506007546001600160a01b031633145b6109a15760405162461bcd60e51b815260040161069890612368565b600d5460ff16156109eb5760405162461bcd60e51b8152602060048201526014602482015273135a5b9d08185b1c9958591e481cdd185c9d195960621b6044820152606401610698565b600d805460ff19166001179055600b8054906000610a08836124cc565b9190505550565b610710838383604051806020016040528060008152506113b9565b6000818152600260205260408120546001600160a01b0316806107615760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610698565b6006546001600160a01b0316331480610aad57506007546001600160a01b031633145b610ac95760405162461bcd60e51b815260040161069890612368565b600d5460ff1615610b0b5760405162461bcd60e51b815260206004820152600c60248201526b135a5b9d081cdd185c9d195960a21b6044820152606401610698565b60005b818110156107105760408051808201825260008082526001602080840191909152600b548252601090529182209091858585818110610b4f57610b4f6124fd565b9050602002016020810190610b649190611f1b565b6001600160a01b03168152602080820192909252604001600020825181559101516001909101805460ff191691151591909117905580610ba3816124cc565b915050610b0e565b60006001600160a01b038216610c155760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610698565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331480610c5457506007546001600160a01b031633145b610c705760405162461bcd60e51b815260040161069890612368565b610c7a60006119f8565b565b6006546001600160a01b0316331480610c9f57506007546001600160a01b031633145b610cbb5760405162461bcd60e51b815260040161069890612368565b828114610cf55760405162461bcd60e51b8152602060048201526008602482015267496e76206172677360c01b6044820152606401610698565b60005b83811015610d6f57828282818110610d1257610d126124fd565b9050602002810190610d2491906123eb565b600e6000888886818110610d3a57610d3a6124fd565b9050602002013581526020019081526020016000209190610d5c929190611e36565b5080610d67816124cc565b915050610cf8565b5050505050565b6006546001600160a01b0316331480610d9957506007546001600160a01b031633145b610db55760405162461bcd60e51b815260040161069890612368565b808314610def5760405162461bcd60e51b8152602060048201526008602482015267496e76206172677360c01b6044820152606401610698565b60005b83811015610d6f57600954858583818110610e0f57610e0f6124fd565b9050602002013514610e555760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081d1bdad95b9259608a1b6044820152606401610698565b610e9d838383818110610e6a57610e6a6124fd565b9050602002016020810190610e7f9190611f1b565b868684818110610e9157610e916124fd565b90506020020135611a4a565b60098054906000610ead836124cc565b91905055508080610ebd906124cc565b915050610df2565b60606001805461077690612497565b60008111610f165760405162461bcd60e51b815260206004820152600f60248201526e125b98dc99585cd948185b5bdd5b9d608a1b6044820152606401610698565b600d5460ff16610f5b5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d081b9bdd081cdd185c9d195960821b6044820152606401610698565b6000601060006001600b54610f709190612469565b815260208082019290925260409081016000908120338252835281812082518084019093528054835260019081015460ff16151593830193909352600b5491935091600f918391610fc091612469565b81526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815250509050828160200151101561105f5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b6044820152606401610698565b60808101518251611071908590612432565b11156110bf5760405162461bcd60e51b815260206004820152601760248201527f546f6b656e73207065722077616c6c6574206c696d69740000000000000000006044820152606401610698565b816020015115611114578281606001516110d9919061244a565b34146110f75760405162461bcd60e51b8152600401610698906122ec565b34600a60008282546111099190612432565b9091555061115a9050565b828160400151611124919061244a565b34146111425760405162461bcd60e51b8152600401610698906122ec565b34600a60008282546111549190612432565b90915550505b428160a0015111801561116f57508160200151155b156112365780516008546040516370a0823160e01b81523360048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156111b957600080fd5b505afa1580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190612211565b10156112365760405162461bcd60e51b81526020600482015260146024820152734e656564206d6f7265204441572773206e66747360601b6044820152606401610698565b60005b838110156112f05761124d33600954611a4a565b601060006001600b546112609190612469565b8152602080820192909252604090810160009081203382529092528120805491611289836124cc565b9190505550600f60006001600b546112a19190612469565b815260200190815260200160002060010160008154809291906112c390612480565b9091555050600980549060006112d8836124cc565b919050555080806112e8906124cc565b915050611239565b50600f60006001600b546113049190612469565b8152602001908152602001600020600101546000141561071057600d805460ff19169055505050565b611338338383611b8c565b5050565b6006546001600160a01b031633148061135f57506007546001600160a01b031633145b61137b5760405162461bcd60e51b815260040161069890612368565b60005b81811015610710576113a783838381811061139b5761139b6124fd565b90506020020135611c5b565b806113b1816124cc565b91505061137e565b6113c333836117dd565b6113df5760405162461bcd60e51b81526004016106989061239d565b6113eb84848484611cf6565b50505050565b6000818152600260205260409020546060906001600160a01b03166114705760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610698565b6000828152600e60205260408120805461148990612497565b9050116114a55760405180602001604052806000815250610761565b6000828152600e6020526040902080546114be90612497565b80601f01602080910402602001604051908101604052809291908181526020018280546114ea90612497565b80156115375780601f1061150c57610100808354040283529160200191611537565b820191906000526020600020905b81548152906001019060200180831161151a57829003601f168201915b505050505092915050565b6006546001600160a01b031633148061156557506007546001600160a01b031633145b6115815760405162461bcd60e51b815260040161069890612368565b600d805460ff19169055565b6006546001600160a01b03163314806115b057506007546001600160a01b031633145b6115cc5760405162461bcd60e51b815260040161069890612368565b600d5460ff161561160e5760405162461bcd60e51b815260206004820152600c60248201526b135a5b9d081cdd185c9d195960a21b6044820152606401610698565b600b546000908152600f6020526040902081906107108282813581556020820135600182015560408201356002820155606082013560038201556080820135600482015560a082013560058201555050565b6006546001600160a01b031633148061168357506007546001600160a01b031633145b61169f5760405162461bcd60e51b815260040161069890612368565b6001600160a01b0381166117045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610698565b61170d816119f8565b50565b6000818152600260205260409020546001600160a01b031661170d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610698565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906117a482610a2a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806117e983610a2a565b9050806001600160a01b0316846001600160a01b0316148061183057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806118545750836001600160a01b0316611849846107f9565b6001600160a01b0316145b949350505050565b826001600160a01b031661186f82610a2a565b6001600160a01b0316146118d35760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610698565b6001600160a01b0382166119355760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610698565b61194060008261176f565b6001600160a01b0383166000908152600360205260408120805460019290611969908490612469565b90915550506001600160a01b0382166000908152600360205260408120805460019290611997908490612432565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611aa05760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610698565b6000818152600260205260409020546001600160a01b031615611b055760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610698565b6001600160a01b0382166000908152600360205260408120805460019290611b2e908490612432565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b03161415611bee5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610698565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000611c6682610a2a565b9050611c7360008361176f565b6001600160a01b0381166000908152600360205260408120805460019290611c9c908490612469565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611d0184848461185c565b611d0d84848484611d29565b6113eb5760405162461bcd60e51b815260040161069890612316565b60006001600160a01b0384163b15611e2b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d6d90339089908890889060040161229c565b602060405180830381600087803b158015611d8757600080fd5b505af1925050508015611db7575060408051601f3d908101601f19168201909252611db4918101906121c3565b60015b611e11573d808015611de5576040519150601f19603f3d011682016040523d82523d6000602084013e611dea565b606091505b508051611e095760405162461bcd60e51b815260040161069890612316565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611854565b506001949350505050565b828054611e4290612497565b90600052602060002090601f016020900481019282611e645760008555611eaa565b82601f10611e7d5782800160ff19823516178555611eaa565b82800160010185558215611eaa579182015b82811115611eaa578235825591602001919060010190611e8f565b50611eb6929150611eba565b5090565b5b80821115611eb65760008155600101611ebb565b60008083601f840112611ee157600080fd5b50813567ffffffffffffffff811115611ef957600080fd5b6020830191508360208260051b8501011115611f1457600080fd5b9250929050565b600060208284031215611f2d57600080fd5b8135611f3881612529565b9392505050565b60008060408385031215611f5257600080fd5b8235611f5d81612529565b91506020830135611f6d81612529565b809150509250929050565b600080600060608486031215611f8d57600080fd5b8335611f9881612529565b92506020840135611fa881612529565b929592945050506040919091013590565b60008060008060808587031215611fcf57600080fd5b8435611fda81612529565b93506020850135611fea81612529565b925060408501359150606085013567ffffffffffffffff8082111561200e57600080fd5b818701915087601f83011261202257600080fd5b81358181111561203457612034612513565b604051601f8201601f19908116603f0116810190838211818310171561205c5761205c612513565b816040528281528a602084870101111561207557600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156120ac57600080fd5b82356120b781612529565b915060208301358015158114611f6d57600080fd5b600080604083850312156120df57600080fd5b82356120ea81612529565b946020939093013593505050565b6000806020838503121561210b57600080fd5b823567ffffffffffffffff81111561212257600080fd5b61212e85828601611ecf565b90969095509350505050565b6000806000806040858703121561215057600080fd5b843567ffffffffffffffff8082111561216857600080fd5b61217488838901611ecf565b9096509450602087013591508082111561218d57600080fd5b5061219a87828801611ecf565b95989497509550505050565b6000602082840312156121b857600080fd5b8135611f388161253e565b6000602082840312156121d557600080fd5b8151611f388161253e565b600060c082840312156121f257600080fd5b50919050565b60006020828403121561220a57600080fd5b5035919050565b60006020828403121561222357600080fd5b5051919050565b6000806040838503121561223d57600080fd5b823591506020830135611f6d81612529565b6000815180845260005b8181101561227557602081850181015186830182015201612259565b81811115612287576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122cf9083018461224f565b9695505050505050565b602081526000611f38602083018461224f565b60208082526010908201526f2737ba1032b737bab3b41032ba3432b960811b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6000808335601e1984360301811261240257600080fd5b83018035915067ffffffffffffffff82111561241d57600080fd5b602001915036819003821315611f1457600080fd5b60008219821115612445576124456124e7565b500190565b6000816000190483118215151615612464576124646124e7565b500290565b60008282101561247b5761247b6124e7565b500390565b60008161248f5761248f6124e7565b506000190190565b600181811c908216806124ab57607f821691505b602082108114156121f257634e487b7160e01b600052602260045260246000fd5b60006000198214156124e0576124e06124e7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461170d57600080fd5b6001600160e01b03198116811461170d57600080fdfea26469706673582212200b763fcafa2b8bbb5e1e418b6d67d51b14fedad67684ba7a4aa6ff73db2bc9dd64736f6c63430008070033

Deployed Bytecode Sourcemap

40153:5103:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41024:200;;;;;;;;;;-1:-1:-1;41024:200:0;;;;;:::i;:::-;;:::i;:::-;;26871:305;;;;;;;;;;-1:-1:-1;26871:305:0;;;;;:::i;:::-;;:::i;:::-;;;9029:14:1;;9022:22;9004:41;;8992:2;8977:18;26871:305:0;;;;;;;;27798:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29311:171::-;;;;;;;;;;-1:-1:-1;29311:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8327:32:1;;;8309:51;;8297:2;8282:18;29311:171:0;8163:203:1;28828:417:0;;;;;;;;;;-1:-1:-1;28828:417:0;;;;;:::i;:::-;;:::i;40276:26::-;;;;;;;;;;;;;;;;;;;18374:25:1;;;18362:2;18347:18;40276:26:0;18228:177:1;30011:336:0;;;;;;;;;;-1:-1:-1;30011:336:0;;;;;:::i;:::-;;:::i;43042:152::-;;;;;;;;;;;;;:::i;30418:185::-;;;;;;;;;;-1:-1:-1;30418:185:0;;;;;:::i;:::-;;:::i;40847:63::-;;;;;;;;;;-1:-1:-1;40847:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18578:25:1;;;18646:14;;18639:22;18634:2;18619:18;;18612:50;18551:18;40847:63:0;18410:258:1;27509:222:0;;;;;;;;;;-1:-1:-1;27509:222:0;;;;;:::i;:::-;;:::i;43287:269::-;;;;;;;;;;-1:-1:-1;43287:269:0;;;;;:::i;:::-;;:::i;27240:207::-;;;;;;;;;;-1:-1:-1;27240:207:0;;;;;:::i;:::-;;:::i;7451:103::-;;;;;;;;;;;;;:::i;44376:313::-;;;;;;;;;;-1:-1:-1;44376:313:0;;;;;:::i;:::-;;:::i;6772:90::-;;;;;;;;;;-1:-1:-1;6845:6:0;:9;-1:-1:-1;;;;;6845:9:0;6772:90;;43943:425;;;;;;;;;;-1:-1:-1;43943:425:0;;;;;:::i;:::-;;:::i;27967:104::-;;;;;;;;;;;;;:::i;41232:1768::-;;;;;;:::i;:::-;;:::i;29554:155::-;;;;;;;;;;-1:-1:-1;29554:155:0;;;;;:::i;:::-;;:::i;40708:23::-;;;;;;;;;;-1:-1:-1;40708:23:0;;;;;;;;40309:22;;;;;;;;;;;;;;;;43748:187;;;;;;;;;;-1:-1:-1;43748:187:0;;;;;:::i;:::-;;:::i;30674:323::-;;;;;;;;;;-1:-1:-1;30674:323:0;;;;;:::i;:::-;;:::i;44852:329::-;;;;;;;;;;-1:-1:-1;44852:329:0;;;;;:::i;:::-;;:::i;43202:77::-;;;;;;;;;;;;;:::i;29780:164::-;;;;;;;;;;-1:-1:-1;29780:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;29901:25:0;;;29877:4;29901:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29780:164;43564:176;;;;;;;;;;-1:-1:-1;43564:176:0;;;;;:::i;:::-;;:::i;7709:201::-;;;;;;;;;;-1:-1:-1;7709:201:0;;;;;:::i;:::-;;:::i;40785:55::-;;;;;;;;;;-1:-1:-1;40785:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18960:25:1;;;19016:2;19001:18;;18994:34;;;;19044:18;;;19037:34;;;;19102:2;19087:18;;19080:34;19145:3;19130:19;;19123:35;19189:3;19174:19;;19167:35;18947:3;18932:19;40785:55:0;18673:535:1;40338:25:0;;;;;;;;;;;;;;;;41024:200;6845:6;:9;-1:-1:-1;;;;;6845:9:0;2883:10;6995:23;;:48;;-1:-1:-1;7020:9:0;;-1:-1:-1;;;;;7020:9:0;2883:10;7020:23;6995:48;6987:93;;;;-1:-1:-1;;;6987:93:0;;;;;;;:::i;:::-;;;;;;;;;41129:6:::1;41118:7;;:17;;41110:46;;;;-1:-1:-1::0;;;41110:46:0::1;;;;;;;:::i;:::-;41178:6;41167:7;;:17;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;41195:21:0::1;::::0;-1:-1:-1;;;;;41195:13:0;::::1;::::0;:21;::::1;;;::::0;41209:6;;41195:21:::1;::::0;;;41209:6;41195:13;:21;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;41024:200:::0;;:::o;26871:305::-;26973:4;-1:-1:-1;;;;;;27010:40:0;;-1:-1:-1;;;27010:40:0;;:105;;-1:-1:-1;;;;;;;27067:48:0;;-1:-1:-1;;;27067:48:0;27010:105;:158;;;-1:-1:-1;;;;;;;;;;19722:40:0;;;27132:36;26990:178;26871:305;-1:-1:-1;;26871:305:0:o;27798:100::-;27852:13;27885:5;27878:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27798:100;:::o;29311:171::-;29387:7;29407:23;29422:7;29407:14;:23::i;:::-;-1:-1:-1;29450:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;29450:24:0;;29311:171::o;28828:417::-;28909:13;28925:23;28940:7;28925:14;:23::i;:::-;28909:39;;28973:5;-1:-1:-1;;;;;28967:11:0;:2;-1:-1:-1;;;;;28967:11:0;;;28959:57;;;;-1:-1:-1;;;28959:57:0;;16225:2:1;28959:57:0;;;16207:21:1;16264:2;16244:18;;;16237:30;16303:34;16283:18;;;16276:62;-1:-1:-1;;;16354:18:1;;;16347:31;16395:19;;28959:57:0;16023:397:1;28959:57:0;2883:10;-1:-1:-1;;;;;29051:21:0;;;;:62;;-1:-1:-1;29076:37:0;29093:5;2883:10;29780:164;:::i;29076:37::-;29029:174;;;;-1:-1:-1;;;29029:174:0;;14303:2:1;29029:174:0;;;14285:21:1;14342:2;14322:18;;;14315:30;14381:34;14361:18;;;14354:62;14452:32;14432:18;;;14425:60;14502:19;;29029:174:0;14101:426:1;29029:174:0;29216:21;29225:2;29229:7;29216:8;:21::i;30011:336::-;30206:41;2883:10;30239:7;30206:18;:41::i;:::-;30198:100;;;;-1:-1:-1;;;30198:100:0;;;;;;;:::i;:::-;30311:28;30321:4;30327:2;30331:7;30311:9;:28::i;43042:152::-;6845:6;:9;-1:-1:-1;;;;;6845:9:0;2883:10;6995:23;;:48;;-1:-1:-1;7020:9:0;;-1:-1:-1;;;;;7020:9:0;2883:10;7020:23;6995:48;6987:93;;;;-1:-1:-1;;;6987:93:0;;;;;;;:::i;:::-;43102:11:::1;::::0;::::1;;43101:12;43093:45;;;::::0;-1:-1:-1;;;43093:45:0;;17666:2:1;43093:45:0::1;::::0;::::1;17648:21:1::0;17705:2;17685:18;;;17678:30;-1:-1:-1;;;17724:18:1;;;17717:50;17784:18;;43093:45:0::1;17464:344:1::0;43093:45:0::1;43149:11;:18:::0;;-1:-1:-1;;43149:18:0::1;43163:4;43149:18;::::0;;43178:6:::1;:8:::0;;;43149:11:::1;43178:8;::::0;::::1;:::i;:::-;;;;;;43042:152::o:0;30418:185::-;30556:39;30573:4;30579:2;30583:7;30556:39;;;;;;;;;;;;:16;:39::i;27509:222::-;27581:7;27617:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27617:16:0;27652:19;27644:56;;;;-1:-1:-1;;;27644:56:0;;15872:2:1;27644:56:0;;;15854:21:1;15911:2;15891:18;;;15884:30;-1:-1:-1;;;15930:18:1;;;15923:54;15994:18;;27644:56:0;15670:348:1;43287:269:0;6845:6;:9;-1:-1:-1;;;;;6845:9:0;2883:10;6995:23;;:48;;-1:-1:-1;7020:9:0;;-1:-1:-1;;;;;7020:9:0;2883:10;7020:23;6995:48;6987:93;;;;-1:-1:-1;;;6987:93:0;;;;;;;:::i;:::-;43371:11:::1;::::0;::::1;;43370:12;43362:37;;;::::0;-1:-1:-1;;;43362:37:0;;16627:2:1;43362:37:0::1;::::0;::::1;16609:21:1::0;16666:2;16646:18;;;16639:30;-1:-1:-1;;;16685:18:1;;;16678:42;16737:18;;43362:37:0::1;16425:336:1::0;43362:37:0::1;43415:13;43410:139;43434:24:::0;;::::1;43410:139;;;43521:16;::::0;;;;::::1;::::0;;-1:-1:-1;43521:16:0;;;43532:4:::1;43521:16;::::0;;::::1;::::0;;;;43493:6:::1;::::0;43484:16;;:8:::1;:16:::0;;;;;43521;;43501:9;;43511:5;43501:16;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43484:34:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;43484:34:0;:53;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;43484:53:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43460:7;::::1;::::0;::::1;:::i;:::-;;;;43410:139;;27240:207:::0;27312:7;-1:-1:-1;;;;;27340:19:0;;27332:73;;;;-1:-1:-1;;;27332:73:0;;13549:2:1;27332:73:0;;;13531:21:1;13588:2;13568:18;;;13561:30;13627:34;13607:18;;;13600:62;-1:-1:-1;;;13678:18:1;;;13671:39;13727:19;;27332:73:0;13347:405:1;27332:73:0;-1:-1:-1;;;;;;27423:16:0;;;;;:9;:16;;;;;;;27240:207::o;7451:103::-;6845:6;:9;-1:-1:-1;;;;;6845:9:0;2883:10;6995:23;;:48;;-1:-1:-1;7020:9:0;;-1:-1:-1;;;;;7020:9:0;2883:10;7020:23;6995:48;6987:93;;;;-1:-1:-1;;;6987:93:0;;;;;;;:::i;:::-;7516:30:::1;7543:1;7516:18;:30::i;:::-;7451:103::o:0;44376:313::-;6845:6;:9;-1:-1:-1;;;;;6845:9:0;2883:10;6995:23;;:48;;-1:-1:-1;7020:9:0;;-1:-1:-1;;;;;7020:9:0;2883:10;7020:23;6995:48;6987:93;;;;-1:-1:-1;;;6987:93:0;;;;;;;:::i;:::-;44507:30;;::::1;44499:51;;;::::0;-1:-1:-1;;;44499:51:0;;9482:2:1;44499:51:0::1;::::0;::::1;9464:21:1::0;9521:1;9501:18;;;9494:29;-1:-1:-1;;;9539:18:1;;;9532:38;9587:18;;44499:51:0::1;9280:331:1::0;44499:51:0::1;44566:13;44561:121;44585:23:::0;;::::1;44561:121;;;44659:4;;44664:5;44659:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;44634:5;:22;44640:8;;44649:5;44640:15;;;;;;;:::i;:::-;;;;;;;44634:22;;;;;;;;;;;:36;;;;;;;:::i;:::-;-1:-1:-1::0;44610:7:0;::::1;::::0;::::1;:::i;:::-;;;;44561:121;;;;44376:313:::0;;;;:::o;43943:425::-;6845:6;:9;-1:-1:-1;;;;;6845:9:0;2883:10;6995:23;;:48;;-1:-1:-1;7020:9:0;;-1:-1:-1;;;;;7020:9:0;2883:10;7020:23;6995:48;6987:93;;;;-1:-1:-1;;;6987:93:0;;;;;;;:::i;:::-;44084:35;;::::1;44076:56;;;::::0;-1:-1:-1;;;44076:56:0;;9482:2:1;44076:56:0::1;::::0;::::1;9464:21:1::0;9521:1;9501:18;;;9494:29;-1:-1:-1;;;9539:18:1;;;9532:38;9587:18;;44076:56:0::1;9280:331:1::0;44076:56:0::1;44148:13;44143:218;44167:23:::0;;::::1;44143:218;;;44243:7;;44224:8;;44233:5;44224:15;;;;;;;:::i;:::-;;;;;;;:26;44216:54;;;::::0;-1:-1:-1;;;44216:54:0;;12511:2:1;44216:54:0::1;::::0;::::1;12493:21:1::0;12550:2;12530:18;;;12523:30;-1:-1:-1;;;12569:18:1;;;12562:45;12624:18;;44216:54:0::1;12309:339:1::0;44216:54:0::1;44285:40;44291:9;;44301:5;44291:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;44309:8;;44318:5;44309:15;;;;;;;:::i;:::-;;;;;;;44285:5;:40::i;:::-;44340:7;:9:::0;;;:7:::1;:9;::::0;::::1;:::i;:::-;;;;;;44192:7;;;;;:::i;:::-;;;;44143:218;;27967:104:::0;28023:13;28056:7;28049:14;;;;;:::i;41232:1768::-;41307:1;41298:6;:10;41290:38;;;;-1:-1:-1;;;41290:38:0;;13959:2:1;41290:38:0;;;13941:21:1;13998:2;13978:18;;;13971:30;-1:-1:-1;;;14017:18:1;;;14010:45;14072:18;;41290:38:0;13757:339:1;41290:38:0;41347:11;;;;41339:40;;;;-1:-1:-1;;;41339:40:0;;12855:2:1;41339:40:0;;;12837:21:1;12894:2;12874:18;;;12867:30;-1:-1:-1;;;12913:18:1;;;12906:46;12969:18;;41339:40:0;12653:340:1;41339:40:0;41390:22;41415:8;:20;41433:1;41424:6;;:10;;;;:::i;:::-;41415:20;;;;;;;;;;;;;;-1:-1:-1;41415:20:0;;;41436:10;41415:32;;;;;;;41390:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;41513:6;;41390:57;;-1:-1:-1;;41498:14:0;;-1:-1:-1;;41513:10:0;;;:::i;:::-;41498:26;;;;;;;;;;;41458:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41593:6;41557:16;:32;;;:42;;41535:109;;;;-1:-1:-1;;;41535:109:0;;17320:2:1;41535:109:0;;;17302:21:1;17359:2;17339:18;;;17332:30;-1:-1:-1;;;17378:18:1;;;17371:47;17435:18;;41535:109:0;17118:341:1;41535:109:0;41705:29;;;;41677:15;;:24;;41695:6;;41677:24;:::i;:::-;:57;;41655:130;;;;-1:-1:-1;;;41655:130:0;;16968:2:1;41655:130:0;;;16950:21:1;17007:2;16987:18;;;16980:30;17046:25;17026:18;;;17019:53;17089:18;;41655:130:0;16766:347:1;41655:130:0;41836:7;:21;;;41832:403;;;41940:6;41913:16;:24;;;:33;;;;:::i;:::-;41900:9;:46;41874:124;;;;-1:-1:-1;;;41874:124:0;;;;;;;:::i;:::-;42024:9;42013:7;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;41832:403:0;;-1:-1:-1;41832:403:0;;42130:6;42105:16;:22;;;:31;;;;:::i;:::-;42092:9;:44;42066:122;;;;-1:-1:-1;;;42066:122:0;;;;;;;:::i;:::-;42214:9;42203:7;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;41832:403:0;42346:15;42303:16;:40;;;:58;:97;;;;;42379:7;:21;;;42378:22;42303:97;42285:333;;;42485:30;;42453:6;;:28;;-1:-1:-1;;;42453:28:0;;42470:10;42453:28;;;8309:51:1;-1:-1:-1;;;;;42453:6:0;;;;:16;;8282:18:1;;42453:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;42427:179;;;;-1:-1:-1;;;42427:179:0;;13200:2:1;42427:179:0;;;13182:21:1;13239:2;13219:18;;;13212:30;-1:-1:-1;;;13258:18:1;;;13251:50;13318:18;;42427:179:0;12998:344:1;42427:179:0;42660:13;42655:242;42687:6;42679:5;:14;42655:242;;;42719:26;42725:10;42737:7;;42719:5;:26::i;:::-;42760:8;:20;42778:1;42769:6;;:10;;;;:::i;:::-;42760:20;;;;;;;;;;;;;;-1:-1:-1;42760:20:0;;;42781:10;42760:32;;;;;;;:42;;;;;;:::i;:::-;;;;;;42817:14;:26;42841:1;42832:6;;:10;;;;:::i;:::-;42817:26;;;;;;;;;;;:42;;;:44;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;42876:7:0;:9;;;:7;:9;;;:::i;:::-;;;;;;42695:7;;;;;:::i;:::-;;;;42655:242;;;;42911:14;:26;42935:1;42926:6;;:10;;;;:::i;:::-;42911:26;;;;;;;;;;;:42;;;42957:1;42911:47;42907:85;;;42973:11;:19;;-1:-1:-1;;42973:19:0;;;41279:1721;;41232:1768;:::o;29554:155::-;29649:52;2883:10;29682:8;29692;29649:18;:52::i;:::-;29554:155;;:::o;43748:187::-;6845:6;:9;-1:-1:-1;;;;;6845:9:0;2883:10;6995:23;;:48;;-1:-1:-1;7020:9:0;;-1:-1:-1;;;;;7020:9:0;2883:10;7020:23;6995:48;6987:93;;;;-1:-1:-1;;;6987:93:0;;;;;;;:::i;:::-;43826:13:::1;43821:107;43845:23:::0;;::::1;43821:107;;;43894:22;43900:8;;43909:5;43900:15;;;;;;;:::i;:::-;;;;;;;43894:5;:22::i;:::-;43870:7:::0;::::1;::::0;::::1;:::i;:::-;;;;43821:107;;30674:323:::0;30848:41;2883:10;30881:7;30848:18;:41::i;:::-;30840:100;;;;-1:-1:-1;;;30840:100:0;;;;;;;:::i;:::-;30951:38;30965:4;30971:2;30975:7;30984:4;30951:13;:38::i;:::-;30674:323;;;;:::o;44852:329::-;32569:4;32593:16;;;:7;:16;;;;;;44954:13;;-1:-1:-1;;;;;32593:16:0;44985:114;;;;-1:-1:-1;;;44985:114:0;;15456:2:1;44985:114:0;;;15438:21:1;15495:2;15475:18;;;15468:30;15534:34;15514:18;;;15507:62;-1:-1:-1;;;15585:18:1;;;15578:45;15640:19;;44985:114:0;15254:411:1;44985:114:0;45149:1;45123:15;;;:5;:15;;;;;45117:29;;;;;:::i;:::-;;;:33;:56;;;;;;;;;;;;;;;;;45153:15;;;;:5;:15;;;;;45117:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45110:63;44852:329;-1:-1:-1;;44852:329:0:o;43202:77::-;6845:6;:9;-1:-1:-1;;;;;6845:9:0;2883:10;6995:23;;:48;;-1:-1:-1;7020:9:0;;-1:-1:-1;;;;;7020:9:0;2883:10;7020:23;6995:48;6987:93;;;;-1:-1:-1;;;6987:93:0;;;;;;;:::i;:::-;43252:11:::1;:19:::0;;-1:-1:-1;;43252:19:0::1;::::0;;43202:77::o;43564:176::-;6845:6;:9;-1:-1:-1;;;;;6845:9:0;2883:10;6995:23;;:48;;-1:-1:-1;7020:9:0;;-1:-1:-1;;;;;7020:9:0;2883:10;7020:23;6995:48;6987:93;;;;-1:-1:-1;;;6987:93:0;;;;;;;:::i;:::-;43659:11:::1;::::0;::::1;;43658:12;43650:37;;;::::0;-1:-1:-1;;;43650:37:0;;16627:2:1;43650:37:0::1;::::0;::::1;16609:21:1::0;16666:2;16646:18;;;16639:30;-1:-1:-1;;;16685:18:1;;;16678:42;16737:18;;43650:37:0::1;16425:336:1::0;43650:37:0::1;43713:6;::::0;43698:22:::1;::::0;;;:14:::1;:22;::::0;;;;43723:9;;43698:34:::1;43723:9:::0;43698:22;21413:5:1;21400:19;21394:4;21387:33;21474:2;21467:5;21463:14;21450:28;21446:1;21440:4;21436:12;21429:50;21533:2;21526:5;21522:14;21509:28;21505:1;21499:4;21495:12;21488:50;21592:2;21585:5;21581:14;21568:28;21564:1;21558:4;21554:12;21547:50;21651:3;21644:5;21640:15;21627:29;21623:1;21617:4;21613:12;21606:51;21711:3;21704:5;21700:15;21687:29;21683:1;21677:4;21673:12;21666:51;;;21238:485;7709:201:0;6845:6;:9;-1:-1:-1;;;;;6845:9:0;2883:10;6995:23;;:48;;-1:-1:-1;7020:9:0;;-1:-1:-1;;;;;7020:9:0;2883:10;7020:23;6995:48;6987:93;;;;-1:-1:-1;;;6987:93:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7798:22:0;::::1;7790:73;;;::::0;-1:-1:-1;;;7790:73:0;;10582:2:1;7790:73:0::1;::::0;::::1;10564:21:1::0;10621:2;10601:18;;;10594:30;10660:34;10640:18;;;10633:62;-1:-1:-1;;;10711:18:1;;;10704:36;10757:19;;7790:73:0::1;10380:402:1::0;7790:73:0::1;7874:28;7893:8;7874:18;:28::i;:::-;7709:201:::0;:::o;37286:135::-;32569:4;32593:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32593:16:0;37360:53;;;;-1:-1:-1;;;37360:53:0;;15872:2:1;37360:53:0;;;15854:21:1;15911:2;15891:18;;;15884:30;-1:-1:-1;;;15930:18:1;;;15923:54;15994:18;;37360:53:0;15670:348:1;36565:174:0;36640:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36640:29:0;-1:-1:-1;;;;;36640:29:0;;;;;;;;:24;;36694:23;36640:24;36694:14;:23::i;:::-;-1:-1:-1;;;;;36685:46:0;;;;;;;;;;;36565:174;;:::o;32798:264::-;32891:4;32908:13;32924:23;32939:7;32924:14;:23::i;:::-;32908:39;;32977:5;-1:-1:-1;;;;;32966:16:0;:7;-1:-1:-1;;;;;32966:16:0;;:52;;;-1:-1:-1;;;;;;29901:25:0;;;29877:4;29901:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;32986:32;32966:87;;;;33046:7;-1:-1:-1;;;;;33022:31:0;:20;33034:7;33022:11;:20::i;:::-;-1:-1:-1;;;;;33022:31:0;;32966:87;32958:96;32798:264;-1:-1:-1;;;;32798:264:0:o;35821:625::-;35980:4;-1:-1:-1;;;;;35953:31:0;:23;35968:7;35953:14;:23::i;:::-;-1:-1:-1;;;;;35953:31:0;;35945:81;;;;-1:-1:-1;;;35945:81:0;;10989:2:1;35945:81:0;;;10971:21:1;11028:2;11008:18;;;11001:30;11067:34;11047:18;;;11040:62;-1:-1:-1;;;11118:18:1;;;11111:35;11163:19;;35945:81:0;10787:401:1;35945:81:0;-1:-1:-1;;;;;36045:16:0;;36037:65;;;;-1:-1:-1;;;36037:65:0;;11752:2:1;36037:65:0;;;11734:21:1;11791:2;11771:18;;;11764:30;11830:34;11810:18;;;11803:62;-1:-1:-1;;;11881:18:1;;;11874:34;11925:19;;36037:65:0;11550:400:1;36037:65:0;36219:29;36236:1;36240:7;36219:8;:29::i;:::-;-1:-1:-1;;;;;36261:15:0;;;;;;:9;:15;;;;;:20;;36280:1;;36261:15;:20;;36280:1;;36261:20;:::i;:::-;;;;-1:-1:-1;;;;;;;36292:13:0;;;;;;:9;:13;;;;;:18;;36309:1;;36292:13;:18;;36309:1;;36292:18;:::i;:::-;;;;-1:-1:-1;;36321:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36321:21:0;-1:-1:-1;;;;;36321:21:0;;;;;;;;;36360:27;;36321:16;;36360:27;;;;;;;41195:21:::1;41024:200:::0;;:::o;8070:197::-;8163:6;:9;;-1:-1:-1;;;;;8183:20:0;;;-1:-1:-1;;;;;;8183:20:0;;;;;;;8219:40;;8163:9;;;8183:20;8163:9;;8219:40;;8144:16;;8219:40;8133:134;8070:197;:::o;34396:439::-;-1:-1:-1;;;;;34476:16:0;;34468:61;;;;-1:-1:-1;;;34468:61:0;;14734:2:1;34468:61:0;;;14716:21:1;;;14753:18;;;14746:30;14812:34;14792:18;;;14785:62;14864:18;;34468:61:0;14532:356:1;34468:61:0;32569:4;32593:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32593:16:0;:30;34540:58;;;;-1:-1:-1;;;34540:58:0;;11395:2:1;34540:58:0;;;11377:21:1;11434:2;11414:18;;;11407:30;11473;11453:18;;;11446:58;11521:18;;34540:58:0;11193:352:1;34540:58:0;-1:-1:-1;;;;;34669:13:0;;;;;;:9;:13;;;;;:18;;34686:1;;34669:13;:18;;34686:1;;34669:18;:::i;:::-;;;;-1:-1:-1;;34698:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34698:21:0;-1:-1:-1;;;;;34698:21:0;;;;;;;;34737:33;;34698:16;;;34737:33;;34698:16;;34737:33;29554:155;;:::o;36882:315::-;37037:8;-1:-1:-1;;;;;37028:17:0;:5;-1:-1:-1;;;;;37028:17:0;;;37020:55;;;;-1:-1:-1;;;37020:55:0;;12157:2:1;37020:55:0;;;12139:21:1;12196:2;12176:18;;;12169:30;12235:27;12215:18;;;12208:55;12280:18;;37020:55:0;11955:349:1;37020:55:0;-1:-1:-1;;;;;37086:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;37086:46:0;;;;;;;;;;37148:41;;9004::1;;;37148::0;;8977:18:1;37148:41:0;;;;;;;36882:315;;;:::o;35064:420::-;35124:13;35140:23;35155:7;35140:14;:23::i;:::-;35124:39;;35265:29;35282:1;35286:7;35265:8;:29::i;:::-;-1:-1:-1;;;;;35307:16:0;;;;;;:9;:16;;;;;:21;;35327:1;;35307:16;:21;;35327:1;;35307:21;:::i;:::-;;;;-1:-1:-1;;35346:16:0;;;;:7;:16;;;;;;35339:23;;-1:-1:-1;;;;;;35339:23:0;;;35380:36;35354:7;;35346:16;-1:-1:-1;;;;;35380:36:0;;;;;35346:16;;35380:36;29554:155;;:::o;31878:313::-;32034:28;32044:4;32050:2;32054:7;32034:9;:28::i;:::-;32081:47;32104:4;32110:2;32114:7;32123:4;32081:22;:47::i;:::-;32073:110;;;;-1:-1:-1;;;32073:110:0;;;;;;;:::i;37985:853::-;38139:4;-1:-1:-1;;;;;38160:13:0;;9802:19;:23;38156:675;;38196:71;;-1:-1:-1;;;38196:71:0;;-1:-1:-1;;;;;38196:36:0;;;;;:71;;2883:10;;38247:4;;38253:7;;38262:4;;38196:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38196:71:0;;;;;;;;-1:-1:-1;;38196:71:0;;;;;;;;;;;;:::i;:::-;;;38192:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38437:13:0;;38433:328;;38480:60;;-1:-1:-1;;;38480:60:0;;;;;;;:::i;38433:328::-;38711:6;38705:13;38696:6;38692:2;38688:15;38681:38;38192:584;-1:-1:-1;;;;;;38318:51:0;-1:-1:-1;;;38318:51:0;;-1:-1:-1;38311:58:0;;38156:675;-1:-1:-1;38815:4:0;37985:853;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:367:1;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:247::-;445:6;498:2;486:9;477:7;473:23;469:32;466:52;;;514:1;511;504:12;466:52;553:9;540:23;572:31;597:5;572:31;:::i;:::-;622:5;386:247;-1:-1:-1;;;386:247:1:o;638:388::-;706:6;714;767:2;755:9;746:7;742:23;738:32;735:52;;;783:1;780;773:12;735:52;822:9;809:23;841:31;866:5;841:31;:::i;:::-;891:5;-1:-1:-1;948:2:1;933:18;;920:32;961:33;920:32;961:33;:::i;:::-;1013:7;1003:17;;;638:388;;;;;:::o;1031:456::-;1108:6;1116;1124;1177:2;1165:9;1156:7;1152:23;1148:32;1145:52;;;1193:1;1190;1183:12;1145:52;1232:9;1219:23;1251:31;1276:5;1251:31;:::i;:::-;1301:5;-1:-1:-1;1358:2:1;1343:18;;1330:32;1371:33;1330:32;1371:33;:::i;:::-;1031:456;;1423:7;;-1:-1:-1;;;1477:2:1;1462:18;;;;1449:32;;1031:456::o;1492:1266::-;1587:6;1595;1603;1611;1664:3;1652:9;1643:7;1639:23;1635:33;1632:53;;;1681:1;1678;1671:12;1632:53;1720:9;1707:23;1739:31;1764:5;1739:31;:::i;:::-;1789:5;-1:-1:-1;1846:2:1;1831:18;;1818:32;1859:33;1818:32;1859:33;:::i;:::-;1911:7;-1:-1:-1;1965:2:1;1950:18;;1937:32;;-1:-1:-1;2020:2:1;2005:18;;1992:32;2043:18;2073:14;;;2070:34;;;2100:1;2097;2090:12;2070:34;2138:6;2127:9;2123:22;2113:32;;2183:7;2176:4;2172:2;2168:13;2164:27;2154:55;;2205:1;2202;2195:12;2154:55;2241:2;2228:16;2263:2;2259;2256:10;2253:36;;;2269:18;;:::i;:::-;2344:2;2338:9;2312:2;2398:13;;-1:-1:-1;;2394:22:1;;;2418:2;2390:31;2386:40;2374:53;;;2442:18;;;2462:22;;;2439:46;2436:72;;;2488:18;;:::i;:::-;2528:10;2524:2;2517:22;2563:2;2555:6;2548:18;2603:7;2598:2;2593;2589;2585:11;2581:20;2578:33;2575:53;;;2624:1;2621;2614:12;2575:53;2680:2;2675;2671;2667:11;2662:2;2654:6;2650:15;2637:46;2725:1;2720:2;2715;2707:6;2703:15;2699:24;2692:35;2746:6;2736:16;;;;;;;1492:1266;;;;;;;:::o;2763:416::-;2828:6;2836;2889:2;2877:9;2868:7;2864:23;2860:32;2857:52;;;2905:1;2902;2895:12;2857:52;2944:9;2931:23;2963:31;2988:5;2963:31;:::i;:::-;3013:5;-1:-1:-1;3070:2:1;3055:18;;3042:32;3112:15;;3105:23;3093:36;;3083:64;;3143:1;3140;3133:12;3184:315;3252:6;3260;3313:2;3301:9;3292:7;3288:23;3284:32;3281:52;;;3329:1;3326;3319:12;3281:52;3368:9;3355:23;3387:31;3412:5;3387:31;:::i;:::-;3437:5;3489:2;3474:18;;;;3461:32;;-1:-1:-1;;;3184:315:1:o;3504:437::-;3590:6;3598;3651:2;3639:9;3630:7;3626:23;3622:32;3619:52;;;3667:1;3664;3657:12;3619:52;3707:9;3694:23;3740:18;3732:6;3729:30;3726:50;;;3772:1;3769;3762:12;3726:50;3811:70;3873:7;3864:6;3853:9;3849:22;3811:70;:::i;:::-;3900:8;;3785:96;;-1:-1:-1;3504:437:1;-1:-1:-1;;;;3504:437:1:o;4388:773::-;4510:6;4518;4526;4534;4587:2;4575:9;4566:7;4562:23;4558:32;4555:52;;;4603:1;4600;4593:12;4555:52;4643:9;4630:23;4672:18;4713:2;4705:6;4702:14;4699:34;;;4729:1;4726;4719:12;4699:34;4768:70;4830:7;4821:6;4810:9;4806:22;4768:70;:::i;:::-;4857:8;;-1:-1:-1;4742:96:1;-1:-1:-1;4945:2:1;4930:18;;4917:32;;-1:-1:-1;4961:16:1;;;4958:36;;;4990:1;4987;4980:12;4958:36;;5029:72;5093:7;5082:8;5071:9;5067:24;5029:72;:::i;:::-;4388:773;;;;-1:-1:-1;5120:8:1;-1:-1:-1;;;;4388:773:1:o;5956:245::-;6014:6;6067:2;6055:9;6046:7;6042:23;6038:32;6035:52;;;6083:1;6080;6073:12;6035:52;6122:9;6109:23;6141:30;6165:5;6141:30;:::i;6206:249::-;6275:6;6328:2;6316:9;6307:7;6303:23;6299:32;6296:52;;;6344:1;6341;6334:12;6296:52;6376:9;6370:16;6395:30;6419:5;6395:30;:::i;6460:200::-;6552:6;6605:3;6593:9;6584:7;6580:23;6576:33;6573:53;;;6622:1;6619;6612:12;6573:53;-1:-1:-1;6645:9:1;6460:200;-1:-1:-1;6460:200:1:o;6665:180::-;6724:6;6777:2;6765:9;6756:7;6752:23;6748:32;6745:52;;;6793:1;6790;6783:12;6745:52;-1:-1:-1;6816:23:1;;6665:180;-1:-1:-1;6665:180:1:o;6850:184::-;6920:6;6973:2;6961:9;6952:7;6948:23;6944:32;6941:52;;;6989:1;6986;6979:12;6941:52;-1:-1:-1;7012:16:1;;6850:184;-1:-1:-1;6850:184:1:o;7039:315::-;7107:6;7115;7168:2;7156:9;7147:7;7143:23;7139:32;7136:52;;;7184:1;7181;7174:12;7136:52;7220:9;7207:23;7197:33;;7280:2;7269:9;7265:18;7252:32;7293:31;7318:5;7293:31;:::i;7687:471::-;7728:3;7766:5;7760:12;7793:6;7788:3;7781:19;7818:1;7828:162;7842:6;7839:1;7836:13;7828:162;;;7904:4;7960:13;;;7956:22;;7950:29;7932:11;;;7928:20;;7921:59;7857:12;7828:162;;;8008:6;8005:1;8002:13;7999:87;;;8074:1;8067:4;8058:6;8053:3;8049:16;8045:27;8038:38;7999:87;-1:-1:-1;8140:2:1;8119:15;-1:-1:-1;;8115:29:1;8106:39;;;;8147:4;8102:50;;7687:471;-1:-1:-1;;7687:471:1:o;8371:488::-;-1:-1:-1;;;;;8640:15:1;;;8622:34;;8692:15;;8687:2;8672:18;;8665:43;8739:2;8724:18;;8717:34;;;8787:3;8782:2;8767:18;;8760:31;;;8565:4;;8808:45;;8833:19;;8825:6;8808:45;:::i;:::-;8800:53;8371:488;-1:-1:-1;;;;;;8371:488:1:o;9056:219::-;9205:2;9194:9;9187:21;9168:4;9225:44;9265:2;9254:9;9250:18;9242:6;9225:44;:::i;9616:340::-;9818:2;9800:21;;;9857:2;9837:18;;;9830:30;-1:-1:-1;;;9891:2:1;9876:18;;9869:46;9947:2;9932:18;;9616:340::o;9961:414::-;10163:2;10145:21;;;10202:2;10182:18;;;10175:30;10241:34;10236:2;10221:18;;10214:62;-1:-1:-1;;;10307:2:1;10292:18;;10285:48;10365:3;10350:19;;9961:414::o;14893:356::-;15095:2;15077:21;;;15114:18;;;15107:30;15173:34;15168:2;15153:18;;15146:62;15240:2;15225:18;;14893:356::o;17813:410::-;18015:2;17997:21;;;18054:2;18034:18;;;18027:30;18093:34;18088:2;18073:18;;18066:62;-1:-1:-1;;;18159:2:1;18144:18;;18137:44;18213:3;18198:19;;17813:410::o;19213:522::-;19291:4;19297:6;19357:11;19344:25;19451:2;19447:7;19436:8;19420:14;19416:29;19412:43;19392:18;19388:68;19378:96;;19470:1;19467;19460:12;19378:96;19497:33;;19549:20;;;-1:-1:-1;19592:18:1;19581:30;;19578:50;;;19624:1;19621;19614:12;19578:50;19657:4;19645:17;;-1:-1:-1;19688:14:1;19684:27;;;19674:38;;19671:58;;;19725:1;19722;19715:12;19740:128;19780:3;19811:1;19807:6;19804:1;19801:13;19798:39;;;19817:18;;:::i;:::-;-1:-1:-1;19853:9:1;;19740:128::o;19873:168::-;19913:7;19979:1;19975;19971:6;19967:14;19964:1;19961:21;19956:1;19949:9;19942:17;19938:45;19935:71;;;19986:18;;:::i;:::-;-1:-1:-1;20026:9:1;;19873:168::o;20046:125::-;20086:4;20114:1;20111;20108:8;20105:34;;;20119:18;;:::i;:::-;-1:-1:-1;20156:9:1;;20046:125::o;20176:136::-;20215:3;20243:5;20233:39;;20252:18;;:::i;:::-;-1:-1:-1;;;20288:18:1;;20176:136::o;20317:380::-;20396:1;20392:12;;;;20439;;;20460:61;;20514:4;20506:6;20502:17;20492:27;;20460:61;20567:2;20559:6;20556:14;20536:18;20533:38;20530:161;;;20613:10;20608:3;20604:20;20601:1;20594:31;20648:4;20645:1;20638:15;20676:4;20673:1;20666:15;20702:135;20741:3;-1:-1:-1;;20762:17:1;;20759:43;;;20782:18;;:::i;:::-;-1:-1:-1;20829:1:1;20818:13;;20702:135::o;20842:127::-;20903:10;20898:3;20894:20;20891:1;20884:31;20934:4;20931:1;20924:15;20958:4;20955:1;20948:15;20974:127;21035:10;21030:3;21026:20;21023:1;21016:31;21066:4;21063:1;21056:15;21090:4;21087:1;21080:15;21106:127;21167:10;21162:3;21158:20;21155:1;21148:31;21198:4;21195:1;21188:15;21222:4;21219:1;21212:15;21728:131;-1:-1:-1;;;;;21803:31:1;;21793:42;;21783:70;;21849:1;21846;21839:12;21864:131;-1:-1:-1;;;;;;21938:32:1;;21928:43;;21918:71;;21985:1;21982;21975:12

Swarm Source

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