ETH Price: $3,284.47 (-0.46%)

SpaceWarriors Spaceships (SPW-S)
 

Overview

TokenID

318

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
SpaceWarriorsSpaceships

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

// File: SpaceWarriorsSpaceships.sol


pragma solidity ^0.8.7;

/**
 * @title Mint Space warrior collection
 * @notice This contract mint NFT linked to an IPFS file
*/
contract SpaceWarriorsSpaceships is ERC721Enumerable, Ownable {
    using Strings for uint256;

    // Merkle root of the whitelist
    bytes32 public _merkleRoot1;
    bytes32 public _merkleRoot2;

    // Max supply 
    uint public _maxSupply = 3700;

    // Price token in ether
    uint public _price = 0.0 ether; 
     
    // Contract status. If paused, no one can mint
    bool public _paused = true; 
    
    // Sell status. Presale if true and public sale if false
    bool public _presale = true;
    // Address of the team wallet

    //Flag allowing the set of the base URI only once
    bool public _baseURIset = false;
    /**
     * @dev NFT configuration
     * _revealed: Lock/Unlock the final URI. Link to the hidden URI if false
     * baseURI : URI of the revealed NFT
     * _hideURI : URI of the non revealed NFT
     */
    string public baseURI;

    bool _requireWhitelist = true;

    /**
     * @dev Modifier isWhitelisted to check if the caller is on the whitelist
     */
    modifier isWhitelisted(bytes32 [] calldata  merkleProof, bytes32 root){
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        if (_requireWhitelist) {
            require(MerkleProof.verify(merkleProof, root, leaf), "Not in the whitelist");
        }
        _;
    }

    /**
     * @dev Initializes tbe contract with: 
     * initURI: the final URI after reveal in a format eg: "ipfs://QmdsxxxxxxxxxxxxxxxxxxepJF/"
     * merkleRoot: the merkle root of the whitelist
     * team: Address of the team wallet
     */
    constructor (bytes32 merkleRoot1, bytes32 merkleRoot2) ERC721("SpaceWarriors Spaceships", "SPW-S"){
        _merkleRoot1 = merkleRoot1;
        _merkleRoot2 = merkleRoot2;
        _mintNFT(1);
    }

    function setRequireWhitelist(bool flag) external onlyOwner {
        _requireWhitelist = flag;
    }

    /**
     * @dev Switch the status of the contract
     *
     * In pause state if `_paused` is true, no one can mint but the owner 
     *
     */
    function switchPauseStatus() external onlyOwner (){
        _paused = !_paused;
    }

    mapping(address => bool) mintedSWCS;

     function giveAway(uint256 amount) external onlyOwner {
        _mintNFT(amount);
     }
       

    /**
     * @dev Minting for whitelisted addresses
     *
     * Requirements:
     * 
     * Contract must be unpaused
     * The presale must be going on
     * The caller must request less than the max by address authorized
     * The amount of token must be superior to 0
     * The supply must not be empty
     * The price must be correct
     * 
     * @param merkleProof for the wallet address 
     * 
     */
    function mintOne(bytes32[] calldata merkleProof) external isWhitelisted(merkleProof, _merkleRoot1) {
        require(!_paused, "Contract paused");
        require(!mintedSWCS[msg.sender], "You already have your spaceship");
        require(totalSupply() + 1 <= _maxSupply, "Max supply reached !");

        mintedSWCS[msg.sender] = true;
        _mintNFT(1);
    }

    function mintTwo(bytes32[] calldata merkleProof) external isWhitelisted(merkleProof, _merkleRoot2) {
        require(!_paused, "Contract paused");
        require(!mintedSWCS[msg.sender], "You already have your spaceship");
        require(totalSupply() + 2 <= _maxSupply, "Max supply reached !");

        mintedSWCS[msg.sender] = true;
        _mintNFT(2);
    }

    function setMintedSWCS(bool value, address target) external onlyOwner {
        mintedSWCS[target] = value;
    }

    /**
     * @dev Updating the merkle root
     *
     * @param newMerkleRoot must start with 0x  
     * 
     */
    function updateMerkleRoot1(bytes32 newMerkleRoot) external onlyOwner {
         _merkleRoot1 = newMerkleRoot;
    }

    function updateMerkleRoot2(bytes32 newMerkleRoot) external onlyOwner {
         _merkleRoot2 = newMerkleRoot;
    }
            
    /**
     * @dev Mint the amount of NFT requested
     */
    function _mintNFT(uint _amountToMint) internal {
        uint currentSupply = totalSupply();   
         for (uint i; i < _amountToMint ; i++) {
            _safeMint(msg.sender, currentSupply + i);
        }         
    }
     
    /**
     * @dev Return an array of token Id owned by `owner`
     */
    function getWallet(address _owner) public view returns(uint [] memory) {
        uint numberOwned = balanceOf(_owner);
        uint [] memory idItems = new uint[](numberOwned);
        
        for (uint i = 0; i < numberOwned; i++){
            idItems[i] = tokenOfOwnerByIndex(_owner,i);
        }
        
        return idItems;
    }
    
    /**
     * @dev ERC721 standard
     * @return baseURI value
     */
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    /**
     * @dev Set the base URI
     * 
     * The owner set the base URI only once !
     * The style MUST BE as follow : "ipfs://QmdsaXXXXXXXXXXXXXXXXXXXX7epJF/"
     */
    function setBaseURI(string memory newBaseURI) public onlyOwner {
        require (!_baseURIset, "Base URI has already be set");
        _baseURIset = true;
        baseURI = newBaseURI;
    }
    
    /**
     * @dev Return the URI of the NFT
     * @notice return the hidden URI then the Revealed JSON when the Revealed param is true
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"merkleRoot1","type":"bytes32"},{"internalType":"bytes32","name":"merkleRoot2","type":"bytes32"}],"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":"_baseURIset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_merkleRoot1","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_merkleRoot2","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getWallet","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintTwo","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"},{"internalType":"address","name":"target","type":"address"}],"name":"setMintedSWCS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setRequireWhitelist","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":"switchPauseStatus","outputs":[],"stateMutability":"nonpayable","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":[],"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":[{"internalType":"bytes32","name":"newMerkleRoot","type":"bytes32"}],"name":"updateMerkleRoot1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkleRoot","type":"bytes32"}],"name":"updateMerkleRoot2","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052610e74600d556000600e556001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055503480156200008857600080fd5b5060405162005d4138038062005d418339818101604052810190620000ae919062000d91565b6040518060400160405280601881526020017f537061636557617272696f7273205370616365736869707300000000000000008152506040518060400160405280600581526020017f5350572d5300000000000000000000000000000000000000000000000000000081525081600090805190602001906200013292919062000cb3565b5080600190805190602001906200014b92919062000cb3565b5050506200016e620001626200019660201b60201c565b6200019e60201b60201c565b81600b8190555080600c819055506200018e60016200026460201b60201c565b5050620013ce565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600062000276620002be60201b60201c565b905060005b82811015620002b957620002a333828462000297919062001012565b620002cb60201b60201c565b8080620002b0906200118a565b9150506200027b565b505050565b6000600880549050905090565b620002ed828260405180602001604052806000815250620002f160201b60201c565b5050565b6200030383836200035f60201b60201c565b6200031860008484846200054560201b60201c565b6200035a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003519062000f5d565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c99062000fc3565b60405180910390fd5b620003e381620006ff60201b60201c565b1562000426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041d9062000f7f565b60405180910390fd5b6200043a600083836200076b60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200048c919062001012565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620005738473ffffffffffffffffffffffffffffffffffffffff16620008b260201b62001b9f1760201c565b15620006f2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620005a56200019660201b60201c565b8786866040518563ffffffff1660e01b8152600401620005c9949392919062000f09565b602060405180830381600087803b158015620005e457600080fd5b505af19250505080156200061857506040513d601f19601f8201168201806040525081019062000615919062000dd8565b60015b620006a1573d80600081146200064b576040519150601f19603f3d011682016040523d82523d6000602084013e62000650565b606091505b5060008151141562000699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006909062000f5d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620006f7565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000783838383620008c560201b62001bb21760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620007d057620007ca81620008ca60201b60201c565b62000818565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000817576200081683826200091360201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000865576200085f8162000a9060201b60201c565b620008ad565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620008ac57620008ab828262000b6c60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016200092d8462000bf860201b62000f611760201c565b6200093991906200106f565b905060006007600084815260200190815260200160002054905081811462000a1f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000aa691906200106f565b905060006009600084815260200190815260200160002054905060006008838154811062000ad95762000ad862001265565b5b90600052602060002001549050806008838154811062000afe5762000afd62001265565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000b505762000b4f62001236565b5b6001900381819060005260206000200160009055905550505050565b600062000b848362000bf860201b62000f611760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c639062000fa1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000cc19062001154565b90600052602060002090601f01602090048101928262000ce5576000855562000d31565b82601f1062000d0057805160ff191683800117855562000d31565b8280016001018555821562000d31579182015b8281111562000d3057825182559160200191906001019062000d13565b5b50905062000d40919062000d44565b5090565b5b8082111562000d5f57600081600090555060010162000d45565b5090565b60008151905062000d74816200139a565b92915050565b60008151905062000d8b81620013b4565b92915050565b6000806040838503121562000dab5762000daa62001294565b5b600062000dbb8582860162000d63565b925050602062000dce8582860162000d63565b9150509250929050565b60006020828403121562000df15762000df062001294565b5b600062000e018482850162000d7a565b91505092915050565b62000e1581620010aa565b82525050565b600062000e288262000fe5565b62000e34818562000ff0565b935062000e468185602086016200111e565b62000e518162001299565b840191505092915050565b600062000e6b60328362001001565b915062000e7882620012aa565b604082019050919050565b600062000e92601c8362001001565b915062000e9f82620012f9565b602082019050919050565b600062000eb9602a8362001001565b915062000ec68262001322565b604082019050919050565b600062000ee060208362001001565b915062000eed8262001371565b602082019050919050565b62000f038162001114565b82525050565b600060808201905062000f20600083018762000e0a565b62000f2f602083018662000e0a565b62000f3e604083018562000ef8565b818103606083015262000f52818462000e1b565b905095945050505050565b6000602082019050818103600083015262000f788162000e5c565b9050919050565b6000602082019050818103600083015262000f9a8162000e83565b9050919050565b6000602082019050818103600083015262000fbc8162000eaa565b9050919050565b6000602082019050818103600083015262000fde8162000ed1565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200101f8262001114565b91506200102c8362001114565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010645762001063620011d8565b5b828201905092915050565b60006200107c8262001114565b9150620010898362001114565b9250828210156200109f576200109e620011d8565b5b828203905092915050565b6000620010b782620010f4565b9050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200113e57808201518184015260208101905062001121565b838111156200114e576000848401525b50505050565b600060028204905060018216806200116d57607f821691505b6020821081141562001184576200118362001207565b5b50919050565b6000620011978262001114565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620011cd57620011cc620011d8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b620013a581620010be565b8114620013b157600080fd5b50565b620013bf81620010c8565b8114620013cb57600080fd5b50565b61496380620013de6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80636352211e11610130578063aa8a31fb116100b8578063e2a71ef81161007c578063e2a71ef81461063e578063e4cb130c1461065c578063e985e9c514610678578063f2fde38b146106a8578063f870afe1146106c457610227565b8063aa8a31fb146105ae578063b88d4fde146105b8578063c87b56dd146105d4578063d7bd76cc14610604578063da9e51f81461062057610227565b806378cf6de0116100ff57806378cf6de01461051e57806380dfc2af1461053a5780638da5cb5b1461055657806395d89b4114610574578063a22cb4651461059257610227565b80636352211e146104965780636c0360eb146104c657806370a08231146104e4578063715018a61461051457610227565b806322f4596f116101b35780632f745c59116101825780632f745c59146103e257806342842e0e1461041257806346ee05761461042e5780634f6ccce71461044a57806355f804b31461047a57610227565b806322f4596f1461036e578063235b6ea11461038c57806323b872dd146103aa5780632d4b2986146103c657610227565b8063095ea7b3116101fa578063095ea7b3146102da5780630bebfed7146102f657806316c61ccc1461031457806318160ddd146103325780631c8bbebe1461035057610227565b806301ffc9a71461022c57806304d0a6471461025c57806306fdde031461028c578063081812fc146102aa575b600080fd5b610246600480360381019061024191906133f3565b6106e0565b6040516102539190613a9c565b60405180910390f35b61027660048036038101906102719190613149565b61075a565b6040516102839190613a7a565b60405180910390f35b610294610808565b6040516102a19190613ad2565b60405180910390f35b6102c460048036038101906102bf9190613496565b61089a565b6040516102d19190613a13565b60405180910390f35b6102f460048036038101906102ef91906132cc565b61091f565b005b6102fe610a37565b60405161030b9190613ab7565b60405180910390f35b61031c610a3d565b6040516103299190613a9c565b60405180910390f35b61033a610a50565b6040516103479190613dd4565b60405180910390f35b610358610a5d565b6040516103659190613a9c565b60405180910390f35b610376610a70565b6040516103839190613dd4565b60405180910390f35b610394610a76565b6040516103a19190613dd4565b60405180910390f35b6103c460048036038101906103bf91906131b6565b610a7c565b005b6103e060048036038101906103db9190613496565b610adc565b005b6103fc60048036038101906103f791906132cc565b610b64565b6040516104099190613dd4565b60405180910390f35b61042c600480360381019061042791906131b6565b610c09565b005b610448600480360381019061044391906133c6565b610c29565b005b610464600480360381019061045f9190613496565b610caf565b6040516104719190613dd4565b60405180910390f35b610494600480360381019061048f919061344d565b610d20565b005b6104b060048036038101906104ab9190613496565b610e21565b6040516104bd9190613a13565b60405180910390f35b6104ce610ed3565b6040516104db9190613ad2565b60405180910390f35b6104fe60048036038101906104f99190613149565b610f61565b60405161050b9190613dd4565b60405180910390f35b61051c611019565b005b61053860048036038101906105339190613359565b6110a1565b005b610554600480360381019061054f919061330c565b61113a565b005b61055e6113aa565b60405161056b9190613a13565b60405180910390f35b61057c6113d4565b6040516105899190613ad2565b60405180910390f35b6105ac60048036038101906105a7919061328c565b611466565b005b6105b661147c565b005b6105d260048036038101906105cd9190613209565b611524565b005b6105ee60048036038101906105e99190613496565b611586565b6040516105fb9190613ad2565b60405180910390f35b61061e600480360381019061061991906133c6565b61162d565b005b6106286116b3565b6040516106359190613ab7565b60405180910390f35b6106466116b9565b6040516106539190613a9c565b60405180910390f35b6106766004803603810190610671919061330c565b6116cc565b005b610692600480360381019061068d9190613176565b61193c565b60405161069f9190613a9c565b60405180910390f35b6106c260048036038101906106bd9190613149565b6119d0565b005b6106de60048036038101906106d99190613386565b611ac8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610753575061075282611bb7565b5b9050919050565b6060600061076783610f61565b905060008167ffffffffffffffff81111561078557610784614263565b5b6040519080825280602002602001820160405280156107b35781602001602082028036833780820191505090505b50905060005b828110156107fd576107cb8582610b64565b8282815181106107de576107dd614234565b5b60200260200101818152505080806107f5906140d0565b9150506107b9565b508092505050919050565b6060600080546108179061406d565b80601f01602080910402602001604051908101604052809291908181526020018280546108439061406d565b80156108905780601f1061086557610100808354040283529160200191610890565b820191906000526020600020905b81548152906001019060200180831161087357829003601f168201915b5050505050905090565b60006108a582611c99565b6108e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108db90613c94565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092a82610e21565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613d14565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109ba611d05565b73ffffffffffffffffffffffffffffffffffffffff1614806109e957506109e8816109e3611d05565b61193c565b5b610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f90613c14565b60405180910390fd5b610a328383611d0d565b505050565b600b5481565b600f60009054906101000a900460ff1681565b6000600880549050905090565b600f60029054906101000a900460ff1681565b600d5481565b600e5481565b610a8d610a87611d05565b82611dc6565b610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390613d74565b60405180910390fd5b610ad7838383611ea4565b505050565b610ae4611d05565b73ffffffffffffffffffffffffffffffffffffffff16610b026113aa565b73ffffffffffffffffffffffffffffffffffffffff1614610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90613cb4565b60405180910390fd5b610b6181612100565b50565b6000610b6f83610f61565b8210610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790613af4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c2483838360405180602001604052806000815250611524565b505050565b610c31611d05565b73ffffffffffffffffffffffffffffffffffffffff16610c4f6113aa565b73ffffffffffffffffffffffffffffffffffffffff1614610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90613cb4565b60405180910390fd5b80600c8190555050565b6000610cb9610a50565b8210610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf190613d94565b60405180910390fd5b60088281548110610d0e57610d0d614234565b5b90600052602060002001549050919050565b610d28611d05565b73ffffffffffffffffffffffffffffffffffffffff16610d466113aa565b73ffffffffffffffffffffffffffffffffffffffff1614610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390613cb4565b60405180910390fd5b600f60029054906101000a900460ff1615610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390613d34565b60405180910390fd5b6001600f60026101000a81548160ff0219169083151502179055508060109080519060200190610e1d929190612ef2565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613c54565b60405180910390fd5b80915050919050565b60108054610ee09061406d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0c9061406d565b8015610f595780601f10610f2e57610100808354040283529160200191610f59565b820191906000526020600020905b815481529060010190602001808311610f3c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990613c34565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611021611d05565b73ffffffffffffffffffffffffffffffffffffffff1661103f6113aa565b73ffffffffffffffffffffffffffffffffffffffff1614611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c90613cb4565b60405180910390fd5b61109f6000612144565b565b6110a9611d05565b73ffffffffffffffffffffffffffffffffffffffff166110c76113aa565b73ffffffffffffffffffffffffffffffffffffffff161461111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490613cb4565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b8181600b54600033604051602001611152919061399d565b604051602081830303815290604052805190602001209050601160009054906101000a900460ff161561120b576111cb848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050838361220a565b61120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613d54565b60405180910390fd5b5b600f60009054906101000a900460ff161561125b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125290613b94565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90613db4565b60405180910390fd5b600d5460016112f5610a50565b6112ff9190613ef2565b1115611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133790613b14565b60405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506113a26001612100565b505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113e39061406d565b80601f016020809104026020016040519081016040528092919081815260200182805461140f9061406d565b801561145c5780601f106114315761010080835404028352916020019161145c565b820191906000526020600020905b81548152906001019060200180831161143f57829003601f168201915b5050505050905090565b611478611471611d05565b8383612221565b5050565b611484611d05565b73ffffffffffffffffffffffffffffffffffffffff166114a26113aa565b73ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90613cb4565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b61153561152f611d05565b83611dc6565b611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613d74565b60405180910390fd5b6115808484848461238e565b50505050565b606061159182611c99565b6115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c790613cf4565b60405180910390fd5b60006115da6123ea565b905060008151116115fa5760405180602001604052806000815250611625565b806116048461247c565b6040516020016116159291906139e4565b6040516020818303038152906040525b915050919050565b611635611d05565b73ffffffffffffffffffffffffffffffffffffffff166116536113aa565b73ffffffffffffffffffffffffffffffffffffffff16146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613cb4565b60405180910390fd5b80600b8190555050565b600c5481565b600f60019054906101000a900460ff1681565b8181600c546000336040516020016116e4919061399d565b604051602081830303815290604052805190602001209050601160009054906101000a900460ff161561179d5761175d848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050838361220a565b61179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613d54565b60405180910390fd5b5b600f60009054906101000a900460ff16156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490613b94565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613db4565b60405180910390fd5b600d546002611887610a50565b6118919190613ef2565b11156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990613b14565b60405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506119346002612100565b505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119d8611d05565b73ffffffffffffffffffffffffffffffffffffffff166119f66113aa565b73ffffffffffffffffffffffffffffffffffffffff1614611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4390613cb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390613b54565b60405180910390fd5b611ac581612144565b50565b611ad0611d05565b73ffffffffffffffffffffffffffffffffffffffff16611aee6113aa565b73ffffffffffffffffffffffffffffffffffffffff1614611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b90613cb4565b60405180910390fd5b81601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c8257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c925750611c91826125dd565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d8083610e21565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611dd182611c99565b611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0790613bf4565b60405180910390fd5b6000611e1b83610e21565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e8a57508373ffffffffffffffffffffffffffffffffffffffff16611e728461089a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e9b5750611e9a818561193c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ec482610e21565b73ffffffffffffffffffffffffffffffffffffffff1614611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190613cd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8190613bb4565b60405180910390fd5b611f95838383612647565b611fa0600082611d0d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff09190613f79565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120479190613ef2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061210a610a50565b905060005b8281101561213f5761212c3382846121279190613ef2565b61275b565b8080612137906140d0565b91505061210f565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000826122178584612779565b1490509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228790613bd4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123819190613a9c565b60405180910390a3505050565b612399848484611ea4565b6123a58484848461282c565b6123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db90613b34565b60405180910390fd5b50505050565b6060601080546123f99061406d565b80601f01602080910402602001604051908101604052809291908181526020018280546124259061406d565b80156124725780601f1061244757610100808354040283529160200191612472565b820191906000526020600020905b81548152906001019060200180831161245557829003601f168201915b5050505050905090565b606060008214156124c4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125d8565b600082905060005b600082146124f65780806124df906140d0565b915050600a826124ef9190613f48565b91506124cc565b60008167ffffffffffffffff81111561251257612511614263565b5b6040519080825280601f01601f1916602001820160405280156125445781602001600182028036833780820191505090505b5090505b600085146125d15760018261255d9190613f79565b9150600a8561256c9190614147565b60306125789190613ef2565b60f81b81838151811061258e5761258d614234565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125ca9190613f48565b9450612548565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612652838383611bb2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561269557612690816129c3565b6126d4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126d3576126d28382612a0c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127175761271281612b79565b612756565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612755576127548282612c4a565b5b5b505050565b612775828260405180602001604052806000815250612cc9565b5050565b60008082905060005b84518110156128215760008582815181106127a05761279f614234565b5b602002602001015190508083116127e15782816040516020016127c49291906139b8565b60405160208183030381529060405280519060200120925061280d565b80836040516020016127f49291906139b8565b6040516020818303038152906040528051906020012092505b508080612819906140d0565b915050612782565b508091505092915050565b600061284d8473ffffffffffffffffffffffffffffffffffffffff16611b9f565b156129b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612876611d05565b8786866040518563ffffffff1660e01b81526004016128989493929190613a2e565b602060405180830381600087803b1580156128b257600080fd5b505af19250505080156128e357506040513d601f19601f820116820180604052508101906128e09190613420565b60015b612966573d8060008114612913576040519150601f19603f3d011682016040523d82523d6000602084013e612918565b606091505b5060008151141561295e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295590613b34565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129bb565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a1984610f61565b612a239190613f79565b9050600060076000848152602001908152602001600020549050818114612b08576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b8d9190613f79565b9050600060096000848152602001908152602001600020549050600060088381548110612bbd57612bbc614234565b5b906000526020600020015490508060088381548110612bdf57612bde614234565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c2e57612c2d614205565b5b6001900381819060005260206000200160009055905550505050565b6000612c5583610f61565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b612cd38383612d24565b612ce0600084848461282c565b612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690613b34565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8b90613c74565b60405180910390fd5b612d9d81611c99565b15612ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd490613b74565b60405180910390fd5b612de960008383612647565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e399190613ef2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612efe9061406d565b90600052602060002090601f016020900481019282612f205760008555612f67565b82601f10612f3957805160ff1916838001178555612f67565b82800160010185558215612f67579182015b82811115612f66578251825591602001919060010190612f4b565b5b509050612f749190612f78565b5090565b5b80821115612f91576000816000905550600101612f79565b5090565b6000612fa8612fa384613e14565b613def565b905082815260208101848484011115612fc457612fc36142a1565b5b612fcf84828561402b565b509392505050565b6000612fea612fe584613e45565b613def565b905082815260208101848484011115613006576130056142a1565b5b61301184828561402b565b509392505050565b600081359050613028816148ba565b92915050565b60008083601f84011261304457613043614297565b5b8235905067ffffffffffffffff81111561306157613060614292565b5b60208301915083602082028301111561307d5761307c61429c565b5b9250929050565b600081359050613093816148d1565b92915050565b6000813590506130a8816148e8565b92915050565b6000813590506130bd816148ff565b92915050565b6000815190506130d2816148ff565b92915050565b600082601f8301126130ed576130ec614297565b5b81356130fd848260208601612f95565b91505092915050565b600082601f83011261311b5761311a614297565b5b813561312b848260208601612fd7565b91505092915050565b60008135905061314381614916565b92915050565b60006020828403121561315f5761315e6142ab565b5b600061316d84828501613019565b91505092915050565b6000806040838503121561318d5761318c6142ab565b5b600061319b85828601613019565b92505060206131ac85828601613019565b9150509250929050565b6000806000606084860312156131cf576131ce6142ab565b5b60006131dd86828701613019565b93505060206131ee86828701613019565b92505060406131ff86828701613134565b9150509250925092565b60008060008060808587031215613223576132226142ab565b5b600061323187828801613019565b945050602061324287828801613019565b935050604061325387828801613134565b925050606085013567ffffffffffffffff811115613274576132736142a6565b5b613280878288016130d8565b91505092959194509250565b600080604083850312156132a3576132a26142ab565b5b60006132b185828601613019565b92505060206132c285828601613084565b9150509250929050565b600080604083850312156132e3576132e26142ab565b5b60006132f185828601613019565b925050602061330285828601613134565b9150509250929050565b60008060208385031215613323576133226142ab565b5b600083013567ffffffffffffffff811115613341576133406142a6565b5b61334d8582860161302e565b92509250509250929050565b60006020828403121561336f5761336e6142ab565b5b600061337d84828501613084565b91505092915050565b6000806040838503121561339d5761339c6142ab565b5b60006133ab85828601613084565b92505060206133bc85828601613019565b9150509250929050565b6000602082840312156133dc576133db6142ab565b5b60006133ea84828501613099565b91505092915050565b600060208284031215613409576134086142ab565b5b6000613417848285016130ae565b91505092915050565b600060208284031215613436576134356142ab565b5b6000613444848285016130c3565b91505092915050565b600060208284031215613463576134626142ab565b5b600082013567ffffffffffffffff811115613481576134806142a6565b5b61348d84828501613106565b91505092915050565b6000602082840312156134ac576134ab6142ab565b5b60006134ba84828501613134565b91505092915050565b60006134cf838361397f565b60208301905092915050565b6134e481613fad565b82525050565b6134fb6134f682613fad565b614119565b82525050565b600061350c82613e86565b6135168185613eb4565b935061352183613e76565b8060005b8381101561355257815161353988826134c3565b975061354483613ea7565b925050600181019050613525565b5085935050505092915050565b61356881613fbf565b82525050565b61357781613fcb565b82525050565b61358e61358982613fcb565b61412b565b82525050565b600061359f82613e91565b6135a98185613ec5565b93506135b981856020860161403a565b6135c2816142b0565b840191505092915050565b60006135d882613e9c565b6135e28185613ed6565b93506135f281856020860161403a565b6135fb816142b0565b840191505092915050565b600061361182613e9c565b61361b8185613ee7565b935061362b81856020860161403a565b80840191505092915050565b6000613644602b83613ed6565b915061364f826142ce565b604082019050919050565b6000613667601483613ed6565b91506136728261431d565b602082019050919050565b600061368a603283613ed6565b915061369582614346565b604082019050919050565b60006136ad602683613ed6565b91506136b882614395565b604082019050919050565b60006136d0601c83613ed6565b91506136db826143e4565b602082019050919050565b60006136f3600f83613ed6565b91506136fe8261440d565b602082019050919050565b6000613716602483613ed6565b915061372182614436565b604082019050919050565b6000613739601983613ed6565b915061374482614485565b602082019050919050565b600061375c602c83613ed6565b9150613767826144ae565b604082019050919050565b600061377f603883613ed6565b915061378a826144fd565b604082019050919050565b60006137a2602a83613ed6565b91506137ad8261454c565b604082019050919050565b60006137c5602983613ed6565b91506137d08261459b565b604082019050919050565b60006137e8602083613ed6565b91506137f3826145ea565b602082019050919050565b600061380b602c83613ed6565b915061381682614613565b604082019050919050565b600061382e600583613ee7565b915061383982614662565b600582019050919050565b6000613851602083613ed6565b915061385c8261468b565b602082019050919050565b6000613874602983613ed6565b915061387f826146b4565b604082019050919050565b6000613897602f83613ed6565b91506138a282614703565b604082019050919050565b60006138ba602183613ed6565b91506138c582614752565b604082019050919050565b60006138dd601b83613ed6565b91506138e8826147a1565b602082019050919050565b6000613900601483613ed6565b915061390b826147ca565b602082019050919050565b6000613923603183613ed6565b915061392e826147f3565b604082019050919050565b6000613946602c83613ed6565b915061395182614842565b604082019050919050565b6000613969601f83613ed6565b915061397482614891565b602082019050919050565b61398881614021565b82525050565b61399781614021565b82525050565b60006139a982846134ea565b60148201915081905092915050565b60006139c4828561357d565b6020820191506139d4828461357d565b6020820191508190509392505050565b60006139f08285613606565b91506139fc8284613606565b9150613a0782613821565b91508190509392505050565b6000602082019050613a2860008301846134db565b92915050565b6000608082019050613a4360008301876134db565b613a5060208301866134db565b613a5d604083018561398e565b8181036060830152613a6f8184613594565b905095945050505050565b60006020820190508181036000830152613a948184613501565b905092915050565b6000602082019050613ab1600083018461355f565b92915050565b6000602082019050613acc600083018461356e565b92915050565b60006020820190508181036000830152613aec81846135cd565b905092915050565b60006020820190508181036000830152613b0d81613637565b9050919050565b60006020820190508181036000830152613b2d8161365a565b9050919050565b60006020820190508181036000830152613b4d8161367d565b9050919050565b60006020820190508181036000830152613b6d816136a0565b9050919050565b60006020820190508181036000830152613b8d816136c3565b9050919050565b60006020820190508181036000830152613bad816136e6565b9050919050565b60006020820190508181036000830152613bcd81613709565b9050919050565b60006020820190508181036000830152613bed8161372c565b9050919050565b60006020820190508181036000830152613c0d8161374f565b9050919050565b60006020820190508181036000830152613c2d81613772565b9050919050565b60006020820190508181036000830152613c4d81613795565b9050919050565b60006020820190508181036000830152613c6d816137b8565b9050919050565b60006020820190508181036000830152613c8d816137db565b9050919050565b60006020820190508181036000830152613cad816137fe565b9050919050565b60006020820190508181036000830152613ccd81613844565b9050919050565b60006020820190508181036000830152613ced81613867565b9050919050565b60006020820190508181036000830152613d0d8161388a565b9050919050565b60006020820190508181036000830152613d2d816138ad565b9050919050565b60006020820190508181036000830152613d4d816138d0565b9050919050565b60006020820190508181036000830152613d6d816138f3565b9050919050565b60006020820190508181036000830152613d8d81613916565b9050919050565b60006020820190508181036000830152613dad81613939565b9050919050565b60006020820190508181036000830152613dcd8161395c565b9050919050565b6000602082019050613de9600083018461398e565b92915050565b6000613df9613e0a565b9050613e05828261409f565b919050565b6000604051905090565b600067ffffffffffffffff821115613e2f57613e2e614263565b5b613e38826142b0565b9050602081019050919050565b600067ffffffffffffffff821115613e6057613e5f614263565b5b613e69826142b0565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613efd82614021565b9150613f0883614021565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f3d57613f3c614178565b5b828201905092915050565b6000613f5382614021565b9150613f5e83614021565b925082613f6e57613f6d6141a7565b5b828204905092915050565b6000613f8482614021565b9150613f8f83614021565b925082821015613fa257613fa1614178565b5b828203905092915050565b6000613fb882614001565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561405857808201518184015260208101905061403d565b83811115614067576000848401525b50505050565b6000600282049050600182168061408557607f821691505b60208210811415614099576140986141d6565b5b50919050565b6140a8826142b0565b810181811067ffffffffffffffff821117156140c7576140c6614263565b5b80604052505050565b60006140db82614021565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561410e5761410d614178565b5b600182019050919050565b600061412482614135565b9050919050565b6000819050919050565b6000614140826142c1565b9050919050565b600061415282614021565b915061415d83614021565b92508261416d5761416c6141a7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7920726561636865642021000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f436f6e7472616374207061757365640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f42617365205552492068617320616c7265616479206265207365740000000000600082015250565b7f4e6f7420696e207468652077686974656c697374000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520616c7265616479206861766520796f75722073706163657368697000600082015250565b6148c381613fad565b81146148ce57600080fd5b50565b6148da81613fbf565b81146148e557600080fd5b50565b6148f181613fcb565b81146148fc57600080fd5b50565b61490881613fd5565b811461491357600080fd5b50565b61491f81614021565b811461492a57600080fd5b5056fea26469706673582212209c98e80bfd492ed57cd098a8c2473c95d8f83252a6d087d8506efb44a503244f64736f6c634300080700335d86a469c54a481952a719027bf5369cc4b6980379144166a4333d394d6752475f9167f18401703c114ad8f2eb2b9912a14c391f3695440e852e992c51540a63

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102275760003560e01c80636352211e11610130578063aa8a31fb116100b8578063e2a71ef81161007c578063e2a71ef81461063e578063e4cb130c1461065c578063e985e9c514610678578063f2fde38b146106a8578063f870afe1146106c457610227565b8063aa8a31fb146105ae578063b88d4fde146105b8578063c87b56dd146105d4578063d7bd76cc14610604578063da9e51f81461062057610227565b806378cf6de0116100ff57806378cf6de01461051e57806380dfc2af1461053a5780638da5cb5b1461055657806395d89b4114610574578063a22cb4651461059257610227565b80636352211e146104965780636c0360eb146104c657806370a08231146104e4578063715018a61461051457610227565b806322f4596f116101b35780632f745c59116101825780632f745c59146103e257806342842e0e1461041257806346ee05761461042e5780634f6ccce71461044a57806355f804b31461047a57610227565b806322f4596f1461036e578063235b6ea11461038c57806323b872dd146103aa5780632d4b2986146103c657610227565b8063095ea7b3116101fa578063095ea7b3146102da5780630bebfed7146102f657806316c61ccc1461031457806318160ddd146103325780631c8bbebe1461035057610227565b806301ffc9a71461022c57806304d0a6471461025c57806306fdde031461028c578063081812fc146102aa575b600080fd5b610246600480360381019061024191906133f3565b6106e0565b6040516102539190613a9c565b60405180910390f35b61027660048036038101906102719190613149565b61075a565b6040516102839190613a7a565b60405180910390f35b610294610808565b6040516102a19190613ad2565b60405180910390f35b6102c460048036038101906102bf9190613496565b61089a565b6040516102d19190613a13565b60405180910390f35b6102f460048036038101906102ef91906132cc565b61091f565b005b6102fe610a37565b60405161030b9190613ab7565b60405180910390f35b61031c610a3d565b6040516103299190613a9c565b60405180910390f35b61033a610a50565b6040516103479190613dd4565b60405180910390f35b610358610a5d565b6040516103659190613a9c565b60405180910390f35b610376610a70565b6040516103839190613dd4565b60405180910390f35b610394610a76565b6040516103a19190613dd4565b60405180910390f35b6103c460048036038101906103bf91906131b6565b610a7c565b005b6103e060048036038101906103db9190613496565b610adc565b005b6103fc60048036038101906103f791906132cc565b610b64565b6040516104099190613dd4565b60405180910390f35b61042c600480360381019061042791906131b6565b610c09565b005b610448600480360381019061044391906133c6565b610c29565b005b610464600480360381019061045f9190613496565b610caf565b6040516104719190613dd4565b60405180910390f35b610494600480360381019061048f919061344d565b610d20565b005b6104b060048036038101906104ab9190613496565b610e21565b6040516104bd9190613a13565b60405180910390f35b6104ce610ed3565b6040516104db9190613ad2565b60405180910390f35b6104fe60048036038101906104f99190613149565b610f61565b60405161050b9190613dd4565b60405180910390f35b61051c611019565b005b61053860048036038101906105339190613359565b6110a1565b005b610554600480360381019061054f919061330c565b61113a565b005b61055e6113aa565b60405161056b9190613a13565b60405180910390f35b61057c6113d4565b6040516105899190613ad2565b60405180910390f35b6105ac60048036038101906105a7919061328c565b611466565b005b6105b661147c565b005b6105d260048036038101906105cd9190613209565b611524565b005b6105ee60048036038101906105e99190613496565b611586565b6040516105fb9190613ad2565b60405180910390f35b61061e600480360381019061061991906133c6565b61162d565b005b6106286116b3565b6040516106359190613ab7565b60405180910390f35b6106466116b9565b6040516106539190613a9c565b60405180910390f35b6106766004803603810190610671919061330c565b6116cc565b005b610692600480360381019061068d9190613176565b61193c565b60405161069f9190613a9c565b60405180910390f35b6106c260048036038101906106bd9190613149565b6119d0565b005b6106de60048036038101906106d99190613386565b611ac8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610753575061075282611bb7565b5b9050919050565b6060600061076783610f61565b905060008167ffffffffffffffff81111561078557610784614263565b5b6040519080825280602002602001820160405280156107b35781602001602082028036833780820191505090505b50905060005b828110156107fd576107cb8582610b64565b8282815181106107de576107dd614234565b5b60200260200101818152505080806107f5906140d0565b9150506107b9565b508092505050919050565b6060600080546108179061406d565b80601f01602080910402602001604051908101604052809291908181526020018280546108439061406d565b80156108905780601f1061086557610100808354040283529160200191610890565b820191906000526020600020905b81548152906001019060200180831161087357829003601f168201915b5050505050905090565b60006108a582611c99565b6108e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108db90613c94565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092a82610e21565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613d14565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109ba611d05565b73ffffffffffffffffffffffffffffffffffffffff1614806109e957506109e8816109e3611d05565b61193c565b5b610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f90613c14565b60405180910390fd5b610a328383611d0d565b505050565b600b5481565b600f60009054906101000a900460ff1681565b6000600880549050905090565b600f60029054906101000a900460ff1681565b600d5481565b600e5481565b610a8d610a87611d05565b82611dc6565b610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390613d74565b60405180910390fd5b610ad7838383611ea4565b505050565b610ae4611d05565b73ffffffffffffffffffffffffffffffffffffffff16610b026113aa565b73ffffffffffffffffffffffffffffffffffffffff1614610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90613cb4565b60405180910390fd5b610b6181612100565b50565b6000610b6f83610f61565b8210610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790613af4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c2483838360405180602001604052806000815250611524565b505050565b610c31611d05565b73ffffffffffffffffffffffffffffffffffffffff16610c4f6113aa565b73ffffffffffffffffffffffffffffffffffffffff1614610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90613cb4565b60405180910390fd5b80600c8190555050565b6000610cb9610a50565b8210610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf190613d94565b60405180910390fd5b60088281548110610d0e57610d0d614234565b5b90600052602060002001549050919050565b610d28611d05565b73ffffffffffffffffffffffffffffffffffffffff16610d466113aa565b73ffffffffffffffffffffffffffffffffffffffff1614610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390613cb4565b60405180910390fd5b600f60029054906101000a900460ff1615610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390613d34565b60405180910390fd5b6001600f60026101000a81548160ff0219169083151502179055508060109080519060200190610e1d929190612ef2565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613c54565b60405180910390fd5b80915050919050565b60108054610ee09061406d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0c9061406d565b8015610f595780601f10610f2e57610100808354040283529160200191610f59565b820191906000526020600020905b815481529060010190602001808311610f3c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990613c34565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611021611d05565b73ffffffffffffffffffffffffffffffffffffffff1661103f6113aa565b73ffffffffffffffffffffffffffffffffffffffff1614611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c90613cb4565b60405180910390fd5b61109f6000612144565b565b6110a9611d05565b73ffffffffffffffffffffffffffffffffffffffff166110c76113aa565b73ffffffffffffffffffffffffffffffffffffffff161461111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490613cb4565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b8181600b54600033604051602001611152919061399d565b604051602081830303815290604052805190602001209050601160009054906101000a900460ff161561120b576111cb848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050838361220a565b61120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613d54565b60405180910390fd5b5b600f60009054906101000a900460ff161561125b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125290613b94565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90613db4565b60405180910390fd5b600d5460016112f5610a50565b6112ff9190613ef2565b1115611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133790613b14565b60405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506113a26001612100565b505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113e39061406d565b80601f016020809104026020016040519081016040528092919081815260200182805461140f9061406d565b801561145c5780601f106114315761010080835404028352916020019161145c565b820191906000526020600020905b81548152906001019060200180831161143f57829003601f168201915b5050505050905090565b611478611471611d05565b8383612221565b5050565b611484611d05565b73ffffffffffffffffffffffffffffffffffffffff166114a26113aa565b73ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90613cb4565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b61153561152f611d05565b83611dc6565b611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613d74565b60405180910390fd5b6115808484848461238e565b50505050565b606061159182611c99565b6115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c790613cf4565b60405180910390fd5b60006115da6123ea565b905060008151116115fa5760405180602001604052806000815250611625565b806116048461247c565b6040516020016116159291906139e4565b6040516020818303038152906040525b915050919050565b611635611d05565b73ffffffffffffffffffffffffffffffffffffffff166116536113aa565b73ffffffffffffffffffffffffffffffffffffffff16146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613cb4565b60405180910390fd5b80600b8190555050565b600c5481565b600f60019054906101000a900460ff1681565b8181600c546000336040516020016116e4919061399d565b604051602081830303815290604052805190602001209050601160009054906101000a900460ff161561179d5761175d848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050838361220a565b61179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613d54565b60405180910390fd5b5b600f60009054906101000a900460ff16156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490613b94565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613db4565b60405180910390fd5b600d546002611887610a50565b6118919190613ef2565b11156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990613b14565b60405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506119346002612100565b505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119d8611d05565b73ffffffffffffffffffffffffffffffffffffffff166119f66113aa565b73ffffffffffffffffffffffffffffffffffffffff1614611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4390613cb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390613b54565b60405180910390fd5b611ac581612144565b50565b611ad0611d05565b73ffffffffffffffffffffffffffffffffffffffff16611aee6113aa565b73ffffffffffffffffffffffffffffffffffffffff1614611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b90613cb4565b60405180910390fd5b81601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c8257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c925750611c91826125dd565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d8083610e21565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611dd182611c99565b611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0790613bf4565b60405180910390fd5b6000611e1b83610e21565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e8a57508373ffffffffffffffffffffffffffffffffffffffff16611e728461089a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e9b5750611e9a818561193c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ec482610e21565b73ffffffffffffffffffffffffffffffffffffffff1614611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190613cd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8190613bb4565b60405180910390fd5b611f95838383612647565b611fa0600082611d0d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff09190613f79565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120479190613ef2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061210a610a50565b905060005b8281101561213f5761212c3382846121279190613ef2565b61275b565b8080612137906140d0565b91505061210f565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000826122178584612779565b1490509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228790613bd4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123819190613a9c565b60405180910390a3505050565b612399848484611ea4565b6123a58484848461282c565b6123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db90613b34565b60405180910390fd5b50505050565b6060601080546123f99061406d565b80601f01602080910402602001604051908101604052809291908181526020018280546124259061406d565b80156124725780601f1061244757610100808354040283529160200191612472565b820191906000526020600020905b81548152906001019060200180831161245557829003601f168201915b5050505050905090565b606060008214156124c4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125d8565b600082905060005b600082146124f65780806124df906140d0565b915050600a826124ef9190613f48565b91506124cc565b60008167ffffffffffffffff81111561251257612511614263565b5b6040519080825280601f01601f1916602001820160405280156125445781602001600182028036833780820191505090505b5090505b600085146125d15760018261255d9190613f79565b9150600a8561256c9190614147565b60306125789190613ef2565b60f81b81838151811061258e5761258d614234565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125ca9190613f48565b9450612548565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612652838383611bb2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561269557612690816129c3565b6126d4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126d3576126d28382612a0c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127175761271281612b79565b612756565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612755576127548282612c4a565b5b5b505050565b612775828260405180602001604052806000815250612cc9565b5050565b60008082905060005b84518110156128215760008582815181106127a05761279f614234565b5b602002602001015190508083116127e15782816040516020016127c49291906139b8565b60405160208183030381529060405280519060200120925061280d565b80836040516020016127f49291906139b8565b6040516020818303038152906040528051906020012092505b508080612819906140d0565b915050612782565b508091505092915050565b600061284d8473ffffffffffffffffffffffffffffffffffffffff16611b9f565b156129b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612876611d05565b8786866040518563ffffffff1660e01b81526004016128989493929190613a2e565b602060405180830381600087803b1580156128b257600080fd5b505af19250505080156128e357506040513d601f19601f820116820180604052508101906128e09190613420565b60015b612966573d8060008114612913576040519150601f19603f3d011682016040523d82523d6000602084013e612918565b606091505b5060008151141561295e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295590613b34565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129bb565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a1984610f61565b612a239190613f79565b9050600060076000848152602001908152602001600020549050818114612b08576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b8d9190613f79565b9050600060096000848152602001908152602001600020549050600060088381548110612bbd57612bbc614234565b5b906000526020600020015490508060088381548110612bdf57612bde614234565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c2e57612c2d614205565b5b6001900381819060005260206000200160009055905550505050565b6000612c5583610f61565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b612cd38383612d24565b612ce0600084848461282c565b612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690613b34565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8b90613c74565b60405180910390fd5b612d9d81611c99565b15612ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd490613b74565b60405180910390fd5b612de960008383612647565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e399190613ef2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612efe9061406d565b90600052602060002090601f016020900481019282612f205760008555612f67565b82601f10612f3957805160ff1916838001178555612f67565b82800160010185558215612f67579182015b82811115612f66578251825591602001919060010190612f4b565b5b509050612f749190612f78565b5090565b5b80821115612f91576000816000905550600101612f79565b5090565b6000612fa8612fa384613e14565b613def565b905082815260208101848484011115612fc457612fc36142a1565b5b612fcf84828561402b565b509392505050565b6000612fea612fe584613e45565b613def565b905082815260208101848484011115613006576130056142a1565b5b61301184828561402b565b509392505050565b600081359050613028816148ba565b92915050565b60008083601f84011261304457613043614297565b5b8235905067ffffffffffffffff81111561306157613060614292565b5b60208301915083602082028301111561307d5761307c61429c565b5b9250929050565b600081359050613093816148d1565b92915050565b6000813590506130a8816148e8565b92915050565b6000813590506130bd816148ff565b92915050565b6000815190506130d2816148ff565b92915050565b600082601f8301126130ed576130ec614297565b5b81356130fd848260208601612f95565b91505092915050565b600082601f83011261311b5761311a614297565b5b813561312b848260208601612fd7565b91505092915050565b60008135905061314381614916565b92915050565b60006020828403121561315f5761315e6142ab565b5b600061316d84828501613019565b91505092915050565b6000806040838503121561318d5761318c6142ab565b5b600061319b85828601613019565b92505060206131ac85828601613019565b9150509250929050565b6000806000606084860312156131cf576131ce6142ab565b5b60006131dd86828701613019565b93505060206131ee86828701613019565b92505060406131ff86828701613134565b9150509250925092565b60008060008060808587031215613223576132226142ab565b5b600061323187828801613019565b945050602061324287828801613019565b935050604061325387828801613134565b925050606085013567ffffffffffffffff811115613274576132736142a6565b5b613280878288016130d8565b91505092959194509250565b600080604083850312156132a3576132a26142ab565b5b60006132b185828601613019565b92505060206132c285828601613084565b9150509250929050565b600080604083850312156132e3576132e26142ab565b5b60006132f185828601613019565b925050602061330285828601613134565b9150509250929050565b60008060208385031215613323576133226142ab565b5b600083013567ffffffffffffffff811115613341576133406142a6565b5b61334d8582860161302e565b92509250509250929050565b60006020828403121561336f5761336e6142ab565b5b600061337d84828501613084565b91505092915050565b6000806040838503121561339d5761339c6142ab565b5b60006133ab85828601613084565b92505060206133bc85828601613019565b9150509250929050565b6000602082840312156133dc576133db6142ab565b5b60006133ea84828501613099565b91505092915050565b600060208284031215613409576134086142ab565b5b6000613417848285016130ae565b91505092915050565b600060208284031215613436576134356142ab565b5b6000613444848285016130c3565b91505092915050565b600060208284031215613463576134626142ab565b5b600082013567ffffffffffffffff811115613481576134806142a6565b5b61348d84828501613106565b91505092915050565b6000602082840312156134ac576134ab6142ab565b5b60006134ba84828501613134565b91505092915050565b60006134cf838361397f565b60208301905092915050565b6134e481613fad565b82525050565b6134fb6134f682613fad565b614119565b82525050565b600061350c82613e86565b6135168185613eb4565b935061352183613e76565b8060005b8381101561355257815161353988826134c3565b975061354483613ea7565b925050600181019050613525565b5085935050505092915050565b61356881613fbf565b82525050565b61357781613fcb565b82525050565b61358e61358982613fcb565b61412b565b82525050565b600061359f82613e91565b6135a98185613ec5565b93506135b981856020860161403a565b6135c2816142b0565b840191505092915050565b60006135d882613e9c565b6135e28185613ed6565b93506135f281856020860161403a565b6135fb816142b0565b840191505092915050565b600061361182613e9c565b61361b8185613ee7565b935061362b81856020860161403a565b80840191505092915050565b6000613644602b83613ed6565b915061364f826142ce565b604082019050919050565b6000613667601483613ed6565b91506136728261431d565b602082019050919050565b600061368a603283613ed6565b915061369582614346565b604082019050919050565b60006136ad602683613ed6565b91506136b882614395565b604082019050919050565b60006136d0601c83613ed6565b91506136db826143e4565b602082019050919050565b60006136f3600f83613ed6565b91506136fe8261440d565b602082019050919050565b6000613716602483613ed6565b915061372182614436565b604082019050919050565b6000613739601983613ed6565b915061374482614485565b602082019050919050565b600061375c602c83613ed6565b9150613767826144ae565b604082019050919050565b600061377f603883613ed6565b915061378a826144fd565b604082019050919050565b60006137a2602a83613ed6565b91506137ad8261454c565b604082019050919050565b60006137c5602983613ed6565b91506137d08261459b565b604082019050919050565b60006137e8602083613ed6565b91506137f3826145ea565b602082019050919050565b600061380b602c83613ed6565b915061381682614613565b604082019050919050565b600061382e600583613ee7565b915061383982614662565b600582019050919050565b6000613851602083613ed6565b915061385c8261468b565b602082019050919050565b6000613874602983613ed6565b915061387f826146b4565b604082019050919050565b6000613897602f83613ed6565b91506138a282614703565b604082019050919050565b60006138ba602183613ed6565b91506138c582614752565b604082019050919050565b60006138dd601b83613ed6565b91506138e8826147a1565b602082019050919050565b6000613900601483613ed6565b915061390b826147ca565b602082019050919050565b6000613923603183613ed6565b915061392e826147f3565b604082019050919050565b6000613946602c83613ed6565b915061395182614842565b604082019050919050565b6000613969601f83613ed6565b915061397482614891565b602082019050919050565b61398881614021565b82525050565b61399781614021565b82525050565b60006139a982846134ea565b60148201915081905092915050565b60006139c4828561357d565b6020820191506139d4828461357d565b6020820191508190509392505050565b60006139f08285613606565b91506139fc8284613606565b9150613a0782613821565b91508190509392505050565b6000602082019050613a2860008301846134db565b92915050565b6000608082019050613a4360008301876134db565b613a5060208301866134db565b613a5d604083018561398e565b8181036060830152613a6f8184613594565b905095945050505050565b60006020820190508181036000830152613a948184613501565b905092915050565b6000602082019050613ab1600083018461355f565b92915050565b6000602082019050613acc600083018461356e565b92915050565b60006020820190508181036000830152613aec81846135cd565b905092915050565b60006020820190508181036000830152613b0d81613637565b9050919050565b60006020820190508181036000830152613b2d8161365a565b9050919050565b60006020820190508181036000830152613b4d8161367d565b9050919050565b60006020820190508181036000830152613b6d816136a0565b9050919050565b60006020820190508181036000830152613b8d816136c3565b9050919050565b60006020820190508181036000830152613bad816136e6565b9050919050565b60006020820190508181036000830152613bcd81613709565b9050919050565b60006020820190508181036000830152613bed8161372c565b9050919050565b60006020820190508181036000830152613c0d8161374f565b9050919050565b60006020820190508181036000830152613c2d81613772565b9050919050565b60006020820190508181036000830152613c4d81613795565b9050919050565b60006020820190508181036000830152613c6d816137b8565b9050919050565b60006020820190508181036000830152613c8d816137db565b9050919050565b60006020820190508181036000830152613cad816137fe565b9050919050565b60006020820190508181036000830152613ccd81613844565b9050919050565b60006020820190508181036000830152613ced81613867565b9050919050565b60006020820190508181036000830152613d0d8161388a565b9050919050565b60006020820190508181036000830152613d2d816138ad565b9050919050565b60006020820190508181036000830152613d4d816138d0565b9050919050565b60006020820190508181036000830152613d6d816138f3565b9050919050565b60006020820190508181036000830152613d8d81613916565b9050919050565b60006020820190508181036000830152613dad81613939565b9050919050565b60006020820190508181036000830152613dcd8161395c565b9050919050565b6000602082019050613de9600083018461398e565b92915050565b6000613df9613e0a565b9050613e05828261409f565b919050565b6000604051905090565b600067ffffffffffffffff821115613e2f57613e2e614263565b5b613e38826142b0565b9050602081019050919050565b600067ffffffffffffffff821115613e6057613e5f614263565b5b613e69826142b0565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613efd82614021565b9150613f0883614021565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f3d57613f3c614178565b5b828201905092915050565b6000613f5382614021565b9150613f5e83614021565b925082613f6e57613f6d6141a7565b5b828204905092915050565b6000613f8482614021565b9150613f8f83614021565b925082821015613fa257613fa1614178565b5b828203905092915050565b6000613fb882614001565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561405857808201518184015260208101905061403d565b83811115614067576000848401525b50505050565b6000600282049050600182168061408557607f821691505b60208210811415614099576140986141d6565b5b50919050565b6140a8826142b0565b810181811067ffffffffffffffff821117156140c7576140c6614263565b5b80604052505050565b60006140db82614021565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561410e5761410d614178565b5b600182019050919050565b600061412482614135565b9050919050565b6000819050919050565b6000614140826142c1565b9050919050565b600061415282614021565b915061415d83614021565b92508261416d5761416c6141a7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7920726561636865642021000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f436f6e7472616374207061757365640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f42617365205552492068617320616c7265616479206265207365740000000000600082015250565b7f4e6f7420696e207468652077686974656c697374000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520616c7265616479206861766520796f75722073706163657368697000600082015250565b6148c381613fad565b81146148ce57600080fd5b50565b6148da81613fbf565b81146148e557600080fd5b50565b6148f181613fcb565b81146148fc57600080fd5b50565b61490881613fd5565b811461491357600080fd5b50565b61491f81614021565b811461492a57600080fd5b5056fea26469706673582212209c98e80bfd492ed57cd098a8c2473c95d8f83252a6d087d8506efb44a503244f64736f6c63430008070033

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

5d86a469c54a481952a719027bf5369cc4b6980379144166a4333d394d6752475f9167f18401703c114ad8f2eb2b9912a14c391f3695440e852e992c51540a63

-----Decoded View---------------
Arg [0] : merkleRoot1 (bytes32): 0x5d86a469c54a481952a719027bf5369cc4b6980379144166a4333d394d675247
Arg [1] : merkleRoot2 (bytes32): 0x5f9167f18401703c114ad8f2eb2b9912a14c391f3695440e852e992c51540a63

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 5d86a469c54a481952a719027bf5369cc4b6980379144166a4333d394d675247
Arg [1] : 5f9167f18401703c114ad8f2eb2b9912a14c391f3695440e852e992c51540a63


Deployed Bytecode Sourcemap

46794:5830:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40469:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51195:347;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27963:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29522:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29045:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46934:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47188:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41109:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47416:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47024:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47091:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30272:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49005:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40777:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30682:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50677:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41299:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51930:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27657:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47670:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27387:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6933:103;;;:::i;:::-;;48598:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49548:371;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6282:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28132:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29815:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48865:87;;;:::i;:::-;;30938:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52287:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50552:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46968:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47290;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49927:371;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30041:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7191:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50306:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40469:224;40571:4;40610:35;40595:50;;;:11;:50;;;;:90;;;;40649:36;40673:11;40649:23;:36::i;:::-;40595:90;40588:97;;40469:224;;;:::o;51195:347::-;51250:14;51277:16;51296:17;51306:6;51296:9;:17::i;:::-;51277:36;;51324:22;51360:11;51349:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51324:48;;51398:6;51393:107;51414:11;51410:1;:15;51393:107;;;51459:29;51479:6;51486:1;51459:19;:29::i;:::-;51446:7;51454:1;51446:10;;;;;;;;:::i;:::-;;;;;;;:42;;;;;51427:3;;;;;:::i;:::-;;;;51393:107;;;;51527:7;51520:14;;;;51195:347;;;:::o;27963:100::-;28017:13;28050:5;28043:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27963:100;:::o;29522:221::-;29598:7;29626:16;29634:7;29626;:16::i;:::-;29618:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29711:15;:24;29727:7;29711:24;;;;;;;;;;;;;;;;;;;;;29704:31;;29522:221;;;:::o;29045:411::-;29126:13;29142:23;29157:7;29142:14;:23::i;:::-;29126:39;;29190:5;29184:11;;:2;:11;;;;29176:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29284:5;29268:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29293:37;29310:5;29317:12;:10;:12::i;:::-;29293:16;:37::i;:::-;29268:62;29246:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29427:21;29436:2;29440:7;29427:8;:21::i;:::-;29115:341;29045:411;;:::o;46934:27::-;;;;:::o;47188:26::-;;;;;;;;;;;;;:::o;41109:113::-;41170:7;41197:10;:17;;;;41190:24;;41109:113;:::o;47416:31::-;;;;;;;;;;;;;:::o;47024:29::-;;;;:::o;47091:30::-;;;;:::o;30272:339::-;30467:41;30486:12;:10;:12::i;:::-;30500:7;30467:18;:41::i;:::-;30459:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30575:28;30585:4;30591:2;30595:7;30575:9;:28::i;:::-;30272:339;;;:::o;49005:89::-;6513:12;:10;:12::i;:::-;6502:23;;:7;:5;:7::i;:::-;:23;;;6494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49069:16:::1;49078:6;49069:8;:16::i;:::-;49005:89:::0;:::o;40777:256::-;40874:7;40910:23;40927:5;40910:16;:23::i;:::-;40902:5;:31;40894:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40999:12;:19;41012:5;40999:19;;;;;;;;;;;;;;;:26;41019:5;40999:26;;;;;;;;;;;;40992:33;;40777:256;;;;:::o;30682:185::-;30820:39;30837:4;30843:2;30847:7;30820:39;;;;;;;;;;;;:16;:39::i;:::-;30682:185;;;:::o;50677:117::-;6513:12;:10;:12::i;:::-;6502:23;;:7;:5;:7::i;:::-;:23;;;6494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50773:13:::1;50758:12;:28;;;;50677:117:::0;:::o;41299:233::-;41374:7;41410:30;:28;:30::i;:::-;41402:5;:38;41394:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41507:10;41518:5;41507:17;;;;;;;;:::i;:::-;;;;;;;;;;41500:24;;41299:233;;;:::o;51930:195::-;6513:12;:10;:12::i;:::-;6502:23;;:7;:5;:7::i;:::-;:23;;;6494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52014:11:::1;;;;;;;;;;;52013:12;52004:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;52082:4;52068:11;;:18;;;;;;;;;;;;;;;;;;52107:10;52097:7;:20;;;;;;;;;;;;:::i;:::-;;51930:195:::0;:::o;27657:239::-;27729:7;27749:13;27765:7;:16;27773:7;27765:16;;;;;;;;;;;;;;;;;;;;;27749:32;;27817:1;27800:19;;:5;:19;;;;27792:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27883:5;27876:12;;;27657:239;;;:::o;47670:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27387:208::-;27459:7;27504:1;27487:19;;:5;:19;;;;27479:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27571:9;:16;27581:5;27571:16;;;;;;;;;;;;;;;;27564:23;;27387:208;;;:::o;6933:103::-;6513:12;:10;:12::i;:::-;6502:23;;:7;:5;:7::i;:::-;:23;;;6494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6998:30:::1;7025:1;6998:18;:30::i;:::-;6933:103::o:0;48598:102::-;6513:12;:10;:12::i;:::-;6502:23;;:7;:5;:7::i;:::-;:23;;;6494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48688:4:::1;48668:17;;:24;;;;;;;;;;;;;;;;;;48598:102:::0;:::o;49548:371::-;49620:11;;49633:12;;47916;47958:10;47941:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;47931:39;;;;;;47916:54;;47985:17;;;;;;;;;;;47981:126;;;48027:43;48046:11;;48027:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48059:4;48065;48027:18;:43::i;:::-;48019:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;47981:126;49667:7:::1;;;;;;;;;;;49666:8;49658:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;49714:10;:22;49725:10;49714:22;;;;;;;;;;;;;;;;;;;;;;;;;49713:23;49705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49812:10;;49807:1;49791:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:31;;49783:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;49885:4;49860:10;:22;49871:10;49860:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;49900:11;49909:1;49900:8;:11::i;:::-;47905:221:::0;49548:371;;;;;:::o;6282:87::-;6328:7;6355:6;;;;;;;;;;;6348:13;;6282:87;:::o;28132:104::-;28188:13;28221:7;28214:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28132:104;:::o;29815:155::-;29910:52;29929:12;:10;:12::i;:::-;29943:8;29953;29910:18;:52::i;:::-;29815:155;;:::o;48865:87::-;6513:12;:10;:12::i;:::-;6502:23;;:7;:5;:7::i;:::-;:23;;;6494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48937:7:::1;;;;;;;;;;;48936:8;48926:7;;:18;;;;;;;;;;;;;;;;;;48865:87::o:0;30938:328::-;31113:41;31132:12;:10;:12::i;:::-;31146:7;31113:18;:41::i;:::-;31105:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31219:39;31233:4;31239:2;31243:7;31252:5;31219:13;:39::i;:::-;30938:328;;;;:::o;52287:330::-;52360:13;52394:16;52402:7;52394;:16::i;:::-;52386:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;52474:17;52494:10;:8;:10::i;:::-;52474:30;;52542:1;52528:3;52522:17;:21;:87;;;;;;;;;;;;;;;;;52570:3;52575:18;:7;:16;:18::i;:::-;52553:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52522:87;52515:94;;;52287:330;;;:::o;50552:117::-;6513:12;:10;:12::i;:::-;6502:23;;:7;:5;:7::i;:::-;:23;;;6494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50648:13:::1;50633:12;:28;;;;50552:117:::0;:::o;46968:27::-;;;;:::o;47290:::-;;;;;;;;;;;;;:::o;49927:371::-;49999:11;;50012:12;;47916;47958:10;47941:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;47931:39;;;;;;47916:54;;47985:17;;;;;;;;;;;47981:126;;;48027:43;48046:11;;48027:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48059:4;48065;48027:18;:43::i;:::-;48019:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;47981:126;50046:7:::1;;;;;;;;;;;50045:8;50037:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;50093:10;:22;50104:10;50093:22;;;;;;;;;;;;;;;;;;;;;;;;;50092:23;50084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50191:10;;50186:1;50170:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:31;;50162:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;50264:4;50239:10;:22;50250:10;50239:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;50279:11;50288:1;50279:8;:11::i;:::-;47905:221:::0;49927:371;;;;;:::o;30041:164::-;30138:4;30162:18;:25;30181:5;30162:25;;;;;;;;;;;;;;;:35;30188:8;30162:35;;;;;;;;;;;;;;;;;;;;;;;;;30155:42;;30041:164;;;;:::o;7191:201::-;6513:12;:10;:12::i;:::-;6502:23;;:7;:5;:7::i;:::-;:23;;;6494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7300:1:::1;7280:22;;:8;:22;;;;7272:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7356:28;7375:8;7356:18;:28::i;:::-;7191:201:::0;:::o;50306:115::-;6513:12;:10;:12::i;:::-;6502:23;;:7;:5;:7::i;:::-;:23;;;6494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50408:5:::1;50387:10;:18;50398:6;50387:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;50306:115:::0;;:::o;8570:387::-;8630:4;8838:12;8905:7;8893:20;8885:28;;8948:1;8941:4;:8;8934:15;;;8570:387;;;:::o;39325:126::-;;;;:::o;27018:305::-;27120:4;27172:25;27157:40;;;:11;:40;;;;:105;;;;27229:33;27214:48;;;:11;:48;;;;27157:105;:158;;;;27279:36;27303:11;27279:23;:36::i;:::-;27157:158;27137:178;;27018:305;;;:::o;32776:127::-;32841:4;32893:1;32865:30;;:7;:16;32873:7;32865:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32858:37;;32776:127;;;:::o;5006:98::-;5059:7;5086:10;5079:17;;5006:98;:::o;36758:174::-;36860:2;36833:15;:24;36849:7;36833:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36916:7;36912:2;36878:46;;36887:23;36902:7;36887:14;:23::i;:::-;36878:46;;;;;;;;;;;;36758:174;;:::o;33070:348::-;33163:4;33188:16;33196:7;33188;:16::i;:::-;33180:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33264:13;33280:23;33295:7;33280:14;:23::i;:::-;33264:39;;33333:5;33322:16;;:7;:16;;;:51;;;;33366:7;33342:31;;:20;33354:7;33342:11;:20::i;:::-;:31;;;33322:51;:87;;;;33377:32;33394:5;33401:7;33377:16;:32::i;:::-;33322:87;33314:96;;;33070:348;;;;:::o;36062:578::-;36221:4;36194:31;;:23;36209:7;36194:14;:23::i;:::-;:31;;;36186:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36304:1;36290:16;;:2;:16;;;;36282:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36360:39;36381:4;36387:2;36391:7;36360:20;:39::i;:::-;36464:29;36481:1;36485:7;36464:8;:29::i;:::-;36525:1;36506:9;:15;36516:4;36506:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36554:1;36537:9;:13;36547:2;36537:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36585:2;36566:7;:16;36574:7;36566:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36624:7;36620:2;36605:27;;36614:4;36605:27;;;;;;;;;;;;36062:578;;;:::o;50878:228::-;50936:18;50957:13;:11;:13::i;:::-;50936:34;;50990:6;50985:105;51002:13;50998:1;:17;50985:105;;;51038:40;51048:10;51076:1;51060:13;:17;;;;:::i;:::-;51038:9;:40::i;:::-;51018:3;;;;;:::i;:::-;;;;50985:105;;;;50925:181;50878:228;:::o;7552:191::-;7626:16;7645:6;;;;;;;;;;;7626:25;;7671:8;7662:6;;:17;;;;;;;;;;;;;;;;;;7726:8;7695:40;;7716:8;7695:40;;;;;;;;;;;;7615:128;7552:191;:::o;943:190::-;1068:4;1121;1092:25;1105:5;1112:4;1092:12;:25::i;:::-;:33;1085:40;;943:190;;;;;:::o;37074:315::-;37229:8;37220:17;;:5;:17;;;;37212:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37316:8;37278:18;:25;37297:5;37278:25;;;;;;;;;;;;;;;:35;37304:8;37278:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37362:8;37340:41;;37355:5;37340:41;;;37372:8;37340:41;;;;;;:::i;:::-;;;;;;;;37074:315;;;:::o;32148:::-;32305:28;32315:4;32321:2;32325:7;32305:9;:28::i;:::-;32352:48;32375:4;32381:2;32385:7;32394:5;32352:22;:48::i;:::-;32344:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32148:315;;;;:::o;51631:108::-;51691:13;51724:7;51717:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51631:108;:::o;2568:723::-;2624:13;2854:1;2845:5;:10;2841:53;;;2872:10;;;;;;;;;;;;;;;;;;;;;2841:53;2904:12;2919:5;2904:20;;2935:14;2960:78;2975:1;2967:4;:9;2960:78;;2993:8;;;;;:::i;:::-;;;;3024:2;3016:10;;;;;:::i;:::-;;;2960:78;;;3048:19;3080:6;3070:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3048:39;;3098:154;3114:1;3105:5;:10;3098:154;;3142:1;3132:11;;;;;:::i;:::-;;;3209:2;3201:5;:10;;;;:::i;:::-;3188:2;:24;;;;:::i;:::-;3175:39;;3158:6;3165;3158:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3238:2;3229:11;;;;;:::i;:::-;;;3098:154;;;3276:6;3262:21;;;;;2568:723;;;;:::o;18714:157::-;18799:4;18838:25;18823:40;;;:11;:40;;;;18816:47;;18714:157;;;:::o;42145:589::-;42289:45;42316:4;42322:2;42326:7;42289:26;:45::i;:::-;42367:1;42351:18;;:4;:18;;;42347:187;;;42386:40;42418:7;42386:31;:40::i;:::-;42347:187;;;42456:2;42448:10;;:4;:10;;;42444:90;;42475:47;42508:4;42514:7;42475:32;:47::i;:::-;42444:90;42347:187;42562:1;42548:16;;:2;:16;;;42544:183;;;42581:45;42618:7;42581:36;:45::i;:::-;42544:183;;;42654:4;42648:10;;:2;:10;;;42644:83;;42675:40;42703:2;42707:7;42675:27;:40::i;:::-;42644:83;42544:183;42145:589;;;:::o;33760:110::-;33836:26;33846:2;33850:7;33836:26;;;;;;;;;;;;:9;:26::i;:::-;33760:110;;:::o;1495:701::-;1578:7;1598:20;1621:4;1598:27;;1641:9;1636:523;1660:5;:12;1656:1;:16;1636:523;;;1694:20;1717:5;1723:1;1717:8;;;;;;;;:::i;:::-;;;;;;;;1694:31;;1760:12;1744;:28;1740:408;;1914:12;1928;1897:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1887:55;;;;;;1872:70;;1740:408;;;2104:12;2118;2087:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2077:55;;;;;;2062:70;;1740:408;1679:480;1674:3;;;;;:::i;:::-;;;;1636:523;;;;2176:12;2169:19;;;1495:701;;;;:::o;37954:799::-;38109:4;38130:15;:2;:13;;;:15::i;:::-;38126:620;;;38182:2;38166:36;;;38203:12;:10;:12::i;:::-;38217:4;38223:7;38232:5;38166:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38162:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38425:1;38408:6;:13;:18;38404:272;;;38451:60;;;;;;;;;;:::i;:::-;;;;;;;;38404:272;38626:6;38620:13;38611:6;38607:2;38603:15;38596:38;38162:529;38299:41;;;38289:51;;;:6;:51;;;;38282:58;;;;;38126:620;38730:4;38723:11;;37954:799;;;;;;;:::o;43457:164::-;43561:10;:17;;;;43534:15;:24;43550:7;43534:24;;;;;;;;;;;:44;;;;43589:10;43605:7;43589:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43457:164;:::o;44248:988::-;44514:22;44564:1;44539:22;44556:4;44539:16;:22::i;:::-;:26;;;;:::i;:::-;44514:51;;44576:18;44597:17;:26;44615:7;44597:26;;;;;;;;;;;;44576:47;;44744:14;44730:10;:28;44726:328;;44775:19;44797:12;:18;44810:4;44797:18;;;;;;;;;;;;;;;:34;44816:14;44797:34;;;;;;;;;;;;44775:56;;44881:11;44848:12;:18;44861:4;44848:18;;;;;;;;;;;;;;;:30;44867:10;44848:30;;;;;;;;;;;:44;;;;44998:10;44965:17;:30;44983:11;44965:30;;;;;;;;;;;:43;;;;44760:294;44726:328;45150:17;:26;45168:7;45150:26;;;;;;;;;;;45143:33;;;45194:12;:18;45207:4;45194:18;;;;;;;;;;;;;;;:34;45213:14;45194:34;;;;;;;;;;;45187:41;;;44329:907;;44248:988;;:::o;45531:1079::-;45784:22;45829:1;45809:10;:17;;;;:21;;;;:::i;:::-;45784:46;;45841:18;45862:15;:24;45878:7;45862:24;;;;;;;;;;;;45841:45;;46213:19;46235:10;46246:14;46235:26;;;;;;;;:::i;:::-;;;;;;;;;;46213:48;;46299:11;46274:10;46285;46274:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46410:10;46379:15;:28;46395:11;46379:28;;;;;;;;;;;:41;;;;46551:15;:24;46567:7;46551:24;;;;;;;;;;;46544:31;;;46586:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45602:1008;;;45531:1079;:::o;43035:221::-;43120:14;43137:20;43154:2;43137:16;:20::i;:::-;43120:37;;43195:7;43168:12;:16;43181:2;43168:16;;;;;;;;;;;;;;;:24;43185:6;43168:24;;;;;;;;;;;:34;;;;43242:6;43213:17;:26;43231:7;43213:26;;;;;;;;;;;:35;;;;43109:147;43035:221;;:::o;34097:321::-;34227:18;34233:2;34237:7;34227:5;:18::i;:::-;34278:54;34309:1;34313:2;34317:7;34326:5;34278:22;:54::i;:::-;34256:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34097:321;;;:::o;34754:382::-;34848:1;34834:16;;:2;:16;;;;34826:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34907:16;34915:7;34907;:16::i;:::-;34906:17;34898:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34969:45;34998:1;35002:2;35006:7;34969:20;:45::i;:::-;35044:1;35027:9;:13;35037:2;35027:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35075:2;35056:7;:16;35064:7;35056:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35120:7;35116:2;35095:33;;35112:1;35095:33;;;;;;;;;;;;34754:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:559::-;6442:6;6450;6499:2;6487:9;6478:7;6474:23;6470:32;6467:119;;;6505:79;;:::i;:::-;6467:119;6653:1;6642:9;6638:17;6625:31;6683:18;6675:6;6672:30;6669:117;;;6705:79;;:::i;:::-;6669:117;6818:80;6890:7;6881:6;6870:9;6866:22;6818:80;:::i;:::-;6800:98;;;;6596:312;6356:559;;;;;:::o;6921:323::-;6977:6;7026:2;7014:9;7005:7;7001:23;6997:32;6994:119;;;7032:79;;:::i;:::-;6994:119;7152:1;7177:50;7219:7;7210:6;7199:9;7195:22;7177:50;:::i;:::-;7167:60;;7123:114;6921:323;;;;:::o;7250:468::-;7315:6;7323;7372:2;7360:9;7351:7;7347:23;7343:32;7340:119;;;7378:79;;:::i;:::-;7340:119;7498:1;7523:50;7565:7;7556:6;7545:9;7541:22;7523:50;:::i;:::-;7513:60;;7469:114;7622:2;7648:53;7693:7;7684:6;7673:9;7669:22;7648:53;:::i;:::-;7638:63;;7593:118;7250:468;;;;;:::o;7724:329::-;7783:6;7832:2;7820:9;7811:7;7807:23;7803:32;7800:119;;;7838:79;;:::i;:::-;7800:119;7958:1;7983:53;8028:7;8019:6;8008:9;8004:22;7983:53;:::i;:::-;7973:63;;7929:117;7724:329;;;;:::o;8059:327::-;8117:6;8166:2;8154:9;8145:7;8141:23;8137:32;8134:119;;;8172:79;;:::i;:::-;8134:119;8292:1;8317:52;8361:7;8352:6;8341:9;8337:22;8317:52;:::i;:::-;8307:62;;8263:116;8059:327;;;;:::o;8392:349::-;8461:6;8510:2;8498:9;8489:7;8485:23;8481:32;8478:119;;;8516:79;;:::i;:::-;8478:119;8636:1;8661:63;8716:7;8707:6;8696:9;8692:22;8661:63;:::i;:::-;8651:73;;8607:127;8392:349;;;;:::o;8747:509::-;8816:6;8865:2;8853:9;8844:7;8840:23;8836:32;8833:119;;;8871:79;;:::i;:::-;8833:119;9019:1;9008:9;9004:17;8991:31;9049:18;9041:6;9038:30;9035:117;;;9071:79;;:::i;:::-;9035:117;9176:63;9231:7;9222:6;9211:9;9207:22;9176:63;:::i;:::-;9166:73;;8962:287;8747:509;;;;:::o;9262:329::-;9321:6;9370:2;9358:9;9349:7;9345:23;9341:32;9338:119;;;9376:79;;:::i;:::-;9338:119;9496:1;9521:53;9566:7;9557:6;9546:9;9542:22;9521:53;:::i;:::-;9511:63;;9467:117;9262:329;;;;:::o;9597:179::-;9666:10;9687:46;9729:3;9721:6;9687:46;:::i;:::-;9765:4;9760:3;9756:14;9742:28;;9597:179;;;;:::o;9782:118::-;9869:24;9887:5;9869:24;:::i;:::-;9864:3;9857:37;9782:118;;:::o;9906:157::-;10011:45;10031:24;10049:5;10031:24;:::i;:::-;10011:45;:::i;:::-;10006:3;9999:58;9906:157;;:::o;10099:732::-;10218:3;10247:54;10295:5;10247:54;:::i;:::-;10317:86;10396:6;10391:3;10317:86;:::i;:::-;10310:93;;10427:56;10477:5;10427:56;:::i;:::-;10506:7;10537:1;10522:284;10547:6;10544:1;10541:13;10522:284;;;10623:6;10617:13;10650:63;10709:3;10694:13;10650:63;:::i;:::-;10643:70;;10736:60;10789:6;10736:60;:::i;:::-;10726:70;;10582:224;10569:1;10566;10562:9;10557:14;;10522:284;;;10526:14;10822:3;10815:10;;10223:608;;;10099:732;;;;:::o;10837:109::-;10918:21;10933:5;10918:21;:::i;:::-;10913:3;10906:34;10837:109;;:::o;10952:118::-;11039:24;11057:5;11039:24;:::i;:::-;11034:3;11027:37;10952:118;;:::o;11076:157::-;11181:45;11201:24;11219:5;11201:24;:::i;:::-;11181:45;:::i;:::-;11176:3;11169:58;11076:157;;:::o;11239:360::-;11325:3;11353:38;11385:5;11353:38;:::i;:::-;11407:70;11470:6;11465:3;11407:70;:::i;:::-;11400:77;;11486:52;11531:6;11526:3;11519:4;11512:5;11508:16;11486:52;:::i;:::-;11563:29;11585:6;11563:29;:::i;:::-;11558:3;11554:39;11547:46;;11329:270;11239:360;;;;:::o;11605:364::-;11693:3;11721:39;11754:5;11721:39;:::i;:::-;11776:71;11840:6;11835:3;11776:71;:::i;:::-;11769:78;;11856:52;11901:6;11896:3;11889:4;11882:5;11878:16;11856:52;:::i;:::-;11933:29;11955:6;11933:29;:::i;:::-;11928:3;11924:39;11917:46;;11697:272;11605:364;;;;:::o;11975:377::-;12081:3;12109:39;12142:5;12109:39;:::i;:::-;12164:89;12246:6;12241:3;12164:89;:::i;:::-;12157:96;;12262:52;12307:6;12302:3;12295:4;12288:5;12284:16;12262:52;:::i;:::-;12339:6;12334:3;12330:16;12323:23;;12085:267;11975:377;;;;:::o;12358:366::-;12500:3;12521:67;12585:2;12580:3;12521:67;:::i;:::-;12514:74;;12597:93;12686:3;12597:93;:::i;:::-;12715:2;12710:3;12706:12;12699:19;;12358:366;;;:::o;12730:::-;12872:3;12893:67;12957:2;12952:3;12893:67;:::i;:::-;12886:74;;12969:93;13058:3;12969:93;:::i;:::-;13087:2;13082:3;13078:12;13071:19;;12730:366;;;:::o;13102:::-;13244:3;13265:67;13329:2;13324:3;13265:67;:::i;:::-;13258:74;;13341:93;13430:3;13341:93;:::i;:::-;13459:2;13454:3;13450:12;13443:19;;13102:366;;;:::o;13474:::-;13616:3;13637:67;13701:2;13696:3;13637:67;:::i;:::-;13630:74;;13713:93;13802:3;13713:93;:::i;:::-;13831:2;13826:3;13822:12;13815:19;;13474:366;;;:::o;13846:::-;13988:3;14009:67;14073:2;14068:3;14009:67;:::i;:::-;14002:74;;14085:93;14174:3;14085:93;:::i;:::-;14203:2;14198:3;14194:12;14187:19;;13846:366;;;:::o;14218:::-;14360:3;14381:67;14445:2;14440:3;14381:67;:::i;:::-;14374:74;;14457:93;14546:3;14457:93;:::i;:::-;14575:2;14570:3;14566:12;14559:19;;14218:366;;;:::o;14590:::-;14732:3;14753:67;14817:2;14812:3;14753:67;:::i;:::-;14746:74;;14829:93;14918:3;14829:93;:::i;:::-;14947:2;14942:3;14938:12;14931:19;;14590:366;;;:::o;14962:::-;15104:3;15125:67;15189:2;15184:3;15125:67;:::i;:::-;15118:74;;15201:93;15290:3;15201:93;:::i;:::-;15319:2;15314:3;15310:12;15303:19;;14962:366;;;:::o;15334:::-;15476:3;15497:67;15561:2;15556:3;15497:67;:::i;:::-;15490:74;;15573:93;15662:3;15573:93;:::i;:::-;15691:2;15686:3;15682:12;15675:19;;15334:366;;;:::o;15706:::-;15848:3;15869:67;15933:2;15928:3;15869:67;:::i;:::-;15862:74;;15945:93;16034:3;15945:93;:::i;:::-;16063:2;16058:3;16054:12;16047:19;;15706:366;;;:::o;16078:::-;16220:3;16241:67;16305:2;16300:3;16241:67;:::i;:::-;16234:74;;16317:93;16406:3;16317:93;:::i;:::-;16435:2;16430:3;16426:12;16419:19;;16078:366;;;:::o;16450:::-;16592:3;16613:67;16677:2;16672:3;16613:67;:::i;:::-;16606:74;;16689:93;16778:3;16689:93;:::i;:::-;16807:2;16802:3;16798:12;16791:19;;16450:366;;;:::o;16822:::-;16964:3;16985:67;17049:2;17044:3;16985:67;:::i;:::-;16978:74;;17061:93;17150:3;17061:93;:::i;:::-;17179:2;17174:3;17170:12;17163:19;;16822:366;;;:::o;17194:::-;17336:3;17357:67;17421:2;17416:3;17357:67;:::i;:::-;17350:74;;17433:93;17522:3;17433:93;:::i;:::-;17551:2;17546:3;17542:12;17535:19;;17194:366;;;:::o;17566:400::-;17726:3;17747:84;17829:1;17824:3;17747:84;:::i;:::-;17740:91;;17840:93;17929:3;17840:93;:::i;:::-;17958:1;17953:3;17949:11;17942:18;;17566:400;;;:::o;17972:366::-;18114:3;18135:67;18199:2;18194:3;18135:67;:::i;:::-;18128:74;;18211:93;18300:3;18211:93;:::i;:::-;18329:2;18324:3;18320:12;18313:19;;17972:366;;;:::o;18344:::-;18486:3;18507:67;18571:2;18566:3;18507:67;:::i;:::-;18500:74;;18583:93;18672:3;18583:93;:::i;:::-;18701:2;18696:3;18692:12;18685:19;;18344:366;;;:::o;18716:::-;18858:3;18879:67;18943:2;18938:3;18879:67;:::i;:::-;18872:74;;18955:93;19044:3;18955:93;:::i;:::-;19073:2;19068:3;19064:12;19057:19;;18716:366;;;:::o;19088:::-;19230:3;19251:67;19315:2;19310:3;19251:67;:::i;:::-;19244:74;;19327:93;19416:3;19327:93;:::i;:::-;19445:2;19440:3;19436:12;19429:19;;19088:366;;;:::o;19460:::-;19602:3;19623:67;19687:2;19682:3;19623:67;:::i;:::-;19616:74;;19699:93;19788:3;19699:93;:::i;:::-;19817:2;19812:3;19808:12;19801:19;;19460:366;;;:::o;19832:::-;19974:3;19995:67;20059:2;20054:3;19995:67;:::i;:::-;19988:74;;20071:93;20160:3;20071:93;:::i;:::-;20189:2;20184:3;20180:12;20173:19;;19832:366;;;:::o;20204:::-;20346:3;20367:67;20431:2;20426:3;20367:67;:::i;:::-;20360:74;;20443:93;20532:3;20443:93;:::i;:::-;20561:2;20556:3;20552:12;20545:19;;20204:366;;;:::o;20576:::-;20718:3;20739:67;20803:2;20798:3;20739:67;:::i;:::-;20732:74;;20815:93;20904:3;20815:93;:::i;:::-;20933:2;20928:3;20924:12;20917:19;;20576:366;;;:::o;20948:::-;21090:3;21111:67;21175:2;21170:3;21111:67;:::i;:::-;21104:74;;21187:93;21276:3;21187:93;:::i;:::-;21305:2;21300:3;21296:12;21289:19;;20948:366;;;:::o;21320:108::-;21397:24;21415:5;21397:24;:::i;:::-;21392:3;21385:37;21320:108;;:::o;21434:118::-;21521:24;21539:5;21521:24;:::i;:::-;21516:3;21509:37;21434:118;;:::o;21558:256::-;21670:3;21685:75;21756:3;21747:6;21685:75;:::i;:::-;21785:2;21780:3;21776:12;21769:19;;21805:3;21798:10;;21558:256;;;;:::o;21820:397::-;21960:3;21975:75;22046:3;22037:6;21975:75;:::i;:::-;22075:2;22070:3;22066:12;22059:19;;22088:75;22159:3;22150:6;22088:75;:::i;:::-;22188:2;22183:3;22179:12;22172:19;;22208:3;22201:10;;21820:397;;;;;:::o;22223:701::-;22504:3;22526:95;22617:3;22608:6;22526:95;:::i;:::-;22519:102;;22638:95;22729:3;22720:6;22638:95;:::i;:::-;22631:102;;22750:148;22894:3;22750:148;:::i;:::-;22743:155;;22915:3;22908:10;;22223:701;;;;;:::o;22930:222::-;23023:4;23061:2;23050:9;23046:18;23038:26;;23074:71;23142:1;23131:9;23127:17;23118:6;23074:71;:::i;:::-;22930:222;;;;:::o;23158:640::-;23353:4;23391:3;23380:9;23376:19;23368:27;;23405:71;23473:1;23462:9;23458:17;23449:6;23405:71;:::i;:::-;23486:72;23554:2;23543:9;23539:18;23530:6;23486:72;:::i;:::-;23568;23636:2;23625:9;23621:18;23612:6;23568:72;:::i;:::-;23687:9;23681:4;23677:20;23672:2;23661:9;23657:18;23650:48;23715:76;23786:4;23777:6;23715:76;:::i;:::-;23707:84;;23158:640;;;;;;;:::o;23804:373::-;23947:4;23985:2;23974:9;23970:18;23962:26;;24034:9;24028:4;24024:20;24020:1;24009:9;24005:17;23998:47;24062:108;24165:4;24156:6;24062:108;:::i;:::-;24054:116;;23804:373;;;;:::o;24183:210::-;24270:4;24308:2;24297:9;24293:18;24285:26;;24321:65;24383:1;24372:9;24368:17;24359:6;24321:65;:::i;:::-;24183:210;;;;:::o;24399:222::-;24492:4;24530:2;24519:9;24515:18;24507:26;;24543:71;24611:1;24600:9;24596:17;24587:6;24543:71;:::i;:::-;24399:222;;;;:::o;24627:313::-;24740:4;24778:2;24767:9;24763:18;24755:26;;24827:9;24821:4;24817:20;24813:1;24802:9;24798:17;24791:47;24855:78;24928:4;24919:6;24855:78;:::i;:::-;24847:86;;24627:313;;;;:::o;24946:419::-;25112:4;25150:2;25139:9;25135:18;25127:26;;25199:9;25193:4;25189:20;25185:1;25174:9;25170:17;25163:47;25227:131;25353:4;25227:131;:::i;:::-;25219:139;;24946:419;;;:::o;25371:::-;25537:4;25575:2;25564:9;25560:18;25552:26;;25624:9;25618:4;25614:20;25610:1;25599:9;25595:17;25588:47;25652:131;25778:4;25652:131;:::i;:::-;25644:139;;25371:419;;;:::o;25796:::-;25962:4;26000:2;25989:9;25985:18;25977:26;;26049:9;26043:4;26039:20;26035:1;26024:9;26020:17;26013:47;26077:131;26203:4;26077:131;:::i;:::-;26069:139;;25796:419;;;:::o;26221:::-;26387:4;26425:2;26414:9;26410:18;26402:26;;26474:9;26468:4;26464:20;26460:1;26449:9;26445:17;26438:47;26502:131;26628:4;26502:131;:::i;:::-;26494:139;;26221:419;;;:::o;26646:::-;26812:4;26850:2;26839:9;26835:18;26827:26;;26899:9;26893:4;26889:20;26885:1;26874:9;26870:17;26863:47;26927:131;27053:4;26927:131;:::i;:::-;26919:139;;26646:419;;;:::o;27071:::-;27237:4;27275:2;27264:9;27260:18;27252:26;;27324:9;27318:4;27314:20;27310:1;27299:9;27295:17;27288:47;27352:131;27478:4;27352:131;:::i;:::-;27344:139;;27071:419;;;:::o;27496:::-;27662:4;27700:2;27689:9;27685:18;27677:26;;27749:9;27743:4;27739:20;27735:1;27724:9;27720:17;27713:47;27777:131;27903:4;27777:131;:::i;:::-;27769:139;;27496:419;;;:::o;27921:::-;28087:4;28125:2;28114:9;28110:18;28102:26;;28174:9;28168:4;28164:20;28160:1;28149:9;28145:17;28138:47;28202:131;28328:4;28202:131;:::i;:::-;28194:139;;27921:419;;;:::o;28346:::-;28512:4;28550:2;28539:9;28535:18;28527:26;;28599:9;28593:4;28589:20;28585:1;28574:9;28570:17;28563:47;28627:131;28753:4;28627:131;:::i;:::-;28619:139;;28346:419;;;:::o;28771:::-;28937:4;28975:2;28964:9;28960:18;28952:26;;29024:9;29018:4;29014:20;29010:1;28999:9;28995:17;28988:47;29052:131;29178:4;29052:131;:::i;:::-;29044:139;;28771:419;;;:::o;29196:::-;29362:4;29400:2;29389:9;29385:18;29377:26;;29449:9;29443:4;29439:20;29435:1;29424:9;29420:17;29413:47;29477:131;29603:4;29477:131;:::i;:::-;29469:139;;29196:419;;;:::o;29621:::-;29787:4;29825:2;29814:9;29810:18;29802:26;;29874:9;29868:4;29864:20;29860:1;29849:9;29845:17;29838:47;29902:131;30028:4;29902:131;:::i;:::-;29894:139;;29621:419;;;:::o;30046:::-;30212:4;30250:2;30239:9;30235:18;30227:26;;30299:9;30293:4;30289:20;30285:1;30274:9;30270:17;30263:47;30327:131;30453:4;30327:131;:::i;:::-;30319:139;;30046:419;;;:::o;30471:::-;30637:4;30675:2;30664:9;30660:18;30652:26;;30724:9;30718:4;30714:20;30710:1;30699:9;30695:17;30688:47;30752:131;30878:4;30752:131;:::i;:::-;30744:139;;30471:419;;;:::o;30896:::-;31062:4;31100:2;31089:9;31085:18;31077:26;;31149:9;31143:4;31139:20;31135:1;31124:9;31120:17;31113:47;31177:131;31303:4;31177:131;:::i;:::-;31169:139;;30896:419;;;:::o;31321:::-;31487:4;31525:2;31514:9;31510:18;31502:26;;31574:9;31568:4;31564:20;31560:1;31549:9;31545:17;31538:47;31602:131;31728:4;31602:131;:::i;:::-;31594:139;;31321:419;;;:::o;31746:::-;31912:4;31950:2;31939:9;31935:18;31927:26;;31999:9;31993:4;31989:20;31985:1;31974:9;31970:17;31963:47;32027:131;32153:4;32027:131;:::i;:::-;32019:139;;31746:419;;;:::o;32171:::-;32337:4;32375:2;32364:9;32360:18;32352:26;;32424:9;32418:4;32414:20;32410:1;32399:9;32395:17;32388:47;32452:131;32578:4;32452:131;:::i;:::-;32444:139;;32171:419;;;:::o;32596:::-;32762:4;32800:2;32789:9;32785:18;32777:26;;32849:9;32843:4;32839:20;32835:1;32824:9;32820:17;32813:47;32877:131;33003:4;32877:131;:::i;:::-;32869:139;;32596:419;;;:::o;33021:::-;33187:4;33225:2;33214:9;33210:18;33202:26;;33274:9;33268:4;33264:20;33260:1;33249:9;33245:17;33238:47;33302:131;33428:4;33302:131;:::i;:::-;33294:139;;33021:419;;;:::o;33446:::-;33612:4;33650:2;33639:9;33635:18;33627:26;;33699:9;33693:4;33689:20;33685:1;33674:9;33670:17;33663:47;33727:131;33853:4;33727:131;:::i;:::-;33719:139;;33446:419;;;:::o;33871:::-;34037:4;34075:2;34064:9;34060:18;34052:26;;34124:9;34118:4;34114:20;34110:1;34099:9;34095:17;34088:47;34152:131;34278:4;34152:131;:::i;:::-;34144:139;;33871:419;;;:::o;34296:::-;34462:4;34500:2;34489:9;34485:18;34477:26;;34549:9;34543:4;34539:20;34535:1;34524:9;34520:17;34513:47;34577:131;34703:4;34577:131;:::i;:::-;34569:139;;34296:419;;;:::o;34721:222::-;34814:4;34852:2;34841:9;34837:18;34829:26;;34865:71;34933:1;34922:9;34918:17;34909:6;34865:71;:::i;:::-;34721:222;;;;:::o;34949:129::-;34983:6;35010:20;;:::i;:::-;35000:30;;35039:33;35067:4;35059:6;35039:33;:::i;:::-;34949:129;;;:::o;35084:75::-;35117:6;35150:2;35144:9;35134:19;;35084:75;:::o;35165:307::-;35226:4;35316:18;35308:6;35305:30;35302:56;;;35338:18;;:::i;:::-;35302:56;35376:29;35398:6;35376:29;:::i;:::-;35368:37;;35460:4;35454;35450:15;35442:23;;35165:307;;;:::o;35478:308::-;35540:4;35630:18;35622:6;35619:30;35616:56;;;35652:18;;:::i;:::-;35616:56;35690:29;35712:6;35690:29;:::i;:::-;35682:37;;35774:4;35768;35764:15;35756:23;;35478:308;;;:::o;35792:132::-;35859:4;35882:3;35874:11;;35912:4;35907:3;35903:14;35895:22;;35792:132;;;:::o;35930:114::-;35997:6;36031:5;36025:12;36015:22;;35930:114;;;:::o;36050:98::-;36101:6;36135:5;36129:12;36119:22;;36050:98;;;:::o;36154:99::-;36206:6;36240:5;36234:12;36224:22;;36154:99;;;:::o;36259:113::-;36329:4;36361;36356:3;36352:14;36344:22;;36259:113;;;:::o;36378:184::-;36477:11;36511:6;36506:3;36499:19;36551:4;36546:3;36542:14;36527:29;;36378:184;;;;:::o;36568:168::-;36651:11;36685:6;36680:3;36673:19;36725:4;36720:3;36716:14;36701:29;;36568:168;;;;:::o;36742:169::-;36826:11;36860:6;36855:3;36848:19;36900:4;36895:3;36891:14;36876:29;;36742:169;;;;:::o;36917:148::-;37019:11;37056:3;37041:18;;36917:148;;;;:::o;37071:305::-;37111:3;37130:20;37148:1;37130:20;:::i;:::-;37125:25;;37164:20;37182:1;37164:20;:::i;:::-;37159:25;;37318:1;37250:66;37246:74;37243:1;37240:81;37237:107;;;37324:18;;:::i;:::-;37237:107;37368:1;37365;37361:9;37354:16;;37071:305;;;;:::o;37382:185::-;37422:1;37439:20;37457:1;37439:20;:::i;:::-;37434:25;;37473:20;37491:1;37473:20;:::i;:::-;37468:25;;37512:1;37502:35;;37517:18;;:::i;:::-;37502:35;37559:1;37556;37552:9;37547:14;;37382:185;;;;:::o;37573:191::-;37613:4;37633:20;37651:1;37633:20;:::i;:::-;37628:25;;37667:20;37685:1;37667:20;:::i;:::-;37662:25;;37706:1;37703;37700:8;37697:34;;;37711:18;;:::i;:::-;37697:34;37756:1;37753;37749:9;37741:17;;37573:191;;;;:::o;37770:96::-;37807:7;37836:24;37854:5;37836:24;:::i;:::-;37825:35;;37770:96;;;:::o;37872:90::-;37906:7;37949:5;37942:13;37935:21;37924:32;;37872:90;;;:::o;37968:77::-;38005:7;38034:5;38023:16;;37968:77;;;:::o;38051:149::-;38087:7;38127:66;38120:5;38116:78;38105:89;;38051:149;;;:::o;38206:126::-;38243:7;38283:42;38276:5;38272:54;38261:65;;38206:126;;;:::o;38338:77::-;38375:7;38404:5;38393:16;;38338:77;;;:::o;38421:154::-;38505:6;38500:3;38495;38482:30;38567:1;38558:6;38553:3;38549:16;38542:27;38421:154;;;:::o;38581:307::-;38649:1;38659:113;38673:6;38670:1;38667:13;38659:113;;;38758:1;38753:3;38749:11;38743:18;38739:1;38734:3;38730:11;38723:39;38695:2;38692:1;38688:10;38683:15;;38659:113;;;38790:6;38787:1;38784:13;38781:101;;;38870:1;38861:6;38856:3;38852:16;38845:27;38781:101;38630:258;38581:307;;;:::o;38894:320::-;38938:6;38975:1;38969:4;38965:12;38955:22;;39022:1;39016:4;39012:12;39043:18;39033:81;;39099:4;39091:6;39087:17;39077:27;;39033:81;39161:2;39153:6;39150:14;39130:18;39127:38;39124:84;;;39180:18;;:::i;:::-;39124:84;38945:269;38894:320;;;:::o;39220:281::-;39303:27;39325:4;39303:27;:::i;:::-;39295:6;39291:40;39433:6;39421:10;39418:22;39397:18;39385:10;39382:34;39379:62;39376:88;;;39444:18;;:::i;:::-;39376:88;39484:10;39480:2;39473:22;39263:238;39220:281;;:::o;39507:233::-;39546:3;39569:24;39587:5;39569:24;:::i;:::-;39560:33;;39615:66;39608:5;39605:77;39602:103;;;39685:18;;:::i;:::-;39602:103;39732:1;39725:5;39721:13;39714:20;;39507:233;;;:::o;39746:100::-;39785:7;39814:26;39834:5;39814:26;:::i;:::-;39803:37;;39746:100;;;:::o;39852:79::-;39891:7;39920:5;39909:16;;39852:79;;;:::o;39937:94::-;39976:7;40005:20;40019:5;40005:20;:::i;:::-;39994:31;;39937:94;;;:::o;40037:176::-;40069:1;40086:20;40104:1;40086:20;:::i;:::-;40081:25;;40120:20;40138:1;40120:20;:::i;:::-;40115:25;;40159:1;40149:35;;40164:18;;:::i;:::-;40149:35;40205:1;40202;40198:9;40193:14;;40037:176;;;;:::o;40219:180::-;40267:77;40264:1;40257:88;40364:4;40361:1;40354:15;40388:4;40385:1;40378:15;40405:180;40453:77;40450:1;40443:88;40550:4;40547:1;40540:15;40574:4;40571:1;40564:15;40591:180;40639:77;40636:1;40629:88;40736:4;40733:1;40726:15;40760:4;40757:1;40750:15;40777:180;40825:77;40822:1;40815:88;40922:4;40919:1;40912:15;40946:4;40943:1;40936:15;40963:180;41011:77;41008:1;41001:88;41108:4;41105:1;41098:15;41132:4;41129:1;41122:15;41149:180;41197:77;41194:1;41187:88;41294:4;41291:1;41284:15;41318:4;41315:1;41308:15;41335:117;41444:1;41441;41434:12;41458:117;41567:1;41564;41557:12;41581:117;41690:1;41687;41680:12;41704:117;41813:1;41810;41803:12;41827:117;41936:1;41933;41926:12;41950:117;42059:1;42056;42049:12;42073:102;42114:6;42165:2;42161:7;42156:2;42149:5;42145:14;42141:28;42131:38;;42073:102;;;:::o;42181:94::-;42214:8;42262:5;42258:2;42254:14;42233:35;;42181:94;;;:::o;42281:230::-;42421:34;42417:1;42409:6;42405:14;42398:58;42490:13;42485:2;42477:6;42473:15;42466:38;42281:230;:::o;42517:170::-;42657:22;42653:1;42645:6;42641:14;42634:46;42517:170;:::o;42693:237::-;42833:34;42829:1;42821:6;42817:14;42810:58;42902:20;42897:2;42889:6;42885:15;42878:45;42693:237;:::o;42936:225::-;43076:34;43072:1;43064:6;43060:14;43053:58;43145:8;43140:2;43132:6;43128:15;43121:33;42936:225;:::o;43167:178::-;43307:30;43303:1;43295:6;43291:14;43284:54;43167:178;:::o;43351:165::-;43491:17;43487:1;43479:6;43475:14;43468:41;43351:165;:::o;43522:223::-;43662:34;43658:1;43650:6;43646:14;43639:58;43731:6;43726:2;43718:6;43714:15;43707:31;43522:223;:::o;43751:175::-;43891:27;43887:1;43879:6;43875:14;43868:51;43751:175;:::o;43932:231::-;44072:34;44068:1;44060:6;44056:14;44049:58;44141:14;44136:2;44128:6;44124:15;44117:39;43932:231;:::o;44169:243::-;44309:34;44305:1;44297:6;44293:14;44286:58;44378:26;44373:2;44365:6;44361:15;44354:51;44169:243;:::o;44418:229::-;44558:34;44554:1;44546:6;44542:14;44535:58;44627:12;44622:2;44614:6;44610:15;44603:37;44418:229;:::o;44653:228::-;44793:34;44789:1;44781:6;44777:14;44770:58;44862:11;44857:2;44849:6;44845:15;44838:36;44653:228;:::o;44887:182::-;45027:34;45023:1;45015:6;45011:14;45004:58;44887:182;:::o;45075:231::-;45215:34;45211:1;45203:6;45199:14;45192:58;45284:14;45279:2;45271:6;45267:15;45260:39;45075:231;:::o;45312:155::-;45452:7;45448:1;45440:6;45436:14;45429:31;45312:155;:::o;45473:182::-;45613:34;45609:1;45601:6;45597:14;45590:58;45473:182;:::o;45661:228::-;45801:34;45797:1;45789:6;45785:14;45778:58;45870:11;45865:2;45857:6;45853:15;45846:36;45661:228;:::o;45895:234::-;46035:34;46031:1;46023:6;46019:14;46012:58;46104:17;46099:2;46091:6;46087:15;46080:42;45895:234;:::o;46135:220::-;46275:34;46271:1;46263:6;46259:14;46252:58;46344:3;46339:2;46331:6;46327:15;46320:28;46135:220;:::o;46361:177::-;46501:29;46497:1;46489:6;46485:14;46478:53;46361:177;:::o;46544:170::-;46684:22;46680:1;46672:6;46668:14;46661:46;46544:170;:::o;46720:236::-;46860:34;46856:1;46848:6;46844:14;46837:58;46929:19;46924:2;46916:6;46912:15;46905:44;46720:236;:::o;46962:231::-;47102:34;47098:1;47090:6;47086:14;47079:58;47171:14;47166:2;47158:6;47154:15;47147:39;46962:231;:::o;47199:181::-;47339:33;47335:1;47327:6;47323:14;47316:57;47199:181;:::o;47386:122::-;47459:24;47477:5;47459:24;:::i;:::-;47452:5;47449:35;47439:63;;47498:1;47495;47488:12;47439:63;47386:122;:::o;47514:116::-;47584:21;47599:5;47584:21;:::i;:::-;47577:5;47574:32;47564:60;;47620:1;47617;47610:12;47564:60;47514:116;:::o;47636:122::-;47709:24;47727:5;47709:24;:::i;:::-;47702:5;47699:35;47689:63;;47748:1;47745;47738:12;47689:63;47636:122;:::o;47764:120::-;47836:23;47853:5;47836:23;:::i;:::-;47829:5;47826:34;47816:62;;47874:1;47871;47864:12;47816:62;47764:120;:::o;47890:122::-;47963:24;47981:5;47963:24;:::i;:::-;47956:5;47953:35;47943:63;;48002:1;47999;47992:12;47943:63;47890:122;:::o

Swarm Source

ipfs://9c98e80bfd492ed57cd098a8c2473c95d8f83252a6d087d8506efb44a503244f
Loading...
Loading
Loading...
Loading
[ 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.