ETH Price: $2,268.44 (-4.85%)

Token

Cats Vs Dogs (CVD)
 

Overview

Max Total Supply

45 CVD

Holders

23

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
codename.eth
Balance
5 CVD
0x42cbd461badfa828d64bb2684f49289a62248d4a
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:
CatsVsDogs

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

pragma solidity ^0.8.0;

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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);
            }
        }
    }
}

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

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

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

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

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;


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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @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 of token that is not own");
        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);
    }

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

    /**
     * @dev 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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

pragma solidity ^0.8.0;

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

pragma solidity ^0.8.0;

abstract contract AnimalWorldWar {
  function ownerOf(uint256 tokenId) public virtual view returns (address);
  function tokenOfOwnerByIndex(address owner, uint256 index) public virtual view returns (uint256);
  function balanceOf(address owner) external virtual view returns (uint256 balance);
}

contract CatsVsDogs  is ERC721Enumerable, Ownable
{
    using SafeMath for uint256;
    using Address for address;
    using Strings for uint256;

    AnimalWorldWar private aww = AnimalWorldWar(0x63D2DC90ceB3AE69d0c09EEa7b6d425fb64C92a7); 

    uint public constant _TOTALSUPPLY = 3000;
    uint public maxQuantity = 10;
    uint256 public price = 30000000000000000; // 0.03 ETH
    bool public isPaused = true;
    uint public reserve = 30;

    bool public isMintForTokensAvailable = true;

    uint public paidTokensId = 1730;
    uint public finalTokensId = 0;

    constructor(string memory baseURI) ERC721("Cats Vs Dogs", "CVD")  {
        setBaseURI(baseURI);
    }
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseURI = baseURI;
    }

    function setPrice(uint256 _newPrice) public onlyOwner() {
        price = _newPrice;
    }
    function setMaxQtPerTx(uint256 _quantity) public onlyOwner {
        maxQuantity=_quantity;
    }

    function mintReserveForOwner(uint quantity) public onlyOwner {
        require(quantity <= reserve, "The quantity exceeds the reserve.");
        reserve -= quantity;
        for (uint i = 0; i < quantity; i++) {
                _safeMint(msg.sender, paidTokensId);
                paidTokensId++;
        }
    }

    function mintReserveForOthers(address walletAddress, uint quantity) public onlyOwner {
        require(quantity <= reserve, "The quantity exceeds the reserve.");
        reserve -= quantity;
        for (uint i = 0; i < quantity; i++) {
                _safeMint(walletAddress, paidTokensId);
                paidTokensId++;
        }
    }


    modifier isSaleOpen{
        require(totalSupply() < _TOTALSUPPLY, "Sale end");
        _;
    }
    function flipPauseStatus() public onlyOwner {
        isPaused = !isPaused;
    }
    function flipMintForTokenStatus() public onlyOwner {
        isMintForTokensAvailable = !isMintForTokensAvailable;
    }

    function mintForOneToken(uint awwTokenId) public isSaleOpen{
        require(isPaused == false, "Sale is not active at the moment");
        require(isMintForTokensAvailable == true, "Mint for aww tokens is not available");
        require(awwTokenId < _TOTALSUPPLY, "Token ID is invalid.");
        require(aww.ownerOf(awwTokenId) == msg.sender, "Must own the AWW associated with the token id.");
        require(!_exists(awwTokenId),"A token with this ID already exists");

        _safeMint(msg.sender, awwTokenId);
    }
 
    function mintForNumberOfTokens(uint mintedTokens, uint chosenAmount) public isSaleOpen{
        require(isPaused == false, "Sale is not active at the moment");
        require(chosenAmount > 0, "Number of tokens can not be less than or equal to 0");
        require(chosenAmount <= maxQuantity, "Cannot mint more than ten tokens at once");
        uint balance = aww.balanceOf(msg.sender);
        require(balance > 0, "Must hold at least one Aww token to mint a CvsD token");
        require(balance >= mintedTokens + chosenAmount,"Must hold at least as many Aww tokens as the number of CvsD tokens you intend to mint");

        for(uint i = 0; i < balance && i < chosenAmount && i < maxQuantity; i++) {
            require(totalSupply() < _TOTALSUPPLY, "Cannot exceed max supply of CvsD tokens.");
            uint tokenId = aww.tokenOfOwnerByIndex(msg.sender, i);
            if (!_exists(tokenId)) {
            _safeMint(msg.sender, tokenId);
            }
            else {
                chosenAmount++;
                maxQuantity++;
            }
        }
    }

        function paidMint(uint chosenAmount) public payable isSaleOpen{
        require(isPaused == false, "Sale is not active at the moment");
        require(chosenAmount > 0, "Number of tokens can not be less than or equal to 0");
        require(chosenAmount <= maxQuantity,"Chosen Amount exceeds MaxQuantity");
        require(price.mul(chosenAmount) == msg.value, "Sent ether value is incorrect");

        if(isMintForTokensAvailable == true)
        {
            require(paidTokensId.add(chosenAmount + reserve) <= _TOTALSUPPLY, "Purchase would exceed max supply");
            for (uint i = 0; i < chosenAmount; i++) {
                _safeMint(msg.sender, paidTokensId);
                paidTokensId++;
            }

        }
        else {
            require(totalSupply().add(chosenAmount + reserve) <= _TOTALSUPPLY, "Purchase would exceed max supply");
            if (finalTokensId < paidTokensId)
            {
                for (uint i = 0; i < chosenAmount;) {
                    if (!_exists(finalTokensId)) {
                        _safeMint(msg.sender, finalTokensId);
                        i++;
                    }
                    else {
                        finalTokensId++;
                    }
                }
            }
            else {
                for (uint i = 0; i < chosenAmount; i++) {
                        _safeMint(msg.sender, paidTokensId);
                        paidTokensId++;
                    }
                }
            }
        }

    function tokensOfOwner(address _owner) public view returns (uint256[] memory)
    {
        uint256 count = balanceOf(_owner);
        uint256[] memory result = new uint256[](count);
        for (uint256 index = 0; index < count; index++) {
            result[index] = tokenOfOwnerByIndex(_owner, index);
        }
        return result;
    }

    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_TOTALSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalTokensId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipMintForTokenStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPauseStatus","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":[],"name":"isMintForTokensAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintedTokens","type":"uint256"},{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"mintForNumberOfTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"awwTokenId","type":"uint256"}],"name":"mintForOneToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintReserveForOthers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintReserveForOwner","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"paidMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"paidTokensId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"setMaxQtPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","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":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040527363d2dc90ceb3ae69d0c09eea7b6d425fb64c92a7600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a600d55666a94d74f430000600e556001600f60006101000a81548160ff021916908315150217905550601e6010556001601160006101000a81548160ff0219169083151502179055506106c26012556000601355348015620000bc57600080fd5b5060405162005b1138038062005b118339818101604052810190620000e291906200044a565b6040518060400160405280600c81526020017f4361747320567320446f677300000000000000000000000000000000000000008152506040518060400160405280600381526020017f435644000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200016692919062000328565b5080600190805190602001906200017f92919062000328565b5050506000620001946200024b60201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000244816200025360201b60201c565b5062000635565b600033905090565b620002636200024b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000289620002fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d990620004d1565b60405180910390fd5b8060069080519060200190620002fa92919062000328565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200033690620005a1565b90600052602060002090601f0160209004810192826200035a5760008555620003a6565b82601f106200037557805160ff1916838001178555620003a6565b82800160010185558215620003a6579182015b82811115620003a557825182559160200191906001019062000388565b5b509050620003b59190620003b9565b5090565b5b80821115620003d4576000816000905550600101620003ba565b5090565b6000620003ef620003e98462000527565b620004f3565b9050828152602081018484840111156200040857600080fd5b620004158482856200056b565b509392505050565b600082601f8301126200042f57600080fd5b815162000441848260208601620003d8565b91505092915050565b6000602082840312156200045d57600080fd5b600082015167ffffffffffffffff8111156200047857600080fd5b62000486848285016200041d565b91505092915050565b60006200049e6020836200055a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006020820190508181036000830152620004ec816200048f565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200051d576200051c62000606565b5b8060405250919050565b600067ffffffffffffffff82111562000545576200054462000606565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b838110156200058b5780820151818401526020810190506200056e565b838111156200059b576000848401525b50505050565b60006002820490506001821680620005ba57607f821691505b60208210811415620005d157620005d0620005d7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6154cc80620006456000396000f3fe60806040526004361061023b5760003560e01c8063715018a61161012e578063b187bd26116100ab578063db4568e21161006f578063db4568e21461084e578063e640cf7d14610879578063e985e9c5146108a4578063f2fde38b146108e1578063fa62884c1461090a5761023b565b8063b187bd2614610767578063b38a818014610792578063b88d4fde146107bd578063c87b56dd146107e6578063cd3293de146108235761023b565b806391b7f5ed116100f257806391b7f5ed1461069457806395d89b41146106bd578063a035b1fe146106e8578063a22cb46514610713578063a9164c941461073c5761023b565b8063715018a6146105d3578063743976a0146105ea5780637fd80a5f146106155780638462151c1461062c5780638da5cb5b146106695761023b565b80633ccfd60b116101bc57806355f804b31161018057806355f804b3146104eb5780635e74b5b4146105145780636352211e1461053d57806365cde7331461057a57806370a08231146105965761023b565b80633ccfd60b1461041c57806342842e0e1461043357806349b091b01461045c5780634f6ccce71461048557806352174cea146104c25761023b565b80632323311e116102035780632323311e1461033957806323b872dd146103625780632f745c591461038b578063372dd94a146103c85780633b0aedab146103f35761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806318160ddd1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613c2f565b610921565b6040516102749190614b71565b60405180910390f35b34801561028957600080fd5b5061029261099b565b60405161029f9190614b8c565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613cc2565b610a2d565b6040516102dc9190614abf565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613bf3565b610ab2565b005b34801561031a57600080fd5b50610323610bca565b6040516103309190614fce565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613cc2565b610bd7565b005b34801561036e57600080fd5b5061038960048036038101906103849190613aed565b610e80565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613bf3565b610ee0565b6040516103bf9190614fce565b60405180910390f35b3480156103d457600080fd5b506103dd610f85565b6040516103ea9190614b71565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190613cc2565b610f98565b005b34801561042857600080fd5b5061043161101e565b005b34801561043f57600080fd5b5061045a60048036038101906104559190613aed565b6110e9565b005b34801561046857600080fd5b50610483600480360381019061047e9190613d14565b611109565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613cc2565b6114ee565b6040516104b99190614fce565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190613cc2565b611585565b005b3480156104f757600080fd5b50610512600480360381019061050d9190613c81565b6116a5565b005b34801561052057600080fd5b5061053b60048036038101906105369190613bf3565b61173b565b005b34801561054957600080fd5b50610564600480360381019061055f9190613cc2565b61185c565b6040516105719190614abf565b60405180910390f35b610594600480360381019061058f9190613cc2565b61190e565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190613a5f565b611c73565b6040516105ca9190614fce565b60405180910390f35b3480156105df57600080fd5b506105e8611d2b565b005b3480156105f657600080fd5b506105ff611e30565b60405161060c9190614b8c565b60405180910390f35b34801561062157600080fd5b5061062a611ebe565b005b34801561063857600080fd5b50610653600480360381019061064e9190613a5f565b611f66565b6040516106609190614b4f565b60405180910390f35b34801561067557600080fd5b5061067e612060565b60405161068b9190614abf565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190613cc2565b61208a565b005b3480156106c957600080fd5b506106d2612110565b6040516106df9190614b8c565b60405180910390f35b3480156106f457600080fd5b506106fd6121a2565b60405161070a9190614fce565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613bb7565b6121a8565b005b34801561074857600080fd5b50610751612329565b60405161075e9190614fce565b60405180910390f35b34801561077357600080fd5b5061077c61232f565b6040516107899190614b71565b60405180910390f35b34801561079e57600080fd5b506107a7612342565b6040516107b49190614fce565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613b3c565b612348565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613cc2565b6123aa565b60405161081a9190614b8c565b60405180910390f35b34801561082f57600080fd5b50610838612451565b6040516108459190614fce565b60405180910390f35b34801561085a57600080fd5b50610863612457565b6040516108709190614fce565b60405180910390f35b34801561088557600080fd5b5061088e61245d565b60405161089b9190614fce565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c69190613ab1565b612463565b6040516108d89190614b71565b60405180910390f35b3480156108ed57600080fd5b5061090860048036038101906109039190613a5f565b6124f7565b005b34801561091657600080fd5b5061091f6125ef565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610994575061099382612697565b5b9050919050565b6060600080546109aa906152c1565b80601f01602080910402602001604051908101604052809291908181526020018280546109d6906152c1565b8015610a235780601f106109f857610100808354040283529160200191610a23565b820191906000526020600020905b815481529060010190602001808311610a0657829003601f168201915b5050505050905090565b6000610a3882612779565b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e90614e2e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610abd8261185c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590614f0e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4d6127e5565b73ffffffffffffffffffffffffffffffffffffffff161480610b7c5750610b7b81610b766127e5565b612463565b5b610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290614d0e565b60405180910390fd5b610bc583836127ed565b505050565b6000600980549050905090565b610bb8610be2610bca565b10610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990614dee565b60405180910390fd5b60001515600f60009054906101000a900460ff16151514610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90614fae565b60405180910390fd5b60011515601160009054906101000a900460ff16151514610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590614e4e565b60405180910390fd5b610bb88110610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990614cce565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610d849190614fce565b60206040518083038186803b158015610d9c57600080fd5b505afa158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd49190613a88565b73ffffffffffffffffffffffffffffffffffffffff1614610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190614f4e565b60405180910390fd5b610e3381612779565b15610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614ece565b60405180910390fd5b610e7d33826128a6565b50565b610e91610e8b6127e5565b826128c4565b610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec790614f2e565b60405180910390fd5b610edb8383836129a2565b505050565b6000610eeb83611c73565b8210610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390614bce565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601160009054906101000a900460ff1681565b610fa06127e5565b73ffffffffffffffffffffffffffffffffffffffff16610fbe612060565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90614e6e565b60405180910390fd5b80600d8190555050565b6110266127e5565b73ffffffffffffffffffffffffffffffffffffffff16611044612060565b73ffffffffffffffffffffffffffffffffffffffff161461109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190614e6e565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110e5573d6000803e3d6000fd5b5050565b61110483838360405180602001604052806000815250612348565b505050565b610bb8611114610bca565b10611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b90614dee565b60405180910390fd5b60001515600f60009054906101000a900460ff161515146111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190614fae565b60405180910390fd5b600081116111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e490614bae565b60405180910390fd5b600d54811115611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990614cae565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161128f9190614abf565b60206040518083038186803b1580156112a757600080fd5b505afa1580156112bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112df9190613ceb565b905060008111611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90614f6e565b60405180910390fd5b818361133091906150f6565b811015611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136990614d2e565b60405180910390fd5b60005b818110801561138357508281105b80156113905750600d5481105b156114e857610bb86113a0610bca565b106113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790614eee565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5933846040518363ffffffff1660e01b815260040161143f929190614b26565b60206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f9190613ceb565b905061149a81612779565b6114ad576114a833826128a6565b6114d4565b83806114b8906152f3565b945050600d60008154809291906114ce906152f3565b91905055505b5080806114e0906152f3565b915050611375565b50505050565b60006114f8610bca565b8210611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090614f8e565b60405180910390fd5b60098281548110611573577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61158d6127e5565b73ffffffffffffffffffffffffffffffffffffffff166115ab612060565b73ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890614e6e565b60405180910390fd5b601054811115611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90614c4e565b60405180910390fd5b806010600082825461165891906151d7565b9250508190555060005b818110156116a157611676336012546128a6565b60126000815480929190611689906152f3565b91905055508080611699906152f3565b915050611662565b5050565b6116ad6127e5565b73ffffffffffffffffffffffffffffffffffffffff166116cb612060565b73ffffffffffffffffffffffffffffffffffffffff1614611721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171890614e6e565b60405180910390fd5b8060069080519060200190611737929190613859565b5050565b6117436127e5565b73ffffffffffffffffffffffffffffffffffffffff16611761612060565b73ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90614e6e565b60405180910390fd5b6010548111156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614c4e565b60405180910390fd5b806010600082825461180e91906151d7565b9250508190555060005b818110156118575761182c836012546128a6565b6012600081548092919061183f906152f3565b9190505550808061184f906152f3565b915050611818565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90614d6e565b60405180910390fd5b80915050919050565b610bb8611919610bca565b10611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195090614dee565b60405180910390fd5b60001515600f60009054906101000a900460ff161515146119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690614fae565b60405180910390fd5b600081116119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990614bae565b60405180910390fd5b600d54811115611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90614e0e565b60405180910390fd5b34611a4d82600e54612bfe90919063ffffffff16565b14611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490614d8e565b60405180910390fd5b60011515601160009054906101000a900460ff1615151415611b5757610bb8611ace60105483611abd91906150f6565b601254612c1490919063ffffffff16565b1115611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614dae565b60405180910390fd5b60005b81811015611b5157611b26336012546128a6565b60126000815480929190611b39906152f3565b91905055508080611b49906152f3565b915050611b12565b50611c70565b610bb8611b8160105483611b6b91906150f6565b611b73610bca565b612c1490919063ffffffff16565b1115611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb990614dae565b60405180910390fd5b6012546013541015611c2b5760005b81811015611c2557611be4601354612779565b611c0757611bf4336013546128a6565b8080611bff906152f3565b915050611c20565b60136000815480929190611c1a906152f3565b91905055505b611bd1565b50611c6f565b60005b81811015611c6d57611c42336012546128a6565b60126000815480929190611c55906152f3565b91905055508080611c65906152f3565b915050611c2e565b505b5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614d4e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d336127e5565b73ffffffffffffffffffffffffffffffffffffffff16611d51612060565b73ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90614e6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3611e2e6000612c2a565b565b60068054611e3d906152c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e69906152c1565b8015611eb65780601f10611e8b57610100808354040283529160200191611eb6565b820191906000526020600020905b815481529060010190602001808311611e9957829003601f168201915b505050505081565b611ec66127e5565b73ffffffffffffffffffffffffffffffffffffffff16611ee4612060565b73ffffffffffffffffffffffffffffffffffffffff1614611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3190614e6e565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b60606000611f7383611c73565b905060008167ffffffffffffffff811115611fb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611fe55781602001602082028036833780820191505090505b50905060005b8281101561205557611ffd8582610ee0565b828281518110612036577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061204d906152f3565b915050611feb565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120926127e5565b73ffffffffffffffffffffffffffffffffffffffff166120b0612060565b73ffffffffffffffffffffffffffffffffffffffff1614612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd90614e6e565b60405180910390fd5b80600e8190555050565b60606001805461211f906152c1565b80601f016020809104026020016040519081016040528092919081815260200182805461214b906152c1565b80156121985780601f1061216d57610100808354040283529160200191612198565b820191906000526020600020905b81548152906001019060200180831161217b57829003601f168201915b5050505050905090565b600e5481565b6121b06127e5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561221e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221590614c8e565b60405180910390fd5b806005600061222b6127e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122d86127e5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161231d9190614b71565b60405180910390a35050565b60125481565b600f60009054906101000a900460ff1681565b60135481565b6123596123536127e5565b836128c4565b612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f90614f2e565b60405180910390fd5b6123a484848484612cf0565b50505050565b60606123b582612779565b6123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614eae565b60405180910390fd5b60006123fe612d4c565b9050600081511161241e5760405180602001604052806000815250612449565b8061242884612dde565b604051602001612439929190614a9b565b6040516020818303038152906040525b915050919050565b60105481565b610bb881565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124ff6127e5565b73ffffffffffffffffffffffffffffffffffffffff1661251d612060565b73ffffffffffffffffffffffffffffffffffffffff1614612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614e6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90614c0e565b60405180910390fd5b6125ec81612c2a565b50565b6125f76127e5565b73ffffffffffffffffffffffffffffffffffffffff16612615612060565b73ffffffffffffffffffffffffffffffffffffffff161461266b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266290614e6e565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061276257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612772575061277182612f8b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128608361185c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6128c0828260405180602001604052806000815250612ff5565b5050565b60006128cf82612779565b61290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290590614cee565b60405180910390fd5b60006129198361185c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061298857508373ffffffffffffffffffffffffffffffffffffffff1661297084610a2d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061299957506129988185612463565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129c28261185c565b73ffffffffffffffffffffffffffffffffffffffff1614612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90614e8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7f90614c6e565b60405180910390fd5b612a93838383613050565b612a9e6000826127ed565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aee91906151d7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b4591906150f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612c0c919061517d565b905092915050565b60008183612c2291906150f6565b905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612cfb8484846129a2565b612d0784848484613164565b612d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3d90614bee565b60405180910390fd5b50505050565b606060068054612d5b906152c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612d87906152c1565b8015612dd45780601f10612da957610100808354040283529160200191612dd4565b820191906000526020600020905b815481529060010190602001808311612db757829003601f168201915b5050505050905090565b60606000821415612e26576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f86565b600082905060005b60008214612e58578080612e41906152f3565b915050600a82612e51919061514c565b9150612e2e565b60008167ffffffffffffffff811115612e9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ecc5781602001600182028036833780820191505090505b5090505b60008514612f7f57600182612ee591906151d7565b9150600a85612ef4919061533c565b6030612f0091906150f6565b60f81b818381518110612f3c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f78919061514c565b9450612ed0565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612fff83836132fb565b61300c6000848484613164565b61304b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304290614bee565b60405180910390fd5b505050565b61305b8383836134c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561309e57613099816134ce565b6130dd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146130dc576130db8382613517565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131205761311b81613684565b61315f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461315e5761315d82826137c7565b5b5b505050565b60006131858473ffffffffffffffffffffffffffffffffffffffff16613846565b156132ee578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131ae6127e5565b8786866040518563ffffffff1660e01b81526004016131d09493929190614ada565b602060405180830381600087803b1580156131ea57600080fd5b505af192505050801561321b57506040513d601f19601f820116820180604052508101906132189190613c58565b60015b61329e573d806000811461324b576040519150601f19603f3d011682016040523d82523d6000602084013e613250565b606091505b50600081511415613296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328d90614bee565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132f3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561336b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336290614dce565b60405180910390fd5b61337481612779565b156133b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ab90614c2e565b60405180910390fd5b6133c060008383613050565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461341091906150f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161352484611c73565b61352e91906151d7565b9050600060086000848152602001908152602001600020549050818114613613576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061369891906151d7565b90506000600a60008481526020019081526020016000205490506000600983815481106136ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110613736577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806137ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006137d283611c73565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613865906152c1565b90600052602060002090601f01602090048101928261388757600085556138ce565b82601f106138a057805160ff19168380011785556138ce565b828001600101855582156138ce579182015b828111156138cd5782518255916020019190600101906138b2565b5b5090506138db91906138df565b5090565b5b808211156138f85760008160009055506001016138e0565b5090565b600061390f61390a8461501a565b614fe9565b90508281526020810184848401111561392757600080fd5b61393284828561527f565b509392505050565b600061394d6139488461504a565b614fe9565b90508281526020810184848401111561396557600080fd5b61397084828561527f565b509392505050565b6000813590506139878161543a565b92915050565b60008151905061399c8161543a565b92915050565b6000813590506139b181615451565b92915050565b6000813590506139c681615468565b92915050565b6000815190506139db81615468565b92915050565b600082601f8301126139f257600080fd5b8135613a028482602086016138fc565b91505092915050565b600082601f830112613a1c57600080fd5b8135613a2c84826020860161393a565b91505092915050565b600081359050613a448161547f565b92915050565b600081519050613a598161547f565b92915050565b600060208284031215613a7157600080fd5b6000613a7f84828501613978565b91505092915050565b600060208284031215613a9a57600080fd5b6000613aa88482850161398d565b91505092915050565b60008060408385031215613ac457600080fd5b6000613ad285828601613978565b9250506020613ae385828601613978565b9150509250929050565b600080600060608486031215613b0257600080fd5b6000613b1086828701613978565b9350506020613b2186828701613978565b9250506040613b3286828701613a35565b9150509250925092565b60008060008060808587031215613b5257600080fd5b6000613b6087828801613978565b9450506020613b7187828801613978565b9350506040613b8287828801613a35565b925050606085013567ffffffffffffffff811115613b9f57600080fd5b613bab878288016139e1565b91505092959194509250565b60008060408385031215613bca57600080fd5b6000613bd885828601613978565b9250506020613be9858286016139a2565b9150509250929050565b60008060408385031215613c0657600080fd5b6000613c1485828601613978565b9250506020613c2585828601613a35565b9150509250929050565b600060208284031215613c4157600080fd5b6000613c4f848285016139b7565b91505092915050565b600060208284031215613c6a57600080fd5b6000613c78848285016139cc565b91505092915050565b600060208284031215613c9357600080fd5b600082013567ffffffffffffffff811115613cad57600080fd5b613cb984828501613a0b565b91505092915050565b600060208284031215613cd457600080fd5b6000613ce284828501613a35565b91505092915050565b600060208284031215613cfd57600080fd5b6000613d0b84828501613a4a565b91505092915050565b60008060408385031215613d2757600080fd5b6000613d3585828601613a35565b9250506020613d4685828601613a35565b9150509250929050565b6000613d5c8383614a7d565b60208301905092915050565b613d718161520b565b82525050565b6000613d828261508a565b613d8c81856150b8565b9350613d978361507a565b8060005b83811015613dc8578151613daf8882613d50565b9750613dba836150ab565b925050600181019050613d9b565b5085935050505092915050565b613dde8161521d565b82525050565b6000613def82615095565b613df981856150c9565b9350613e0981856020860161528e565b613e1281615429565b840191505092915050565b6000613e28826150a0565b613e3281856150da565b9350613e4281856020860161528e565b613e4b81615429565b840191505092915050565b6000613e61826150a0565b613e6b81856150eb565b9350613e7b81856020860161528e565b80840191505092915050565b6000613e946033836150da565b91507f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008301527f207468616e206f7220657175616c20746f2030000000000000000000000000006020830152604082019050919050565b6000613efa602b836150da565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613f606032836150da565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613fc66026836150da565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061402c601c836150da565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061406c6021836150da565b91507f546865207175616e74697479206578636565647320746865207265736572766560008301527f2e000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140d26024836150da565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141386019836150da565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006141786028836150da565b91507f43616e6e6f74206d696e74206d6f7265207468616e2074656e20746f6b656e7360008301527f206174206f6e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141de6014836150da565b91507f546f6b656e20494420697320696e76616c69642e0000000000000000000000006000830152602082019050919050565b600061421e602c836150da565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006142846038836150da565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006142ea6055836150da565b91507f4d75737420686f6c64206174206c65617374206173206d616e7920417777207460008301527f6f6b656e7320617320746865206e756d626572206f66204376734420746f6b6560208301527f6e7320796f7520696e74656e6420746f206d696e7400000000000000000000006040830152606082019050919050565b6000614376602a836150da565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006143dc6029836150da565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614442601d836150da565b91507f53656e742065746865722076616c756520697320696e636f72726563740000006000830152602082019050919050565b60006144826020836150da565b91507f507572636861736520776f756c6420657863656564206d617820737570706c796000830152602082019050919050565b60006144c26020836150da565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006145026008836150da565b91507f53616c6520656e640000000000000000000000000000000000000000000000006000830152602082019050919050565b60006145426021836150da565b91507f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008301527f79000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145a8602c836150da565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061460e6024836150da565b91507f4d696e7420666f722061777720746f6b656e73206973206e6f7420617661696c60008301527f61626c65000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146746020836150da565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006146b46029836150da565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061471a602f836150da565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006147806023836150da565b91507f4120746f6b656e2077697468207468697320494420616c72656164792065786960008301527f73747300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147e66028836150da565b91507f43616e6e6f7420657863656564206d617820737570706c79206f66204376734460008301527f20746f6b656e732e0000000000000000000000000000000000000000000000006020830152604082019050919050565b600061484c6021836150da565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148b26031836150da565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614918602e836150da565b91507f4d757374206f776e2074686520415757206173736f636961746564207769746860008301527f2074686520746f6b656e2069642e0000000000000000000000000000000000006020830152604082019050919050565b600061497e6035836150da565b91507f4d75737420686f6c64206174206c65617374206f6e652041777720746f6b656e60008301527f20746f206d696e742061204376734420746f6b656e00000000000000000000006020830152604082019050919050565b60006149e4602c836150da565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614a4a6020836150da565b91507f53616c65206973206e6f742061637469766520617420746865206d6f6d656e746000830152602082019050919050565b614a8681615275565b82525050565b614a9581615275565b82525050565b6000614aa78285613e56565b9150614ab38284613e56565b91508190509392505050565b6000602082019050614ad46000830184613d68565b92915050565b6000608082019050614aef6000830187613d68565b614afc6020830186613d68565b614b096040830185614a8c565b8181036060830152614b1b8184613de4565b905095945050505050565b6000604082019050614b3b6000830185613d68565b614b486020830184614a8c565b9392505050565b60006020820190508181036000830152614b698184613d77565b905092915050565b6000602082019050614b866000830184613dd5565b92915050565b60006020820190508181036000830152614ba68184613e1d565b905092915050565b60006020820190508181036000830152614bc781613e87565b9050919050565b60006020820190508181036000830152614be781613eed565b9050919050565b60006020820190508181036000830152614c0781613f53565b9050919050565b60006020820190508181036000830152614c2781613fb9565b9050919050565b60006020820190508181036000830152614c478161401f565b9050919050565b60006020820190508181036000830152614c678161405f565b9050919050565b60006020820190508181036000830152614c87816140c5565b9050919050565b60006020820190508181036000830152614ca78161412b565b9050919050565b60006020820190508181036000830152614cc78161416b565b9050919050565b60006020820190508181036000830152614ce7816141d1565b9050919050565b60006020820190508181036000830152614d0781614211565b9050919050565b60006020820190508181036000830152614d2781614277565b9050919050565b60006020820190508181036000830152614d47816142dd565b9050919050565b60006020820190508181036000830152614d6781614369565b9050919050565b60006020820190508181036000830152614d87816143cf565b9050919050565b60006020820190508181036000830152614da781614435565b9050919050565b60006020820190508181036000830152614dc781614475565b9050919050565b60006020820190508181036000830152614de7816144b5565b9050919050565b60006020820190508181036000830152614e07816144f5565b9050919050565b60006020820190508181036000830152614e2781614535565b9050919050565b60006020820190508181036000830152614e478161459b565b9050919050565b60006020820190508181036000830152614e6781614601565b9050919050565b60006020820190508181036000830152614e8781614667565b9050919050565b60006020820190508181036000830152614ea7816146a7565b9050919050565b60006020820190508181036000830152614ec78161470d565b9050919050565b60006020820190508181036000830152614ee781614773565b9050919050565b60006020820190508181036000830152614f07816147d9565b9050919050565b60006020820190508181036000830152614f278161483f565b9050919050565b60006020820190508181036000830152614f47816148a5565b9050919050565b60006020820190508181036000830152614f678161490b565b9050919050565b60006020820190508181036000830152614f8781614971565b9050919050565b60006020820190508181036000830152614fa7816149d7565b9050919050565b60006020820190508181036000830152614fc781614a3d565b9050919050565b6000602082019050614fe36000830184614a8c565b92915050565b6000604051905081810181811067ffffffffffffffff821117156150105761500f6153fa565b5b8060405250919050565b600067ffffffffffffffff821115615035576150346153fa565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115615065576150646153fa565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061510182615275565b915061510c83615275565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151415761514061536d565b5b828201905092915050565b600061515782615275565b915061516283615275565b9250826151725761517161539c565b5b828204905092915050565b600061518882615275565b915061519383615275565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151cc576151cb61536d565b5b828202905092915050565b60006151e282615275565b91506151ed83615275565b925082821015615200576151ff61536d565b5b828203905092915050565b600061521682615255565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156152ac578082015181840152602081019050615291565b838111156152bb576000848401525b50505050565b600060028204905060018216806152d957607f821691505b602082108114156152ed576152ec6153cb565b5b50919050565b60006152fe82615275565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153315761533061536d565b5b600182019050919050565b600061534782615275565b915061535283615275565b9250826153625761536161539c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6154438161520b565b811461544e57600080fd5b50565b61545a8161521d565b811461546557600080fd5b50565b61547181615229565b811461547c57600080fd5b50565b61548881615275565b811461549357600080fd5b5056fea2646970667358221220f50f423f6f7b46f6f2cd9be8a13b4396b81dde450683fe5e84c0735e34beed8d64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f616e696d616c776f726c647761722e696f2f746f6b656e2f

Deployed Bytecode

0x60806040526004361061023b5760003560e01c8063715018a61161012e578063b187bd26116100ab578063db4568e21161006f578063db4568e21461084e578063e640cf7d14610879578063e985e9c5146108a4578063f2fde38b146108e1578063fa62884c1461090a5761023b565b8063b187bd2614610767578063b38a818014610792578063b88d4fde146107bd578063c87b56dd146107e6578063cd3293de146108235761023b565b806391b7f5ed116100f257806391b7f5ed1461069457806395d89b41146106bd578063a035b1fe146106e8578063a22cb46514610713578063a9164c941461073c5761023b565b8063715018a6146105d3578063743976a0146105ea5780637fd80a5f146106155780638462151c1461062c5780638da5cb5b146106695761023b565b80633ccfd60b116101bc57806355f804b31161018057806355f804b3146104eb5780635e74b5b4146105145780636352211e1461053d57806365cde7331461057a57806370a08231146105965761023b565b80633ccfd60b1461041c57806342842e0e1461043357806349b091b01461045c5780634f6ccce71461048557806352174cea146104c25761023b565b80632323311e116102035780632323311e1461033957806323b872dd146103625780632f745c591461038b578063372dd94a146103c85780633b0aedab146103f35761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806318160ddd1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613c2f565b610921565b6040516102749190614b71565b60405180910390f35b34801561028957600080fd5b5061029261099b565b60405161029f9190614b8c565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613cc2565b610a2d565b6040516102dc9190614abf565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613bf3565b610ab2565b005b34801561031a57600080fd5b50610323610bca565b6040516103309190614fce565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613cc2565b610bd7565b005b34801561036e57600080fd5b5061038960048036038101906103849190613aed565b610e80565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613bf3565b610ee0565b6040516103bf9190614fce565b60405180910390f35b3480156103d457600080fd5b506103dd610f85565b6040516103ea9190614b71565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190613cc2565b610f98565b005b34801561042857600080fd5b5061043161101e565b005b34801561043f57600080fd5b5061045a60048036038101906104559190613aed565b6110e9565b005b34801561046857600080fd5b50610483600480360381019061047e9190613d14565b611109565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613cc2565b6114ee565b6040516104b99190614fce565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190613cc2565b611585565b005b3480156104f757600080fd5b50610512600480360381019061050d9190613c81565b6116a5565b005b34801561052057600080fd5b5061053b60048036038101906105369190613bf3565b61173b565b005b34801561054957600080fd5b50610564600480360381019061055f9190613cc2565b61185c565b6040516105719190614abf565b60405180910390f35b610594600480360381019061058f9190613cc2565b61190e565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190613a5f565b611c73565b6040516105ca9190614fce565b60405180910390f35b3480156105df57600080fd5b506105e8611d2b565b005b3480156105f657600080fd5b506105ff611e30565b60405161060c9190614b8c565b60405180910390f35b34801561062157600080fd5b5061062a611ebe565b005b34801561063857600080fd5b50610653600480360381019061064e9190613a5f565b611f66565b6040516106609190614b4f565b60405180910390f35b34801561067557600080fd5b5061067e612060565b60405161068b9190614abf565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190613cc2565b61208a565b005b3480156106c957600080fd5b506106d2612110565b6040516106df9190614b8c565b60405180910390f35b3480156106f457600080fd5b506106fd6121a2565b60405161070a9190614fce565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613bb7565b6121a8565b005b34801561074857600080fd5b50610751612329565b60405161075e9190614fce565b60405180910390f35b34801561077357600080fd5b5061077c61232f565b6040516107899190614b71565b60405180910390f35b34801561079e57600080fd5b506107a7612342565b6040516107b49190614fce565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613b3c565b612348565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613cc2565b6123aa565b60405161081a9190614b8c565b60405180910390f35b34801561082f57600080fd5b50610838612451565b6040516108459190614fce565b60405180910390f35b34801561085a57600080fd5b50610863612457565b6040516108709190614fce565b60405180910390f35b34801561088557600080fd5b5061088e61245d565b60405161089b9190614fce565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c69190613ab1565b612463565b6040516108d89190614b71565b60405180910390f35b3480156108ed57600080fd5b5061090860048036038101906109039190613a5f565b6124f7565b005b34801561091657600080fd5b5061091f6125ef565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610994575061099382612697565b5b9050919050565b6060600080546109aa906152c1565b80601f01602080910402602001604051908101604052809291908181526020018280546109d6906152c1565b8015610a235780601f106109f857610100808354040283529160200191610a23565b820191906000526020600020905b815481529060010190602001808311610a0657829003601f168201915b5050505050905090565b6000610a3882612779565b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e90614e2e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610abd8261185c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590614f0e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4d6127e5565b73ffffffffffffffffffffffffffffffffffffffff161480610b7c5750610b7b81610b766127e5565b612463565b5b610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290614d0e565b60405180910390fd5b610bc583836127ed565b505050565b6000600980549050905090565b610bb8610be2610bca565b10610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990614dee565b60405180910390fd5b60001515600f60009054906101000a900460ff16151514610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90614fae565b60405180910390fd5b60011515601160009054906101000a900460ff16151514610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590614e4e565b60405180910390fd5b610bb88110610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990614cce565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610d849190614fce565b60206040518083038186803b158015610d9c57600080fd5b505afa158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd49190613a88565b73ffffffffffffffffffffffffffffffffffffffff1614610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190614f4e565b60405180910390fd5b610e3381612779565b15610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614ece565b60405180910390fd5b610e7d33826128a6565b50565b610e91610e8b6127e5565b826128c4565b610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec790614f2e565b60405180910390fd5b610edb8383836129a2565b505050565b6000610eeb83611c73565b8210610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390614bce565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601160009054906101000a900460ff1681565b610fa06127e5565b73ffffffffffffffffffffffffffffffffffffffff16610fbe612060565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90614e6e565b60405180910390fd5b80600d8190555050565b6110266127e5565b73ffffffffffffffffffffffffffffffffffffffff16611044612060565b73ffffffffffffffffffffffffffffffffffffffff161461109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190614e6e565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110e5573d6000803e3d6000fd5b5050565b61110483838360405180602001604052806000815250612348565b505050565b610bb8611114610bca565b10611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b90614dee565b60405180910390fd5b60001515600f60009054906101000a900460ff161515146111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190614fae565b60405180910390fd5b600081116111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e490614bae565b60405180910390fd5b600d54811115611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990614cae565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161128f9190614abf565b60206040518083038186803b1580156112a757600080fd5b505afa1580156112bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112df9190613ceb565b905060008111611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90614f6e565b60405180910390fd5b818361133091906150f6565b811015611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136990614d2e565b60405180910390fd5b60005b818110801561138357508281105b80156113905750600d5481105b156114e857610bb86113a0610bca565b106113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790614eee565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5933846040518363ffffffff1660e01b815260040161143f929190614b26565b60206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f9190613ceb565b905061149a81612779565b6114ad576114a833826128a6565b6114d4565b83806114b8906152f3565b945050600d60008154809291906114ce906152f3565b91905055505b5080806114e0906152f3565b915050611375565b50505050565b60006114f8610bca565b8210611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090614f8e565b60405180910390fd5b60098281548110611573577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61158d6127e5565b73ffffffffffffffffffffffffffffffffffffffff166115ab612060565b73ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890614e6e565b60405180910390fd5b601054811115611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90614c4e565b60405180910390fd5b806010600082825461165891906151d7565b9250508190555060005b818110156116a157611676336012546128a6565b60126000815480929190611689906152f3565b91905055508080611699906152f3565b915050611662565b5050565b6116ad6127e5565b73ffffffffffffffffffffffffffffffffffffffff166116cb612060565b73ffffffffffffffffffffffffffffffffffffffff1614611721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171890614e6e565b60405180910390fd5b8060069080519060200190611737929190613859565b5050565b6117436127e5565b73ffffffffffffffffffffffffffffffffffffffff16611761612060565b73ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90614e6e565b60405180910390fd5b6010548111156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614c4e565b60405180910390fd5b806010600082825461180e91906151d7565b9250508190555060005b818110156118575761182c836012546128a6565b6012600081548092919061183f906152f3565b9190505550808061184f906152f3565b915050611818565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90614d6e565b60405180910390fd5b80915050919050565b610bb8611919610bca565b10611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195090614dee565b60405180910390fd5b60001515600f60009054906101000a900460ff161515146119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690614fae565b60405180910390fd5b600081116119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990614bae565b60405180910390fd5b600d54811115611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90614e0e565b60405180910390fd5b34611a4d82600e54612bfe90919063ffffffff16565b14611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490614d8e565b60405180910390fd5b60011515601160009054906101000a900460ff1615151415611b5757610bb8611ace60105483611abd91906150f6565b601254612c1490919063ffffffff16565b1115611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614dae565b60405180910390fd5b60005b81811015611b5157611b26336012546128a6565b60126000815480929190611b39906152f3565b91905055508080611b49906152f3565b915050611b12565b50611c70565b610bb8611b8160105483611b6b91906150f6565b611b73610bca565b612c1490919063ffffffff16565b1115611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb990614dae565b60405180910390fd5b6012546013541015611c2b5760005b81811015611c2557611be4601354612779565b611c0757611bf4336013546128a6565b8080611bff906152f3565b915050611c20565b60136000815480929190611c1a906152f3565b91905055505b611bd1565b50611c6f565b60005b81811015611c6d57611c42336012546128a6565b60126000815480929190611c55906152f3565b91905055508080611c65906152f3565b915050611c2e565b505b5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614d4e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d336127e5565b73ffffffffffffffffffffffffffffffffffffffff16611d51612060565b73ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90614e6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3611e2e6000612c2a565b565b60068054611e3d906152c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e69906152c1565b8015611eb65780601f10611e8b57610100808354040283529160200191611eb6565b820191906000526020600020905b815481529060010190602001808311611e9957829003601f168201915b505050505081565b611ec66127e5565b73ffffffffffffffffffffffffffffffffffffffff16611ee4612060565b73ffffffffffffffffffffffffffffffffffffffff1614611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3190614e6e565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b60606000611f7383611c73565b905060008167ffffffffffffffff811115611fb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611fe55781602001602082028036833780820191505090505b50905060005b8281101561205557611ffd8582610ee0565b828281518110612036577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061204d906152f3565b915050611feb565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120926127e5565b73ffffffffffffffffffffffffffffffffffffffff166120b0612060565b73ffffffffffffffffffffffffffffffffffffffff1614612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd90614e6e565b60405180910390fd5b80600e8190555050565b60606001805461211f906152c1565b80601f016020809104026020016040519081016040528092919081815260200182805461214b906152c1565b80156121985780601f1061216d57610100808354040283529160200191612198565b820191906000526020600020905b81548152906001019060200180831161217b57829003601f168201915b5050505050905090565b600e5481565b6121b06127e5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561221e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221590614c8e565b60405180910390fd5b806005600061222b6127e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122d86127e5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161231d9190614b71565b60405180910390a35050565b60125481565b600f60009054906101000a900460ff1681565b60135481565b6123596123536127e5565b836128c4565b612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f90614f2e565b60405180910390fd5b6123a484848484612cf0565b50505050565b60606123b582612779565b6123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614eae565b60405180910390fd5b60006123fe612d4c565b9050600081511161241e5760405180602001604052806000815250612449565b8061242884612dde565b604051602001612439929190614a9b565b6040516020818303038152906040525b915050919050565b60105481565b610bb881565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124ff6127e5565b73ffffffffffffffffffffffffffffffffffffffff1661251d612060565b73ffffffffffffffffffffffffffffffffffffffff1614612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614e6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90614c0e565b60405180910390fd5b6125ec81612c2a565b50565b6125f76127e5565b73ffffffffffffffffffffffffffffffffffffffff16612615612060565b73ffffffffffffffffffffffffffffffffffffffff161461266b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266290614e6e565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061276257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612772575061277182612f8b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128608361185c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6128c0828260405180602001604052806000815250612ff5565b5050565b60006128cf82612779565b61290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290590614cee565b60405180910390fd5b60006129198361185c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061298857508373ffffffffffffffffffffffffffffffffffffffff1661297084610a2d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061299957506129988185612463565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129c28261185c565b73ffffffffffffffffffffffffffffffffffffffff1614612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90614e8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7f90614c6e565b60405180910390fd5b612a93838383613050565b612a9e6000826127ed565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aee91906151d7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b4591906150f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612c0c919061517d565b905092915050565b60008183612c2291906150f6565b905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612cfb8484846129a2565b612d0784848484613164565b612d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3d90614bee565b60405180910390fd5b50505050565b606060068054612d5b906152c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612d87906152c1565b8015612dd45780601f10612da957610100808354040283529160200191612dd4565b820191906000526020600020905b815481529060010190602001808311612db757829003601f168201915b5050505050905090565b60606000821415612e26576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f86565b600082905060005b60008214612e58578080612e41906152f3565b915050600a82612e51919061514c565b9150612e2e565b60008167ffffffffffffffff811115612e9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ecc5781602001600182028036833780820191505090505b5090505b60008514612f7f57600182612ee591906151d7565b9150600a85612ef4919061533c565b6030612f0091906150f6565b60f81b818381518110612f3c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f78919061514c565b9450612ed0565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612fff83836132fb565b61300c6000848484613164565b61304b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304290614bee565b60405180910390fd5b505050565b61305b8383836134c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561309e57613099816134ce565b6130dd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146130dc576130db8382613517565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131205761311b81613684565b61315f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461315e5761315d82826137c7565b5b5b505050565b60006131858473ffffffffffffffffffffffffffffffffffffffff16613846565b156132ee578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131ae6127e5565b8786866040518563ffffffff1660e01b81526004016131d09493929190614ada565b602060405180830381600087803b1580156131ea57600080fd5b505af192505050801561321b57506040513d601f19601f820116820180604052508101906132189190613c58565b60015b61329e573d806000811461324b576040519150601f19603f3d011682016040523d82523d6000602084013e613250565b606091505b50600081511415613296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328d90614bee565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132f3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561336b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336290614dce565b60405180910390fd5b61337481612779565b156133b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ab90614c2e565b60405180910390fd5b6133c060008383613050565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461341091906150f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161352484611c73565b61352e91906151d7565b9050600060086000848152602001908152602001600020549050818114613613576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061369891906151d7565b90506000600a60008481526020019081526020016000205490506000600983815481106136ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110613736577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806137ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006137d283611c73565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613865906152c1565b90600052602060002090601f01602090048101928261388757600085556138ce565b82601f106138a057805160ff19168380011785556138ce565b828001600101855582156138ce579182015b828111156138cd5782518255916020019190600101906138b2565b5b5090506138db91906138df565b5090565b5b808211156138f85760008160009055506001016138e0565b5090565b600061390f61390a8461501a565b614fe9565b90508281526020810184848401111561392757600080fd5b61393284828561527f565b509392505050565b600061394d6139488461504a565b614fe9565b90508281526020810184848401111561396557600080fd5b61397084828561527f565b509392505050565b6000813590506139878161543a565b92915050565b60008151905061399c8161543a565b92915050565b6000813590506139b181615451565b92915050565b6000813590506139c681615468565b92915050565b6000815190506139db81615468565b92915050565b600082601f8301126139f257600080fd5b8135613a028482602086016138fc565b91505092915050565b600082601f830112613a1c57600080fd5b8135613a2c84826020860161393a565b91505092915050565b600081359050613a448161547f565b92915050565b600081519050613a598161547f565b92915050565b600060208284031215613a7157600080fd5b6000613a7f84828501613978565b91505092915050565b600060208284031215613a9a57600080fd5b6000613aa88482850161398d565b91505092915050565b60008060408385031215613ac457600080fd5b6000613ad285828601613978565b9250506020613ae385828601613978565b9150509250929050565b600080600060608486031215613b0257600080fd5b6000613b1086828701613978565b9350506020613b2186828701613978565b9250506040613b3286828701613a35565b9150509250925092565b60008060008060808587031215613b5257600080fd5b6000613b6087828801613978565b9450506020613b7187828801613978565b9350506040613b8287828801613a35565b925050606085013567ffffffffffffffff811115613b9f57600080fd5b613bab878288016139e1565b91505092959194509250565b60008060408385031215613bca57600080fd5b6000613bd885828601613978565b9250506020613be9858286016139a2565b9150509250929050565b60008060408385031215613c0657600080fd5b6000613c1485828601613978565b9250506020613c2585828601613a35565b9150509250929050565b600060208284031215613c4157600080fd5b6000613c4f848285016139b7565b91505092915050565b600060208284031215613c6a57600080fd5b6000613c78848285016139cc565b91505092915050565b600060208284031215613c9357600080fd5b600082013567ffffffffffffffff811115613cad57600080fd5b613cb984828501613a0b565b91505092915050565b600060208284031215613cd457600080fd5b6000613ce284828501613a35565b91505092915050565b600060208284031215613cfd57600080fd5b6000613d0b84828501613a4a565b91505092915050565b60008060408385031215613d2757600080fd5b6000613d3585828601613a35565b9250506020613d4685828601613a35565b9150509250929050565b6000613d5c8383614a7d565b60208301905092915050565b613d718161520b565b82525050565b6000613d828261508a565b613d8c81856150b8565b9350613d978361507a565b8060005b83811015613dc8578151613daf8882613d50565b9750613dba836150ab565b925050600181019050613d9b565b5085935050505092915050565b613dde8161521d565b82525050565b6000613def82615095565b613df981856150c9565b9350613e0981856020860161528e565b613e1281615429565b840191505092915050565b6000613e28826150a0565b613e3281856150da565b9350613e4281856020860161528e565b613e4b81615429565b840191505092915050565b6000613e61826150a0565b613e6b81856150eb565b9350613e7b81856020860161528e565b80840191505092915050565b6000613e946033836150da565b91507f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008301527f207468616e206f7220657175616c20746f2030000000000000000000000000006020830152604082019050919050565b6000613efa602b836150da565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613f606032836150da565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613fc66026836150da565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061402c601c836150da565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061406c6021836150da565b91507f546865207175616e74697479206578636565647320746865207265736572766560008301527f2e000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140d26024836150da565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141386019836150da565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006141786028836150da565b91507f43616e6e6f74206d696e74206d6f7265207468616e2074656e20746f6b656e7360008301527f206174206f6e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141de6014836150da565b91507f546f6b656e20494420697320696e76616c69642e0000000000000000000000006000830152602082019050919050565b600061421e602c836150da565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006142846038836150da565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006142ea6055836150da565b91507f4d75737420686f6c64206174206c65617374206173206d616e7920417777207460008301527f6f6b656e7320617320746865206e756d626572206f66204376734420746f6b6560208301527f6e7320796f7520696e74656e6420746f206d696e7400000000000000000000006040830152606082019050919050565b6000614376602a836150da565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006143dc6029836150da565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614442601d836150da565b91507f53656e742065746865722076616c756520697320696e636f72726563740000006000830152602082019050919050565b60006144826020836150da565b91507f507572636861736520776f756c6420657863656564206d617820737570706c796000830152602082019050919050565b60006144c26020836150da565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006145026008836150da565b91507f53616c6520656e640000000000000000000000000000000000000000000000006000830152602082019050919050565b60006145426021836150da565b91507f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008301527f79000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145a8602c836150da565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061460e6024836150da565b91507f4d696e7420666f722061777720746f6b656e73206973206e6f7420617661696c60008301527f61626c65000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146746020836150da565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006146b46029836150da565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061471a602f836150da565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006147806023836150da565b91507f4120746f6b656e2077697468207468697320494420616c72656164792065786960008301527f73747300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147e66028836150da565b91507f43616e6e6f7420657863656564206d617820737570706c79206f66204376734460008301527f20746f6b656e732e0000000000000000000000000000000000000000000000006020830152604082019050919050565b600061484c6021836150da565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148b26031836150da565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614918602e836150da565b91507f4d757374206f776e2074686520415757206173736f636961746564207769746860008301527f2074686520746f6b656e2069642e0000000000000000000000000000000000006020830152604082019050919050565b600061497e6035836150da565b91507f4d75737420686f6c64206174206c65617374206f6e652041777720746f6b656e60008301527f20746f206d696e742061204376734420746f6b656e00000000000000000000006020830152604082019050919050565b60006149e4602c836150da565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614a4a6020836150da565b91507f53616c65206973206e6f742061637469766520617420746865206d6f6d656e746000830152602082019050919050565b614a8681615275565b82525050565b614a9581615275565b82525050565b6000614aa78285613e56565b9150614ab38284613e56565b91508190509392505050565b6000602082019050614ad46000830184613d68565b92915050565b6000608082019050614aef6000830187613d68565b614afc6020830186613d68565b614b096040830185614a8c565b8181036060830152614b1b8184613de4565b905095945050505050565b6000604082019050614b3b6000830185613d68565b614b486020830184614a8c565b9392505050565b60006020820190508181036000830152614b698184613d77565b905092915050565b6000602082019050614b866000830184613dd5565b92915050565b60006020820190508181036000830152614ba68184613e1d565b905092915050565b60006020820190508181036000830152614bc781613e87565b9050919050565b60006020820190508181036000830152614be781613eed565b9050919050565b60006020820190508181036000830152614c0781613f53565b9050919050565b60006020820190508181036000830152614c2781613fb9565b9050919050565b60006020820190508181036000830152614c478161401f565b9050919050565b60006020820190508181036000830152614c678161405f565b9050919050565b60006020820190508181036000830152614c87816140c5565b9050919050565b60006020820190508181036000830152614ca78161412b565b9050919050565b60006020820190508181036000830152614cc78161416b565b9050919050565b60006020820190508181036000830152614ce7816141d1565b9050919050565b60006020820190508181036000830152614d0781614211565b9050919050565b60006020820190508181036000830152614d2781614277565b9050919050565b60006020820190508181036000830152614d47816142dd565b9050919050565b60006020820190508181036000830152614d6781614369565b9050919050565b60006020820190508181036000830152614d87816143cf565b9050919050565b60006020820190508181036000830152614da781614435565b9050919050565b60006020820190508181036000830152614dc781614475565b9050919050565b60006020820190508181036000830152614de7816144b5565b9050919050565b60006020820190508181036000830152614e07816144f5565b9050919050565b60006020820190508181036000830152614e2781614535565b9050919050565b60006020820190508181036000830152614e478161459b565b9050919050565b60006020820190508181036000830152614e6781614601565b9050919050565b60006020820190508181036000830152614e8781614667565b9050919050565b60006020820190508181036000830152614ea7816146a7565b9050919050565b60006020820190508181036000830152614ec78161470d565b9050919050565b60006020820190508181036000830152614ee781614773565b9050919050565b60006020820190508181036000830152614f07816147d9565b9050919050565b60006020820190508181036000830152614f278161483f565b9050919050565b60006020820190508181036000830152614f47816148a5565b9050919050565b60006020820190508181036000830152614f678161490b565b9050919050565b60006020820190508181036000830152614f8781614971565b9050919050565b60006020820190508181036000830152614fa7816149d7565b9050919050565b60006020820190508181036000830152614fc781614a3d565b9050919050565b6000602082019050614fe36000830184614a8c565b92915050565b6000604051905081810181811067ffffffffffffffff821117156150105761500f6153fa565b5b8060405250919050565b600067ffffffffffffffff821115615035576150346153fa565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115615065576150646153fa565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061510182615275565b915061510c83615275565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151415761514061536d565b5b828201905092915050565b600061515782615275565b915061516283615275565b9250826151725761517161539c565b5b828204905092915050565b600061518882615275565b915061519383615275565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151cc576151cb61536d565b5b828202905092915050565b60006151e282615275565b91506151ed83615275565b925082821015615200576151ff61536d565b5b828203905092915050565b600061521682615255565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156152ac578082015181840152602081019050615291565b838111156152bb576000848401525b50505050565b600060028204905060018216806152d957607f821691505b602082108114156152ed576152ec6153cb565b5b50919050565b60006152fe82615275565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153315761533061536d565b5b600182019050919050565b600061534782615275565b915061535283615275565b9250826153625761536161539c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6154438161520b565b811461544e57600080fd5b50565b61545a8161521d565b811461546557600080fd5b50565b61547181615229565b811461547c57600080fd5b50565b61548881615275565b811461549357600080fd5b5056fea2646970667358221220f50f423f6f7b46f6f2cd9be8a13b4396b81dde450683fe5e84c0735e34beed8d64736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f616e696d616c776f726c647761722e696f2f746f6b656e2f

-----Decoded View---------------
Arg [0] : baseURI (string): https://animalworldwar.io/token/

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [2] : 68747470733a2f2f616e696d616c776f726c647761722e696f2f746f6b656e2f


Deployed Bytecode Sourcemap

49479:5714:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43000:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30982:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32536:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32059:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43640:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51498:532;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33426:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43308:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49941:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50382:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55050:140;;;;;;;;;;;;;:::i;:::-;;33836:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52039:1093;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43830:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50489:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50179:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50817:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30676:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53144:1539;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30406:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28067:150;;;;;;;;;;;;;:::i;:::-;;29704:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51368:122;;;;;;;;;;;;;:::i;:::-;;54691:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27416:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50284:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31151:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49815:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32829:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49993:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49874:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50031:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34092:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31326:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49908:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49733:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49780:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33195:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28372:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51279:83;;;;;;;;;;;;;:::i;:::-;;43000:224;43102:4;43141:35;43126:50;;;:11;:50;;;;:90;;;;43180:36;43204:11;43180:23;:36::i;:::-;43126:90;43119:97;;43000:224;;;:::o;30982:100::-;31036:13;31069:5;31062:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30982:100;:::o;32536:221::-;32612:7;32640:16;32648:7;32640;:16::i;:::-;32632:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32725:15;:24;32741:7;32725:24;;;;;;;;;;;;;;;;;;;;;32718:31;;32536:221;;;:::o;32059:411::-;32140:13;32156:23;32171:7;32156:14;:23::i;:::-;32140:39;;32204:5;32198:11;;:2;:11;;;;32190:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32298:5;32282:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32307:37;32324:5;32331:12;:10;:12::i;:::-;32307:16;:37::i;:::-;32282:62;32260:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32441:21;32450:2;32454:7;32441:8;:21::i;:::-;32059:411;;;:::o;43640:113::-;43701:7;43728:10;:17;;;;43721:24;;43640:113;:::o;51498:532::-;49769:4;51212:13;:11;:13::i;:::-;:28;51204:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;51588:5:::1;51576:17;;:8;;;;;;;;;;;:17;;;51568:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;51677:4;51649:32;;:24;;;;;;;;;;;:32;;;51641:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;49769:4;51741:10;:25;51733:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51837:10;51810:37;;:3;;;;;;;;;;;:11;;;51822:10;51810:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;;51802:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;51918:19;51926:10;51918:7;:19::i;:::-;51917:20;51909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51989:33;51999:10;52011;51989:9;:33::i;:::-;51498:532:::0;:::o;33426:339::-;33621:41;33640:12;:10;:12::i;:::-;33654:7;33621:18;:41::i;:::-;33613:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33729:28;33739:4;33745:2;33749:7;33729:9;:28::i;:::-;33426:339;;;:::o;43308:256::-;43405:7;43441:23;43458:5;43441:16;:23::i;:::-;43433:5;:31;43425:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43530:12;:19;43543:5;43530:19;;;;;;;;;;;;;;;:26;43550:5;43530:26;;;;;;;;;;;;43523:33;;43308:256;;;;:::o;49941:43::-;;;;;;;;;;;;;:::o;50382:99::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50464:9:::1;50452:11;:21;;;;50382:99:::0;:::o;55050:140::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55098:12:::1;55113:21;55098:36;;55153:10;55145:28;;:37;55174:7;55145:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27707:1;55050:140::o:0;33836:185::-;33974:39;33991:4;33997:2;34001:7;33974:39;;;;;;;;;;;;:16;:39::i;:::-;33836:185;;;:::o;52039:1093::-;49769:4;51212:13;:11;:13::i;:::-;:28;51204:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;52156:5:::1;52144:17;;:8;;;;;;;;;;;:17;;;52136:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;52232:1;52217:12;:16;52209:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;52324:11;;52308:12;:27;;52300:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;52391:12;52406:3;;;;;;;;;;;:13;;;52420:10;52406:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52391:40;;52460:1;52450:7;:11;52442:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;52564:12;52549;:27;;;;:::i;:::-;52538:7;:38;;52530:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;52682:6;52678:447;52698:7;52694:1;:11;:31;;;;;52713:12;52709:1;:16;52694:31;:50;;;;;52733:11;;52729:1;:15;52694:50;52678:447;;;49769:4;52774:13;:11;:13::i;:::-;:28;52766:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;52862:12;52877:3;;;;;;;;;;;:23;;;52901:10;52913:1;52877:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52862:53;;52935:16;52943:7;52935;:16::i;:::-;52930:184;;52968:30;52978:10;52990:7;52968:9;:30::i;:::-;52930:184;;;53052:14;;;;;:::i;:::-;;;;53085:11;;:13;;;;;;;;;:::i;:::-;;;;;;52930:184;52678:447;52746:3;;;;;:::i;:::-;;;;52678:447;;;;51264:1;52039:1093:::0;;:::o;43830:233::-;43905:7;43941:30;:28;:30::i;:::-;43933:5;:38;43925:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44038:10;44049:5;44038:17;;;;;;;;;;;;;;;;;;;;;;;;44031:24;;43830:233;;;:::o;50489:320::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50581:7:::1;;50569:8;:19;;50561:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50648:8;50637:7;;:19;;;;;;;:::i;:::-;;;;;;;;50672:6;50667:135;50688:8;50684:1;:12;50667:135;;;50722:35;50732:10;50744:12;;50722:9;:35::i;:::-;50776:12;;:14;;;;;;;;;:::i;:::-;;;;;;50698:3;;;;;:::i;:::-;;;;50667:135;;;;50489:320:::0;:::o;50179:97::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50261:7:::1;50250:8;:18;;;;;;;;;;;;:::i;:::-;;50179:97:::0;:::o;50817:347::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50933:7:::1;;50921:8;:19;;50913:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;51000:8;50989:7;;:19;;;;;;;:::i;:::-;;;;;;;;51024:6;51019:138;51040:8;51036:1;:12;51019:138;;;51074:38;51084:13;51099:12;;51074:9;:38::i;:::-;51131:12;;:14;;;;;;;;;:::i;:::-;;;;;;51050:3;;;;;:::i;:::-;;;;51019:138;;;;50817:347:::0;;:::o;30676:239::-;30748:7;30768:13;30784:7;:16;30792:7;30784:16;;;;;;;;;;;;;;;;;;;;;30768:32;;30836:1;30819:19;;:5;:19;;;;30811:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30902:5;30895:12;;;30676:239;;;:::o;53144:1539::-;49769:4;51212:13;:11;:13::i;:::-;:28;51204:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;53237:5:::1;53225:17;;:8;;;;;;;;;;;:17;;;53217:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53313:1;53298:12;:16;53290:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;53405:11;;53389:12;:27;;53381:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;53499:9;53472:23;53482:12;53472:5;;:9;;:23;;;;:::i;:::-;:36;53464:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;53586:4;53558:32;;:24;;;;;;;;;;;:32;;;53555:1117;;;49769:4;53624:40;53656:7;;53641:12;:22;;;;:::i;:::-;53624:12;;:16;;:40;;;;:::i;:::-;:56;;53616:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;53737:6;53732:143;53753:12;53749:1;:16;53732:143;;;53791:35;53801:10;53813:12;;53791:9;:35::i;:::-;53845:12;;:14;;;;;;;;;:::i;:::-;;;;;;53767:3;;;;;:::i;:::-;;;;53732:143;;;;53555:1117;;;49769:4;53926:41;53959:7;;53944:12;:22;;;;:::i;:::-;53926:13;:11;:13::i;:::-;:17;;:41;;;;:::i;:::-;:57;;53918:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;54055:12;;54039:13;;:28;54035:622;;;54106:6;54101:317;54122:12;54118:1;:16;54101:317;;;54165:22;54173:13;;54165:7;:22::i;:::-;54160:239;;54216:36;54226:10;54238:13;;54216:9;:36::i;:::-;54279:3;;;;;:::i;:::-;;;;54160:239;;;54360:13;;:15;;;;;;;;;:::i;:::-;;;;;;54160:239;54101:317;;;;54035:622;;;54476:6;54471:167;54492:12;54488:1;:16;54471:167;;;54538:35;54548:10;54560:12;;54538:9;:35::i;:::-;54600:12;;:14;;;;;;;;;:::i;:::-;;;;;;54506:3;;;;;:::i;:::-;;;;54471:167;;;;54035:622;53555:1117;53144:1539:::0;:::o;30406:208::-;30478:7;30523:1;30506:19;;:5;:19;;;;30498:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30590:9;:16;30600:5;30590:16;;;;;;;;;;;;;;;;30583:23;;30406:208;;;:::o;28067:150::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28174:1:::1;28137:40;;28158:6;;;;;;;;;;;28137:40;;;;;;;;;;;;28188:21;28206:1;28188:9;:21::i;:::-;28067:150::o:0;29704:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51368:122::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51458:24:::1;;;;;;;;;;;51457:25;51430:24;;:52;;;;;;;;;;;;;;;;;;51368:122::o:0;54691:351::-;54751:16;54785:13;54801:17;54811:6;54801:9;:17::i;:::-;54785:33;;54829:23;54869:5;54855:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54829:46;;54891:13;54886:125;54918:5;54910;:13;54886:125;;;54965:34;54985:6;54993:5;54965:19;:34::i;:::-;54949:6;54956:5;54949:13;;;;;;;;;;;;;;;;;;;;;:50;;;;;54925:7;;;;;:::i;:::-;;;;54886:125;;;;55028:6;55021:13;;;;54691:351;;;:::o;27416:87::-;27462:7;27489:6;;;;;;;;;;;27482:13;;27416:87;:::o;50284:92::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50359:9:::1;50351:5;:17;;;;50284:92:::0;:::o;31151:104::-;31207:13;31240:7;31233:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31151:104;:::o;49815:40::-;;;;:::o;32829:295::-;32944:12;:10;:12::i;:::-;32932:24;;:8;:24;;;;32924:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33044:8;32999:18;:32;33018:12;:10;:12::i;:::-;32999:32;;;;;;;;;;;;;;;:42;33032:8;32999:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33097:8;33068:48;;33083:12;:10;:12::i;:::-;33068:48;;;33107:8;33068:48;;;;;;:::i;:::-;;;;;;;;32829:295;;:::o;49993:31::-;;;;:::o;49874:27::-;;;;;;;;;;;;;:::o;50031:29::-;;;;:::o;34092:328::-;34267:41;34286:12;:10;:12::i;:::-;34300:7;34267:18;:41::i;:::-;34259:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34373:39;34387:4;34393:2;34397:7;34406:5;34373:13;:39::i;:::-;34092:328;;;;:::o;31326:324::-;31399:13;31433:16;31441:7;31433;:16::i;:::-;31425:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31514:18;31535:9;:7;:9::i;:::-;31514:30;;31583:1;31568:4;31562:18;:22;:80;;;;;;;;;;;;;;;;;31611:4;31617:18;:7;:16;:18::i;:::-;31594:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31562:80;31555:87;;;31326:324;;;:::o;49908:24::-;;;;:::o;49733:40::-;49769:4;49733:40;:::o;49780:28::-;;;;:::o;33195:164::-;33292:4;33316:18;:25;33335:5;33316:25;;;;;;;;;;;;;;;:35;33342:8;33316:35;;;;;;;;;;;;;;;;;;;;;;;;;33309:42;;33195:164;;;;:::o;28372:192::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28481:1:::1;28461:22;;:8;:22;;;;28453:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28537:19;28547:8;28537:9;:19::i;:::-;28372:192:::0;:::o;51279:83::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51346:8:::1;;;;;;;;;;;51345:9;51334:8;;:20;;;;;;;;;;;;;;;;;;51279:83::o:0;30037:305::-;30139:4;30191:25;30176:40;;;:11;:40;;;;:105;;;;30248:33;30233:48;;;:11;:48;;;;30176:105;:158;;;;30298:36;30322:11;30298:23;:36::i;:::-;30176:158;30156:178;;30037:305;;;:::o;35930:127::-;35995:4;36047:1;36019:30;;:7;:16;36027:7;36019:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36012:37;;35930:127;;;:::o;26167:98::-;26220:7;26247:10;26240:17;;26167:98;:::o;39912:174::-;40014:2;39987:15;:24;40003:7;39987:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40070:7;40066:2;40032:46;;40041:23;40056:7;40041:14;:23::i;:::-;40032:46;;;;;;;;;;;;39912:174;;:::o;36914:110::-;36990:26;37000:2;37004:7;36990:26;;;;;;;;;;;;:9;:26::i;:::-;36914:110;;:::o;36224:348::-;36317:4;36342:16;36350:7;36342;:16::i;:::-;36334:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36418:13;36434:23;36449:7;36434:14;:23::i;:::-;36418:39;;36487:5;36476:16;;:7;:16;;;:51;;;;36520:7;36496:31;;:20;36508:7;36496:11;:20::i;:::-;:31;;;36476:51;:87;;;;36531:32;36548:5;36555:7;36531:16;:32::i;:::-;36476:87;36468:96;;;36224:348;;;;:::o;39216:578::-;39375:4;39348:31;;:23;39363:7;39348:14;:23::i;:::-;:31;;;39340:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39458:1;39444:16;;:2;:16;;;;39436:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39514:39;39535:4;39541:2;39545:7;39514:20;:39::i;:::-;39618:29;39635:1;39639:7;39618:8;:29::i;:::-;39679:1;39660:9;:15;39670:4;39660:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39708:1;39691:9;:13;39701:2;39691:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39739:2;39720:7;:16;39728:7;39720:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39778:7;39774:2;39759:27;;39768:4;39759:27;;;;;;;;;;;;39216:578;;;:::o;3501:98::-;3559:7;3590:1;3586;:5;;;;:::i;:::-;3579:12;;3501:98;;;;:::o;2763:::-;2821:7;2852:1;2848;:5;;;;:::i;:::-;2841:12;;2763:98;;;;:::o;28572:173::-;28628:16;28647:6;;;;;;;;;;;28628:25;;28673:8;28664:6;;:17;;;;;;;;;;;;;;;;;;28728:8;28697:40;;28718:8;28697:40;;;;;;;;;;;;28572:173;;:::o;35302:315::-;35459:28;35469:4;35475:2;35479:7;35459:9;:28::i;:::-;35506:48;35529:4;35535:2;35539:7;35548:5;35506:22;:48::i;:::-;35498:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35302:315;;;;:::o;31898:99::-;31948:13;31981:8;31974:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31898:99;:::o;7181:723::-;7237:13;7467:1;7458:5;:10;7454:53;;;7485:10;;;;;;;;;;;;;;;;;;;;;7454:53;7517:12;7532:5;7517:20;;7548:14;7573:78;7588:1;7580:4;:9;7573:78;;7606:8;;;;;:::i;:::-;;;;7637:2;7629:10;;;;;:::i;:::-;;;7573:78;;;7661:19;7693:6;7683:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7661:39;;7711:154;7727:1;7718:5;:10;7711:154;;7755:1;7745:11;;;;;:::i;:::-;;;7822:2;7814:5;:10;;;;:::i;:::-;7801:2;:24;;;;:::i;:::-;7788:39;;7771:6;7778;7771:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7851:2;7842:11;;;;;:::i;:::-;;;7711:154;;;7889:6;7875:21;;;;;7181:723;;;;:::o;19153:157::-;19238:4;19277:25;19262:40;;;:11;:40;;;;19255:47;;19153:157;;;:::o;37251:321::-;37381:18;37387:2;37391:7;37381:5;:18::i;:::-;37432:54;37463:1;37467:2;37471:7;37480:5;37432:22;:54::i;:::-;37410:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37251:321;;;:::o;44676:589::-;44820:45;44847:4;44853:2;44857:7;44820:26;:45::i;:::-;44898:1;44882:18;;:4;:18;;;44878:187;;;44917:40;44949:7;44917:31;:40::i;:::-;44878:187;;;44987:2;44979:10;;:4;:10;;;44975:90;;45006:47;45039:4;45045:7;45006:32;:47::i;:::-;44975:90;44878:187;45093:1;45079:16;;:2;:16;;;45075:183;;;45112:45;45149:7;45112:36;:45::i;:::-;45075:183;;;45185:4;45179:10;;:2;:10;;;45175:83;;45206:40;45234:2;45238:7;45206:27;:40::i;:::-;45175:83;45075:183;44676:589;;;:::o;40651:803::-;40806:4;40827:15;:2;:13;;;:15::i;:::-;40823:624;;;40879:2;40863:36;;;40900:12;:10;:12::i;:::-;40914:4;40920:7;40929:5;40863:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40859:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41126:1;41109:6;:13;:18;41105:272;;;41152:60;;;;;;;;;;:::i;:::-;;;;;;;;41105:272;41327:6;41321:13;41312:6;41308:2;41304:15;41297:38;40859:533;40996:45;;;40986:55;;;:6;:55;;;;40979:62;;;;;40823:624;41431:4;41424:11;;40651:803;;;;;;;:::o;37908:382::-;38002:1;37988:16;;:2;:16;;;;37980:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38061:16;38069:7;38061;:16::i;:::-;38060:17;38052:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38123:45;38152:1;38156:2;38160:7;38123:20;:45::i;:::-;38198:1;38181:9;:13;38191:2;38181:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38229:2;38210:7;:16;38218:7;38210:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38274:7;38270:2;38249:33;;38266:1;38249:33;;;;;;;;;;;;37908:382;;:::o;42026:126::-;;;;:::o;45988:164::-;46092:10;:17;;;;46065:15;:24;46081:7;46065:24;;;;;;;;;;;:44;;;;46120:10;46136:7;46120:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45988:164;:::o;46779:988::-;47045:22;47095:1;47070:22;47087:4;47070:16;:22::i;:::-;:26;;;;:::i;:::-;47045:51;;47107:18;47128:17;:26;47146:7;47128:26;;;;;;;;;;;;47107:47;;47275:14;47261:10;:28;47257:328;;47306:19;47328:12;:18;47341:4;47328:18;;;;;;;;;;;;;;;:34;47347:14;47328:34;;;;;;;;;;;;47306:56;;47412:11;47379:12;:18;47392:4;47379:18;;;;;;;;;;;;;;;:30;47398:10;47379:30;;;;;;;;;;;:44;;;;47529:10;47496:17;:30;47514:11;47496:30;;;;;;;;;;;:43;;;;47257:328;;47681:17;:26;47699:7;47681:26;;;;;;;;;;;47674:33;;;47725:12;:18;47738:4;47725:18;;;;;;;;;;;;;;;:34;47744:14;47725:34;;;;;;;;;;;47718:41;;;46779:988;;;;:::o;48062:1079::-;48315:22;48360:1;48340:10;:17;;;;:21;;;;:::i;:::-;48315:46;;48372:18;48393:15;:24;48409:7;48393:24;;;;;;;;;;;;48372:45;;48744:19;48766:10;48777:14;48766:26;;;;;;;;;;;;;;;;;;;;;;;;48744:48;;48830:11;48805:10;48816;48805:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;48941:10;48910:15;:28;48926:11;48910:28;;;;;;;;;;;:41;;;;49082:15;:24;49098:7;49082:24;;;;;;;;;;;49075:31;;;49117:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48062:1079;;;;:::o;45566:221::-;45651:14;45668:20;45685:2;45668:16;:20::i;:::-;45651:37;;45726:7;45699:12;:16;45712:2;45699:16;;;;;;;;;;;;;;;:24;45716:6;45699:24;;;;;;;;;;;:34;;;;45773:6;45744:17;:26;45762:7;45744:26;;;;;;;;;;;:35;;;;45566:221;;;:::o;9648:387::-;9708:4;9916:12;9983:7;9971:20;9963:28;;10026:1;10019:4;:8;10012:15;;;9648:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:143::-;;938:6;932:13;923:22;;954:33;981:5;954:33;:::i;:::-;913:80;;;;:::o;999:133::-;;1080:6;1067:20;1058:29;;1096:30;1120:5;1096:30;:::i;:::-;1048:84;;;;:::o;1138:137::-;;1221:6;1208:20;1199:29;;1237:32;1263:5;1237:32;:::i;:::-;1189:86;;;;:::o;1281:141::-;;1368:6;1362:13;1353:22;;1384:32;1410:5;1384:32;:::i;:::-;1343:79;;;;:::o;1441:271::-;;1545:3;1538:4;1530:6;1526:17;1522:27;1512:2;;1563:1;1560;1553:12;1512:2;1603:6;1590:20;1628:78;1702:3;1694:6;1687:4;1679:6;1675:17;1628:78;:::i;:::-;1619:87;;1502:210;;;;;:::o;1732:273::-;;1837:3;1830:4;1822:6;1818:17;1814:27;1804:2;;1855:1;1852;1845:12;1804:2;1895:6;1882:20;1920:79;1995:3;1987:6;1980:4;1972:6;1968:17;1920:79;:::i;:::-;1911:88;;1794:211;;;;;:::o;2011:139::-;;2095:6;2082:20;2073:29;;2111:33;2138:5;2111:33;:::i;:::-;2063:87;;;;:::o;2156:143::-;;2244:6;2238:13;2229:22;;2260:33;2287:5;2260:33;:::i;:::-;2219:80;;;;:::o;2305:262::-;;2413:2;2401:9;2392:7;2388:23;2384:32;2381:2;;;2429:1;2426;2419:12;2381:2;2472:1;2497:53;2542:7;2533:6;2522:9;2518:22;2497:53;:::i;:::-;2487:63;;2443:117;2371:196;;;;:::o;2573:284::-;;2692:2;2680:9;2671:7;2667:23;2663:32;2660:2;;;2708:1;2705;2698:12;2660:2;2751:1;2776:64;2832:7;2823:6;2812:9;2808:22;2776:64;:::i;:::-;2766:74;;2722:128;2650:207;;;;:::o;2863:407::-;;;2988:2;2976:9;2967:7;2963:23;2959:32;2956:2;;;3004:1;3001;2994:12;2956:2;3047:1;3072:53;3117:7;3108:6;3097:9;3093:22;3072:53;:::i;:::-;3062:63;;3018:117;3174:2;3200:53;3245:7;3236:6;3225:9;3221:22;3200:53;:::i;:::-;3190:63;;3145:118;2946:324;;;;;:::o;3276:552::-;;;;3418:2;3406:9;3397:7;3393:23;3389:32;3386:2;;;3434:1;3431;3424:12;3386:2;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3732:2;3758:53;3803:7;3794:6;3783:9;3779:22;3758:53;:::i;:::-;3748:63;;3703:118;3376:452;;;;;:::o;3834:809::-;;;;;4002:3;3990:9;3981:7;3977:23;3973:33;3970:2;;;4019:1;4016;4009:12;3970:2;4062:1;4087:53;4132:7;4123:6;4112:9;4108:22;4087:53;:::i;:::-;4077:63;;4033:117;4189:2;4215:53;4260:7;4251:6;4240:9;4236:22;4215:53;:::i;:::-;4205:63;;4160:118;4317:2;4343:53;4388:7;4379:6;4368:9;4364:22;4343:53;:::i;:::-;4333:63;;4288:118;4473:2;4462:9;4458:18;4445:32;4504:18;4496:6;4493:30;4490:2;;;4536:1;4533;4526:12;4490:2;4564:62;4618:7;4609:6;4598:9;4594:22;4564:62;:::i;:::-;4554:72;;4416:220;3960:683;;;;;;;:::o;4649:401::-;;;4771:2;4759:9;4750:7;4746:23;4742:32;4739:2;;;4787:1;4784;4777:12;4739:2;4830:1;4855:53;4900:7;4891:6;4880:9;4876:22;4855:53;:::i;:::-;4845:63;;4801:117;4957:2;4983:50;5025:7;5016:6;5005:9;5001:22;4983:50;:::i;:::-;4973:60;;4928:115;4729:321;;;;;:::o;5056:407::-;;;5181:2;5169:9;5160:7;5156:23;5152:32;5149:2;;;5197:1;5194;5187:12;5149:2;5240:1;5265:53;5310:7;5301:6;5290:9;5286:22;5265:53;:::i;:::-;5255:63;;5211:117;5367:2;5393:53;5438:7;5429:6;5418:9;5414:22;5393:53;:::i;:::-;5383:63;;5338:118;5139:324;;;;;:::o;5469:260::-;;5576:2;5564:9;5555:7;5551:23;5547:32;5544:2;;;5592:1;5589;5582:12;5544:2;5635:1;5660:52;5704:7;5695:6;5684:9;5680:22;5660:52;:::i;:::-;5650:62;;5606:116;5534:195;;;;:::o;5735:282::-;;5853:2;5841:9;5832:7;5828:23;5824:32;5821:2;;;5869:1;5866;5859:12;5821:2;5912:1;5937:63;5992:7;5983:6;5972:9;5968:22;5937:63;:::i;:::-;5927:73;;5883:127;5811:206;;;;:::o;6023:375::-;;6141:2;6129:9;6120:7;6116:23;6112:32;6109:2;;;6157:1;6154;6147:12;6109:2;6228:1;6217:9;6213:17;6200:31;6258:18;6250:6;6247:30;6244:2;;;6290:1;6287;6280:12;6244:2;6318:63;6373:7;6364:6;6353:9;6349:22;6318:63;:::i;:::-;6308:73;;6171:220;6099:299;;;;:::o;6404:262::-;;6512:2;6500:9;6491:7;6487:23;6483:32;6480:2;;;6528:1;6525;6518:12;6480:2;6571:1;6596:53;6641:7;6632:6;6621:9;6617:22;6596:53;:::i;:::-;6586:63;;6542:117;6470:196;;;;:::o;6672:284::-;;6791:2;6779:9;6770:7;6766:23;6762:32;6759:2;;;6807:1;6804;6797:12;6759:2;6850:1;6875:64;6931:7;6922:6;6911:9;6907:22;6875:64;:::i;:::-;6865:74;;6821:128;6749:207;;;;:::o;6962:407::-;;;7087:2;7075:9;7066:7;7062:23;7058:32;7055:2;;;7103:1;7100;7093:12;7055:2;7146:1;7171:53;7216:7;7207:6;7196:9;7192:22;7171:53;:::i;:::-;7161:63;;7117:117;7273:2;7299:53;7344:7;7335:6;7324:9;7320:22;7299:53;:::i;:::-;7289:63;;7244:118;7045:324;;;;;:::o;7375:179::-;;7465:46;7507:3;7499:6;7465:46;:::i;:::-;7543:4;7538:3;7534:14;7520:28;;7455:99;;;;:::o;7560:118::-;7647:24;7665:5;7647:24;:::i;:::-;7642:3;7635:37;7625:53;;:::o;7714:732::-;;7862:54;7910:5;7862:54;:::i;:::-;7932:86;8011:6;8006:3;7932:86;:::i;:::-;7925:93;;8042:56;8092:5;8042:56;:::i;:::-;8121:7;8152:1;8137:284;8162:6;8159:1;8156:13;8137:284;;;8238:6;8232:13;8265:63;8324:3;8309:13;8265:63;:::i;:::-;8258:70;;8351:60;8404:6;8351:60;:::i;:::-;8341:70;;8197:224;8184:1;8181;8177:9;8172:14;;8137:284;;;8141:14;8437:3;8430:10;;7838:608;;;;;;;:::o;8452:109::-;8533:21;8548:5;8533:21;:::i;:::-;8528:3;8521:34;8511:50;;:::o;8567:360::-;;8681:38;8713:5;8681:38;:::i;:::-;8735:70;8798:6;8793:3;8735:70;:::i;:::-;8728:77;;8814:52;8859:6;8854:3;8847:4;8840:5;8836:16;8814:52;:::i;:::-;8891:29;8913:6;8891:29;:::i;:::-;8886:3;8882:39;8875:46;;8657:270;;;;;:::o;8933:364::-;;9049:39;9082:5;9049:39;:::i;:::-;9104:71;9168:6;9163:3;9104:71;:::i;:::-;9097:78;;9184:52;9229:6;9224:3;9217:4;9210:5;9206:16;9184:52;:::i;:::-;9261:29;9283:6;9261:29;:::i;:::-;9256:3;9252:39;9245:46;;9025:272;;;;;:::o;9303:377::-;;9437:39;9470:5;9437:39;:::i;:::-;9492:89;9574:6;9569:3;9492:89;:::i;:::-;9485:96;;9590:52;9635:6;9630:3;9623:4;9616:5;9612:16;9590:52;:::i;:::-;9667:6;9662:3;9658:16;9651:23;;9413:267;;;;;:::o;9686:383::-;;9849:67;9913:2;9908:3;9849:67;:::i;:::-;9842:74;;9946:34;9942:1;9937:3;9933:11;9926:55;10012:21;10007:2;10002:3;9998:12;9991:43;10060:2;10055:3;10051:12;10044:19;;9832:237;;;:::o;10075:375::-;;10238:67;10302:2;10297:3;10238:67;:::i;:::-;10231:74;;10335:34;10331:1;10326:3;10322:11;10315:55;10401:13;10396:2;10391:3;10387:12;10380:35;10441:2;10436:3;10432:12;10425:19;;10221:229;;;:::o;10456:382::-;;10619:67;10683:2;10678:3;10619:67;:::i;:::-;10612:74;;10716:34;10712:1;10707:3;10703:11;10696:55;10782:20;10777:2;10772:3;10768:12;10761:42;10829:2;10824:3;10820:12;10813:19;;10602:236;;;:::o;10844:370::-;;11007:67;11071:2;11066:3;11007:67;:::i;:::-;11000:74;;11104:34;11100:1;11095:3;11091:11;11084:55;11170:8;11165:2;11160:3;11156:12;11149:30;11205:2;11200:3;11196:12;11189:19;;10990:224;;;:::o;11220:326::-;;11383:67;11447:2;11442:3;11383:67;:::i;:::-;11376:74;;11480:30;11476:1;11471:3;11467:11;11460:51;11537:2;11532:3;11528:12;11521:19;;11366:180;;;:::o;11552:365::-;;11715:67;11779:2;11774:3;11715:67;:::i;:::-;11708:74;;11812:34;11808:1;11803:3;11799:11;11792:55;11878:3;11873:2;11868:3;11864:12;11857:25;11908:2;11903:3;11899:12;11892:19;;11698:219;;;:::o;11923:368::-;;12086:67;12150:2;12145:3;12086:67;:::i;:::-;12079:74;;12183:34;12179:1;12174:3;12170:11;12163:55;12249:6;12244:2;12239:3;12235:12;12228:28;12282:2;12277:3;12273:12;12266:19;;12069:222;;;:::o;12297:323::-;;12460:67;12524:2;12519:3;12460:67;:::i;:::-;12453:74;;12557:27;12553:1;12548:3;12544:11;12537:48;12611:2;12606:3;12602:12;12595:19;;12443:177;;;:::o;12626:372::-;;12789:67;12853:2;12848:3;12789:67;:::i;:::-;12782:74;;12886:34;12882:1;12877:3;12873:11;12866:55;12952:10;12947:2;12942:3;12938:12;12931:32;12989:2;12984:3;12980:12;12973:19;;12772:226;;;:::o;13004:318::-;;13167:67;13231:2;13226:3;13167:67;:::i;:::-;13160:74;;13264:22;13260:1;13255:3;13251:11;13244:43;13313:2;13308:3;13304:12;13297:19;;13150:172;;;:::o;13328:376::-;;13491:67;13555:2;13550:3;13491:67;:::i;:::-;13484:74;;13588:34;13584:1;13579:3;13575:11;13568:55;13654:14;13649:2;13644:3;13640:12;13633:36;13695:2;13690:3;13686:12;13679:19;;13474:230;;;:::o;13710:388::-;;13873:67;13937:2;13932:3;13873:67;:::i;:::-;13866:74;;13970:34;13966:1;13961:3;13957:11;13950:55;14036:26;14031:2;14026:3;14022:12;14015:48;14089:2;14084:3;14080:12;14073:19;;13856:242;;;:::o;14104:451::-;;14267:67;14331:2;14326:3;14267:67;:::i;:::-;14260:74;;14364:34;14360:1;14355:3;14351:11;14344:55;14430:34;14425:2;14420:3;14416:12;14409:56;14496:23;14491:2;14486:3;14482:12;14475:45;14546:2;14541:3;14537:12;14530:19;;14250:305;;;:::o;14561:374::-;;14724:67;14788:2;14783:3;14724:67;:::i;:::-;14717:74;;14821:34;14817:1;14812:3;14808:11;14801:55;14887:12;14882:2;14877:3;14873:12;14866:34;14926:2;14921:3;14917:12;14910:19;;14707:228;;;:::o;14941:373::-;;15104:67;15168:2;15163:3;15104:67;:::i;:::-;15097:74;;15201:34;15197:1;15192:3;15188:11;15181:55;15267:11;15262:2;15257:3;15253:12;15246:33;15305:2;15300:3;15296:12;15289:19;;15087:227;;;:::o;15320:327::-;;15483:67;15547:2;15542:3;15483:67;:::i;:::-;15476:74;;15580:31;15576:1;15571:3;15567:11;15560:52;15638:2;15633:3;15629:12;15622:19;;15466:181;;;:::o;15653:330::-;;15816:67;15880:2;15875:3;15816:67;:::i;:::-;15809:74;;15913:34;15909:1;15904:3;15900:11;15893:55;15974:2;15969:3;15965:12;15958:19;;15799:184;;;:::o;15989:330::-;;16152:67;16216:2;16211:3;16152:67;:::i;:::-;16145:74;;16249:34;16245:1;16240:3;16236:11;16229:55;16310:2;16305:3;16301:12;16294:19;;16135:184;;;:::o;16325:305::-;;16488:66;16552:1;16547:3;16488:66;:::i;:::-;16481:73;;16584:10;16580:1;16575:3;16571:11;16564:31;16621:2;16616:3;16612:12;16605:19;;16471:159;;;:::o;16636:365::-;;16799:67;16863:2;16858:3;16799:67;:::i;:::-;16792:74;;16896:34;16892:1;16887:3;16883:11;16876:55;16962:3;16957:2;16952:3;16948:12;16941:25;16992:2;16987:3;16983:12;16976:19;;16782:219;;;:::o;17007:376::-;;17170:67;17234:2;17229:3;17170:67;:::i;:::-;17163:74;;17267:34;17263:1;17258:3;17254:11;17247:55;17333:14;17328:2;17323:3;17319:12;17312:36;17374:2;17369:3;17365:12;17358:19;;17153:230;;;:::o;17389:368::-;;17552:67;17616:2;17611:3;17552:67;:::i;:::-;17545:74;;17649:34;17645:1;17640:3;17636:11;17629:55;17715:6;17710:2;17705:3;17701:12;17694:28;17748:2;17743:3;17739:12;17732:19;;17535:222;;;:::o;17763:330::-;;17926:67;17990:2;17985:3;17926:67;:::i;:::-;17919:74;;18023:34;18019:1;18014:3;18010:11;18003:55;18084:2;18079:3;18075:12;18068:19;;17909:184;;;:::o;18099:373::-;;18262:67;18326:2;18321:3;18262:67;:::i;:::-;18255:74;;18359:34;18355:1;18350:3;18346:11;18339:55;18425:11;18420:2;18415:3;18411:12;18404:33;18463:2;18458:3;18454:12;18447:19;;18245:227;;;:::o;18478:379::-;;18641:67;18705:2;18700:3;18641:67;:::i;:::-;18634:74;;18738:34;18734:1;18729:3;18725:11;18718:55;18804:17;18799:2;18794:3;18790:12;18783:39;18848:2;18843:3;18839:12;18832:19;;18624:233;;;:::o;18863:367::-;;19026:67;19090:2;19085:3;19026:67;:::i;:::-;19019:74;;19123:34;19119:1;19114:3;19110:11;19103:55;19189:5;19184:2;19179:3;19175:12;19168:27;19221:2;19216:3;19212:12;19205:19;;19009:221;;;:::o;19236:372::-;;19399:67;19463:2;19458:3;19399:67;:::i;:::-;19392:74;;19496:34;19492:1;19487:3;19483:11;19476:55;19562:10;19557:2;19552:3;19548:12;19541:32;19599:2;19594:3;19590:12;19583:19;;19382:226;;;:::o;19614:365::-;;19777:67;19841:2;19836:3;19777:67;:::i;:::-;19770:74;;19874:34;19870:1;19865:3;19861:11;19854:55;19940:3;19935:2;19930:3;19926:12;19919:25;19970:2;19965:3;19961:12;19954:19;;19760:219;;;:::o;19985:381::-;;20148:67;20212:2;20207:3;20148:67;:::i;:::-;20141:74;;20245:34;20241:1;20236:3;20232:11;20225:55;20311:19;20306:2;20301:3;20297:12;20290:41;20357:2;20352:3;20348:12;20341:19;;20131:235;;;:::o;20372:378::-;;20535:67;20599:2;20594:3;20535:67;:::i;:::-;20528:74;;20632:34;20628:1;20623:3;20619:11;20612:55;20698:16;20693:2;20688:3;20684:12;20677:38;20741:2;20736:3;20732:12;20725:19;;20518:232;;;:::o;20756:385::-;;20919:67;20983:2;20978:3;20919:67;:::i;:::-;20912:74;;21016:34;21012:1;21007:3;21003:11;20996:55;21082:23;21077:2;21072:3;21068:12;21061:45;21132:2;21127:3;21123:12;21116:19;;20902:239;;;:::o;21147:376::-;;21310:67;21374:2;21369:3;21310:67;:::i;:::-;21303:74;;21407:34;21403:1;21398:3;21394:11;21387:55;21473:14;21468:2;21463:3;21459:12;21452:36;21514:2;21509:3;21505:12;21498:19;;21293:230;;;:::o;21529:330::-;;21692:67;21756:2;21751:3;21692:67;:::i;:::-;21685:74;;21789:34;21785:1;21780:3;21776:11;21769:55;21850:2;21845:3;21841:12;21834:19;;21675:184;;;:::o;21865:108::-;21942:24;21960:5;21942:24;:::i;:::-;21937:3;21930:37;21920:53;;:::o;21979:118::-;22066:24;22084:5;22066:24;:::i;:::-;22061:3;22054:37;22044:53;;:::o;22103:435::-;;22305:95;22396:3;22387:6;22305:95;:::i;:::-;22298:102;;22417:95;22508:3;22499:6;22417:95;:::i;:::-;22410:102;;22529:3;22522:10;;22287:251;;;;;:::o;22544:222::-;;22675:2;22664:9;22660:18;22652:26;;22688:71;22756:1;22745:9;22741:17;22732:6;22688:71;:::i;:::-;22642:124;;;;:::o;22772:640::-;;23005:3;22994:9;22990:19;22982:27;;23019:71;23087:1;23076:9;23072:17;23063:6;23019:71;:::i;:::-;23100:72;23168:2;23157:9;23153:18;23144:6;23100:72;:::i;:::-;23182;23250:2;23239:9;23235:18;23226:6;23182:72;:::i;:::-;23301:9;23295:4;23291:20;23286:2;23275:9;23271:18;23264:48;23329:76;23400:4;23391:6;23329:76;:::i;:::-;23321:84;;22972:440;;;;;;;:::o;23418:332::-;;23577:2;23566:9;23562:18;23554:26;;23590:71;23658:1;23647:9;23643:17;23634:6;23590:71;:::i;:::-;23671:72;23739:2;23728:9;23724:18;23715:6;23671:72;:::i;:::-;23544:206;;;;;:::o;23756:373::-;;23937:2;23926:9;23922:18;23914:26;;23986:9;23980:4;23976:20;23972:1;23961:9;23957:17;23950:47;24014:108;24117:4;24108:6;24014:108;:::i;:::-;24006:116;;23904:225;;;;:::o;24135:210::-;;24260:2;24249:9;24245:18;24237:26;;24273:65;24335:1;24324:9;24320:17;24311:6;24273:65;:::i;:::-;24227:118;;;;:::o;24351:313::-;;24502:2;24491:9;24487:18;24479:26;;24551:9;24545:4;24541:20;24537:1;24526:9;24522:17;24515:47;24579:78;24652:4;24643:6;24579:78;:::i;:::-;24571:86;;24469:195;;;;:::o;24670:419::-;;24874:2;24863:9;24859:18;24851:26;;24923:9;24917:4;24913:20;24909:1;24898:9;24894:17;24887:47;24951:131;25077:4;24951:131;:::i;:::-;24943:139;;24841:248;;;:::o;25095:419::-;;25299:2;25288:9;25284:18;25276:26;;25348:9;25342:4;25338:20;25334:1;25323:9;25319:17;25312:47;25376:131;25502:4;25376:131;:::i;:::-;25368:139;;25266:248;;;:::o;25520:419::-;;25724:2;25713:9;25709:18;25701:26;;25773:9;25767:4;25763:20;25759:1;25748:9;25744:17;25737:47;25801:131;25927:4;25801:131;:::i;:::-;25793:139;;25691:248;;;:::o;25945:419::-;;26149:2;26138:9;26134:18;26126:26;;26198:9;26192:4;26188:20;26184:1;26173:9;26169:17;26162:47;26226:131;26352:4;26226:131;:::i;:::-;26218:139;;26116:248;;;:::o;26370:419::-;;26574:2;26563:9;26559:18;26551:26;;26623:9;26617:4;26613:20;26609:1;26598:9;26594:17;26587:47;26651:131;26777:4;26651:131;:::i;:::-;26643:139;;26541:248;;;:::o;26795:419::-;;26999:2;26988:9;26984:18;26976:26;;27048:9;27042:4;27038:20;27034:1;27023:9;27019:17;27012:47;27076:131;27202:4;27076:131;:::i;:::-;27068:139;;26966:248;;;:::o;27220:419::-;;27424:2;27413:9;27409:18;27401:26;;27473:9;27467:4;27463:20;27459:1;27448:9;27444:17;27437:47;27501:131;27627:4;27501:131;:::i;:::-;27493:139;;27391:248;;;:::o;27645:419::-;;27849:2;27838:9;27834:18;27826:26;;27898:9;27892:4;27888:20;27884:1;27873:9;27869:17;27862:47;27926:131;28052:4;27926:131;:::i;:::-;27918:139;;27816:248;;;:::o;28070:419::-;;28274:2;28263:9;28259:18;28251:26;;28323:9;28317:4;28313:20;28309:1;28298:9;28294:17;28287:47;28351:131;28477:4;28351:131;:::i;:::-;28343:139;;28241:248;;;:::o;28495:419::-;;28699:2;28688:9;28684:18;28676:26;;28748:9;28742:4;28738:20;28734:1;28723:9;28719:17;28712:47;28776:131;28902:4;28776:131;:::i;:::-;28768:139;;28666:248;;;:::o;28920:419::-;;29124:2;29113:9;29109:18;29101:26;;29173:9;29167:4;29163:20;29159:1;29148:9;29144:17;29137:47;29201:131;29327:4;29201:131;:::i;:::-;29193:139;;29091:248;;;:::o;29345:419::-;;29549:2;29538:9;29534:18;29526:26;;29598:9;29592:4;29588:20;29584:1;29573:9;29569:17;29562:47;29626:131;29752:4;29626:131;:::i;:::-;29618:139;;29516:248;;;:::o;29770:419::-;;29974:2;29963:9;29959:18;29951:26;;30023:9;30017:4;30013:20;30009:1;29998:9;29994:17;29987:47;30051:131;30177:4;30051:131;:::i;:::-;30043:139;;29941:248;;;:::o;30195:419::-;;30399:2;30388:9;30384:18;30376:26;;30448:9;30442:4;30438:20;30434:1;30423:9;30419:17;30412:47;30476:131;30602:4;30476:131;:::i;:::-;30468:139;;30366:248;;;:::o;30620:419::-;;30824:2;30813:9;30809:18;30801:26;;30873:9;30867:4;30863:20;30859:1;30848:9;30844:17;30837:47;30901:131;31027:4;30901:131;:::i;:::-;30893:139;;30791:248;;;:::o;31045:419::-;;31249:2;31238:9;31234:18;31226:26;;31298:9;31292:4;31288:20;31284:1;31273:9;31269:17;31262:47;31326:131;31452:4;31326:131;:::i;:::-;31318:139;;31216:248;;;:::o;31470:419::-;;31674:2;31663:9;31659:18;31651:26;;31723:9;31717:4;31713:20;31709:1;31698:9;31694:17;31687:47;31751:131;31877:4;31751:131;:::i;:::-;31743:139;;31641:248;;;:::o;31895:419::-;;32099:2;32088:9;32084:18;32076:26;;32148:9;32142:4;32138:20;32134:1;32123:9;32119:17;32112:47;32176:131;32302:4;32176:131;:::i;:::-;32168:139;;32066:248;;;:::o;32320:419::-;;32524:2;32513:9;32509:18;32501:26;;32573:9;32567:4;32563:20;32559:1;32548:9;32544:17;32537:47;32601:131;32727:4;32601:131;:::i;:::-;32593:139;;32491:248;;;:::o;32745:419::-;;32949:2;32938:9;32934:18;32926:26;;32998:9;32992:4;32988:20;32984:1;32973:9;32969:17;32962:47;33026:131;33152:4;33026:131;:::i;:::-;33018:139;;32916:248;;;:::o;33170:419::-;;33374:2;33363:9;33359:18;33351:26;;33423:9;33417:4;33413:20;33409:1;33398:9;33394:17;33387:47;33451:131;33577:4;33451:131;:::i;:::-;33443:139;;33341:248;;;:::o;33595:419::-;;33799:2;33788:9;33784:18;33776:26;;33848:9;33842:4;33838:20;33834:1;33823:9;33819:17;33812:47;33876:131;34002:4;33876:131;:::i;:::-;33868:139;;33766:248;;;:::o;34020:419::-;;34224:2;34213:9;34209:18;34201:26;;34273:9;34267:4;34263:20;34259:1;34248:9;34244:17;34237:47;34301:131;34427:4;34301:131;:::i;:::-;34293:139;;34191:248;;;:::o;34445:419::-;;34649:2;34638:9;34634:18;34626:26;;34698:9;34692:4;34688:20;34684:1;34673:9;34669:17;34662:47;34726:131;34852:4;34726:131;:::i;:::-;34718:139;;34616:248;;;:::o;34870:419::-;;35074:2;35063:9;35059:18;35051:26;;35123:9;35117:4;35113:20;35109:1;35098:9;35094:17;35087:47;35151:131;35277:4;35151:131;:::i;:::-;35143:139;;35041:248;;;:::o;35295:419::-;;35499:2;35488:9;35484:18;35476:26;;35548:9;35542:4;35538:20;35534:1;35523:9;35519:17;35512:47;35576:131;35702:4;35576:131;:::i;:::-;35568:139;;35466:248;;;:::o;35720:419::-;;35924:2;35913:9;35909:18;35901:26;;35973:9;35967:4;35963:20;35959:1;35948:9;35944:17;35937:47;36001:131;36127:4;36001:131;:::i;:::-;35993:139;;35891:248;;;:::o;36145:419::-;;36349:2;36338:9;36334:18;36326:26;;36398:9;36392:4;36388:20;36384:1;36373:9;36369:17;36362:47;36426:131;36552:4;36426:131;:::i;:::-;36418:139;;36316:248;;;:::o;36570:419::-;;36774:2;36763:9;36759:18;36751:26;;36823:9;36817:4;36813:20;36809:1;36798:9;36794:17;36787:47;36851:131;36977:4;36851:131;:::i;:::-;36843:139;;36741:248;;;:::o;36995:419::-;;37199:2;37188:9;37184:18;37176:26;;37248:9;37242:4;37238:20;37234:1;37223:9;37219:17;37212:47;37276:131;37402:4;37276:131;:::i;:::-;37268:139;;37166:248;;;:::o;37420:419::-;;37624:2;37613:9;37609:18;37601:26;;37673:9;37667:4;37663:20;37659:1;37648:9;37644:17;37637:47;37701:131;37827:4;37701:131;:::i;:::-;37693:139;;37591:248;;;:::o;37845:419::-;;38049:2;38038:9;38034:18;38026:26;;38098:9;38092:4;38088:20;38084:1;38073:9;38069:17;38062:47;38126:131;38252:4;38126:131;:::i;:::-;38118:139;;38016:248;;;:::o;38270:419::-;;38474:2;38463:9;38459:18;38451:26;;38523:9;38517:4;38513:20;38509:1;38498:9;38494:17;38487:47;38551:131;38677:4;38551:131;:::i;:::-;38543:139;;38441:248;;;:::o;38695:222::-;;38826:2;38815:9;38811:18;38803:26;;38839:71;38907:1;38896:9;38892:17;38883:6;38839:71;:::i;:::-;38793:124;;;;:::o;38923:283::-;;38989:2;38983:9;38973:19;;39031:4;39023:6;39019:17;39138:6;39126:10;39123:22;39102:18;39090:10;39087:34;39084:62;39081:2;;;39149:18;;:::i;:::-;39081:2;39189:10;39185:2;39178:22;38963:243;;;;:::o;39212:331::-;;39363:18;39355:6;39352:30;39349:2;;;39385:18;;:::i;:::-;39349:2;39470:4;39466:9;39459:4;39451:6;39447:17;39443:33;39435:41;;39531:4;39525;39521:15;39513:23;;39278:265;;;:::o;39549:332::-;;39701:18;39693:6;39690:30;39687:2;;;39723:18;;:::i;:::-;39687:2;39808:4;39804:9;39797:4;39789:6;39785:17;39781:33;39773:41;;39869:4;39863;39859:15;39851:23;;39616:265;;;:::o;39887:132::-;;39977:3;39969:11;;40007:4;40002:3;39998:14;39990:22;;39959:60;;;:::o;40025:114::-;;40126:5;40120:12;40110:22;;40099:40;;;:::o;40145:98::-;;40230:5;40224:12;40214:22;;40203:40;;;:::o;40249:99::-;;40335:5;40329:12;40319:22;;40308:40;;;:::o;40354:113::-;;40456:4;40451:3;40447:14;40439:22;;40429:38;;;:::o;40473:184::-;;40606:6;40601:3;40594:19;40646:4;40641:3;40637:14;40622:29;;40584:73;;;;:::o;40663:168::-;;40780:6;40775:3;40768:19;40820:4;40815:3;40811:14;40796:29;;40758:73;;;;:::o;40837:169::-;;40955:6;40950:3;40943:19;40995:4;40990:3;40986:14;40971:29;;40933:73;;;;:::o;41012:148::-;;41151:3;41136:18;;41126:34;;;;:::o;41166:305::-;;41225:20;41243:1;41225:20;:::i;:::-;41220:25;;41259:20;41277:1;41259:20;:::i;:::-;41254:25;;41413:1;41345:66;41341:74;41338:1;41335:81;41332:2;;;41419:18;;:::i;:::-;41332:2;41463:1;41460;41456:9;41449:16;;41210:261;;;;:::o;41477:185::-;;41534:20;41552:1;41534:20;:::i;:::-;41529:25;;41568:20;41586:1;41568:20;:::i;:::-;41563:25;;41607:1;41597:2;;41612:18;;:::i;:::-;41597:2;41654:1;41651;41647:9;41642:14;;41519:143;;;;:::o;41668:348::-;;41731:20;41749:1;41731:20;:::i;:::-;41726:25;;41765:20;41783:1;41765:20;:::i;:::-;41760:25;;41953:1;41885:66;41881:74;41878:1;41875:81;41870:1;41863:9;41856:17;41852:105;41849:2;;;41960:18;;:::i;:::-;41849:2;42008:1;42005;42001:9;41990:20;;41716:300;;;;:::o;42022:191::-;;42082:20;42100:1;42082:20;:::i;:::-;42077:25;;42116:20;42134:1;42116:20;:::i;:::-;42111:25;;42155:1;42152;42149:8;42146:2;;;42160:18;;:::i;:::-;42146:2;42205:1;42202;42198:9;42190:17;;42067:146;;;;:::o;42219:96::-;;42285:24;42303:5;42285:24;:::i;:::-;42274:35;;42264:51;;;:::o;42321:90::-;;42398:5;42391:13;42384:21;42373:32;;42363:48;;;:::o;42417:149::-;;42493:66;42486:5;42482:78;42471:89;;42461:105;;;:::o;42572:126::-;;42649:42;42642:5;42638:54;42627:65;;42617:81;;;:::o;42704:77::-;;42770:5;42759:16;;42749:32;;;:::o;42787:154::-;42871:6;42866:3;42861;42848:30;42933:1;42924:6;42919:3;42915:16;42908:27;42838:103;;;:::o;42947:307::-;43015:1;43025:113;43039:6;43036:1;43033:13;43025:113;;;43124:1;43119:3;43115:11;43109:18;43105:1;43100:3;43096:11;43089:39;43061:2;43058:1;43054:10;43049:15;;43025:113;;;43156:6;43153:1;43150:13;43147:2;;;43236:1;43227:6;43222:3;43218:16;43211:27;43147:2;42996:258;;;;:::o;43260:320::-;;43341:1;43335:4;43331:12;43321:22;;43388:1;43382:4;43378:12;43409:18;43399:2;;43465:4;43457:6;43453:17;43443:27;;43399:2;43527;43519:6;43516:14;43496:18;43493:38;43490:2;;;43546:18;;:::i;:::-;43490:2;43311:269;;;;:::o;43586:233::-;;43648:24;43666:5;43648:24;:::i;:::-;43639:33;;43694:66;43687:5;43684:77;43681:2;;;43764:18;;:::i;:::-;43681:2;43811:1;43804:5;43800:13;43793:20;;43629:190;;;:::o;43825:176::-;;43874:20;43892:1;43874:20;:::i;:::-;43869:25;;43908:20;43926:1;43908:20;:::i;:::-;43903:25;;43947:1;43937:2;;43952:18;;:::i;:::-;43937:2;43993:1;43990;43986:9;43981:14;;43859:142;;;;:::o;44007:180::-;44055:77;44052:1;44045:88;44152:4;44149:1;44142:15;44176:4;44173:1;44166:15;44193:180;44241:77;44238:1;44231:88;44338:4;44335:1;44328:15;44362:4;44359:1;44352:15;44379:180;44427:77;44424:1;44417:88;44524:4;44521:1;44514:15;44548:4;44545:1;44538:15;44565:180;44613:77;44610:1;44603:88;44710:4;44707:1;44700:15;44734:4;44731:1;44724:15;44751:102;;44843:2;44839:7;44834:2;44827:5;44823:14;44819:28;44809:38;;44799:54;;;:::o;44859:122::-;44932:24;44950:5;44932:24;:::i;:::-;44925:5;44922:35;44912:2;;44971:1;44968;44961:12;44912:2;44902:79;:::o;44987:116::-;45057:21;45072:5;45057:21;:::i;:::-;45050:5;45047:32;45037:2;;45093:1;45090;45083:12;45037:2;45027:76;:::o;45109:120::-;45181:23;45198:5;45181:23;:::i;:::-;45174:5;45171:34;45161:2;;45219:1;45216;45209:12;45161:2;45151:78;:::o;45235:122::-;45308:24;45326:5;45308:24;:::i;:::-;45301:5;45298:35;45288:2;;45347:1;45344;45337:12;45288:2;45278:79;:::o

Swarm Source

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