ETH Price: $3,439.88 (-1.18%)
Gas: 9 Gwei

Token

Squiggle Faces (SF)
 

Overview

Max Total Supply

5,000 SF

Holders

7

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 SF
0x0ec964653823069ddd78b73f2e4239bdc26c1710
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:
ambitionNFTPresale

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.8.0 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]

// 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/token/ERC721/[email protected]

// 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/[email protected]

// 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/token/ERC721/extensions/[email protected]

// 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/utils/[email protected]

// 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/utils/[email protected]

// 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/utils/[email protected]

// 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/introspection/[email protected]

// 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/[email protected]

// 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/access/[email protected]

// 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 contracts/ambitionNFT.sol


pragma solidity ^0.8.4;



// 
// Built by https://nft-generator.art
// 
contract ambitionNFT is ERC721, Ownable {
//    string internal baseUri;
		string public baseTokenURI;

    uint256 public cost = 0.05 ether;
    uint32 public maxPerMint = 5;
    uint32 public maxPerWallet = 20;
    uint32 public supply = 0;
    uint32 public totalSupply = 0;
    bool public open = false;
    mapping(address => uint256) internal addressMintedMap;

    uint32 private commission = 49; // 4.9%
    address private author = 0xfd6c3bD6dB6D7cbB77Ee64d1E406B2ACB63A5166; //0x460Fd5059E7301680fA53E63bbBF7272E643e89C;

    constructor(
        string memory _uri,
        string memory _name,
        string memory _symbol,
        uint32 _totalSupply,
        uint256 _cost,
        bool _open
    ) ERC721(_name, _symbol) {
				setBaseURI(_uri);
        totalSupply = _totalSupply;
        cost = _cost;
        open = _open;
    }




    // ------ Author Only ------

    function setCommission(uint32 _commision) public {
        require(msg.sender == author, "Incorrect Address");
        commission = _commision;
    }

    // ------ Owner Only ------

		// Override empty function to return baseTokenURI
		// to tell our contract that baseTokenURI is the base URI our contract must use
		function _baseURI() internal view virtual override returns (string memory) {
			return baseTokenURI;
		}

		function setBaseURI(string memory _baseTokenURI) public onlyOwner {
			baseTokenURI = _baseTokenURI;
		}

    function setCost(uint256 _cost) public onlyOwner {
        cost = _cost;
    }

    function setOpen(bool _open) public onlyOwner {
        open = _open;
    }

    function setMaxPerWallet(uint32 _max) public onlyOwner {
        maxPerWallet = _max;
    }

    function setMaxPerMint(uint32 _max) public onlyOwner {
        maxPerMint = _max;
    }

    function airdrop(address[] calldata to) public onlyOwner {
        for (uint32 i = 0; i < to.length; i++) {
            require(1 + supply <= totalSupply, "Limit reached");
            _safeMint(to[i], ++supply, "");
        }
    }

    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
    }

    // ------ Mint! ------

    function mint(uint32 count) external payable preMintChecks(count) {
        require(open == true, "Mint not open");
        performMint(count);
    }

    function performMint(uint32 count) internal {
        for (uint32 i = 0; i < count; i++) {
            _safeMint(msg.sender, ++supply, "");
        }
        
        addressMintedMap[msg.sender] += count;

        (bool success, ) = payable(author).call{
            value: (msg.value * commission) / 1000
        }("");
        require(success);
    }

    // ------ Read ------

    // ------ Modifiers ------

    modifier preMintChecks(uint32 count) {
        require(count > 0, "Mint at least one.");
        require(count < maxPerMint + 1, "Max mint reached.");
        require(msg.value >= cost * count, "Not enough fund.");
        require(supply + count < totalSupply + 1, "Mint sold out");
        require(
            addressMintedMap[msg.sender] + count <= maxPerWallet,
            "Max total mint reached"
        );
        _;
    }
}


// File @openzeppelin/contracts/utils/cryptography/[email protected]

// 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 contracts/utils/Presaleable.sol


pragma solidity ^0.8.4;


abstract contract Presaleable is ambitionNFT {
    bool public presaleOpen = false;
    bytes32 private merkleRoot;

    function setPresaleOpen(bool _open) public onlyOwner {
        presaleOpen = _open;
    }

    function setPreSaleAddresses(bytes32 root) public onlyOwner {
        merkleRoot = root;
    }

    function presaleMint(uint32 count, bytes32[] calldata proof)
        external
        payable
        preMintChecks(count)
    {
        require(presaleOpen, "Presale not open");
        require(merkleRoot != "", "Presale not ready");
        require(
            MerkleProof.verify(
                proof,
                merkleRoot,
                keccak256(abi.encodePacked(msg.sender))
            ),
            "Not a presale member"
        );

        performMint(count);
    }
}


// File contracts/extensions/Presale.sol


pragma solidity ^0.8.4;



contract ambitionNFTPresale is ambitionNFT, Presaleable {
    constructor(
        string memory _uri,
        string memory _name,
        string memory _symbol,
        uint32 _totalSupply,
        uint256 _cost,
        bool _open
    ) ambitionNFT(_uri, _name, _symbol, _totalSupply, _cost, _open) {}

    function tokenURI(uint256 _tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_tokenId <= supply, "Not minted yet");

        return
            string(
                abi.encodePacked(baseTokenURI, Strings.toString(_tokenId), ".json")
            );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint32","name":"_totalSupply","type":"uint32"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"bool","name":"_open","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerMint","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_baseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_commision","type":"uint32"}],"name":"setCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_max","type":"uint32"}],"name":"setMaxPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_max","type":"uint32"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"setOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setPreSaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"setPresaleOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405266b1a2bc2ec500006008556005600960006101000a81548163ffffffff021916908363ffffffff1602179055506014600960046101000a81548163ffffffff021916908363ffffffff1602179055506000600960086101000a81548163ffffffff021916908363ffffffff16021790555060006009600c6101000a81548163ffffffff021916908363ffffffff1602179055506000600960106101000a81548160ff0219169083151502179055506031600b60006101000a81548163ffffffff021916908363ffffffff16021790555073fd6c3bd6db6d7cbb77ee64d1e406b2acb63a5166600b60046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b60186101000a81548160ff0219169083151502179055503480156200015157600080fd5b506040516200543f3803806200543f833981810160405281019062000177919062000542565b8585858585858484816000908051906020019062000197929190620003db565b508060019080519060200190620001b0929190620003db565b505050620001d3620001c76200023860201b60201c565b6200024060201b60201c565b620001e4866200030660201b60201c565b826009600c6101000a81548163ffffffff021916908363ffffffff1602179055508160088190555080600960106101000a81548160ff0219169083151502179055505050505050505050505050506200088a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003166200023860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200033c620003b160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000395576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038c906200064a565b60405180910390fd5b8060079080519060200190620003ad929190620003db565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003e99062000738565b90600052602060002090601f0160209004810192826200040d576000855562000459565b82601f106200042857805160ff191683800117855562000459565b8280016001018555821562000459579182015b82811115620004585782518255916020019190600101906200043b565b5b5090506200046891906200046c565b5090565b5b80821115620004875760008160009055506001016200046d565b5090565b6000620004a26200049c8462000695565b6200066c565b905082815260208101848484011115620004bb57600080fd5b620004c884828562000702565b509392505050565b600081519050620004e1816200083c565b92915050565b600082601f830112620004f957600080fd5b81516200050b8482602086016200048b565b91505092915050565b600081519050620005258162000856565b92915050565b6000815190506200053c8162000870565b92915050565b60008060008060008060c087890312156200055c57600080fd5b600087015167ffffffffffffffff8111156200057757600080fd5b6200058589828a01620004e7565b965050602087015167ffffffffffffffff811115620005a357600080fd5b620005b189828a01620004e7565b955050604087015167ffffffffffffffff811115620005cf57600080fd5b620005dd89828a01620004e7565b9450506060620005f089828a016200052b565b93505060806200060389828a0162000514565b92505060a06200061689828a01620004d0565b9150509295509295509295565b600062000632602083620006cb565b91506200063f8262000813565b602082019050919050565b60006020820190508181036000830152620006658162000623565b9050919050565b6000620006786200068b565b90506200068682826200076e565b919050565b6000604051905090565b600067ffffffffffffffff821115620006b357620006b2620007d3565b5b620006be8262000802565b9050602081019050919050565b600082825260208201905092915050565b60008115159050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b838110156200072257808201518184015260208101905062000705565b8381111562000732576000848401525b50505050565b600060028204905060018216806200075157607f821691505b60208210811415620007685762000767620007a4565b5b50919050565b620007798262000802565b810181811067ffffffffffffffff821117156200079b576200079a620007d3565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200084781620006dc565b81146200085357600080fd5b50565b6200086181620006e8565b81146200086d57600080fd5b50565b6200087b81620006f2565b81146200088757600080fd5b50565b614ba5806200089a6000396000f3fe60806040526004361061020f5760003560e01c80636fdca5e011610118578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c514610738578063f2fde38b14610775578063f5b966211461079e578063f8048d8f146107c7578063fcfff16f146107f05761020f565b8063b88d4fde1461067c578063bee6348a146106a5578063c87b56dd146106d0578063d547cfb71461070d5761020f565b80638da5cb5b116100e75780638da5cb5b146105b857806395d89b41146105e35780639e5666cd1461060e578063a22cb46514610637578063a71bbebe146106605761020f565b80636fdca5e01461051257806370a082311461053b578063715018a614610578578063729ad39e1461058f5761020f565b806323b872dd1161019b57806344a0d68a1161016a57806344a0d68a1461042d578063453c231014610456578063507e094f1461048157806355f804b3146104ac5780636352211e146104d55761020f565b806323b872dd146103a85780633006b543146103d15780633ccfd60b146103fa57806342842e0e146104045761020f565b8063081812fc116101e2578063081812fc146102c3578063092501a014610300578063095ea7b31461032957806313faede61461035257806318160ddd1461037d5761020f565b806301ffc9a7146102145780630364d22a14610251578063047fc9aa1461026d57806306fdde0314610298575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613424565b61081b565b6040516102489190613bd6565b60405180910390f35b61026b60048036038101906102669190613509565b6108fd565b005b34801561027957600080fd5b50610282610c94565b60405161028f9190613f8e565b60405180910390f35b3480156102a457600080fd5b506102ad610caa565b6040516102ba9190613bf1565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906134b7565b610d3c565b6040516102f79190613b6f565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906134e0565b610dc1565b005b34801561033557600080fd5b50610350600480360381019061034b9190613351565b610e75565b005b34801561035e57600080fd5b50610367610f8d565b6040516103749190613f73565b60405180910390f35b34801561038957600080fd5b50610392610f93565b60405161039f9190613f8e565b60405180910390f35b3480156103b457600080fd5b506103cf60048036038101906103ca919061324b565b610fa9565b005b3480156103dd57600080fd5b506103f860048036038101906103f391906134e0565b611009565b005b6104026110a9565b005b34801561041057600080fd5b5061042b6004803603810190610426919061324b565b61119e565b005b34801561043957600080fd5b50610454600480360381019061044f91906134b7565b6111be565b005b34801561046257600080fd5b5061046b611244565b6040516104789190613f8e565b60405180910390f35b34801561048d57600080fd5b5061049661125a565b6040516104a39190613f8e565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613476565b611270565b005b3480156104e157600080fd5b506104fc60048036038101906104f791906134b7565b611306565b6040516105099190613b6f565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906133d2565b6113b8565b005b34801561054757600080fd5b50610562600480360381019061055d91906131e6565b611451565b60405161056f9190613f73565b60405180910390f35b34801561058457600080fd5b5061058d611509565b005b34801561059b57600080fd5b506105b660048036038101906105b1919061338d565b611591565b005b3480156105c457600080fd5b506105cd611765565b6040516105da9190613b6f565b60405180910390f35b3480156105ef57600080fd5b506105f861178f565b6040516106059190613bf1565b60405180910390f35b34801561061a57600080fd5b50610635600480360381019061063091906133fb565b611821565b005b34801561064357600080fd5b5061065e60048036038101906106599190613315565b6118a7565b005b61067a600480360381019061067591906134e0565b6118bd565b005b34801561068857600080fd5b506106a3600480360381019061069e919061329a565b611b60565b005b3480156106b157600080fd5b506106ba611bc2565b6040516106c79190613bd6565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906134b7565b611bd5565b6040516107049190613bf1565b60405180910390f35b34801561071957600080fd5b50610722611c64565b60405161072f9190613bf1565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a919061320f565b611cf2565b60405161076c9190613bd6565b60405180910390f35b34801561078157600080fd5b5061079c600480360381019061079791906131e6565b611d86565b005b3480156107aa57600080fd5b506107c560048036038101906107c091906133d2565b611e7e565b005b3480156107d357600080fd5b506107ee60048036038101906107e991906134e0565b611f17565b005b3480156107fc57600080fd5b50610805611fb7565b6040516108129190613bd6565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108f657506108f582611fca565b5b9050919050565b8260008163ffffffff1611610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e90613f53565b60405180910390fd5b6001600960009054906101000a900463ffffffff1661096691906140e9565b63ffffffff168163ffffffff16106109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa90613f33565b60405180910390fd5b8063ffffffff166008546109c79190614154565b341015610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0090613f13565b60405180910390fd5b60016009600c9054906101000a900463ffffffff16610a2891906140e9565b63ffffffff1681600960089054906101000a900463ffffffff16610a4c91906140e9565b63ffffffff1610610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8990613e53565b60405180910390fd5b600960049054906101000a900463ffffffff1663ffffffff168163ffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610afc9190614093565b1115610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490613cd3565b60405180910390fd5b600b60189054906101000a900460ff16610b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8390613eb3565b60405180910390fd5b6000600c541415610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613c13565b60405180910390fd5b610c46838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c5433604051602001610c2b9190613ae4565b60405160208183030381529060405280519060200120612034565b610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90613cb3565b60405180910390fd5b610c8e8461204b565b50505050565b600960089054906101000a900463ffffffff1681565b606060008054610cb9906142b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce5906142b2565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b5050505050905090565b6000610d47826121f8565b610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90613df3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890613ef3565b60405180910390fd5b80600b60006101000a81548163ffffffff021916908363ffffffff16021790555050565b6000610e8082611306565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee890613e73565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f10612264565b73ffffffffffffffffffffffffffffffffffffffff161480610f3f5750610f3e81610f39612264565b611cf2565b5b610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7590613d73565b60405180910390fd5b610f88838361226c565b505050565b60085481565b6009600c9054906101000a900463ffffffff1681565b610fba610fb4612264565b82612325565b610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090613ed3565b60405180910390fd5b611004838383612403565b505050565b611011612264565b73ffffffffffffffffffffffffffffffffffffffff1661102f611765565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90613e13565b60405180910390fd5b80600960046101000a81548163ffffffff021916908363ffffffff16021790555050565b6110b1612264565b73ffffffffffffffffffffffffffffffffffffffff166110cf611765565b73ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90613e13565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161114b90613b5a565b60006040518083038185875af1925050503d8060008114611188576040519150601f19603f3d011682016040523d82523d6000602084013e61118d565b606091505b505090508061119b57600080fd5b50565b6111b983838360405180602001604052806000815250611b60565b505050565b6111c6612264565b73ffffffffffffffffffffffffffffffffffffffff166111e4611765565b73ffffffffffffffffffffffffffffffffffffffff161461123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123190613e13565b60405180910390fd5b8060088190555050565b600960049054906101000a900463ffffffff1681565b600960009054906101000a900463ffffffff1681565b611278612264565b73ffffffffffffffffffffffffffffffffffffffff16611296611765565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390613e13565b60405180910390fd5b8060079080519060200190611302929190612f4c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690613db3565b60405180910390fd5b80915050919050565b6113c0612264565b73ffffffffffffffffffffffffffffffffffffffff166113de611765565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90613e13565b60405180910390fd5b80600960106101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990613d93565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611511612264565b73ffffffffffffffffffffffffffffffffffffffff1661152f611765565b73ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c90613e13565b60405180910390fd5b61158f600061265f565b565b611599612264565b73ffffffffffffffffffffffffffffffffffffffff166115b7611765565b73ffffffffffffffffffffffffffffffffffffffff161461160d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160490613e13565b60405180910390fd5b60005b828290508163ffffffff161015611760576009600c9054906101000a900463ffffffff1663ffffffff16600960089054906101000a900463ffffffff16600161165991906140e9565b63ffffffff1611156116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169790613d33565b60405180910390fd5b61174d83838363ffffffff168181106116e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116f791906131e6565b6009600881819054906101000a900463ffffffff166117159061435e565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff1660405180602001604052806000815250612725565b80806117589061435e565b915050611610565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461179e906142b2565b80601f01602080910402602001604051908101604052809291908181526020018280546117ca906142b2565b80156118175780601f106117ec57610100808354040283529160200191611817565b820191906000526020600020905b8154815290600101906020018083116117fa57829003601f168201915b5050505050905090565b611829612264565b73ffffffffffffffffffffffffffffffffffffffff16611847611765565b73ffffffffffffffffffffffffffffffffffffffff161461189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613e13565b60405180910390fd5b80600c8190555050565b6118b96118b2612264565b8383612780565b5050565b8060008163ffffffff1611611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613f53565b60405180910390fd5b6001600960009054906101000a900463ffffffff1661192691906140e9565b63ffffffff168163ffffffff1610611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a90613f33565b60405180910390fd5b8063ffffffff166008546119879190614154565b3410156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090613f13565b60405180910390fd5b60016009600c9054906101000a900463ffffffff166119e891906140e9565b63ffffffff1681600960089054906101000a900463ffffffff16611a0c91906140e9565b63ffffffff1610611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990613e53565b60405180910390fd5b600960049054906101000a900463ffffffff1663ffffffff168163ffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611abc9190614093565b1115611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490613cd3565b60405180910390fd5b60011515600960109054906101000a900460ff16151514611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a90613e93565b60405180910390fd5b611b5c8261204b565b5050565b611b71611b6b612264565b83612325565b611bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba790613ed3565b60405180910390fd5b611bbc848484846128ed565b50505050565b600b60189054906101000a900460ff1681565b6060600960089054906101000a900463ffffffff1663ffffffff16821115611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2990613c53565b60405180910390fd5b6007611c3d83612949565b604051602001611c4e929190613b2b565b6040516020818303038152906040529050919050565b60078054611c71906142b2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9d906142b2565b8015611cea5780601f10611cbf57610100808354040283529160200191611cea565b820191906000526020600020905b815481529060010190602001808311611ccd57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d8e612264565b73ffffffffffffffffffffffffffffffffffffffff16611dac611765565b73ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990613e13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990613c73565b60405180910390fd5b611e7b8161265f565b50565b611e86612264565b73ffffffffffffffffffffffffffffffffffffffff16611ea4611765565b73ffffffffffffffffffffffffffffffffffffffff1614611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190613e13565b60405180910390fd5b80600b60186101000a81548160ff02191690831515021790555050565b611f1f612264565b73ffffffffffffffffffffffffffffffffffffffff16611f3d611765565b73ffffffffffffffffffffffffffffffffffffffff1614611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90613e13565b60405180910390fd5b80600960006101000a81548163ffffffff021916908363ffffffff16021790555050565b600960109054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000826120418584612af6565b1490509392505050565b60005b8163ffffffff168163ffffffff1610156120cf576120bc336009600881819054906101000a900463ffffffff166120849061435e565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff1660405180602001604052806000815250612725565b80806120c79061435e565b91505061204e565b508063ffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121259190614093565b925050819055506000600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103e8600b60009054906101000a900463ffffffff1663ffffffff163461218e9190614154565b6121989190614123565b6040516121a490613b5a565b60006040518083038185875af1925050503d80600081146121e1576040519150601f19603f3d011682016040523d82523d6000602084013e6121e6565b606091505b50509050806121f457600080fd5b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122df83611306565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612330826121f8565b61236f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236690613d53565b60405180910390fd5b600061237a83611306565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123e957508373ffffffffffffffffffffffffffffffffffffffff166123d184610d3c565b73ffffffffffffffffffffffffffffffffffffffff16145b806123fa57506123f98185611cf2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661242382611306565b73ffffffffffffffffffffffffffffffffffffffff1614612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090613e33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090613cf3565b60405180910390fd5b6124f4838383612bcf565b6124ff60008261226c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461254f91906141ae565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a69190614093565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61272f8383612bd4565b61273c6000848484612da2565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290613c33565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e690613d13565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128e09190613bd6565b60405180910390a3505050565b6128f8848484612403565b61290484848484612da2565b612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a90613c33565b60405180910390fd5b50505050565b60606000821415612991576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612af1565b600082905060005b600082146129c35780806129ac90614315565b915050600a826129bc9190614123565b9150612999565b60008167ffffffffffffffff811115612a05577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a375781602001600182028036833780820191505090505b5090505b60008514612aea57600182612a5091906141ae565b9150600a85612a5f91906143b9565b6030612a6b9190614093565b60f81b818381518110612aa7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ae39190614123565b9450612a3b565b8093505050505b919050565b60008082905060005b8451811015612bc4576000858281518110612b43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612b84578281604051602001612b67929190613aff565b604051602081830303815290604052805190602001209250612bb0565b8083604051602001612b97929190613aff565b6040516020818303038152906040528051906020012092505b508080612bbc90614315565b915050612aff565b508091505092915050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b90613dd3565b60405180910390fd5b612c4d816121f8565b15612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8490613c93565b60405180910390fd5b612c9960008383612bcf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ce99190614093565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612dc38473ffffffffffffffffffffffffffffffffffffffff16612f39565b15612f2c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dec612264565b8786866040518563ffffffff1660e01b8152600401612e0e9493929190613b8a565b602060405180830381600087803b158015612e2857600080fd5b505af1925050508015612e5957506040513d601f19601f82011682018060405250810190612e56919061344d565b60015b612edc573d8060008114612e89576040519150601f19603f3d011682016040523d82523d6000602084013e612e8e565b606091505b50600081511415612ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecb90613c33565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f31565b600190505b949350505050565b600080823b905060008111915050919050565b828054612f58906142b2565b90600052602060002090601f016020900481019282612f7a5760008555612fc1565b82601f10612f9357805160ff1916838001178555612fc1565b82800160010185558215612fc1579182015b82811115612fc0578251825591602001919060010190612fa5565b5b509050612fce9190612fd2565b5090565b5b80821115612feb576000816000905550600101612fd3565b5090565b6000613002612ffd84613fce565b613fa9565b90508281526020810184848401111561301a57600080fd5b613025848285614270565b509392505050565b600061304061303b84613fff565b613fa9565b90508281526020810184848401111561305857600080fd5b613063848285614270565b509392505050565b60008135905061307a81614ae5565b92915050565b60008083601f84011261309257600080fd5b8235905067ffffffffffffffff8111156130ab57600080fd5b6020830191508360208202830111156130c357600080fd5b9250929050565b60008083601f8401126130dc57600080fd5b8235905067ffffffffffffffff8111156130f557600080fd5b60208301915083602082028301111561310d57600080fd5b9250929050565b60008135905061312381614afc565b92915050565b60008135905061313881614b13565b92915050565b60008135905061314d81614b2a565b92915050565b60008151905061316281614b2a565b92915050565b600082601f83011261317957600080fd5b8135613189848260208601612fef565b91505092915050565b600082601f8301126131a357600080fd5b81356131b384826020860161302d565b91505092915050565b6000813590506131cb81614b41565b92915050565b6000813590506131e081614b58565b92915050565b6000602082840312156131f857600080fd5b60006132068482850161306b565b91505092915050565b6000806040838503121561322257600080fd5b60006132308582860161306b565b92505060206132418582860161306b565b9150509250929050565b60008060006060848603121561326057600080fd5b600061326e8682870161306b565b935050602061327f8682870161306b565b9250506040613290868287016131bc565b9150509250925092565b600080600080608085870312156132b057600080fd5b60006132be8782880161306b565b94505060206132cf8782880161306b565b93505060406132e0878288016131bc565b925050606085013567ffffffffffffffff8111156132fd57600080fd5b61330987828801613168565b91505092959194509250565b6000806040838503121561332857600080fd5b60006133368582860161306b565b925050602061334785828601613114565b9150509250929050565b6000806040838503121561336457600080fd5b60006133728582860161306b565b9250506020613383858286016131bc565b9150509250929050565b600080602083850312156133a057600080fd5b600083013567ffffffffffffffff8111156133ba57600080fd5b6133c685828601613080565b92509250509250929050565b6000602082840312156133e457600080fd5b60006133f284828501613114565b91505092915050565b60006020828403121561340d57600080fd5b600061341b84828501613129565b91505092915050565b60006020828403121561343657600080fd5b60006134448482850161313e565b91505092915050565b60006020828403121561345f57600080fd5b600061346d84828501613153565b91505092915050565b60006020828403121561348857600080fd5b600082013567ffffffffffffffff8111156134a257600080fd5b6134ae84828501613192565b91505092915050565b6000602082840312156134c957600080fd5b60006134d7848285016131bc565b91505092915050565b6000602082840312156134f257600080fd5b6000613500848285016131d1565b91505092915050565b60008060006040848603121561351e57600080fd5b600061352c868287016131d1565b935050602084013567ffffffffffffffff81111561354957600080fd5b613555868287016130ca565b92509250509250925092565b61356a816141e2565b82525050565b61358161357c826141e2565b61438b565b82525050565b613590816141f4565b82525050565b6135a76135a282614200565b61439d565b82525050565b60006135b882614045565b6135c2818561405b565b93506135d281856020860161427f565b6135db816144a6565b840191505092915050565b60006135f182614050565b6135fb8185614077565b935061360b81856020860161427f565b613614816144a6565b840191505092915050565b600061362a82614050565b6136348185614088565b935061364481856020860161427f565b80840191505092915050565b6000815461365d816142b2565b6136678186614088565b945060018216600081146136825760018114613693576136c6565b60ff198316865281860193506136c6565b61369c85614030565b60005b838110156136be5781548189015260018201915060208101905061369f565b838801955050505b50505092915050565b60006136dc601183614077565b91506136e7826144c4565b602082019050919050565b60006136ff603283614077565b915061370a826144ed565b604082019050919050565b6000613722600e83614077565b915061372d8261453c565b602082019050919050565b6000613745602683614077565b915061375082614565565b604082019050919050565b6000613768601c83614077565b9150613773826145b4565b602082019050919050565b600061378b601483614077565b9150613796826145dd565b602082019050919050565b60006137ae601683614077565b91506137b982614606565b602082019050919050565b60006137d1602483614077565b91506137dc8261462f565b604082019050919050565b60006137f4601983614077565b91506137ff8261467e565b602082019050919050565b6000613817600d83614077565b9150613822826146a7565b602082019050919050565b600061383a602c83614077565b9150613845826146d0565b604082019050919050565b600061385d603883614077565b91506138688261471f565b604082019050919050565b6000613880602a83614077565b915061388b8261476e565b604082019050919050565b60006138a3602983614077565b91506138ae826147bd565b604082019050919050565b60006138c6602083614077565b91506138d18261480c565b602082019050919050565b60006138e9602c83614077565b91506138f482614835565b604082019050919050565b600061390c600583614088565b915061391782614884565b600582019050919050565b600061392f602083614077565b915061393a826148ad565b602082019050919050565b6000613952602983614077565b915061395d826148d6565b604082019050919050565b6000613975600d83614077565b915061398082614925565b602082019050919050565b6000613998602183614077565b91506139a38261494e565b604082019050919050565b60006139bb600d83614077565b91506139c68261499d565b602082019050919050565b60006139de601083614077565b91506139e9826149c6565b602082019050919050565b6000613a0160008361406c565b9150613a0c826149ef565b600082019050919050565b6000613a24603183614077565b9150613a2f826149f2565b604082019050919050565b6000613a47601183614077565b9150613a5282614a41565b602082019050919050565b6000613a6a601083614077565b9150613a7582614a6a565b602082019050919050565b6000613a8d601183614077565b9150613a9882614a93565b602082019050919050565b6000613ab0601283614077565b9150613abb82614abc565b602082019050919050565b613acf81614256565b82525050565b613ade81614260565b82525050565b6000613af08284613570565b60148201915081905092915050565b6000613b0b8285613596565b602082019150613b1b8284613596565b6020820191508190509392505050565b6000613b378285613650565b9150613b43828461361f565b9150613b4e826138ff565b91508190509392505050565b6000613b65826139f4565b9150819050919050565b6000602082019050613b846000830184613561565b92915050565b6000608082019050613b9f6000830187613561565b613bac6020830186613561565b613bb96040830185613ac6565b8181036060830152613bcb81846135ad565b905095945050505050565b6000602082019050613beb6000830184613587565b92915050565b60006020820190508181036000830152613c0b81846135e6565b905092915050565b60006020820190508181036000830152613c2c816136cf565b9050919050565b60006020820190508181036000830152613c4c816136f2565b9050919050565b60006020820190508181036000830152613c6c81613715565b9050919050565b60006020820190508181036000830152613c8c81613738565b9050919050565b60006020820190508181036000830152613cac8161375b565b9050919050565b60006020820190508181036000830152613ccc8161377e565b9050919050565b60006020820190508181036000830152613cec816137a1565b9050919050565b60006020820190508181036000830152613d0c816137c4565b9050919050565b60006020820190508181036000830152613d2c816137e7565b9050919050565b60006020820190508181036000830152613d4c8161380a565b9050919050565b60006020820190508181036000830152613d6c8161382d565b9050919050565b60006020820190508181036000830152613d8c81613850565b9050919050565b60006020820190508181036000830152613dac81613873565b9050919050565b60006020820190508181036000830152613dcc81613896565b9050919050565b60006020820190508181036000830152613dec816138b9565b9050919050565b60006020820190508181036000830152613e0c816138dc565b9050919050565b60006020820190508181036000830152613e2c81613922565b9050919050565b60006020820190508181036000830152613e4c81613945565b9050919050565b60006020820190508181036000830152613e6c81613968565b9050919050565b60006020820190508181036000830152613e8c8161398b565b9050919050565b60006020820190508181036000830152613eac816139ae565b9050919050565b60006020820190508181036000830152613ecc816139d1565b9050919050565b60006020820190508181036000830152613eec81613a17565b9050919050565b60006020820190508181036000830152613f0c81613a3a565b9050919050565b60006020820190508181036000830152613f2c81613a5d565b9050919050565b60006020820190508181036000830152613f4c81613a80565b9050919050565b60006020820190508181036000830152613f6c81613aa3565b9050919050565b6000602082019050613f886000830184613ac6565b92915050565b6000602082019050613fa36000830184613ad5565b92915050565b6000613fb3613fc4565b9050613fbf82826142e4565b919050565b6000604051905090565b600067ffffffffffffffff821115613fe957613fe8614477565b5b613ff2826144a6565b9050602081019050919050565b600067ffffffffffffffff82111561401a57614019614477565b5b614023826144a6565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061409e82614256565b91506140a983614256565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140de576140dd6143ea565b5b828201905092915050565b60006140f482614260565b91506140ff83614260565b92508263ffffffff03821115614118576141176143ea565b5b828201905092915050565b600061412e82614256565b915061413983614256565b92508261414957614148614419565b5b828204905092915050565b600061415f82614256565b915061416a83614256565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141a3576141a26143ea565b5b828202905092915050565b60006141b982614256565b91506141c483614256565b9250828210156141d7576141d66143ea565b5b828203905092915050565b60006141ed82614236565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561429d578082015181840152602081019050614282565b838111156142ac576000848401525b50505050565b600060028204905060018216806142ca57607f821691505b602082108114156142de576142dd614448565b5b50919050565b6142ed826144a6565b810181811067ffffffffffffffff8211171561430c5761430b614477565b5b80604052505050565b600061432082614256565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614353576143526143ea565b5b600182019050919050565b600061436982614260565b915063ffffffff8214156143805761437f6143ea565b5b600182019050919050565b6000614396826143a7565b9050919050565b6000819050919050565b60006143b2826144b7565b9050919050565b60006143c482614256565b91506143cf83614256565b9250826143df576143de614419565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f50726573616c65206e6f74207265616479000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4e6f74206d696e74656420796574000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420612070726573616c65206d656d626572000000000000000000000000600082015250565b7f4d617820746f74616c206d696e74207265616368656400000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4c696d6974207265616368656400000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4d696e7420736f6c64206f757400000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f50726573616c65206e6f74206f70656e00000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e636f72726563742041646472657373000000000000000000000000000000600082015250565b7f4e6f7420656e6f7567682066756e642e00000000000000000000000000000000600082015250565b7f4d6178206d696e7420726561636865642e000000000000000000000000000000600082015250565b7f4d696e74206174206c65617374206f6e652e0000000000000000000000000000600082015250565b614aee816141e2565b8114614af957600080fd5b50565b614b05816141f4565b8114614b1057600080fd5b50565b614b1c81614200565b8114614b2757600080fd5b50565b614b338161420a565b8114614b3e57600080fd5b50565b614b4a81614256565b8114614b5557600080fd5b50565b614b6181614260565b8114614b6c57600080fd5b5056fea264697066735822122024ee9d7254b83a17f669628feb078640913a0f25dab3b36f71dcfb2a817bbb5464736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d50317359427473784c5a6d58754265546f486744594157374654744d6e3834585972644168584b794e6372622f00000000000000000000000000000000000000000000000000000000000000000000000000000000000e5371756967676c6520466163657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025346000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80636fdca5e011610118578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c514610738578063f2fde38b14610775578063f5b966211461079e578063f8048d8f146107c7578063fcfff16f146107f05761020f565b8063b88d4fde1461067c578063bee6348a146106a5578063c87b56dd146106d0578063d547cfb71461070d5761020f565b80638da5cb5b116100e75780638da5cb5b146105b857806395d89b41146105e35780639e5666cd1461060e578063a22cb46514610637578063a71bbebe146106605761020f565b80636fdca5e01461051257806370a082311461053b578063715018a614610578578063729ad39e1461058f5761020f565b806323b872dd1161019b57806344a0d68a1161016a57806344a0d68a1461042d578063453c231014610456578063507e094f1461048157806355f804b3146104ac5780636352211e146104d55761020f565b806323b872dd146103a85780633006b543146103d15780633ccfd60b146103fa57806342842e0e146104045761020f565b8063081812fc116101e2578063081812fc146102c3578063092501a014610300578063095ea7b31461032957806313faede61461035257806318160ddd1461037d5761020f565b806301ffc9a7146102145780630364d22a14610251578063047fc9aa1461026d57806306fdde0314610298575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613424565b61081b565b6040516102489190613bd6565b60405180910390f35b61026b60048036038101906102669190613509565b6108fd565b005b34801561027957600080fd5b50610282610c94565b60405161028f9190613f8e565b60405180910390f35b3480156102a457600080fd5b506102ad610caa565b6040516102ba9190613bf1565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906134b7565b610d3c565b6040516102f79190613b6f565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906134e0565b610dc1565b005b34801561033557600080fd5b50610350600480360381019061034b9190613351565b610e75565b005b34801561035e57600080fd5b50610367610f8d565b6040516103749190613f73565b60405180910390f35b34801561038957600080fd5b50610392610f93565b60405161039f9190613f8e565b60405180910390f35b3480156103b457600080fd5b506103cf60048036038101906103ca919061324b565b610fa9565b005b3480156103dd57600080fd5b506103f860048036038101906103f391906134e0565b611009565b005b6104026110a9565b005b34801561041057600080fd5b5061042b6004803603810190610426919061324b565b61119e565b005b34801561043957600080fd5b50610454600480360381019061044f91906134b7565b6111be565b005b34801561046257600080fd5b5061046b611244565b6040516104789190613f8e565b60405180910390f35b34801561048d57600080fd5b5061049661125a565b6040516104a39190613f8e565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613476565b611270565b005b3480156104e157600080fd5b506104fc60048036038101906104f791906134b7565b611306565b6040516105099190613b6f565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906133d2565b6113b8565b005b34801561054757600080fd5b50610562600480360381019061055d91906131e6565b611451565b60405161056f9190613f73565b60405180910390f35b34801561058457600080fd5b5061058d611509565b005b34801561059b57600080fd5b506105b660048036038101906105b1919061338d565b611591565b005b3480156105c457600080fd5b506105cd611765565b6040516105da9190613b6f565b60405180910390f35b3480156105ef57600080fd5b506105f861178f565b6040516106059190613bf1565b60405180910390f35b34801561061a57600080fd5b50610635600480360381019061063091906133fb565b611821565b005b34801561064357600080fd5b5061065e60048036038101906106599190613315565b6118a7565b005b61067a600480360381019061067591906134e0565b6118bd565b005b34801561068857600080fd5b506106a3600480360381019061069e919061329a565b611b60565b005b3480156106b157600080fd5b506106ba611bc2565b6040516106c79190613bd6565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906134b7565b611bd5565b6040516107049190613bf1565b60405180910390f35b34801561071957600080fd5b50610722611c64565b60405161072f9190613bf1565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a919061320f565b611cf2565b60405161076c9190613bd6565b60405180910390f35b34801561078157600080fd5b5061079c600480360381019061079791906131e6565b611d86565b005b3480156107aa57600080fd5b506107c560048036038101906107c091906133d2565b611e7e565b005b3480156107d357600080fd5b506107ee60048036038101906107e991906134e0565b611f17565b005b3480156107fc57600080fd5b50610805611fb7565b6040516108129190613bd6565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108f657506108f582611fca565b5b9050919050565b8260008163ffffffff1611610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e90613f53565b60405180910390fd5b6001600960009054906101000a900463ffffffff1661096691906140e9565b63ffffffff168163ffffffff16106109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa90613f33565b60405180910390fd5b8063ffffffff166008546109c79190614154565b341015610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0090613f13565b60405180910390fd5b60016009600c9054906101000a900463ffffffff16610a2891906140e9565b63ffffffff1681600960089054906101000a900463ffffffff16610a4c91906140e9565b63ffffffff1610610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8990613e53565b60405180910390fd5b600960049054906101000a900463ffffffff1663ffffffff168163ffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610afc9190614093565b1115610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490613cd3565b60405180910390fd5b600b60189054906101000a900460ff16610b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8390613eb3565b60405180910390fd5b6000600c541415610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613c13565b60405180910390fd5b610c46838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c5433604051602001610c2b9190613ae4565b60405160208183030381529060405280519060200120612034565b610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90613cb3565b60405180910390fd5b610c8e8461204b565b50505050565b600960089054906101000a900463ffffffff1681565b606060008054610cb9906142b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce5906142b2565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b5050505050905090565b6000610d47826121f8565b610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90613df3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890613ef3565b60405180910390fd5b80600b60006101000a81548163ffffffff021916908363ffffffff16021790555050565b6000610e8082611306565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee890613e73565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f10612264565b73ffffffffffffffffffffffffffffffffffffffff161480610f3f5750610f3e81610f39612264565b611cf2565b5b610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7590613d73565b60405180910390fd5b610f88838361226c565b505050565b60085481565b6009600c9054906101000a900463ffffffff1681565b610fba610fb4612264565b82612325565b610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090613ed3565b60405180910390fd5b611004838383612403565b505050565b611011612264565b73ffffffffffffffffffffffffffffffffffffffff1661102f611765565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90613e13565b60405180910390fd5b80600960046101000a81548163ffffffff021916908363ffffffff16021790555050565b6110b1612264565b73ffffffffffffffffffffffffffffffffffffffff166110cf611765565b73ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90613e13565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161114b90613b5a565b60006040518083038185875af1925050503d8060008114611188576040519150601f19603f3d011682016040523d82523d6000602084013e61118d565b606091505b505090508061119b57600080fd5b50565b6111b983838360405180602001604052806000815250611b60565b505050565b6111c6612264565b73ffffffffffffffffffffffffffffffffffffffff166111e4611765565b73ffffffffffffffffffffffffffffffffffffffff161461123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123190613e13565b60405180910390fd5b8060088190555050565b600960049054906101000a900463ffffffff1681565b600960009054906101000a900463ffffffff1681565b611278612264565b73ffffffffffffffffffffffffffffffffffffffff16611296611765565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390613e13565b60405180910390fd5b8060079080519060200190611302929190612f4c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690613db3565b60405180910390fd5b80915050919050565b6113c0612264565b73ffffffffffffffffffffffffffffffffffffffff166113de611765565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90613e13565b60405180910390fd5b80600960106101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990613d93565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611511612264565b73ffffffffffffffffffffffffffffffffffffffff1661152f611765565b73ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c90613e13565b60405180910390fd5b61158f600061265f565b565b611599612264565b73ffffffffffffffffffffffffffffffffffffffff166115b7611765565b73ffffffffffffffffffffffffffffffffffffffff161461160d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160490613e13565b60405180910390fd5b60005b828290508163ffffffff161015611760576009600c9054906101000a900463ffffffff1663ffffffff16600960089054906101000a900463ffffffff16600161165991906140e9565b63ffffffff1611156116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169790613d33565b60405180910390fd5b61174d83838363ffffffff168181106116e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116f791906131e6565b6009600881819054906101000a900463ffffffff166117159061435e565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff1660405180602001604052806000815250612725565b80806117589061435e565b915050611610565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461179e906142b2565b80601f01602080910402602001604051908101604052809291908181526020018280546117ca906142b2565b80156118175780601f106117ec57610100808354040283529160200191611817565b820191906000526020600020905b8154815290600101906020018083116117fa57829003601f168201915b5050505050905090565b611829612264565b73ffffffffffffffffffffffffffffffffffffffff16611847611765565b73ffffffffffffffffffffffffffffffffffffffff161461189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613e13565b60405180910390fd5b80600c8190555050565b6118b96118b2612264565b8383612780565b5050565b8060008163ffffffff1611611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613f53565b60405180910390fd5b6001600960009054906101000a900463ffffffff1661192691906140e9565b63ffffffff168163ffffffff1610611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a90613f33565b60405180910390fd5b8063ffffffff166008546119879190614154565b3410156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090613f13565b60405180910390fd5b60016009600c9054906101000a900463ffffffff166119e891906140e9565b63ffffffff1681600960089054906101000a900463ffffffff16611a0c91906140e9565b63ffffffff1610611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990613e53565b60405180910390fd5b600960049054906101000a900463ffffffff1663ffffffff168163ffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611abc9190614093565b1115611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490613cd3565b60405180910390fd5b60011515600960109054906101000a900460ff16151514611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a90613e93565b60405180910390fd5b611b5c8261204b565b5050565b611b71611b6b612264565b83612325565b611bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba790613ed3565b60405180910390fd5b611bbc848484846128ed565b50505050565b600b60189054906101000a900460ff1681565b6060600960089054906101000a900463ffffffff1663ffffffff16821115611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2990613c53565b60405180910390fd5b6007611c3d83612949565b604051602001611c4e929190613b2b565b6040516020818303038152906040529050919050565b60078054611c71906142b2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9d906142b2565b8015611cea5780601f10611cbf57610100808354040283529160200191611cea565b820191906000526020600020905b815481529060010190602001808311611ccd57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d8e612264565b73ffffffffffffffffffffffffffffffffffffffff16611dac611765565b73ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990613e13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990613c73565b60405180910390fd5b611e7b8161265f565b50565b611e86612264565b73ffffffffffffffffffffffffffffffffffffffff16611ea4611765565b73ffffffffffffffffffffffffffffffffffffffff1614611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190613e13565b60405180910390fd5b80600b60186101000a81548160ff02191690831515021790555050565b611f1f612264565b73ffffffffffffffffffffffffffffffffffffffff16611f3d611765565b73ffffffffffffffffffffffffffffffffffffffff1614611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90613e13565b60405180910390fd5b80600960006101000a81548163ffffffff021916908363ffffffff16021790555050565b600960109054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000826120418584612af6565b1490509392505050565b60005b8163ffffffff168163ffffffff1610156120cf576120bc336009600881819054906101000a900463ffffffff166120849061435e565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff1660405180602001604052806000815250612725565b80806120c79061435e565b91505061204e565b508063ffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121259190614093565b925050819055506000600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103e8600b60009054906101000a900463ffffffff1663ffffffff163461218e9190614154565b6121989190614123565b6040516121a490613b5a565b60006040518083038185875af1925050503d80600081146121e1576040519150601f19603f3d011682016040523d82523d6000602084013e6121e6565b606091505b50509050806121f457600080fd5b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122df83611306565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612330826121f8565b61236f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236690613d53565b60405180910390fd5b600061237a83611306565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123e957508373ffffffffffffffffffffffffffffffffffffffff166123d184610d3c565b73ffffffffffffffffffffffffffffffffffffffff16145b806123fa57506123f98185611cf2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661242382611306565b73ffffffffffffffffffffffffffffffffffffffff1614612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090613e33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090613cf3565b60405180910390fd5b6124f4838383612bcf565b6124ff60008261226c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461254f91906141ae565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a69190614093565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61272f8383612bd4565b61273c6000848484612da2565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290613c33565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e690613d13565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128e09190613bd6565b60405180910390a3505050565b6128f8848484612403565b61290484848484612da2565b612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a90613c33565b60405180910390fd5b50505050565b60606000821415612991576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612af1565b600082905060005b600082146129c35780806129ac90614315565b915050600a826129bc9190614123565b9150612999565b60008167ffffffffffffffff811115612a05577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a375781602001600182028036833780820191505090505b5090505b60008514612aea57600182612a5091906141ae565b9150600a85612a5f91906143b9565b6030612a6b9190614093565b60f81b818381518110612aa7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ae39190614123565b9450612a3b565b8093505050505b919050565b60008082905060005b8451811015612bc4576000858281518110612b43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612b84578281604051602001612b67929190613aff565b604051602081830303815290604052805190602001209250612bb0565b8083604051602001612b97929190613aff565b6040516020818303038152906040528051906020012092505b508080612bbc90614315565b915050612aff565b508091505092915050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b90613dd3565b60405180910390fd5b612c4d816121f8565b15612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8490613c93565b60405180910390fd5b612c9960008383612bcf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ce99190614093565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612dc38473ffffffffffffffffffffffffffffffffffffffff16612f39565b15612f2c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dec612264565b8786866040518563ffffffff1660e01b8152600401612e0e9493929190613b8a565b602060405180830381600087803b158015612e2857600080fd5b505af1925050508015612e5957506040513d601f19601f82011682018060405250810190612e56919061344d565b60015b612edc573d8060008114612e89576040519150601f19603f3d011682016040523d82523d6000602084013e612e8e565b606091505b50600081511415612ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecb90613c33565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f31565b600190505b949350505050565b600080823b905060008111915050919050565b828054612f58906142b2565b90600052602060002090601f016020900481019282612f7a5760008555612fc1565b82601f10612f9357805160ff1916838001178555612fc1565b82800160010185558215612fc1579182015b82811115612fc0578251825591602001919060010190612fa5565b5b509050612fce9190612fd2565b5090565b5b80821115612feb576000816000905550600101612fd3565b5090565b6000613002612ffd84613fce565b613fa9565b90508281526020810184848401111561301a57600080fd5b613025848285614270565b509392505050565b600061304061303b84613fff565b613fa9565b90508281526020810184848401111561305857600080fd5b613063848285614270565b509392505050565b60008135905061307a81614ae5565b92915050565b60008083601f84011261309257600080fd5b8235905067ffffffffffffffff8111156130ab57600080fd5b6020830191508360208202830111156130c357600080fd5b9250929050565b60008083601f8401126130dc57600080fd5b8235905067ffffffffffffffff8111156130f557600080fd5b60208301915083602082028301111561310d57600080fd5b9250929050565b60008135905061312381614afc565b92915050565b60008135905061313881614b13565b92915050565b60008135905061314d81614b2a565b92915050565b60008151905061316281614b2a565b92915050565b600082601f83011261317957600080fd5b8135613189848260208601612fef565b91505092915050565b600082601f8301126131a357600080fd5b81356131b384826020860161302d565b91505092915050565b6000813590506131cb81614b41565b92915050565b6000813590506131e081614b58565b92915050565b6000602082840312156131f857600080fd5b60006132068482850161306b565b91505092915050565b6000806040838503121561322257600080fd5b60006132308582860161306b565b92505060206132418582860161306b565b9150509250929050565b60008060006060848603121561326057600080fd5b600061326e8682870161306b565b935050602061327f8682870161306b565b9250506040613290868287016131bc565b9150509250925092565b600080600080608085870312156132b057600080fd5b60006132be8782880161306b565b94505060206132cf8782880161306b565b93505060406132e0878288016131bc565b925050606085013567ffffffffffffffff8111156132fd57600080fd5b61330987828801613168565b91505092959194509250565b6000806040838503121561332857600080fd5b60006133368582860161306b565b925050602061334785828601613114565b9150509250929050565b6000806040838503121561336457600080fd5b60006133728582860161306b565b9250506020613383858286016131bc565b9150509250929050565b600080602083850312156133a057600080fd5b600083013567ffffffffffffffff8111156133ba57600080fd5b6133c685828601613080565b92509250509250929050565b6000602082840312156133e457600080fd5b60006133f284828501613114565b91505092915050565b60006020828403121561340d57600080fd5b600061341b84828501613129565b91505092915050565b60006020828403121561343657600080fd5b60006134448482850161313e565b91505092915050565b60006020828403121561345f57600080fd5b600061346d84828501613153565b91505092915050565b60006020828403121561348857600080fd5b600082013567ffffffffffffffff8111156134a257600080fd5b6134ae84828501613192565b91505092915050565b6000602082840312156134c957600080fd5b60006134d7848285016131bc565b91505092915050565b6000602082840312156134f257600080fd5b6000613500848285016131d1565b91505092915050565b60008060006040848603121561351e57600080fd5b600061352c868287016131d1565b935050602084013567ffffffffffffffff81111561354957600080fd5b613555868287016130ca565b92509250509250925092565b61356a816141e2565b82525050565b61358161357c826141e2565b61438b565b82525050565b613590816141f4565b82525050565b6135a76135a282614200565b61439d565b82525050565b60006135b882614045565b6135c2818561405b565b93506135d281856020860161427f565b6135db816144a6565b840191505092915050565b60006135f182614050565b6135fb8185614077565b935061360b81856020860161427f565b613614816144a6565b840191505092915050565b600061362a82614050565b6136348185614088565b935061364481856020860161427f565b80840191505092915050565b6000815461365d816142b2565b6136678186614088565b945060018216600081146136825760018114613693576136c6565b60ff198316865281860193506136c6565b61369c85614030565b60005b838110156136be5781548189015260018201915060208101905061369f565b838801955050505b50505092915050565b60006136dc601183614077565b91506136e7826144c4565b602082019050919050565b60006136ff603283614077565b915061370a826144ed565b604082019050919050565b6000613722600e83614077565b915061372d8261453c565b602082019050919050565b6000613745602683614077565b915061375082614565565b604082019050919050565b6000613768601c83614077565b9150613773826145b4565b602082019050919050565b600061378b601483614077565b9150613796826145dd565b602082019050919050565b60006137ae601683614077565b91506137b982614606565b602082019050919050565b60006137d1602483614077565b91506137dc8261462f565b604082019050919050565b60006137f4601983614077565b91506137ff8261467e565b602082019050919050565b6000613817600d83614077565b9150613822826146a7565b602082019050919050565b600061383a602c83614077565b9150613845826146d0565b604082019050919050565b600061385d603883614077565b91506138688261471f565b604082019050919050565b6000613880602a83614077565b915061388b8261476e565b604082019050919050565b60006138a3602983614077565b91506138ae826147bd565b604082019050919050565b60006138c6602083614077565b91506138d18261480c565b602082019050919050565b60006138e9602c83614077565b91506138f482614835565b604082019050919050565b600061390c600583614088565b915061391782614884565b600582019050919050565b600061392f602083614077565b915061393a826148ad565b602082019050919050565b6000613952602983614077565b915061395d826148d6565b604082019050919050565b6000613975600d83614077565b915061398082614925565b602082019050919050565b6000613998602183614077565b91506139a38261494e565b604082019050919050565b60006139bb600d83614077565b91506139c68261499d565b602082019050919050565b60006139de601083614077565b91506139e9826149c6565b602082019050919050565b6000613a0160008361406c565b9150613a0c826149ef565b600082019050919050565b6000613a24603183614077565b9150613a2f826149f2565b604082019050919050565b6000613a47601183614077565b9150613a5282614a41565b602082019050919050565b6000613a6a601083614077565b9150613a7582614a6a565b602082019050919050565b6000613a8d601183614077565b9150613a9882614a93565b602082019050919050565b6000613ab0601283614077565b9150613abb82614abc565b602082019050919050565b613acf81614256565b82525050565b613ade81614260565b82525050565b6000613af08284613570565b60148201915081905092915050565b6000613b0b8285613596565b602082019150613b1b8284613596565b6020820191508190509392505050565b6000613b378285613650565b9150613b43828461361f565b9150613b4e826138ff565b91508190509392505050565b6000613b65826139f4565b9150819050919050565b6000602082019050613b846000830184613561565b92915050565b6000608082019050613b9f6000830187613561565b613bac6020830186613561565b613bb96040830185613ac6565b8181036060830152613bcb81846135ad565b905095945050505050565b6000602082019050613beb6000830184613587565b92915050565b60006020820190508181036000830152613c0b81846135e6565b905092915050565b60006020820190508181036000830152613c2c816136cf565b9050919050565b60006020820190508181036000830152613c4c816136f2565b9050919050565b60006020820190508181036000830152613c6c81613715565b9050919050565b60006020820190508181036000830152613c8c81613738565b9050919050565b60006020820190508181036000830152613cac8161375b565b9050919050565b60006020820190508181036000830152613ccc8161377e565b9050919050565b60006020820190508181036000830152613cec816137a1565b9050919050565b60006020820190508181036000830152613d0c816137c4565b9050919050565b60006020820190508181036000830152613d2c816137e7565b9050919050565b60006020820190508181036000830152613d4c8161380a565b9050919050565b60006020820190508181036000830152613d6c8161382d565b9050919050565b60006020820190508181036000830152613d8c81613850565b9050919050565b60006020820190508181036000830152613dac81613873565b9050919050565b60006020820190508181036000830152613dcc81613896565b9050919050565b60006020820190508181036000830152613dec816138b9565b9050919050565b60006020820190508181036000830152613e0c816138dc565b9050919050565b60006020820190508181036000830152613e2c81613922565b9050919050565b60006020820190508181036000830152613e4c81613945565b9050919050565b60006020820190508181036000830152613e6c81613968565b9050919050565b60006020820190508181036000830152613e8c8161398b565b9050919050565b60006020820190508181036000830152613eac816139ae565b9050919050565b60006020820190508181036000830152613ecc816139d1565b9050919050565b60006020820190508181036000830152613eec81613a17565b9050919050565b60006020820190508181036000830152613f0c81613a3a565b9050919050565b60006020820190508181036000830152613f2c81613a5d565b9050919050565b60006020820190508181036000830152613f4c81613a80565b9050919050565b60006020820190508181036000830152613f6c81613aa3565b9050919050565b6000602082019050613f886000830184613ac6565b92915050565b6000602082019050613fa36000830184613ad5565b92915050565b6000613fb3613fc4565b9050613fbf82826142e4565b919050565b6000604051905090565b600067ffffffffffffffff821115613fe957613fe8614477565b5b613ff2826144a6565b9050602081019050919050565b600067ffffffffffffffff82111561401a57614019614477565b5b614023826144a6565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061409e82614256565b91506140a983614256565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140de576140dd6143ea565b5b828201905092915050565b60006140f482614260565b91506140ff83614260565b92508263ffffffff03821115614118576141176143ea565b5b828201905092915050565b600061412e82614256565b915061413983614256565b92508261414957614148614419565b5b828204905092915050565b600061415f82614256565b915061416a83614256565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141a3576141a26143ea565b5b828202905092915050565b60006141b982614256565b91506141c483614256565b9250828210156141d7576141d66143ea565b5b828203905092915050565b60006141ed82614236565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561429d578082015181840152602081019050614282565b838111156142ac576000848401525b50505050565b600060028204905060018216806142ca57607f821691505b602082108114156142de576142dd614448565b5b50919050565b6142ed826144a6565b810181811067ffffffffffffffff8211171561430c5761430b614477565b5b80604052505050565b600061432082614256565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614353576143526143ea565b5b600182019050919050565b600061436982614260565b915063ffffffff8214156143805761437f6143ea565b5b600182019050919050565b6000614396826143a7565b9050919050565b6000819050919050565b60006143b2826144b7565b9050919050565b60006143c482614256565b91506143cf83614256565b9250826143df576143de614419565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f50726573616c65206e6f74207265616479000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4e6f74206d696e74656420796574000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420612070726573616c65206d656d626572000000000000000000000000600082015250565b7f4d617820746f74616c206d696e74207265616368656400000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4c696d6974207265616368656400000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4d696e7420736f6c64206f757400000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f50726573616c65206e6f74206f70656e00000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e636f72726563742041646472657373000000000000000000000000000000600082015250565b7f4e6f7420656e6f7567682066756e642e00000000000000000000000000000000600082015250565b7f4d6178206d696e7420726561636865642e000000000000000000000000000000600082015250565b7f4d696e74206174206c65617374206f6e652e0000000000000000000000000000600082015250565b614aee816141e2565b8114614af957600080fd5b50565b614b05816141f4565b8114614b1057600080fd5b50565b614b1c81614200565b8114614b2757600080fd5b50565b614b338161420a565b8114614b3e57600080fd5b50565b614b4a81614256565b8114614b5557600080fd5b50565b614b6181614260565b8114614b6c57600080fd5b5056fea264697066735822122024ee9d7254b83a17f669628feb078640913a0f25dab3b36f71dcfb2a817bbb5464736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d50317359427473784c5a6d58754265546f486744594157374654744d6e3834585972644168584b794e6372622f00000000000000000000000000000000000000000000000000000000000000000000000000000000000e5371756967676c6520466163657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025346000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string): ipfs://QmP1sYBtsxLZmXuBeToHgDYAW7FTtMn84XYrdAhXKyNcrb/
Arg [1] : _name (string): Squiggle Faces
Arg [2] : _symbol (string): SF
Arg [3] : _totalSupply (uint32): 5000
Arg [4] : _cost (uint256): 50000000000000000
Arg [5] : _open (bool): False

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [4] : 00000000000000000000000000000000000000000000000000b1a2bc2ec50000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [7] : 697066733a2f2f516d50317359427473784c5a6d58754265546f486744594157
Arg [8] : 374654744d6e3834585972644168584b794e6372622f00000000000000000000
Arg [9] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [10] : 5371756967676c65204661636573000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [12] : 5346000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42948:666:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21320:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42359:503;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36639:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22265:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23824:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37338:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23347:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36527:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36670:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24574:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38066:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38509:192;;;:::i;:::-;;24984:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37893:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36601:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36566:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37779:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21959:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37981:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21689:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35477:103;;;;;;;;;;;;;:::i;:::-;;38264:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34826:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22434:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42255:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24117:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38739:152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25240:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42083:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43268:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36492:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24343:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35735:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42156:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38167:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36706:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21320:305;21422:4;21474:25;21459:40;;;:11;:40;;;;:105;;;;21531:33;21516:48;;;:11;:48;;;;21459:105;:158;;;;21581:36;21605:11;21581:23;:36::i;:::-;21459:158;21439:178;;21320:305;;;:::o;42359:503::-;42478:5;39398:1;39390:5;:9;;;39382:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;39462:1;39449:10;;;;;;;;;;;:14;;;;:::i;:::-;39441:22;;:5;:22;;;39433:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;39524:5;39517:12;;:4;;:12;;;;:::i;:::-;39504:9;:25;;39496:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;39600:1;39586:11;;;;;;;;;;;:15;;;;:::i;:::-;39569:32;;39578:5;39569:6;;;;;;;;;;;:14;;;;:::i;:::-;:32;;;39561:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39692:12;;;;;;;;;;;39652:52;;39683:5;39652:36;;:16;:28;39669:10;39652:28;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:52;;39630:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;42509:11:::1;;;;;;;;;;;42501:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;42560:16;:10;;:16;;42552:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;42631:144;42668:5;;42631:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42692:10;;42748;42731:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;42721:39;;;;;;42631:18;:144::i;:::-;42609:214;;;;;;;;;;;;:::i;:::-;;;;;;;;;42836:18;42848:5;42836:11;:18::i;:::-;42359:503:::0;;;;:::o;36639:24::-;;;;;;;;;;;;;:::o;22265:100::-;22319:13;22352:5;22345:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22265:100;:::o;23824:221::-;23900:7;23928:16;23936:7;23928;:16::i;:::-;23920:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24013:15;:24;24029:7;24013:24;;;;;;;;;;;;;;;;;;;;;24006:31;;23824:221;;;:::o;37338:152::-;37420:6;;;;;;;;;;;37406:20;;:10;:20;;;37398:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;37472:10;37459;;:23;;;;;;;;;;;;;;;;;;37338:152;:::o;23347:411::-;23428:13;23444:23;23459:7;23444:14;:23::i;:::-;23428:39;;23492:5;23486:11;;:2;:11;;;;23478:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23586:5;23570:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23595:37;23612:5;23619:12;:10;:12::i;:::-;23595:16;:37::i;:::-;23570:62;23548:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23729:21;23738:2;23742:7;23729:8;:21::i;:::-;23347:411;;;:::o;36527:32::-;;;;:::o;36670:29::-;;;;;;;;;;;;;:::o;24574:339::-;24769:41;24788:12;:10;:12::i;:::-;24802:7;24769:18;:41::i;:::-;24761:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24877:28;24887:4;24893:2;24897:7;24877:9;:28::i;:::-;24574:339;;;:::o;38066:93::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38147:4:::1;38132:12;;:19;;;;;;;;;;;;;;;;;;38066:93:::0;:::o;38509:192::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38566:12:::1;38592:10;38584:24;;38630:21;38584:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38565:101;;;38685:7;38677:16;;;::::0;::::1;;35117:1;38509:192::o:0;24984:185::-;25122:39;25139:4;25145:2;25149:7;25122:39;;;;;;;;;;;;:16;:39::i;:::-;24984:185;;;:::o;37893:80::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37960:5:::1;37953:4;:12;;;;37893:80:::0;:::o;36601:31::-;;;;;;;;;;;;;:::o;36566:28::-;;;;;;;;;;;;;:::o;37779:106::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37866:13:::1;37851:12;:28;;;;;;;;;;;;:::i;:::-;;37779:106:::0;:::o;21959:239::-;22031:7;22051:13;22067:7;:16;22075:7;22067:16;;;;;;;;;;;;;;;;;;;;;22051:32;;22119:1;22102:19;;:5;:19;;;;22094:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22185:5;22178:12;;;21959:239;;;:::o;37981:77::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38045:5:::1;38038:4;;:12;;;;;;;;;;;;;;;;;;37981:77:::0;:::o;21689:208::-;21761:7;21806:1;21789:19;;:5;:19;;;;21781:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21873:9;:16;21883:5;21873:16;;;;;;;;;;;;;;;;21866:23;;21689:208;;;:::o;35477:103::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35542:30:::1;35569:1;35542:18;:30::i;:::-;35477:103::o:0;38264:237::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38337:8:::1;38332:162;38355:2;;:9;;38351:1;:13;;;38332:162;;;38408:11;;;;;;;;;;;38394:25;;38398:6;;;;;;;;;;;38394:1;:10;;;;:::i;:::-;:25;;;;38386:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;38452:30;38462:2;;38465:1;38462:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38471:6;;38469:8;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;38452:30;;;;;;;;;;;;;::::0;:9:::1;:30::i;:::-;38366:3;;;;;:::i;:::-;;;;38332:162;;;;38264:237:::0;;:::o;34826:87::-;34872:7;34899:6;;;;;;;;;;;34892:13;;34826:87;:::o;22434:104::-;22490:13;22523:7;22516:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22434:104;:::o;42255:96::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42339:4:::1;42326:10;:17;;;;42255:96:::0;:::o;24117:155::-;24212:52;24231:12;:10;:12::i;:::-;24245:8;24255;24212:18;:52::i;:::-;24117:155;;:::o;38739:152::-;38798:5;39398:1;39390:5;:9;;;39382:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;39462:1;39449:10;;;;;;;;;;;:14;;;;:::i;:::-;39441:22;;:5;:22;;;39433:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;39524:5;39517:12;;:4;;:12;;;;:::i;:::-;39504:9;:25;;39496:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;39600:1;39586:11;;;;;;;;;;;:15;;;;:::i;:::-;39569:32;;39578:5;39569:6;;;;;;;;;;;:14;;;;:::i;:::-;:32;;;39561:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39692:12;;;;;;;;;;;39652:52;;39683:5;39652:36;;:16;:28;39669:10;39652:28;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:52;;39630:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;38832:4:::1;38824:12;;:4;;;;;;;;;;;:12;;;38816:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38865:18;38877:5;38865:11;:18::i;:::-;38739:152:::0;;:::o;25240:328::-;25415:41;25434:12;:10;:12::i;:::-;25448:7;25415:18;:41::i;:::-;25407:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25521:39;25535:4;25541:2;25545:7;25554:5;25521:13;:39::i;:::-;25240:328;;;;:::o;42083:31::-;;;;;;;;;;;;;:::o;43268:343::-;43387:13;43438:6;;;;;;;;;;;43426:18;;:8;:18;;43418:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;43538:12;43552:26;43569:8;43552:16;:26::i;:::-;43521:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43476:127;;43268:343;;;:::o;36492:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24343:164::-;24440:4;24464:18;:25;24483:5;24464:25;;;;;;;;;;;;;;;:35;24490:8;24464:35;;;;;;;;;;;;;;;;;;;;;;;;;24457:42;;24343:164;;;;:::o;35735:201::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35844:1:::1;35824:22;;:8;:22;;;;35816:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35900:28;35919:8;35900:18;:28::i;:::-;35735:201:::0;:::o;42156:91::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42234:5:::1;42220:11;;:19;;;;;;;;;;;;;;;;;;42156:91:::0;:::o;38167:89::-;35057:12;:10;:12::i;:::-;35046:23;;:7;:5;:7::i;:::-;:23;;;35038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38244:4:::1;38231:10;;:17;;;;;;;;;;;;;;;;;;38167:89:::0;:::o;36706:24::-;;;;;;;;;;;;;:::o;19760:157::-;19845:4;19884:25;19869:40;;;:11;:40;;;;19862:47;;19760:157;;;:::o;40695:190::-;40820:4;40873;40844:25;40857:5;40864:4;40844:12;:25::i;:::-;:33;40837:40;;40695:190;;;;;:::o;38899:364::-;38959:8;38954:97;38977:5;38973:9;;:1;:9;;;38954:97;;;39004:35;39014:10;39028:6;;39026:8;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;39004:35;;;;;;;;;;;;;;:9;:35::i;:::-;38984:3;;;;;:::i;:::-;;;;38954:97;;;;39103:5;39071:37;;:16;:28;39088:10;39071:28;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;39122:12;39148:6;;;;;;;;;;;39140:20;;39209:4;39195:10;;;;;;;;;;;39183:22;;:9;:22;;;;:::i;:::-;39182:31;;;;:::i;:::-;39140:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39121:107;;;39247:7;39239:16;;;;;;38899:364;;:::o;27078:127::-;27143:4;27195:1;27167:30;;:7;:16;27175:7;27167:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27160:37;;27078:127;;;:::o;16547:98::-;16600:7;16627:10;16620:17;;16547:98;:::o;31060:174::-;31162:2;31135:15;:24;31151:7;31135:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31218:7;31214:2;31180:46;;31189:23;31204:7;31189:14;:23::i;:::-;31180:46;;;;;;;;;;;;31060:174;;:::o;27372:348::-;27465:4;27490:16;27498:7;27490;:16::i;:::-;27482:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27566:13;27582:23;27597:7;27582:14;:23::i;:::-;27566:39;;27635:5;27624:16;;:7;:16;;;:51;;;;27668:7;27644:31;;:20;27656:7;27644:11;:20::i;:::-;:31;;;27624:51;:87;;;;27679:32;27696:5;27703:7;27679:16;:32::i;:::-;27624:87;27616:96;;;27372:348;;;;:::o;30364:578::-;30523:4;30496:31;;:23;30511:7;30496:14;:23::i;:::-;:31;;;30488:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30606:1;30592:16;;:2;:16;;;;30584:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30662:39;30683:4;30689:2;30693:7;30662:20;:39::i;:::-;30766:29;30783:1;30787:7;30766:8;:29::i;:::-;30827:1;30808:9;:15;30818:4;30808:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30856:1;30839:9;:13;30849:2;30839:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30887:2;30868:7;:16;30876:7;30868:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30926:7;30922:2;30907:27;;30916:4;30907:27;;;;;;;;;;;;30364:578;;;:::o;36096:191::-;36170:16;36189:6;;;;;;;;;;;36170:25;;36215:8;36206:6;;:17;;;;;;;;;;;;;;;;;;36270:8;36239:40;;36260:8;36239:40;;;;;;;;;;;;36096:191;;:::o;28399:321::-;28529:18;28535:2;28539:7;28529:5;:18::i;:::-;28580:54;28611:1;28615:2;28619:7;28628:5;28580:22;:54::i;:::-;28558:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28399:321;;;:::o;31376:315::-;31531:8;31522:17;;:5;:17;;;;31514:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31618:8;31580:18;:25;31599:5;31580:25;;;;;;;;;;;;;;;:35;31606:8;31580:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31664:8;31642:41;;31657:5;31642:41;;;31674:8;31642:41;;;;;;:::i;:::-;;;;;;;;31376:315;;;:::o;26450:::-;26607:28;26617:4;26623:2;26627:7;26607:9;:28::i;:::-;26654:48;26677:4;26683:2;26687:7;26696:5;26654:22;:48::i;:::-;26646:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26450:315;;;;:::o;17132:723::-;17188:13;17418:1;17409:5;:10;17405:53;;;17436:10;;;;;;;;;;;;;;;;;;;;;17405:53;17468:12;17483:5;17468:20;;17499:14;17524:78;17539:1;17531:4;:9;17524:78;;17557:8;;;;;:::i;:::-;;;;17588:2;17580:10;;;;;:::i;:::-;;;17524:78;;;17612:19;17644:6;17634:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17612:39;;17662:154;17678:1;17669:5;:10;17662:154;;17706:1;17696:11;;;;;:::i;:::-;;;17773:2;17765:5;:10;;;;:::i;:::-;17752:2;:24;;;;:::i;:::-;17739:39;;17722:6;17729;17722:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17802:2;17793:11;;;;;:::i;:::-;;;17662:154;;;17840:6;17826:21;;;;;17132:723;;;;:::o;41247:701::-;41330:7;41350:20;41373:4;41350:27;;41393:9;41388:523;41412:5;:12;41408:1;:16;41388:523;;;41446:20;41469:5;41475:1;41469:8;;;;;;;;;;;;;;;;;;;;;;41446:31;;41512:12;41496;:28;41492:408;;41666:12;41680;41649:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41639:55;;;;;;41624:70;;41492:408;;;41856:12;41870;41839:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41829:55;;;;;;41814:70;;41492:408;41388:523;41426:3;;;;;:::i;:::-;;;;41388:523;;;;41928:12;41921:19;;;41247:701;;;;:::o;33627:126::-;;;;:::o;29056:382::-;29150:1;29136:16;;:2;:16;;;;29128:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29209:16;29217:7;29209;:16::i;:::-;29208:17;29200:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29271:45;29300:1;29304:2;29308:7;29271:20;:45::i;:::-;29346:1;29329:9;:13;29339:2;29329:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29377:2;29358:7;:16;29366:7;29358:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29422:7;29418:2;29397:33;;29414:1;29397:33;;;;;;;;;;;;29056:382;;:::o;32256:799::-;32411:4;32432:15;:2;:13;;;:15::i;:::-;32428:620;;;32484:2;32468:36;;;32505:12;:10;:12::i;:::-;32519:4;32525:7;32534:5;32468:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32464:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32727:1;32710:6;:13;:18;32706:272;;;32753:60;;;;;;;;;;:::i;:::-;;;;;;;;32706:272;32928:6;32922:13;32913:6;32909:2;32905:15;32898:38;32464:529;32601:41;;;32591:51;;;:6;:51;;;;32584:58;;;;;32428:620;33032:4;33025:11;;32256:799;;;;;;;:::o;8531:387::-;8591:4;8799:12;8866:7;8854:20;8846:28;;8909:1;8902:4;:8;8895:15;;;8531:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343: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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1259:367::-;1332:8;1342:6;1392:3;1385:4;1377:6;1373:17;1369:27;1359:2;;1410:1;1407;1400:12;1359:2;1446:6;1433:20;1423:30;;1476:18;1468:6;1465:30;1462:2;;;1508:1;1505;1498:12;1462:2;1545:4;1537:6;1533:17;1521:29;;1599:3;1591:4;1583:6;1579:17;1569:8;1565:32;1562:41;1559:2;;;1616:1;1613;1606:12;1559:2;1349:277;;;;;:::o;1632:133::-;1675:5;1713:6;1700:20;1691:29;;1729:30;1753:5;1729:30;:::i;:::-;1681:84;;;;:::o;1771:139::-;1817:5;1855:6;1842:20;1833:29;;1871:33;1898:5;1871:33;:::i;:::-;1823:87;;;;:::o;1916:137::-;1961:5;1999:6;1986:20;1977:29;;2015:32;2041:5;2015:32;:::i;:::-;1967:86;;;;:::o;2059:141::-;2115:5;2146:6;2140:13;2131:22;;2162:32;2188:5;2162:32;:::i;:::-;2121:79;;;;:::o;2219:271::-;2274:5;2323:3;2316:4;2308:6;2304:17;2300:27;2290:2;;2341:1;2338;2331:12;2290:2;2381:6;2368:20;2406:78;2480:3;2472:6;2465:4;2457:6;2453:17;2406:78;:::i;:::-;2397:87;;2280:210;;;;;:::o;2510:273::-;2566:5;2615:3;2608:4;2600:6;2596:17;2592:27;2582:2;;2633:1;2630;2623:12;2582:2;2673:6;2660:20;2698:79;2773:3;2765:6;2758:4;2750:6;2746:17;2698:79;:::i;:::-;2689:88;;2572:211;;;;;:::o;2789:139::-;2835:5;2873:6;2860:20;2851:29;;2889:33;2916:5;2889:33;:::i;:::-;2841:87;;;;:::o;2934:137::-;2979:5;3017:6;3004:20;2995:29;;3033:32;3059:5;3033:32;:::i;:::-;2985:86;;;;:::o;3077:262::-;3136:6;3185:2;3173:9;3164:7;3160:23;3156:32;3153:2;;;3201:1;3198;3191:12;3153:2;3244:1;3269:53;3314:7;3305:6;3294:9;3290:22;3269:53;:::i;:::-;3259:63;;3215:117;3143:196;;;;:::o;3345:407::-;3413:6;3421;3470:2;3458:9;3449:7;3445:23;3441:32;3438:2;;;3486:1;3483;3476:12;3438:2;3529:1;3554:53;3599:7;3590:6;3579:9;3575:22;3554:53;:::i;:::-;3544:63;;3500:117;3656:2;3682:53;3727:7;3718:6;3707:9;3703:22;3682:53;:::i;:::-;3672:63;;3627:118;3428:324;;;;;:::o;3758:552::-;3835:6;3843;3851;3900:2;3888:9;3879:7;3875:23;3871:32;3868:2;;;3916:1;3913;3906:12;3868:2;3959:1;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3930:117;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3858:452;;;;;:::o;4316:809::-;4411:6;4419;4427;4435;4484:3;4472:9;4463:7;4459:23;4455:33;4452:2;;;4501:1;4498;4491:12;4452:2;4544:1;4569:53;4614:7;4605:6;4594:9;4590:22;4569:53;:::i;:::-;4559:63;;4515:117;4671:2;4697:53;4742:7;4733:6;4722:9;4718:22;4697:53;:::i;:::-;4687:63;;4642:118;4799:2;4825:53;4870:7;4861:6;4850:9;4846:22;4825:53;:::i;:::-;4815:63;;4770:118;4955:2;4944:9;4940:18;4927:32;4986:18;4978:6;4975:30;4972:2;;;5018:1;5015;5008:12;4972:2;5046:62;5100:7;5091:6;5080:9;5076:22;5046:62;:::i;:::-;5036:72;;4898:220;4442:683;;;;;;;:::o;5131:401::-;5196:6;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:2;;;5269:1;5266;5259:12;5221:2;5312:1;5337:53;5382:7;5373:6;5362:9;5358:22;5337:53;:::i;:::-;5327:63;;5283:117;5439:2;5465:50;5507:7;5498:6;5487:9;5483:22;5465:50;:::i;:::-;5455:60;;5410:115;5211:321;;;;;:::o;5538:407::-;5606:6;5614;5663:2;5651:9;5642:7;5638:23;5634:32;5631:2;;;5679:1;5676;5669:12;5631:2;5722:1;5747:53;5792:7;5783:6;5772:9;5768:22;5747:53;:::i;:::-;5737:63;;5693:117;5849:2;5875:53;5920:7;5911:6;5900:9;5896:22;5875:53;:::i;:::-;5865:63;;5820:118;5621:324;;;;;:::o;5951:425::-;6037:6;6045;6094:2;6082:9;6073:7;6069:23;6065:32;6062:2;;;6110:1;6107;6100:12;6062:2;6181:1;6170:9;6166:17;6153:31;6211:18;6203:6;6200:30;6197:2;;;6243:1;6240;6233:12;6197:2;6279:80;6351:7;6342:6;6331:9;6327:22;6279:80;:::i;:::-;6261:98;;;;6124:245;6052:324;;;;;:::o;6382:256::-;6438:6;6487:2;6475:9;6466:7;6462:23;6458:32;6455:2;;;6503:1;6500;6493:12;6455:2;6546:1;6571:50;6613:7;6604:6;6593:9;6589:22;6571:50;:::i;:::-;6561:60;;6517:114;6445:193;;;;:::o;6644:262::-;6703:6;6752:2;6740:9;6731:7;6727:23;6723:32;6720:2;;;6768:1;6765;6758:12;6720:2;6811:1;6836:53;6881:7;6872:6;6861:9;6857:22;6836:53;:::i;:::-;6826:63;;6782:117;6710:196;;;;:::o;6912:260::-;6970:6;7019:2;7007:9;6998:7;6994:23;6990:32;6987:2;;;7035:1;7032;7025:12;6987:2;7078:1;7103:52;7147:7;7138:6;7127:9;7123:22;7103:52;:::i;:::-;7093:62;;7049:116;6977:195;;;;:::o;7178:282::-;7247:6;7296:2;7284:9;7275:7;7271:23;7267:32;7264:2;;;7312:1;7309;7302:12;7264:2;7355:1;7380:63;7435:7;7426:6;7415:9;7411:22;7380:63;:::i;:::-;7370:73;;7326:127;7254:206;;;;:::o;7466:375::-;7535:6;7584:2;7572:9;7563:7;7559:23;7555:32;7552:2;;;7600:1;7597;7590:12;7552:2;7671:1;7660:9;7656:17;7643:31;7701:18;7693:6;7690:30;7687:2;;;7733:1;7730;7723:12;7687:2;7761:63;7816:7;7807:6;7796:9;7792:22;7761:63;:::i;:::-;7751:73;;7614:220;7542:299;;;;:::o;7847:262::-;7906:6;7955:2;7943:9;7934:7;7930:23;7926:32;7923:2;;;7971:1;7968;7961:12;7923:2;8014:1;8039:53;8084:7;8075:6;8064:9;8060:22;8039:53;:::i;:::-;8029:63;;7985:117;7913:196;;;;:::o;8115:260::-;8173:6;8222:2;8210:9;8201:7;8197:23;8193:32;8190:2;;;8238:1;8235;8228:12;8190:2;8281:1;8306:52;8350:7;8341:6;8330:9;8326:22;8306:52;:::i;:::-;8296:62;;8252:116;8180:195;;;;:::o;8381:568::-;8475:6;8483;8491;8540:2;8528:9;8519:7;8515:23;8511:32;8508:2;;;8556:1;8553;8546:12;8508:2;8599:1;8624:52;8668:7;8659:6;8648:9;8644:22;8624:52;:::i;:::-;8614:62;;8570:116;8753:2;8742:9;8738:18;8725:32;8784:18;8776:6;8773:30;8770:2;;;8816:1;8813;8806:12;8770:2;8852:80;8924:7;8915:6;8904:9;8900:22;8852:80;:::i;:::-;8834:98;;;;8696:246;8498:451;;;;;:::o;8955:118::-;9042:24;9060:5;9042:24;:::i;:::-;9037:3;9030:37;9020:53;;:::o;9079:157::-;9184:45;9204:24;9222:5;9204:24;:::i;:::-;9184:45;:::i;:::-;9179:3;9172:58;9162:74;;:::o;9242:109::-;9323:21;9338:5;9323:21;:::i;:::-;9318:3;9311:34;9301:50;;:::o;9357:157::-;9462:45;9482:24;9500:5;9482:24;:::i;:::-;9462:45;:::i;:::-;9457:3;9450:58;9440:74;;:::o;9520:360::-;9606:3;9634:38;9666:5;9634:38;:::i;:::-;9688:70;9751:6;9746:3;9688:70;:::i;:::-;9681:77;;9767:52;9812:6;9807:3;9800:4;9793:5;9789:16;9767:52;:::i;:::-;9844:29;9866:6;9844:29;:::i;:::-;9839:3;9835:39;9828:46;;9610:270;;;;;:::o;9886:364::-;9974:3;10002:39;10035:5;10002:39;:::i;:::-;10057:71;10121:6;10116:3;10057:71;:::i;:::-;10050:78;;10137:52;10182:6;10177:3;10170:4;10163:5;10159:16;10137:52;:::i;:::-;10214:29;10236:6;10214:29;:::i;:::-;10209:3;10205:39;10198:46;;9978:272;;;;;:::o;10256:377::-;10362:3;10390:39;10423:5;10390:39;:::i;:::-;10445:89;10527:6;10522:3;10445:89;:::i;:::-;10438:96;;10543:52;10588:6;10583:3;10576:4;10569:5;10565:16;10543:52;:::i;:::-;10620:6;10615:3;10611:16;10604:23;;10366:267;;;;;:::o;10663:845::-;10766:3;10803:5;10797:12;10832:36;10858:9;10832:36;:::i;:::-;10884:89;10966:6;10961:3;10884:89;:::i;:::-;10877:96;;11004:1;10993:9;10989:17;11020:1;11015:137;;;;11166:1;11161:341;;;;10982:520;;11015:137;11099:4;11095:9;11084;11080:25;11075:3;11068:38;11135:6;11130:3;11126:16;11119:23;;11015:137;;11161:341;11228:38;11260:5;11228:38;:::i;:::-;11288:1;11302:154;11316:6;11313:1;11310:13;11302:154;;;11390:7;11384:14;11380:1;11375:3;11371:11;11364:35;11440:1;11431:7;11427:15;11416:26;;11338:4;11335:1;11331:12;11326:17;;11302:154;;;11485:6;11480:3;11476:16;11469:23;;11168:334;;10982:520;;10770:738;;;;;;:::o;11514:366::-;11656:3;11677:67;11741:2;11736:3;11677:67;:::i;:::-;11670:74;;11753:93;11842:3;11753:93;:::i;:::-;11871:2;11866:3;11862:12;11855:19;;11660:220;;;:::o;11886:366::-;12028:3;12049:67;12113:2;12108:3;12049:67;:::i;:::-;12042:74;;12125:93;12214:3;12125:93;:::i;:::-;12243:2;12238:3;12234:12;12227:19;;12032:220;;;:::o;12258:366::-;12400:3;12421:67;12485:2;12480:3;12421:67;:::i;:::-;12414:74;;12497:93;12586:3;12497:93;:::i;:::-;12615:2;12610:3;12606:12;12599:19;;12404:220;;;:::o;12630:366::-;12772:3;12793:67;12857:2;12852:3;12793:67;:::i;:::-;12786:74;;12869:93;12958:3;12869:93;:::i;:::-;12987:2;12982:3;12978:12;12971:19;;12776:220;;;:::o;13002:366::-;13144:3;13165:67;13229:2;13224:3;13165:67;:::i;:::-;13158:74;;13241:93;13330:3;13241:93;:::i;:::-;13359:2;13354:3;13350:12;13343:19;;13148:220;;;:::o;13374:366::-;13516:3;13537:67;13601:2;13596:3;13537:67;:::i;:::-;13530:74;;13613:93;13702:3;13613:93;:::i;:::-;13731:2;13726:3;13722:12;13715:19;;13520:220;;;:::o;13746:366::-;13888:3;13909:67;13973:2;13968:3;13909:67;:::i;:::-;13902:74;;13985:93;14074:3;13985:93;:::i;:::-;14103:2;14098:3;14094:12;14087:19;;13892:220;;;:::o;14118:366::-;14260:3;14281:67;14345:2;14340:3;14281:67;:::i;:::-;14274:74;;14357:93;14446:3;14357:93;:::i;:::-;14475:2;14470:3;14466:12;14459:19;;14264:220;;;:::o;14490:366::-;14632:3;14653:67;14717:2;14712:3;14653:67;:::i;:::-;14646:74;;14729:93;14818:3;14729:93;:::i;:::-;14847:2;14842:3;14838:12;14831:19;;14636:220;;;:::o;14862:366::-;15004:3;15025:67;15089:2;15084:3;15025:67;:::i;:::-;15018:74;;15101:93;15190:3;15101:93;:::i;:::-;15219:2;15214:3;15210:12;15203:19;;15008:220;;;:::o;15234:366::-;15376:3;15397:67;15461:2;15456:3;15397:67;:::i;:::-;15390:74;;15473:93;15562:3;15473:93;:::i;:::-;15591:2;15586:3;15582:12;15575:19;;15380:220;;;:::o;15606:366::-;15748:3;15769:67;15833:2;15828:3;15769:67;:::i;:::-;15762:74;;15845:93;15934:3;15845:93;:::i;:::-;15963:2;15958:3;15954:12;15947:19;;15752:220;;;:::o;15978:366::-;16120:3;16141:67;16205:2;16200:3;16141:67;:::i;:::-;16134:74;;16217:93;16306:3;16217:93;:::i;:::-;16335:2;16330:3;16326:12;16319:19;;16124:220;;;:::o;16350:366::-;16492:3;16513:67;16577:2;16572:3;16513:67;:::i;:::-;16506:74;;16589:93;16678:3;16589:93;:::i;:::-;16707:2;16702:3;16698:12;16691:19;;16496:220;;;:::o;16722:366::-;16864:3;16885:67;16949:2;16944:3;16885:67;:::i;:::-;16878:74;;16961:93;17050:3;16961:93;:::i;:::-;17079:2;17074:3;17070:12;17063:19;;16868:220;;;:::o;17094:366::-;17236:3;17257:67;17321:2;17316:3;17257:67;:::i;:::-;17250:74;;17333:93;17422:3;17333:93;:::i;:::-;17451:2;17446:3;17442:12;17435:19;;17240:220;;;:::o;17466:400::-;17626:3;17647:84;17729:1;17724:3;17647:84;:::i;:::-;17640:91;;17740:93;17829:3;17740:93;:::i;:::-;17858:1;17853:3;17849:11;17842:18;;17630:236;;;:::o;17872:366::-;18014:3;18035:67;18099:2;18094:3;18035:67;:::i;:::-;18028:74;;18111:93;18200:3;18111:93;:::i;:::-;18229:2;18224:3;18220:12;18213:19;;18018:220;;;:::o;18244:366::-;18386:3;18407:67;18471:2;18466:3;18407:67;:::i;:::-;18400:74;;18483:93;18572:3;18483:93;:::i;:::-;18601:2;18596:3;18592:12;18585:19;;18390:220;;;:::o;18616:366::-;18758:3;18779:67;18843:2;18838:3;18779:67;:::i;:::-;18772:74;;18855:93;18944:3;18855:93;:::i;:::-;18973:2;18968:3;18964:12;18957:19;;18762:220;;;:::o;18988:366::-;19130:3;19151:67;19215:2;19210:3;19151:67;:::i;:::-;19144:74;;19227:93;19316:3;19227:93;:::i;:::-;19345:2;19340:3;19336:12;19329:19;;19134:220;;;:::o;19360:366::-;19502:3;19523:67;19587:2;19582:3;19523:67;:::i;:::-;19516:74;;19599:93;19688:3;19599:93;:::i;:::-;19717:2;19712:3;19708:12;19701:19;;19506:220;;;:::o;19732:366::-;19874:3;19895:67;19959:2;19954:3;19895:67;:::i;:::-;19888:74;;19971:93;20060:3;19971:93;:::i;:::-;20089:2;20084:3;20080:12;20073:19;;19878:220;;;:::o;20104:398::-;20263:3;20284:83;20365:1;20360:3;20284:83;:::i;:::-;20277:90;;20376:93;20465:3;20376:93;:::i;:::-;20494:1;20489:3;20485:11;20478:18;;20267:235;;;:::o;20508:366::-;20650:3;20671:67;20735:2;20730:3;20671:67;:::i;:::-;20664:74;;20747:93;20836:3;20747:93;:::i;:::-;20865:2;20860:3;20856:12;20849:19;;20654:220;;;:::o;20880:366::-;21022:3;21043:67;21107:2;21102:3;21043:67;:::i;:::-;21036:74;;21119:93;21208:3;21119:93;:::i;:::-;21237:2;21232:3;21228:12;21221:19;;21026:220;;;:::o;21252:366::-;21394:3;21415:67;21479:2;21474:3;21415:67;:::i;:::-;21408:74;;21491:93;21580:3;21491:93;:::i;:::-;21609:2;21604:3;21600:12;21593:19;;21398:220;;;:::o;21624:366::-;21766:3;21787:67;21851:2;21846:3;21787:67;:::i;:::-;21780:74;;21863:93;21952:3;21863:93;:::i;:::-;21981:2;21976:3;21972:12;21965:19;;21770:220;;;:::o;21996:366::-;22138:3;22159:67;22223:2;22218:3;22159:67;:::i;:::-;22152:74;;22235:93;22324:3;22235:93;:::i;:::-;22353:2;22348:3;22344:12;22337:19;;22142:220;;;:::o;22368:118::-;22455:24;22473:5;22455:24;:::i;:::-;22450:3;22443:37;22433:53;;:::o;22492:115::-;22577:23;22594:5;22577:23;:::i;:::-;22572:3;22565:36;22555:52;;:::o;22613:256::-;22725:3;22740:75;22811:3;22802:6;22740:75;:::i;:::-;22840:2;22835:3;22831:12;22824:19;;22860:3;22853:10;;22729:140;;;;:::o;22875:397::-;23015:3;23030:75;23101:3;23092:6;23030:75;:::i;:::-;23130:2;23125:3;23121:12;23114:19;;23143:75;23214:3;23205:6;23143:75;:::i;:::-;23243:2;23238:3;23234:12;23227:19;;23263:3;23256:10;;23019:253;;;;;:::o;23278:695::-;23556:3;23578:92;23666:3;23657:6;23578:92;:::i;:::-;23571:99;;23687:95;23778:3;23769:6;23687:95;:::i;:::-;23680:102;;23799:148;23943:3;23799:148;:::i;:::-;23792:155;;23964:3;23957:10;;23560:413;;;;;:::o;23979:379::-;24163:3;24185:147;24328:3;24185:147;:::i;:::-;24178:154;;24349:3;24342:10;;24167:191;;;:::o;24364:222::-;24457:4;24495:2;24484:9;24480:18;24472:26;;24508:71;24576:1;24565:9;24561:17;24552:6;24508:71;:::i;:::-;24462:124;;;;:::o;24592:640::-;24787:4;24825:3;24814:9;24810:19;24802:27;;24839:71;24907:1;24896:9;24892:17;24883:6;24839:71;:::i;:::-;24920:72;24988:2;24977:9;24973:18;24964:6;24920:72;:::i;:::-;25002;25070:2;25059:9;25055:18;25046:6;25002:72;:::i;:::-;25121:9;25115:4;25111:20;25106:2;25095:9;25091:18;25084:48;25149:76;25220:4;25211:6;25149:76;:::i;:::-;25141:84;;24792:440;;;;;;;:::o;25238:210::-;25325:4;25363:2;25352:9;25348:18;25340:26;;25376:65;25438:1;25427:9;25423:17;25414:6;25376:65;:::i;:::-;25330:118;;;;:::o;25454:313::-;25567:4;25605:2;25594:9;25590:18;25582:26;;25654:9;25648:4;25644:20;25640:1;25629:9;25625:17;25618:47;25682:78;25755:4;25746:6;25682:78;:::i;:::-;25674:86;;25572:195;;;;:::o;25773:419::-;25939:4;25977:2;25966:9;25962:18;25954:26;;26026:9;26020:4;26016:20;26012:1;26001:9;25997:17;25990:47;26054:131;26180:4;26054:131;:::i;:::-;26046:139;;25944:248;;;:::o;26198:419::-;26364:4;26402:2;26391:9;26387:18;26379:26;;26451:9;26445:4;26441:20;26437:1;26426:9;26422:17;26415:47;26479:131;26605:4;26479:131;:::i;:::-;26471:139;;26369:248;;;:::o;26623:419::-;26789:4;26827:2;26816:9;26812:18;26804:26;;26876:9;26870:4;26866:20;26862:1;26851:9;26847:17;26840:47;26904:131;27030:4;26904:131;:::i;:::-;26896:139;;26794:248;;;:::o;27048:419::-;27214:4;27252:2;27241:9;27237:18;27229:26;;27301:9;27295:4;27291:20;27287:1;27276:9;27272:17;27265:47;27329:131;27455:4;27329:131;:::i;:::-;27321:139;;27219:248;;;:::o;27473:419::-;27639:4;27677:2;27666:9;27662:18;27654:26;;27726:9;27720:4;27716:20;27712:1;27701:9;27697:17;27690:47;27754:131;27880:4;27754:131;:::i;:::-;27746:139;;27644:248;;;:::o;27898:419::-;28064:4;28102:2;28091:9;28087:18;28079:26;;28151:9;28145:4;28141:20;28137:1;28126:9;28122:17;28115:47;28179:131;28305:4;28179:131;:::i;:::-;28171:139;;28069:248;;;:::o;28323:419::-;28489:4;28527:2;28516:9;28512:18;28504:26;;28576:9;28570:4;28566:20;28562:1;28551:9;28547:17;28540:47;28604:131;28730:4;28604:131;:::i;:::-;28596:139;;28494:248;;;:::o;28748:419::-;28914:4;28952:2;28941:9;28937:18;28929:26;;29001:9;28995:4;28991:20;28987:1;28976:9;28972:17;28965:47;29029:131;29155:4;29029:131;:::i;:::-;29021:139;;28919:248;;;:::o;29173:419::-;29339:4;29377:2;29366:9;29362:18;29354:26;;29426:9;29420:4;29416:20;29412:1;29401:9;29397:17;29390:47;29454:131;29580:4;29454:131;:::i;:::-;29446:139;;29344:248;;;:::o;29598:419::-;29764:4;29802:2;29791:9;29787:18;29779:26;;29851:9;29845:4;29841:20;29837:1;29826:9;29822:17;29815:47;29879:131;30005:4;29879:131;:::i;:::-;29871:139;;29769:248;;;:::o;30023:419::-;30189:4;30227:2;30216:9;30212:18;30204:26;;30276:9;30270:4;30266:20;30262:1;30251:9;30247:17;30240:47;30304:131;30430:4;30304:131;:::i;:::-;30296:139;;30194:248;;;:::o;30448:419::-;30614:4;30652:2;30641:9;30637:18;30629:26;;30701:9;30695:4;30691:20;30687:1;30676:9;30672:17;30665:47;30729:131;30855:4;30729:131;:::i;:::-;30721:139;;30619:248;;;:::o;30873:419::-;31039:4;31077:2;31066:9;31062:18;31054:26;;31126:9;31120:4;31116:20;31112:1;31101:9;31097:17;31090:47;31154:131;31280:4;31154:131;:::i;:::-;31146:139;;31044:248;;;:::o;31298:419::-;31464:4;31502:2;31491:9;31487:18;31479:26;;31551:9;31545:4;31541:20;31537:1;31526:9;31522:17;31515:47;31579:131;31705:4;31579:131;:::i;:::-;31571:139;;31469:248;;;:::o;31723:419::-;31889:4;31927:2;31916:9;31912:18;31904:26;;31976:9;31970:4;31966:20;31962:1;31951:9;31947:17;31940:47;32004:131;32130:4;32004:131;:::i;:::-;31996:139;;31894:248;;;:::o;32148:419::-;32314:4;32352:2;32341:9;32337:18;32329:26;;32401:9;32395:4;32391:20;32387:1;32376:9;32372:17;32365:47;32429:131;32555:4;32429:131;:::i;:::-;32421:139;;32319:248;;;:::o;32573:419::-;32739:4;32777:2;32766:9;32762:18;32754:26;;32826:9;32820:4;32816:20;32812:1;32801:9;32797:17;32790:47;32854:131;32980:4;32854:131;:::i;:::-;32846:139;;32744:248;;;:::o;32998:419::-;33164:4;33202:2;33191:9;33187:18;33179:26;;33251:9;33245:4;33241:20;33237:1;33226:9;33222:17;33215:47;33279:131;33405:4;33279:131;:::i;:::-;33271:139;;33169:248;;;:::o;33423:419::-;33589:4;33627:2;33616:9;33612:18;33604:26;;33676:9;33670:4;33666:20;33662:1;33651:9;33647:17;33640:47;33704:131;33830:4;33704:131;:::i;:::-;33696:139;;33594:248;;;:::o;33848:419::-;34014:4;34052:2;34041:9;34037:18;34029:26;;34101:9;34095:4;34091:20;34087:1;34076:9;34072:17;34065:47;34129:131;34255:4;34129:131;:::i;:::-;34121:139;;34019:248;;;:::o;34273:419::-;34439:4;34477:2;34466:9;34462:18;34454:26;;34526:9;34520:4;34516:20;34512:1;34501:9;34497:17;34490:47;34554:131;34680:4;34554:131;:::i;:::-;34546:139;;34444:248;;;:::o;34698:419::-;34864:4;34902:2;34891:9;34887:18;34879:26;;34951:9;34945:4;34941:20;34937:1;34926:9;34922:17;34915:47;34979:131;35105:4;34979:131;:::i;:::-;34971:139;;34869:248;;;:::o;35123:419::-;35289:4;35327:2;35316:9;35312:18;35304:26;;35376:9;35370:4;35366:20;35362:1;35351:9;35347:17;35340:47;35404:131;35530:4;35404:131;:::i;:::-;35396:139;;35294:248;;;:::o;35548:419::-;35714:4;35752:2;35741:9;35737:18;35729:26;;35801:9;35795:4;35791:20;35787:1;35776:9;35772:17;35765:47;35829:131;35955:4;35829:131;:::i;:::-;35821:139;;35719:248;;;:::o;35973:419::-;36139:4;36177:2;36166:9;36162:18;36154:26;;36226:9;36220:4;36216:20;36212:1;36201:9;36197:17;36190:47;36254:131;36380:4;36254:131;:::i;:::-;36246:139;;36144:248;;;:::o;36398:419::-;36564:4;36602:2;36591:9;36587:18;36579:26;;36651:9;36645:4;36641:20;36637:1;36626:9;36622:17;36615:47;36679:131;36805:4;36679:131;:::i;:::-;36671:139;;36569:248;;;:::o;36823:419::-;36989:4;37027:2;37016:9;37012:18;37004:26;;37076:9;37070:4;37066:20;37062:1;37051:9;37047:17;37040:47;37104:131;37230:4;37104:131;:::i;:::-;37096:139;;36994:248;;;:::o;37248:222::-;37341:4;37379:2;37368:9;37364:18;37356:26;;37392:71;37460:1;37449:9;37445:17;37436:6;37392:71;:::i;:::-;37346:124;;;;:::o;37476:218::-;37567:4;37605:2;37594:9;37590:18;37582:26;;37618:69;37684:1;37673:9;37669:17;37660:6;37618:69;:::i;:::-;37572:122;;;;:::o;37700:129::-;37734:6;37761:20;;:::i;:::-;37751:30;;37790:33;37818:4;37810:6;37790:33;:::i;:::-;37741:88;;;:::o;37835:75::-;37868:6;37901:2;37895:9;37885:19;;37875:35;:::o;37916:307::-;37977:4;38067:18;38059:6;38056:30;38053:2;;;38089:18;;:::i;:::-;38053:2;38127:29;38149:6;38127:29;:::i;:::-;38119:37;;38211:4;38205;38201:15;38193:23;;37982:241;;;:::o;38229:308::-;38291:4;38381:18;38373:6;38370:30;38367:2;;;38403:18;;:::i;:::-;38367:2;38441:29;38463:6;38441:29;:::i;:::-;38433:37;;38525:4;38519;38515:15;38507:23;;38296:241;;;:::o;38543:141::-;38592:4;38615:3;38607:11;;38638:3;38635:1;38628:14;38672:4;38669:1;38659:18;38651:26;;38597:87;;;:::o;38690:98::-;38741:6;38775:5;38769:12;38759:22;;38748:40;;;:::o;38794:99::-;38846:6;38880:5;38874:12;38864:22;;38853:40;;;:::o;38899:168::-;38982:11;39016:6;39011:3;39004:19;39056:4;39051:3;39047:14;39032:29;;38994:73;;;;:::o;39073:147::-;39174:11;39211:3;39196:18;;39186:34;;;;:::o;39226:169::-;39310:11;39344:6;39339:3;39332:19;39384:4;39379:3;39375:14;39360:29;;39322:73;;;;:::o;39401:148::-;39503:11;39540:3;39525:18;;39515:34;;;;:::o;39555:305::-;39595:3;39614:20;39632:1;39614:20;:::i;:::-;39609:25;;39648:20;39666:1;39648:20;:::i;:::-;39643:25;;39802:1;39734:66;39730:74;39727:1;39724:81;39721:2;;;39808:18;;:::i;:::-;39721:2;39852:1;39849;39845:9;39838:16;;39599:261;;;;:::o;39866:246::-;39905:3;39924:19;39941:1;39924:19;:::i;:::-;39919:24;;39957:19;39974:1;39957:19;:::i;:::-;39952:24;;40054:1;40042:10;40038:18;40035:1;40032:25;40029:2;;;40060:18;;:::i;:::-;40029:2;40104:1;40101;40097:9;40090:16;;39909:203;;;;:::o;40118:185::-;40158:1;40175:20;40193:1;40175:20;:::i;:::-;40170:25;;40209:20;40227:1;40209:20;:::i;:::-;40204:25;;40248:1;40238:2;;40253:18;;:::i;:::-;40238:2;40295:1;40292;40288:9;40283:14;;40160:143;;;;:::o;40309:348::-;40349:7;40372:20;40390:1;40372:20;:::i;:::-;40367:25;;40406:20;40424:1;40406:20;:::i;:::-;40401:25;;40594:1;40526:66;40522:74;40519:1;40516:81;40511:1;40504:9;40497:17;40493:105;40490:2;;;40601:18;;:::i;:::-;40490:2;40649:1;40646;40642:9;40631:20;;40357:300;;;;:::o;40663:191::-;40703:4;40723:20;40741:1;40723:20;:::i;:::-;40718:25;;40757:20;40775:1;40757:20;:::i;:::-;40752:25;;40796:1;40793;40790:8;40787:2;;;40801:18;;:::i;:::-;40787:2;40846:1;40843;40839:9;40831:17;;40708:146;;;;:::o;40860:96::-;40897:7;40926:24;40944:5;40926:24;:::i;:::-;40915:35;;40905:51;;;:::o;40962:90::-;40996:7;41039:5;41032:13;41025:21;41014:32;;41004:48;;;:::o;41058:77::-;41095:7;41124:5;41113:16;;41103:32;;;:::o;41141:149::-;41177:7;41217:66;41210:5;41206:78;41195:89;;41185:105;;;:::o;41296:126::-;41333:7;41373:42;41366:5;41362:54;41351:65;;41341:81;;;:::o;41428:77::-;41465:7;41494:5;41483:16;;41473:32;;;:::o;41511:93::-;41547:7;41587:10;41580:5;41576:22;41565:33;;41555:49;;;:::o;41610:154::-;41694:6;41689:3;41684;41671:30;41756:1;41747:6;41742:3;41738:16;41731:27;41661:103;;;:::o;41770:307::-;41838:1;41848:113;41862:6;41859:1;41856:13;41848:113;;;41947:1;41942:3;41938:11;41932:18;41928:1;41923:3;41919:11;41912:39;41884:2;41881:1;41877:10;41872:15;;41848:113;;;41979:6;41976:1;41973:13;41970:2;;;42059:1;42050:6;42045:3;42041:16;42034:27;41970:2;41819:258;;;;:::o;42083:320::-;42127:6;42164:1;42158:4;42154:12;42144:22;;42211:1;42205:4;42201:12;42232:18;42222:2;;42288:4;42280:6;42276:17;42266:27;;42222:2;42350;42342:6;42339:14;42319:18;42316:38;42313:2;;;42369:18;;:::i;:::-;42313:2;42134:269;;;;:::o;42409:281::-;42492:27;42514:4;42492:27;:::i;:::-;42484:6;42480:40;42622:6;42610:10;42607:22;42586:18;42574:10;42571:34;42568:62;42565:2;;;42633:18;;:::i;:::-;42565:2;42673:10;42669:2;42662:22;42452:238;;;:::o;42696:233::-;42735:3;42758:24;42776:5;42758:24;:::i;:::-;42749:33;;42804:66;42797:5;42794:77;42791:2;;;42874:18;;:::i;:::-;42791:2;42921:1;42914:5;42910:13;42903:20;;42739:190;;;:::o;42935:175::-;42973:3;42996:23;43013:5;42996:23;:::i;:::-;42987:32;;43041:10;43034:5;43031:21;43028:2;;;43055:18;;:::i;:::-;43028:2;43102:1;43095:5;43091:13;43084:20;;42977:133;;;:::o;43116:100::-;43155:7;43184:26;43204:5;43184:26;:::i;:::-;43173:37;;43163:53;;;:::o;43222:79::-;43261:7;43290:5;43279:16;;43269:32;;;:::o;43307:94::-;43346:7;43375:20;43389:5;43375:20;:::i;:::-;43364:31;;43354:47;;;:::o;43407:176::-;43439:1;43456:20;43474:1;43456:20;:::i;:::-;43451:25;;43490:20;43508:1;43490:20;:::i;:::-;43485:25;;43529:1;43519:2;;43534:18;;:::i;:::-;43519:2;43575:1;43572;43568:9;43563:14;;43441:142;;;;:::o;43589:180::-;43637:77;43634:1;43627:88;43734:4;43731:1;43724:15;43758:4;43755:1;43748:15;43775:180;43823:77;43820:1;43813:88;43920:4;43917:1;43910:15;43944:4;43941:1;43934:15;43961:180;44009:77;44006:1;43999:88;44106:4;44103:1;44096:15;44130:4;44127:1;44120:15;44147:180;44195:77;44192:1;44185:88;44292:4;44289:1;44282:15;44316:4;44313:1;44306:15;44333:102;44374:6;44425:2;44421:7;44416:2;44409:5;44405:14;44401:28;44391:38;;44381:54;;;:::o;44441:94::-;44474:8;44522:5;44518:2;44514:14;44493:35;;44483:52;;;:::o;44541:167::-;44681:19;44677:1;44669:6;44665:14;44658:43;44647:61;:::o;44714:237::-;44854:34;44850:1;44842:6;44838:14;44831:58;44923:20;44918:2;44910:6;44906:15;44899:45;44820:131;:::o;44957:164::-;45097:16;45093:1;45085:6;45081:14;45074:40;45063:58;:::o;45127:225::-;45267:34;45263:1;45255:6;45251:14;45244:58;45336:8;45331:2;45323:6;45319:15;45312:33;45233:119;:::o;45358:178::-;45498:30;45494:1;45486:6;45482:14;45475:54;45464:72;:::o;45542:170::-;45682:22;45678:1;45670:6;45666:14;45659:46;45648:64;:::o;45718:172::-;45858:24;45854:1;45846:6;45842:14;45835:48;45824:66;:::o;45896:223::-;46036:34;46032:1;46024:6;46020:14;46013:58;46105:6;46100:2;46092:6;46088:15;46081:31;46002:117;:::o;46125:175::-;46265:27;46261:1;46253:6;46249:14;46242:51;46231:69;:::o;46306:163::-;46446:15;46442:1;46434:6;46430:14;46423:39;46412:57;:::o;46475:231::-;46615:34;46611:1;46603:6;46599:14;46592:58;46684:14;46679:2;46671:6;46667:15;46660:39;46581:125;:::o;46712:243::-;46852:34;46848:1;46840:6;46836:14;46829:58;46921:26;46916:2;46908:6;46904:15;46897:51;46818:137;:::o;46961:229::-;47101:34;47097:1;47089:6;47085:14;47078:58;47170:12;47165:2;47157:6;47153:15;47146:37;47067:123;:::o;47196:228::-;47336:34;47332:1;47324:6;47320:14;47313:58;47405:11;47400:2;47392:6;47388:15;47381:36;47302:122;:::o;47430:182::-;47570:34;47566:1;47558:6;47554:14;47547:58;47536:76;:::o;47618:231::-;47758:34;47754:1;47746:6;47742:14;47735:58;47827:14;47822:2;47814:6;47810:15;47803:39;47724:125;:::o;47855:155::-;47995:7;47991:1;47983:6;47979:14;47972:31;47961:49;:::o;48016:182::-;48156:34;48152:1;48144:6;48140:14;48133:58;48122:76;:::o;48204:228::-;48344:34;48340:1;48332:6;48328:14;48321:58;48413:11;48408:2;48400:6;48396:15;48389:36;48310:122;:::o;48438:163::-;48578:15;48574:1;48566:6;48562:14;48555:39;48544:57;:::o;48607:220::-;48747:34;48743:1;48735:6;48731:14;48724:58;48816:3;48811:2;48803:6;48799:15;48792:28;48713:114;:::o;48833:163::-;48973:15;48969:1;48961:6;48957:14;48950:39;48939:57;:::o;49002:166::-;49142:18;49138:1;49130:6;49126:14;49119:42;49108:60;:::o;49174:114::-;49280:8;:::o;49294:236::-;49434:34;49430:1;49422:6;49418:14;49411:58;49503:19;49498:2;49490:6;49486:15;49479:44;49400:130;:::o;49536:167::-;49676:19;49672:1;49664:6;49660:14;49653:43;49642:61;:::o;49709:166::-;49849:18;49845:1;49837:6;49833:14;49826:42;49815:60;:::o;49881:167::-;50021:19;50017:1;50009:6;50005:14;49998:43;49987:61;:::o;50054:168::-;50194:20;50190:1;50182:6;50178:14;50171:44;50160:62;:::o;50228:122::-;50301:24;50319:5;50301:24;:::i;:::-;50294:5;50291:35;50281:2;;50340:1;50337;50330:12;50281:2;50271:79;:::o;50356:116::-;50426:21;50441:5;50426:21;:::i;:::-;50419:5;50416:32;50406:2;;50462:1;50459;50452:12;50406:2;50396:76;:::o;50478:122::-;50551:24;50569:5;50551:24;:::i;:::-;50544:5;50541:35;50531:2;;50590:1;50587;50580:12;50531:2;50521:79;:::o;50606:120::-;50678:23;50695:5;50678:23;:::i;:::-;50671:5;50668:34;50658:2;;50716:1;50713;50706:12;50658:2;50648:78;:::o;50732:122::-;50805:24;50823:5;50805:24;:::i;:::-;50798:5;50795:35;50785:2;;50844:1;50841;50834:12;50785:2;50775:79;:::o;50860:120::-;50932:23;50949:5;50932:23;:::i;:::-;50925:5;50922:34;50912:2;;50970:1;50967;50960:12;50912:2;50902:78;:::o

Swarm Source

ipfs://24ee9d7254b83a17f669628feb078640913a0f25dab3b36f71dcfb2a817bbb54
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.