ETH Price: $3,449.50 (-0.87%)
Gas: 3 Gwei

Token

Immutable Apes X (APESX)
 

Overview

Max Total Supply

7,668 APESX

Holders

73

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
siddha.eth
Balance
1 APESX
0xb91A23971cAbcE0dB9dbde18F554E47F8fF6F9F3
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:
Asset

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: contracts/apes/utils/Bytes.sol


pragma solidity ^0.8.4;

library Bytes {
    /**
     * @dev Converts a `uint256` to a `string`.
     * via OraclizeAPI - MIT licence
     * https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
     */
    function fromUint(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        uint256 index = digits - 1;
        temp = value;
        while (temp != 0) {
            buffer[index--] = bytes1(uint8(48 + (temp % 10)));
            temp /= 10;
        }
        return string(buffer);
    }

    bytes constant alphabet = "0123456789abcdef";

    /**
     * Index Of
     *
     * Locates and returns the position of a character within a string starting
     * from a defined offset
     *
     * @param _base When being used for a data type this is the extended object
     *              otherwise this is the string acting as the haystack to be
     *              searched
     * @param _value The needle to search for, at present this is currently
     *               limited to one character
     * @param _offset The starting point to start searching from which can start
     *                from 0, but must not exceed the length of the string
     * @return int The position of the needle starting from 0 and returning -1
     *             in the case of no matches found
     */
    function indexOf(
        bytes memory _base,
        string memory _value,
        uint256 _offset
    ) internal pure returns (int256) {
        bytes memory _valueBytes = bytes(_value);

        assert(_valueBytes.length == 1);

        for (uint256 i = _offset; i < _base.length; i++) {
            if (_base[i] == _valueBytes[0]) {
                return int256(i);
            }
        }

        return -1;
    }

    function substring(
        bytes memory strBytes,
        uint256 startIndex,
        uint256 endIndex
    ) internal pure returns (string memory) {
        bytes memory result = new bytes(endIndex - startIndex);
        for (uint256 i = startIndex; i < endIndex; i++) {
            result[i - startIndex] = strBytes[i];
        }
        return string(result);
    }

    function toUint(bytes memory b) internal pure returns (uint256) {
        uint256 result = 0;
        for (uint256 i = 0; i < b.length; i++) {
            uint256 val = uint256(uint8(b[i]));
            if (val >= 48 && val <= 57) {
                result = result * 10 + (val - 48);
            }
        }
        return result;
    }
}
// File: contracts/apes/utils/Minting.sol


pragma solidity ^0.8.4;


library Minting {
    // Split the minting blob into token_id and blueprint portions
    // {token_id}:{blueprint}

    function split(bytes calldata blob)
        internal
        pure
        returns (uint256, bytes memory)
    {
        int256 index = Bytes.indexOf(blob, ":", 0);
        require(index >= 0, "Separator must exist");
        // Trim the { and } from the parameters
        uint256 tokenID = Bytes.toUint(blob[1:uint256(index) - 1]);
        uint256 blueprintLength = blob.length - uint256(index) - 3;
        if (blueprintLength == 0) {
            return (tokenID, bytes(""));
        }
        bytes calldata blueprint = blob[uint256(index) + 2:blob.length - 1];
        return (tokenID, blueprint);
    }
}
// File: @openzeppelin/contracts/utils/Strings.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



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() {
        _setOwner(_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 {
        _setOwner(address(0));
    }

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.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: contracts/apes/Asset.sol


pragma solidity >=0.8.4;




/**
 * @title Asset
 * @dev Used for ImmutableX projects compatible with OpenSea
 */

contract Asset is ERC721, Ownable { 

    bool public sale = false;
    bool public presale = true;

    string private _baseURIextended;

    uint16 public nonce = 1;
    uint public price;
    uint16 public earlySupply;
    uint16 public totalSupply;
    uint8 public maxTx;
    uint8 public maxPublic;

    address public imx;
    address public paymentAddress;

    event PaymentComplete(address indexed to, uint16 nonce, uint16 quantity);
    event Minted(address indexed to, uint256 id);
    event Withdraw(uint amount);

    mapping (address => uint8) private presaleWallets;
    mapping (address => uint8) private saleWallets;

    constructor(
        string memory _name,
        string memory _ticker,
        uint _price, 
        uint16 _totalSupply,
        uint8 _maxTx,
        uint8 _maxPublic,
        string memory baseURI_,
        address[] memory _presaleWallets,
        uint8[] memory _presaleAmounts,
        address _paymentAddress,
        address _imx
    ) ERC721(_name, _ticker) {
        price = _price;
        earlySupply = _totalSupply;
        totalSupply = _totalSupply;
        maxTx = _maxTx;
        maxPublic = _maxPublic;
        _baseURIextended = baseURI_;
        paymentAddress = _paymentAddress;
        imx = _imx;
        setPresaleWalletsAmounts(_presaleWallets, _presaleAmounts);
    }

    function setBaseURI(string memory baseURI_) public onlyOwner {
        _baseURIextended = baseURI_;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return _baseURIextended;
    }

    modifier onlyIMX() {
        require(msg.sender == imx, "Function can only be called by IMX");
        _;
    }

    function setIMX(address _imx) external onlyOwner {
        imx = _imx;
    }

    function setPrice(uint _newPrice) external onlyOwner {
        price = _newPrice;
    }

    // function setPaymentAddress(address _address) external onlyOwner {
    //     paymentAddress = _address;
    // }

    function setEarlySupply(uint16 _limitSupply) external onlyOwner {
        earlySupply = _limitSupply;
    }

    function setTotalSupply(uint16 _newSupply) external onlyOwner {
        totalSupply = _newSupply;
    }

    function setPresale(bool _value) public onlyOwner {
        presale = _value;
    }

    function setSale(bool _value) public onlyOwner {
        sale = _value;
    }

    function setMaxTx(uint8 _maxTx) external onlyOwner {
        maxTx = _maxTx;
    }

    function setMaxPublic(uint8 _maxPublic) external onlyOwner {
        maxPublic = _maxPublic;
    }

    function setPresaleWalletsAmounts(address[] memory _a, uint8[] memory _amount) public onlyOwner {
        for (uint16 i; i < _a.length; i++) {
            presaleWallets[_a[i]] = _amount[i];
        }
    }

    function getPresaleWalletAmount(address _wallet) public view onlyOwner returns(uint8) {
        return presaleWallets[_wallet];
    }

    function getSaleWalletAmount(address _wallet) public view onlyOwner returns(uint8) {
        return saleWallets[_wallet];
    }

    function buyPresale(uint8 _qty) external payable {
        uint8 _qtyAllowed = presaleWallets[msg.sender];
        require(presale, 'Presale is not active');
        require(uint16(_qty) + nonce - 1 <= earlySupply, 'No more supply');
        require(uint16(_qty) + nonce - 1 <= totalSupply, 'No more supply');
        require(_qty <= _qtyAllowed, 'You can not buy more than allowed');
        require(_qtyAllowed > 0, 'You can not mint on presale');
        require(msg.value >= price * _qty, 'Invalid price value');

        presaleWallets[msg.sender] = _qtyAllowed - _qty;

        payable(paymentAddress).transfer(msg.value);
        uint16 initialTokenId = nonce;
        nonce = nonce + uint16(_qty);
        emit PaymentComplete(msg.sender, initialTokenId, _qty);
    }

    function buy(uint8 _qty) external payable {
        uint8 _qtyMinted = saleWallets[msg.sender];
        require(sale, 'Sale is not active');
        require(uint16(_qty) + nonce - 1 <= earlySupply, 'No more supply');
        require(uint16(_qty) + nonce - 1 <= totalSupply, 'No more supply');
        require(_qtyMinted + _qty <= maxPublic, 'You can not buy more than allowed');
        require(_qty <= maxTx || _qty < 1, 'You can not buy more than allowed');
        require(msg.value >= price * _qty, 'Invalid price value');

        saleWallets[msg.sender] = saleWallets[msg.sender] + _qty;

        payable(paymentAddress).transfer(msg.value);
        uint16 initialTokenId = nonce;
        nonce = nonce + uint16(_qty);
        emit PaymentComplete(msg.sender, initialTokenId, _qty);
    }

    function giveaway(address _to, uint8 _qty) external onlyOwner {
        require(uint16(_qty) + nonce - 1 <= totalSupply, 'No more supply');

        uint16 initialTokenId = nonce;
        nonce = nonce + uint16(_qty);
        emit PaymentComplete(_to, initialTokenId, _qty);
    }

    function mintFor(
        address user,
        uint256 quantity,
        bytes calldata mintingBlob
    ) external onlyIMX {
        require(quantity == 1, 'Mintable: invalid quantity');
        (uint256 id, bytes memory blueprint) = Minting.split(mintingBlob);
        _mintFor(user, id, blueprint);

        emit Minted(user, id);
    }

    function _mintFor(
        address user,
        uint256 id,
        bytes memory
    ) internal {
        _safeMint(user, id);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_ticker","type":"string"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint16","name":"_totalSupply","type":"uint16"},{"internalType":"uint8","name":"_maxTx","type":"uint8"},{"internalType":"uint8","name":"_maxPublic","type":"uint8"},{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address[]","name":"_presaleWallets","type":"address[]"},{"internalType":"uint8[]","name":"_presaleAmounts","type":"uint8[]"},{"internalType":"address","name":"_paymentAddress","type":"address"},{"internalType":"address","name":"_imx","type":"address"}],"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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Minted","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":"to","type":"address"},{"indexed":false,"internalType":"uint16","name":"nonce","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"quantity","type":"uint16"}],"name":"PaymentComplete","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"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":[{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"buyPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"earlySupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"_wallet","type":"address"}],"name":"getPresaleWalletAmount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getSaleWalletAmount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"imx","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":"maxPublic","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"mintingBlob","type":"bytes"}],"name":"mintFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"sale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_limitSupply","type":"uint16"}],"name":"setEarlySupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_imx","type":"address"}],"name":"setIMX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_maxPublic","type":"uint8"}],"name":"setMaxPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_maxTx","type":"uint8"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"},{"internalType":"uint8[]","name":"_amount","type":"uint8[]"}],"name":"setPresaleWalletsAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newSupply","type":"uint16"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600660146101000a81548160ff0219169083151502179055506001600660156101000a81548160ff0219169083151502179055506001600860006101000a81548161ffff021916908361ffff1602179055503480156200006557600080fd5b50604051620063ac380380620063ac83398181016040528101906200008b91906200076d565b8a8a8160009080519060200190620000a5929190620004ab565b508060019080519060200190620000be929190620004ab565b505050620000e1620000d56200021660201b60201c565b6200021e60201b60201c565b8860098190555087600a60006101000a81548161ffff021916908361ffff16021790555087600a60026101000a81548161ffff021916908361ffff16021790555086600a60046101000a81548160ff021916908360ff16021790555085600a60056101000a81548160ff021916908360ff160217905550846007908051906020019062000170929190620004ab565b5081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002058484620002e460201b60201c565b505050505050505050505062000c62565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002f46200021660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200031a6200048160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000373576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036a9062000918565b60405180910390fd5b60005b82518161ffff1610156200047c57818161ffff1681518110620003c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600c6000858461ffff16815181106200040c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080620004739062000b03565b91505062000376565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004b99062000a97565b90600052602060002090601f016020900481019282620004dd576000855562000529565b82601f10620004f857805160ff191683800117855562000529565b8280016001018555821562000529579182015b82811115620005285782518255916020019190600101906200050b565b5b5090506200053891906200053c565b5090565b5b80821115620005575760008160009055506001016200053d565b5090565b6000620005726200056c8462000963565b6200093a565b905080838252602082019050828560208602820111156200059257600080fd5b60005b85811015620005c65781620005ab88826200068a565b84526020840193506020830192505060018101905062000595565b5050509392505050565b6000620005e7620005e18462000992565b6200093a565b905080838252602082019050828560208602820111156200060757600080fd5b60005b858110156200063b578162000620888262000756565b8452602084019350602083019250506001810190506200060a565b5050509392505050565b60006200065c6200065684620009c1565b6200093a565b9050828152602081018484840111156200067557600080fd5b6200068284828562000a61565b509392505050565b6000815190506200069b8162000bfa565b92915050565b600082601f830112620006b357600080fd5b8151620006c58482602086016200055b565b91505092915050565b600082601f830112620006e057600080fd5b8151620006f2848260208601620005d0565b91505092915050565b600082601f8301126200070d57600080fd5b81516200071f84826020860162000645565b91505092915050565b600081519050620007398162000c14565b92915050565b600081519050620007508162000c2e565b92915050565b600081519050620007678162000c48565b92915050565b60008060008060008060008060008060006101608c8e0312156200079057600080fd5b60008c015167ffffffffffffffff811115620007ab57600080fd5b620007b98e828f01620006fb565b9b505060208c015167ffffffffffffffff811115620007d757600080fd5b620007e58e828f01620006fb565b9a50506040620007f88e828f016200073f565b99505060606200080b8e828f0162000728565b98505060806200081e8e828f0162000756565b97505060a0620008318e828f0162000756565b96505060c08c015167ffffffffffffffff8111156200084f57600080fd5b6200085d8e828f01620006fb565b95505060e08c015167ffffffffffffffff8111156200087b57600080fd5b620008898e828f01620006a1565b9450506101008c015167ffffffffffffffff811115620008a857600080fd5b620008b68e828f01620006ce565b935050610120620008ca8e828f016200068a565b925050610140620008de8e828f016200068a565b9150509295989b509295989b9093969950565b600062000900602083620009f7565b91506200090d8262000bd1565b602082019050919050565b600060208201905081810360008301526200093381620008f1565b9050919050565b60006200094662000959565b905062000954828262000acd565b919050565b6000604051905090565b600067ffffffffffffffff82111562000981576200098062000b91565b5b602082029050602081019050919050565b600067ffffffffffffffff821115620009b057620009af62000b91565b5b602082029050602081019050919050565b600067ffffffffffffffff821115620009df57620009de62000b91565b5b620009ea8262000bc0565b9050602081019050919050565b600082825260208201905092915050565b600062000a158262000a2a565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101562000a8157808201518184015260208101905062000a64565b8381111562000a91576000848401525b50505050565b6000600282049050600182168062000ab057607f821691505b6020821081141562000ac75762000ac662000b62565b5b50919050565b62000ad88262000bc0565b810181811067ffffffffffffffff8211171562000afa5762000af962000b91565b5b80604052505050565b600062000b108262000a1c565b915061ffff82141562000b285762000b2762000b33565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000c058162000a08565b811462000c1157600080fd5b50565b62000c1f8162000a1c565b811462000c2b57600080fd5b50565b62000c398162000a4a565b811462000c4557600080fd5b50565b62000c538162000a54565b811462000c5f57600080fd5b50565b61573a8062000c726000396000f3fe60806040526004361061025c5760003560e01c8063715018a611610144578063a24ffbd4116100b6578063c54e73e31161007a578063c54e73e3146108a0578063c87b56dd146108c9578063dc4cb5b214610906578063e985e9c51461092f578063f2fde38b1461096c578063fdea8e0b146109955761025c565b8063a24ffbd4146107de578063a63b94f514610807578063affed0e014610823578063b88d4fde1461084e578063c1408d79146108775761025c565b80638da5cb5b116101085780638da5cb5b146106ce57806391b7f5ed146106f957806395d89b41146107225780639dcd8cde1461074d578063a035b1fe1461078a578063a22cb465146107b55761025c565b8063715018a61461060d57806373bfad87146106245780637437681e1461064d5780637dc42975146106785780638cb2923c146106a35761025c565b806323b872dd116101dd578063596cdebd116101a1578063596cdebd146104d7578063633423be146105145780636352211e1461053f57806365f48e621461057c5780636ad1fe02146105a557806370a08231146105d05761025c565b806323b872dd1461041c5780633ccfd60b1461044557806342842e0e1461045c57806355f804b314610485578063562e438b146104ae5761025c565b80630f08025f116102245780630f08025f1461035857806314107f3c1461038357806318160ddd1461039f57806319ee6e3f146103ca5780631d2e5a3a146103f35761025c565b806301ffc9a714610261578063062897ba1461029e57806306fdde03146102c7578063081812fc146102f2578063095ea7b31461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190614094565b6109c0565b6040516102959190614695565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190614179565b610aa2565b005b3480156102d357600080fd5b506102dc610b3c565b6040516102e991906146b0565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190614150565b610bce565b604051610326919061462e565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613f1b565b610c53565b005b34801561036457600080fd5b5061036d610d6b565b60405161037a919061462e565b60405180910390f35b61039d60048036038101906103989190614179565b610d91565b005b3480156103ab57600080fd5b506103b4611214565b6040516103c191906149f2565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190613f57565b611228565b005b3480156103ff57600080fd5b5061041a6004803603810190610415919061406b565b61136d565b005b34801561042857600080fd5b50610443600480360381019061043e9190613e15565b611406565b005b34801561045157600080fd5b5061045a611466565b005b34801561046857600080fd5b50610483600480360381019061047e9190613e15565b61152b565b005b34801561049157600080fd5b506104ac60048036038101906104a791906140e6565b61154b565b005b3480156104ba57600080fd5b506104d560048036038101906104d09190614127565b6115e1565b005b3480156104e357600080fd5b506104fe60048036038101906104f99190613db0565b61167d565b60405161050b9190614a51565b60405180910390f35b34801561052057600080fd5b5061052961174f565b604051610536919061462e565b60405180910390f35b34801561054b57600080fd5b5061056660048036038101906105619190614150565b611775565b604051610573919061462e565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190614179565b611827565b005b3480156105b157600080fd5b506105ba6118c1565b6040516105c79190614695565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f29190613db0565b6118d4565b6040516106049190614a36565b60405180910390f35b34801561061957600080fd5b5061062261198c565b005b34801561063057600080fd5b5061064b60048036038101906106469190613fff565b611a14565b005b34801561065957600080fd5b50610662611b98565b60405161066f9190614a51565b60405180910390f35b34801561068457600080fd5b5061068d611bab565b60405161069a9190614a51565b60405180910390f35b3480156106af57600080fd5b506106b8611bbe565b6040516106c591906149f2565b60405180910390f35b3480156106da57600080fd5b506106e3611bd2565b6040516106f0919061462e565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b9190614150565b611bfc565b005b34801561072e57600080fd5b50610737611c82565b60405161074491906146b0565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613db0565b611d14565b6040516107819190614a51565b60405180910390f35b34801561079657600080fd5b5061079f611de6565b6040516107ac9190614a36565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190613edf565b611dec565b005b3480156107ea57600080fd5b5061080560048036038101906108009190613fc3565b611f6d565b005b610821600480360381019061081c9190614179565b612113565b005b34801561082f57600080fd5b50610838612510565b60405161084591906149f2565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613e64565b612524565b005b34801561088357600080fd5b5061089e60048036038101906108999190614127565b612586565b005b3480156108ac57600080fd5b506108c760048036038101906108c2919061406b565b612622565b005b3480156108d557600080fd5b506108f060048036038101906108eb9190614150565b6126bb565b6040516108fd91906146b0565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190613db0565b612762565b005b34801561093b57600080fd5b5061095660048036038101906109519190613dd9565b612822565b6040516109639190614695565b60405180910390f35b34801561097857600080fd5b50610993600480360381019061098e9190613db0565b6128b6565b005b3480156109a157600080fd5b506109aa6129ae565b6040516109b79190614695565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a9b5750610a9a826129c1565b5b9050919050565b610aaa612a2b565b73ffffffffffffffffffffffffffffffffffffffff16610ac8611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b15906148d2565b60405180910390fd5b80600a60056101000a81548160ff021916908360ff16021790555050565b606060008054610b4b90614e90565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7790614e90565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b6000610bd982612a33565b610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906148b2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c5e82611775565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690614932565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cee612a2b565b73ffffffffffffffffffffffffffffffffffffffff161480610d1d5750610d1c81610d17612a2b565b612822565b5b610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390614812565b60405180910390fd5b610d668383612a9f565b505050565b600a60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600660149054906101000a900460ff16610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e28906147b2565b60405180910390fd5b600a60009054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff16610e679190614bc1565b610e719190614d11565b61ffff161115610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead906149b2565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff16610eec9190614bc1565b610ef69190614d11565b61ffff161115610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f32906149b2565b60405180910390fd5b600a60059054906101000a900460ff1660ff168282610f5a9190614c4f565b60ff161115610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9590614832565b60405180910390fd5b600a60049054906101000a900460ff1660ff168260ff16111580610fc5575060018260ff16105b611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90614832565b60405180910390fd5b8160ff166009546110159190614cb7565b341015611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e906146f2565b60405180910390fd5b81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110af9190614c4f565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561116e573d6000803e3d6000fd5b506000600860009054906101000a900461ffff1690508260ff16600860009054906101000a900461ffff166111a39190614bc1565b600860006101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f29fe9415fa383663cf4555700885a587456ffbaead207d9946400d3afb44ac358285604051611207929190614a0d565b60405180910390a2505050565b600a60029054906101000a900461ffff1681565b600a60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af906146d2565b60405180910390fd5b600183146112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f2906147d2565b60405180910390fd5b6000806113088484612b58565b91509150611317868383612d6d565b8573ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8360405161135d9190614a36565b60405180910390a2505050505050565b611375612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611393611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e0906148d2565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b611417611411612a2b565b82612d7c565b611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d90614972565b60405180910390fd5b611461838383612e5a565b505050565b61146e612a2b565b73ffffffffffffffffffffffffffffffffffffffff1661148c611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d9906148d2565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611528573d6000803e3d6000fd5b50565b61154683838360405180602001604052806000815250612524565b505050565b611553612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611571611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906148d2565b60405180910390fd5b80600790805190602001906115dd929190613a34565b5050565b6115e9612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611607611bd2565b73ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611654906148d2565b60405180910390fd5b80600a60026101000a81548161ffff021916908361ffff16021790555050565b6000611687612a2b565b73ffffffffffffffffffffffffffffffffffffffff166116a5611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f2906148d2565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614872565b60405180910390fd5b80915050919050565b61182f612a2b565b73ffffffffffffffffffffffffffffffffffffffff1661184d611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a906148d2565b60405180910390fd5b80600a60046101000a81548160ff021916908360ff16021790555050565b600660149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90614852565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611994612a2b565b73ffffffffffffffffffffffffffffffffffffffff166119b2611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff906148d2565b60405180910390fd5b611a1260006130b6565b565b611a1c612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611a3a611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a87906148d2565b60405180910390fd5b60005b82518161ffff161015611b9357818161ffff1681518110611add577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600c6000858461ffff1681518110611b26577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080611b8b90614ef3565b915050611a93565b505050565b600a60049054906101000a900460ff1681565b600a60059054906101000a900460ff1681565b600a60009054906101000a900461ffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c04612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611c22611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f906148d2565b60405180910390fd5b8060098190555050565b606060018054611c9190614e90565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbd90614e90565b8015611d0a5780601f10611cdf57610100808354040283529160200191611d0a565b820191906000526020600020905b815481529060010190602001808311611ced57829003601f168201915b5050505050905090565b6000611d1e612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611d3c611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d89906148d2565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b611df4612a2b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5990614792565b60405180910390fd5b8060056000611e6f612a2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f1c612a2b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f619190614695565b60405180910390a35050565b611f75612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611f93611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe0906148d2565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff1661201f9190614bc1565b6120299190614d11565b61ffff16111561206e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612065906149b2565b60405180910390fd5b6000600860009054906101000a900461ffff1690508160ff16600860009054906101000a900461ffff166120a29190614bc1565b600860006101000a81548161ffff021916908361ffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f29fe9415fa383663cf4555700885a587456ffbaead207d9946400d3afb44ac358284604051612106929190614a0d565b60405180910390a2505050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600660159054906101000a900460ff166121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90614992565b60405180910390fd5b600a60009054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff166121e99190614bc1565b6121f39190614d11565b61ffff161115612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f906149b2565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff1661226e9190614bc1565b6122789190614d11565b61ffff1611156122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b4906149b2565b60405180910390fd5b8060ff168260ff161115612306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fd90614832565b60405180910390fd5b60008160ff161161234c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612343906149d2565b60405180910390fd5b8160ff1660095461235d9190614cb7565b34101561239f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612396906146f2565b60405180910390fd5b81816123ab9190614d79565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561246a573d6000803e3d6000fd5b506000600860009054906101000a900461ffff1690508260ff16600860009054906101000a900461ffff1661249f9190614bc1565b600860006101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f29fe9415fa383663cf4555700885a587456ffbaead207d9946400d3afb44ac358285604051612503929190614a0d565b60405180910390a2505050565b600860009054906101000a900461ffff1681565b61253561252f612a2b565b83612d7c565b612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b90614972565b60405180910390fd5b6125808484848461317c565b50505050565b61258e612a2b565b73ffffffffffffffffffffffffffffffffffffffff166125ac611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614612602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f9906148d2565b60405180910390fd5b80600a60006101000a81548161ffff021916908361ffff16021790555050565b61262a612a2b565b73ffffffffffffffffffffffffffffffffffffffff16612648611bd2565b73ffffffffffffffffffffffffffffffffffffffff161461269e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612695906148d2565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b60606126c682612a33565b612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc90614912565b60405180910390fd5b600061270f6131d8565b9050600081511161272f576040518060200160405280600081525061275a565b806127398461326a565b60405160200161274a92919061460a565b6040516020818303038152906040525b915050919050565b61276a612a2b565b73ffffffffffffffffffffffffffffffffffffffff16612788611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146127de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d5906148d2565b60405180910390fd5b80600a60066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6128be612a2b565b73ffffffffffffffffffffffffffffffffffffffff166128dc611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614612932576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612929906148d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299990614732565b60405180910390fd5b6129ab816130b6565b50565b600660159054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612b1283611775565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600060606000612be385858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506040518060400160405280600181526020017f3a000000000000000000000000000000000000000000000000000000000000008152506000613417565b90506000811215612c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2090614952565b60405180910390fd5b6000612c958686600190600186612c409190614d45565b92612c4d93929190614b8e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613581565b9050600060038388889050612caa9190614d45565b612cb49190614d45565b90506000811415612cdc57816040518060200160405280600081525094509450505050612d66565b3660008888600287612cee9190614bf9565b9060018c8c9050612cff9190614d45565b92612d0c93929190614b8e565b9150915083828281818080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905090509650965050505050505b9250929050565b612d77838361363e565b505050565b6000612d8782612a33565b612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd906147f2565b60405180910390fd5b6000612dd183611775565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e4057508373ffffffffffffffffffffffffffffffffffffffff16612e2884610bce565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e515750612e508185612822565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e7a82611775565b73ffffffffffffffffffffffffffffffffffffffff1614612ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec7906148f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3790614772565b60405180910390fd5b612f4b83838361365c565b612f56600082612a9f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fa69190614d45565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ffd9190614bf9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613187848484612e5a565b61319384848484613661565b6131d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c990614712565b60405180910390fd5b50505050565b6060600780546131e790614e90565b80601f016020809104026020016040519081016040528092919081815260200182805461321390614e90565b80156132605780601f1061323557610100808354040283529160200191613260565b820191906000526020600020905b81548152906001019060200180831161324357829003601f168201915b5050505050905090565b606060008214156132b2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613412565b600082905060005b600082146132e45780806132cd90614f1e565b915050600a826132dd9190614c86565b91506132ba565b60008167ffffffffffffffff811115613326577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133585781602001600182028036833780820191505090505b5090505b6000851461340b576001826133719190614d45565b9150600a856133809190614f67565b603061338c9190614bf9565b60f81b8183815181106133c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134049190614c86565b945061335c565b8093505050505b919050565b6000808390506001815114613455577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008390505b8551811015613554578160008151811061349e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916868281518110613504577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561354157809250505061357a565b808061354c90614f1e565b91505061345b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150505b9392505050565b6000806000905060005b83518110156136345760008482815181106135cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff169050603081101580156135f4575060398111155b15613620576030816136069190614d45565b600a846136139190614cb7565b61361d9190614bf9565b92505b50808061362c90614f1e565b91505061358b565b5080915050919050565b6136588282604051806020016040528060008152506137f8565b5050565b505050565b60006136828473ffffffffffffffffffffffffffffffffffffffff16613853565b156137eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136ab612a2b565b8786866040518563ffffffff1660e01b81526004016136cd9493929190614649565b602060405180830381600087803b1580156136e757600080fd5b505af192505050801561371857506040513d601f19601f8201168201806040525081019061371591906140bd565b60015b61379b573d8060008114613748576040519150601f19603f3d011682016040523d82523d6000602084013e61374d565b606091505b50600081511415613793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378a90614712565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506137f0565b600190505b949350505050565b6138028383613866565b61380f6000848484613661565b61384e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384590614712565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138cd90614892565b60405180910390fd5b6138df81612a33565b1561391f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391690614752565b60405180910390fd5b61392b6000838361365c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461397b9190614bf9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613a4090614e90565b90600052602060002090601f016020900481019282613a625760008555613aa9565b82601f10613a7b57805160ff1916838001178555613aa9565b82800160010185558215613aa9579182015b82811115613aa8578251825591602001919060010190613a8d565b5b509050613ab69190613aba565b5090565b5b80821115613ad3576000816000905550600101613abb565b5090565b6000613aea613ae584614a91565b614a6c565b90508083825260208201905082856020860282011115613b0957600080fd5b60005b85811015613b395781613b1f8882613c2b565b845260208401935060208301925050600181019050613b0c565b5050509392505050565b6000613b56613b5184614abd565b614a6c565b90508083825260208201905082856020860282011115613b7557600080fd5b60005b85811015613ba55781613b8b8882613d9b565b845260208401935060208301925050600181019050613b78565b5050509392505050565b6000613bc2613bbd84614ae9565b614a6c565b905082815260208101848484011115613bda57600080fd5b613be5848285614e4e565b509392505050565b6000613c00613bfb84614b1a565b614a6c565b905082815260208101848484011115613c1857600080fd5b613c23848285614e4e565b509392505050565b600081359050613c3a8161567a565b92915050565b600082601f830112613c5157600080fd5b8135613c61848260208601613ad7565b91505092915050565b600082601f830112613c7b57600080fd5b8135613c8b848260208601613b43565b91505092915050565b600081359050613ca381615691565b92915050565b600081359050613cb8816156a8565b92915050565b600081519050613ccd816156a8565b92915050565b60008083601f840112613ce557600080fd5b8235905067ffffffffffffffff811115613cfe57600080fd5b602083019150836001820283011115613d1657600080fd5b9250929050565b600082601f830112613d2e57600080fd5b8135613d3e848260208601613baf565b91505092915050565b600082601f830112613d5857600080fd5b8135613d68848260208601613bed565b91505092915050565b600081359050613d80816156bf565b92915050565b600081359050613d95816156d6565b92915050565b600081359050613daa816156ed565b92915050565b600060208284031215613dc257600080fd5b6000613dd084828501613c2b565b91505092915050565b60008060408385031215613dec57600080fd5b6000613dfa85828601613c2b565b9250506020613e0b85828601613c2b565b9150509250929050565b600080600060608486031215613e2a57600080fd5b6000613e3886828701613c2b565b9350506020613e4986828701613c2b565b9250506040613e5a86828701613d86565b9150509250925092565b60008060008060808587031215613e7a57600080fd5b6000613e8887828801613c2b565b9450506020613e9987828801613c2b565b9350506040613eaa87828801613d86565b925050606085013567ffffffffffffffff811115613ec757600080fd5b613ed387828801613d1d565b91505092959194509250565b60008060408385031215613ef257600080fd5b6000613f0085828601613c2b565b9250506020613f1185828601613c94565b9150509250929050565b60008060408385031215613f2e57600080fd5b6000613f3c85828601613c2b565b9250506020613f4d85828601613d86565b9150509250929050565b60008060008060608587031215613f6d57600080fd5b6000613f7b87828801613c2b565b9450506020613f8c87828801613d86565b935050604085013567ffffffffffffffff811115613fa957600080fd5b613fb587828801613cd3565b925092505092959194509250565b60008060408385031215613fd657600080fd5b6000613fe485828601613c2b565b9250506020613ff585828601613d9b565b9150509250929050565b6000806040838503121561401257600080fd5b600083013567ffffffffffffffff81111561402c57600080fd5b61403885828601613c40565b925050602083013567ffffffffffffffff81111561405557600080fd5b61406185828601613c6a565b9150509250929050565b60006020828403121561407d57600080fd5b600061408b84828501613c94565b91505092915050565b6000602082840312156140a657600080fd5b60006140b484828501613ca9565b91505092915050565b6000602082840312156140cf57600080fd5b60006140dd84828501613cbe565b91505092915050565b6000602082840312156140f857600080fd5b600082013567ffffffffffffffff81111561411257600080fd5b61411e84828501613d47565b91505092915050565b60006020828403121561413957600080fd5b600061414784828501613d71565b91505092915050565b60006020828403121561416257600080fd5b600061417084828501613d86565b91505092915050565b60006020828403121561418b57600080fd5b600061419984828501613d9b565b91505092915050565b6141ab81614dad565b82525050565b6141ba81614dbf565b82525050565b60006141cb82614b4b565b6141d58185614b61565b93506141e5818560208601614e5d565b6141ee81615054565b840191505092915050565b600061420482614b56565b61420e8185614b72565b935061421e818560208601614e5d565b61422781615054565b840191505092915050565b600061423d82614b56565b6142478185614b83565b9350614257818560208601614e5d565b80840191505092915050565b6000614270602283614b72565b915061427b82615065565b604082019050919050565b6000614293601383614b72565b915061429e826150b4565b602082019050919050565b60006142b6603283614b72565b91506142c1826150dd565b604082019050919050565b60006142d9602683614b72565b91506142e48261512c565b604082019050919050565b60006142fc601c83614b72565b91506143078261517b565b602082019050919050565b600061431f602483614b72565b915061432a826151a4565b604082019050919050565b6000614342601983614b72565b915061434d826151f3565b602082019050919050565b6000614365601283614b72565b91506143708261521c565b602082019050919050565b6000614388601a83614b72565b915061439382615245565b602082019050919050565b60006143ab602c83614b72565b91506143b68261526e565b604082019050919050565b60006143ce603883614b72565b91506143d9826152bd565b604082019050919050565b60006143f1602183614b72565b91506143fc8261530c565b604082019050919050565b6000614414602a83614b72565b915061441f8261535b565b604082019050919050565b6000614437602983614b72565b9150614442826153aa565b604082019050919050565b600061445a602083614b72565b9150614465826153f9565b602082019050919050565b600061447d602c83614b72565b915061448882615422565b604082019050919050565b60006144a0602083614b72565b91506144ab82615471565b602082019050919050565b60006144c3602983614b72565b91506144ce8261549a565b604082019050919050565b60006144e6602f83614b72565b91506144f1826154e9565b604082019050919050565b6000614509602183614b72565b915061451482615538565b604082019050919050565b600061452c601483614b72565b915061453782615587565b602082019050919050565b600061454f603183614b72565b915061455a826155b0565b604082019050919050565b6000614572601583614b72565b915061457d826155ff565b602082019050919050565b6000614595600e83614b72565b91506145a082615628565b602082019050919050565b60006145b8601b83614b72565b91506145c382615651565b602082019050919050565b6145d781614df7565b82525050565b6145e681614e25565b82525050565b6145f581614e3c565b82525050565b61460481614e2f565b82525050565b60006146168285614232565b91506146228284614232565b91508190509392505050565b600060208201905061464360008301846141a2565b92915050565b600060808201905061465e60008301876141a2565b61466b60208301866141a2565b61467860408301856145dd565b818103606083015261468a81846141c0565b905095945050505050565b60006020820190506146aa60008301846141b1565b92915050565b600060208201905081810360008301526146ca81846141f9565b905092915050565b600060208201905081810360008301526146eb81614263565b9050919050565b6000602082019050818103600083015261470b81614286565b9050919050565b6000602082019050818103600083015261472b816142a9565b9050919050565b6000602082019050818103600083015261474b816142cc565b9050919050565b6000602082019050818103600083015261476b816142ef565b9050919050565b6000602082019050818103600083015261478b81614312565b9050919050565b600060208201905081810360008301526147ab81614335565b9050919050565b600060208201905081810360008301526147cb81614358565b9050919050565b600060208201905081810360008301526147eb8161437b565b9050919050565b6000602082019050818103600083015261480b8161439e565b9050919050565b6000602082019050818103600083015261482b816143c1565b9050919050565b6000602082019050818103600083015261484b816143e4565b9050919050565b6000602082019050818103600083015261486b81614407565b9050919050565b6000602082019050818103600083015261488b8161442a565b9050919050565b600060208201905081810360008301526148ab8161444d565b9050919050565b600060208201905081810360008301526148cb81614470565b9050919050565b600060208201905081810360008301526148eb81614493565b9050919050565b6000602082019050818103600083015261490b816144b6565b9050919050565b6000602082019050818103600083015261492b816144d9565b9050919050565b6000602082019050818103600083015261494b816144fc565b9050919050565b6000602082019050818103600083015261496b8161451f565b9050919050565b6000602082019050818103600083015261498b81614542565b9050919050565b600060208201905081810360008301526149ab81614565565b9050919050565b600060208201905081810360008301526149cb81614588565b9050919050565b600060208201905081810360008301526149eb816145ab565b9050919050565b6000602082019050614a0760008301846145ce565b92915050565b6000604082019050614a2260008301856145ce565b614a2f60208301846145ec565b9392505050565b6000602082019050614a4b60008301846145dd565b92915050565b6000602082019050614a6660008301846145fb565b92915050565b6000614a76614a87565b9050614a828282614ec2565b919050565b6000604051905090565b600067ffffffffffffffff821115614aac57614aab615025565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ad857614ad7615025565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b0457614b03615025565b5b614b0d82615054565b9050602081019050919050565b600067ffffffffffffffff821115614b3557614b34615025565b5b614b3e82615054565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60008085851115614b9e57600080fd5b83861115614bab57600080fd5b6001850283019150848603905094509492505050565b6000614bcc82614df7565b9150614bd783614df7565b92508261ffff03821115614bee57614bed614f98565b5b828201905092915050565b6000614c0482614e25565b9150614c0f83614e25565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c4457614c43614f98565b5b828201905092915050565b6000614c5a82614e2f565b9150614c6583614e2f565b92508260ff03821115614c7b57614c7a614f98565b5b828201905092915050565b6000614c9182614e25565b9150614c9c83614e25565b925082614cac57614cab614fc7565b5b828204905092915050565b6000614cc282614e25565b9150614ccd83614e25565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0657614d05614f98565b5b828202905092915050565b6000614d1c82614df7565b9150614d2783614df7565b925082821015614d3a57614d39614f98565b5b828203905092915050565b6000614d5082614e25565b9150614d5b83614e25565b925082821015614d6e57614d6d614f98565b5b828203905092915050565b6000614d8482614e2f565b9150614d8f83614e2f565b925082821015614da257614da1614f98565b5b828203905092915050565b6000614db882614e05565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e4782614e2f565b9050919050565b82818337600083830152505050565b60005b83811015614e7b578082015181840152602081019050614e60565b83811115614e8a576000848401525b50505050565b60006002820490506001821680614ea857607f821691505b60208210811415614ebc57614ebb614ff6565b5b50919050565b614ecb82615054565b810181811067ffffffffffffffff82111715614eea57614ee9615025565b5b80604052505050565b6000614efe82614df7565b915061ffff821415614f1357614f12614f98565b5b600182019050919050565b6000614f2982614e25565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f5c57614f5b614f98565b5b600182019050919050565b6000614f7282614e25565b9150614f7d83614e25565b925082614f8d57614f8c614fc7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f46756e6374696f6e2063616e206f6e6c792062652063616c6c6564206279204960008201527f4d58000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642070726963652076616c756500000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4d696e7461626c653a20696e76616c6964207175616e74697479000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f596f752063616e206e6f7420627579206d6f7265207468616e20616c6c6f776560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f536570617261746f72206d757374206578697374000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f50726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b7f4e6f206d6f726520737570706c79000000000000000000000000000000000000600082015250565b7f596f752063616e206e6f74206d696e74206f6e2070726573616c650000000000600082015250565b61568381614dad565b811461568e57600080fd5b50565b61569a81614dbf565b81146156a557600080fd5b50565b6156b181614dcb565b81146156bc57600080fd5b50565b6156c881614df7565b81146156d357600080fd5b50565b6156df81614e25565b81146156ea57600080fd5b50565b6156f681614e2f565b811461570157600080fd5b5056fea26469706673582212202f8a6a24f9071844916e4bd7e4bf3d3395bd177413702e9a110c9f40ef51e66f64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002600000000000000000000000005d4aa08db128a9960364e1ff270af6ab676d38ee0000000000000000000000005fdcca53617f4d2b9134b29090c87d01058e27e90000000000000000000000000000000000000000000000000000000000000010496d6d757461626c65204170657320580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054150455358000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6170692e74686561706573617265636f6d696e672e636f6d2f6f70656e7365612f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061025c5760003560e01c8063715018a611610144578063a24ffbd4116100b6578063c54e73e31161007a578063c54e73e3146108a0578063c87b56dd146108c9578063dc4cb5b214610906578063e985e9c51461092f578063f2fde38b1461096c578063fdea8e0b146109955761025c565b8063a24ffbd4146107de578063a63b94f514610807578063affed0e014610823578063b88d4fde1461084e578063c1408d79146108775761025c565b80638da5cb5b116101085780638da5cb5b146106ce57806391b7f5ed146106f957806395d89b41146107225780639dcd8cde1461074d578063a035b1fe1461078a578063a22cb465146107b55761025c565b8063715018a61461060d57806373bfad87146106245780637437681e1461064d5780637dc42975146106785780638cb2923c146106a35761025c565b806323b872dd116101dd578063596cdebd116101a1578063596cdebd146104d7578063633423be146105145780636352211e1461053f57806365f48e621461057c5780636ad1fe02146105a557806370a08231146105d05761025c565b806323b872dd1461041c5780633ccfd60b1461044557806342842e0e1461045c57806355f804b314610485578063562e438b146104ae5761025c565b80630f08025f116102245780630f08025f1461035857806314107f3c1461038357806318160ddd1461039f57806319ee6e3f146103ca5780631d2e5a3a146103f35761025c565b806301ffc9a714610261578063062897ba1461029e57806306fdde03146102c7578063081812fc146102f2578063095ea7b31461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190614094565b6109c0565b6040516102959190614695565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190614179565b610aa2565b005b3480156102d357600080fd5b506102dc610b3c565b6040516102e991906146b0565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190614150565b610bce565b604051610326919061462e565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613f1b565b610c53565b005b34801561036457600080fd5b5061036d610d6b565b60405161037a919061462e565b60405180910390f35b61039d60048036038101906103989190614179565b610d91565b005b3480156103ab57600080fd5b506103b4611214565b6040516103c191906149f2565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190613f57565b611228565b005b3480156103ff57600080fd5b5061041a6004803603810190610415919061406b565b61136d565b005b34801561042857600080fd5b50610443600480360381019061043e9190613e15565b611406565b005b34801561045157600080fd5b5061045a611466565b005b34801561046857600080fd5b50610483600480360381019061047e9190613e15565b61152b565b005b34801561049157600080fd5b506104ac60048036038101906104a791906140e6565b61154b565b005b3480156104ba57600080fd5b506104d560048036038101906104d09190614127565b6115e1565b005b3480156104e357600080fd5b506104fe60048036038101906104f99190613db0565b61167d565b60405161050b9190614a51565b60405180910390f35b34801561052057600080fd5b5061052961174f565b604051610536919061462e565b60405180910390f35b34801561054b57600080fd5b5061056660048036038101906105619190614150565b611775565b604051610573919061462e565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190614179565b611827565b005b3480156105b157600080fd5b506105ba6118c1565b6040516105c79190614695565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f29190613db0565b6118d4565b6040516106049190614a36565b60405180910390f35b34801561061957600080fd5b5061062261198c565b005b34801561063057600080fd5b5061064b60048036038101906106469190613fff565b611a14565b005b34801561065957600080fd5b50610662611b98565b60405161066f9190614a51565b60405180910390f35b34801561068457600080fd5b5061068d611bab565b60405161069a9190614a51565b60405180910390f35b3480156106af57600080fd5b506106b8611bbe565b6040516106c591906149f2565b60405180910390f35b3480156106da57600080fd5b506106e3611bd2565b6040516106f0919061462e565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b9190614150565b611bfc565b005b34801561072e57600080fd5b50610737611c82565b60405161074491906146b0565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613db0565b611d14565b6040516107819190614a51565b60405180910390f35b34801561079657600080fd5b5061079f611de6565b6040516107ac9190614a36565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190613edf565b611dec565b005b3480156107ea57600080fd5b5061080560048036038101906108009190613fc3565b611f6d565b005b610821600480360381019061081c9190614179565b612113565b005b34801561082f57600080fd5b50610838612510565b60405161084591906149f2565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613e64565b612524565b005b34801561088357600080fd5b5061089e60048036038101906108999190614127565b612586565b005b3480156108ac57600080fd5b506108c760048036038101906108c2919061406b565b612622565b005b3480156108d557600080fd5b506108f060048036038101906108eb9190614150565b6126bb565b6040516108fd91906146b0565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190613db0565b612762565b005b34801561093b57600080fd5b5061095660048036038101906109519190613dd9565b612822565b6040516109639190614695565b60405180910390f35b34801561097857600080fd5b50610993600480360381019061098e9190613db0565b6128b6565b005b3480156109a157600080fd5b506109aa6129ae565b6040516109b79190614695565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a9b5750610a9a826129c1565b5b9050919050565b610aaa612a2b565b73ffffffffffffffffffffffffffffffffffffffff16610ac8611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b15906148d2565b60405180910390fd5b80600a60056101000a81548160ff021916908360ff16021790555050565b606060008054610b4b90614e90565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7790614e90565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b6000610bd982612a33565b610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906148b2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c5e82611775565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690614932565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cee612a2b565b73ffffffffffffffffffffffffffffffffffffffff161480610d1d5750610d1c81610d17612a2b565b612822565b5b610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390614812565b60405180910390fd5b610d668383612a9f565b505050565b600a60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600660149054906101000a900460ff16610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e28906147b2565b60405180910390fd5b600a60009054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff16610e679190614bc1565b610e719190614d11565b61ffff161115610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead906149b2565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff16610eec9190614bc1565b610ef69190614d11565b61ffff161115610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f32906149b2565b60405180910390fd5b600a60059054906101000a900460ff1660ff168282610f5a9190614c4f565b60ff161115610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9590614832565b60405180910390fd5b600a60049054906101000a900460ff1660ff168260ff16111580610fc5575060018260ff16105b611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90614832565b60405180910390fd5b8160ff166009546110159190614cb7565b341015611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e906146f2565b60405180910390fd5b81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110af9190614c4f565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561116e573d6000803e3d6000fd5b506000600860009054906101000a900461ffff1690508260ff16600860009054906101000a900461ffff166111a39190614bc1565b600860006101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f29fe9415fa383663cf4555700885a587456ffbaead207d9946400d3afb44ac358285604051611207929190614a0d565b60405180910390a2505050565b600a60029054906101000a900461ffff1681565b600a60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af906146d2565b60405180910390fd5b600183146112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f2906147d2565b60405180910390fd5b6000806113088484612b58565b91509150611317868383612d6d565b8573ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8360405161135d9190614a36565b60405180910390a2505050505050565b611375612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611393611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e0906148d2565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b611417611411612a2b565b82612d7c565b611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d90614972565b60405180910390fd5b611461838383612e5a565b505050565b61146e612a2b565b73ffffffffffffffffffffffffffffffffffffffff1661148c611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d9906148d2565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611528573d6000803e3d6000fd5b50565b61154683838360405180602001604052806000815250612524565b505050565b611553612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611571611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906148d2565b60405180910390fd5b80600790805190602001906115dd929190613a34565b5050565b6115e9612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611607611bd2565b73ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611654906148d2565b60405180910390fd5b80600a60026101000a81548161ffff021916908361ffff16021790555050565b6000611687612a2b565b73ffffffffffffffffffffffffffffffffffffffff166116a5611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f2906148d2565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614872565b60405180910390fd5b80915050919050565b61182f612a2b565b73ffffffffffffffffffffffffffffffffffffffff1661184d611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a906148d2565b60405180910390fd5b80600a60046101000a81548160ff021916908360ff16021790555050565b600660149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90614852565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611994612a2b565b73ffffffffffffffffffffffffffffffffffffffff166119b2611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff906148d2565b60405180910390fd5b611a1260006130b6565b565b611a1c612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611a3a611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a87906148d2565b60405180910390fd5b60005b82518161ffff161015611b9357818161ffff1681518110611add577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600c6000858461ffff1681518110611b26577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080611b8b90614ef3565b915050611a93565b505050565b600a60049054906101000a900460ff1681565b600a60059054906101000a900460ff1681565b600a60009054906101000a900461ffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c04612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611c22611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f906148d2565b60405180910390fd5b8060098190555050565b606060018054611c9190614e90565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbd90614e90565b8015611d0a5780601f10611cdf57610100808354040283529160200191611d0a565b820191906000526020600020905b815481529060010190602001808311611ced57829003601f168201915b5050505050905090565b6000611d1e612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611d3c611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d89906148d2565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b611df4612a2b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5990614792565b60405180910390fd5b8060056000611e6f612a2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f1c612a2b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f619190614695565b60405180910390a35050565b611f75612a2b565b73ffffffffffffffffffffffffffffffffffffffff16611f93611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe0906148d2565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168360ff1661201f9190614bc1565b6120299190614d11565b61ffff16111561206e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612065906149b2565b60405180910390fd5b6000600860009054906101000a900461ffff1690508160ff16600860009054906101000a900461ffff166120a29190614bc1565b600860006101000a81548161ffff021916908361ffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f29fe9415fa383663cf4555700885a587456ffbaead207d9946400d3afb44ac358284604051612106929190614a0d565b60405180910390a2505050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600660159054906101000a900460ff166121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90614992565b60405180910390fd5b600a60009054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff166121e99190614bc1565b6121f39190614d11565b61ffff161115612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f906149b2565b60405180910390fd5b600a60029054906101000a900461ffff1661ffff166001600860009054906101000a900461ffff168460ff1661226e9190614bc1565b6122789190614d11565b61ffff1611156122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b4906149b2565b60405180910390fd5b8060ff168260ff161115612306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fd90614832565b60405180910390fd5b60008160ff161161234c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612343906149d2565b60405180910390fd5b8160ff1660095461235d9190614cb7565b34101561239f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612396906146f2565b60405180910390fd5b81816123ab9190614d79565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561246a573d6000803e3d6000fd5b506000600860009054906101000a900461ffff1690508260ff16600860009054906101000a900461ffff1661249f9190614bc1565b600860006101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f29fe9415fa383663cf4555700885a587456ffbaead207d9946400d3afb44ac358285604051612503929190614a0d565b60405180910390a2505050565b600860009054906101000a900461ffff1681565b61253561252f612a2b565b83612d7c565b612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b90614972565b60405180910390fd5b6125808484848461317c565b50505050565b61258e612a2b565b73ffffffffffffffffffffffffffffffffffffffff166125ac611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614612602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f9906148d2565b60405180910390fd5b80600a60006101000a81548161ffff021916908361ffff16021790555050565b61262a612a2b565b73ffffffffffffffffffffffffffffffffffffffff16612648611bd2565b73ffffffffffffffffffffffffffffffffffffffff161461269e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612695906148d2565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b60606126c682612a33565b612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc90614912565b60405180910390fd5b600061270f6131d8565b9050600081511161272f576040518060200160405280600081525061275a565b806127398461326a565b60405160200161274a92919061460a565b6040516020818303038152906040525b915050919050565b61276a612a2b565b73ffffffffffffffffffffffffffffffffffffffff16612788611bd2565b73ffffffffffffffffffffffffffffffffffffffff16146127de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d5906148d2565b60405180910390fd5b80600a60066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6128be612a2b565b73ffffffffffffffffffffffffffffffffffffffff166128dc611bd2565b73ffffffffffffffffffffffffffffffffffffffff1614612932576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612929906148d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299990614732565b60405180910390fd5b6129ab816130b6565b50565b600660159054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612b1283611775565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600060606000612be385858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506040518060400160405280600181526020017f3a000000000000000000000000000000000000000000000000000000000000008152506000613417565b90506000811215612c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2090614952565b60405180910390fd5b6000612c958686600190600186612c409190614d45565b92612c4d93929190614b8e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613581565b9050600060038388889050612caa9190614d45565b612cb49190614d45565b90506000811415612cdc57816040518060200160405280600081525094509450505050612d66565b3660008888600287612cee9190614bf9565b9060018c8c9050612cff9190614d45565b92612d0c93929190614b8e565b9150915083828281818080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905090509650965050505050505b9250929050565b612d77838361363e565b505050565b6000612d8782612a33565b612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd906147f2565b60405180910390fd5b6000612dd183611775565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e4057508373ffffffffffffffffffffffffffffffffffffffff16612e2884610bce565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e515750612e508185612822565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e7a82611775565b73ffffffffffffffffffffffffffffffffffffffff1614612ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec7906148f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3790614772565b60405180910390fd5b612f4b83838361365c565b612f56600082612a9f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fa69190614d45565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ffd9190614bf9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613187848484612e5a565b61319384848484613661565b6131d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c990614712565b60405180910390fd5b50505050565b6060600780546131e790614e90565b80601f016020809104026020016040519081016040528092919081815260200182805461321390614e90565b80156132605780601f1061323557610100808354040283529160200191613260565b820191906000526020600020905b81548152906001019060200180831161324357829003601f168201915b5050505050905090565b606060008214156132b2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613412565b600082905060005b600082146132e45780806132cd90614f1e565b915050600a826132dd9190614c86565b91506132ba565b60008167ffffffffffffffff811115613326577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133585781602001600182028036833780820191505090505b5090505b6000851461340b576001826133719190614d45565b9150600a856133809190614f67565b603061338c9190614bf9565b60f81b8183815181106133c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134049190614c86565b945061335c565b8093505050505b919050565b6000808390506001815114613455577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008390505b8551811015613554578160008151811061349e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916868281518110613504577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561354157809250505061357a565b808061354c90614f1e565b91505061345b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150505b9392505050565b6000806000905060005b83518110156136345760008482815181106135cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff169050603081101580156135f4575060398111155b15613620576030816136069190614d45565b600a846136139190614cb7565b61361d9190614bf9565b92505b50808061362c90614f1e565b91505061358b565b5080915050919050565b6136588282604051806020016040528060008152506137f8565b5050565b505050565b60006136828473ffffffffffffffffffffffffffffffffffffffff16613853565b156137eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136ab612a2b565b8786866040518563ffffffff1660e01b81526004016136cd9493929190614649565b602060405180830381600087803b1580156136e757600080fd5b505af192505050801561371857506040513d601f19601f8201168201806040525081019061371591906140bd565b60015b61379b573d8060008114613748576040519150601f19603f3d011682016040523d82523d6000602084013e61374d565b606091505b50600081511415613793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378a90614712565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506137f0565b600190505b949350505050565b6138028383613866565b61380f6000848484613661565b61384e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384590614712565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138cd90614892565b60405180910390fd5b6138df81612a33565b1561391f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391690614752565b60405180910390fd5b61392b6000838361365c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461397b9190614bf9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613a4090614e90565b90600052602060002090601f016020900481019282613a625760008555613aa9565b82601f10613a7b57805160ff1916838001178555613aa9565b82800160010185558215613aa9579182015b82811115613aa8578251825591602001919060010190613a8d565b5b509050613ab69190613aba565b5090565b5b80821115613ad3576000816000905550600101613abb565b5090565b6000613aea613ae584614a91565b614a6c565b90508083825260208201905082856020860282011115613b0957600080fd5b60005b85811015613b395781613b1f8882613c2b565b845260208401935060208301925050600181019050613b0c565b5050509392505050565b6000613b56613b5184614abd565b614a6c565b90508083825260208201905082856020860282011115613b7557600080fd5b60005b85811015613ba55781613b8b8882613d9b565b845260208401935060208301925050600181019050613b78565b5050509392505050565b6000613bc2613bbd84614ae9565b614a6c565b905082815260208101848484011115613bda57600080fd5b613be5848285614e4e565b509392505050565b6000613c00613bfb84614b1a565b614a6c565b905082815260208101848484011115613c1857600080fd5b613c23848285614e4e565b509392505050565b600081359050613c3a8161567a565b92915050565b600082601f830112613c5157600080fd5b8135613c61848260208601613ad7565b91505092915050565b600082601f830112613c7b57600080fd5b8135613c8b848260208601613b43565b91505092915050565b600081359050613ca381615691565b92915050565b600081359050613cb8816156a8565b92915050565b600081519050613ccd816156a8565b92915050565b60008083601f840112613ce557600080fd5b8235905067ffffffffffffffff811115613cfe57600080fd5b602083019150836001820283011115613d1657600080fd5b9250929050565b600082601f830112613d2e57600080fd5b8135613d3e848260208601613baf565b91505092915050565b600082601f830112613d5857600080fd5b8135613d68848260208601613bed565b91505092915050565b600081359050613d80816156bf565b92915050565b600081359050613d95816156d6565b92915050565b600081359050613daa816156ed565b92915050565b600060208284031215613dc257600080fd5b6000613dd084828501613c2b565b91505092915050565b60008060408385031215613dec57600080fd5b6000613dfa85828601613c2b565b9250506020613e0b85828601613c2b565b9150509250929050565b600080600060608486031215613e2a57600080fd5b6000613e3886828701613c2b565b9350506020613e4986828701613c2b565b9250506040613e5a86828701613d86565b9150509250925092565b60008060008060808587031215613e7a57600080fd5b6000613e8887828801613c2b565b9450506020613e9987828801613c2b565b9350506040613eaa87828801613d86565b925050606085013567ffffffffffffffff811115613ec757600080fd5b613ed387828801613d1d565b91505092959194509250565b60008060408385031215613ef257600080fd5b6000613f0085828601613c2b565b9250506020613f1185828601613c94565b9150509250929050565b60008060408385031215613f2e57600080fd5b6000613f3c85828601613c2b565b9250506020613f4d85828601613d86565b9150509250929050565b60008060008060608587031215613f6d57600080fd5b6000613f7b87828801613c2b565b9450506020613f8c87828801613d86565b935050604085013567ffffffffffffffff811115613fa957600080fd5b613fb587828801613cd3565b925092505092959194509250565b60008060408385031215613fd657600080fd5b6000613fe485828601613c2b565b9250506020613ff585828601613d9b565b9150509250929050565b6000806040838503121561401257600080fd5b600083013567ffffffffffffffff81111561402c57600080fd5b61403885828601613c40565b925050602083013567ffffffffffffffff81111561405557600080fd5b61406185828601613c6a565b9150509250929050565b60006020828403121561407d57600080fd5b600061408b84828501613c94565b91505092915050565b6000602082840312156140a657600080fd5b60006140b484828501613ca9565b91505092915050565b6000602082840312156140cf57600080fd5b60006140dd84828501613cbe565b91505092915050565b6000602082840312156140f857600080fd5b600082013567ffffffffffffffff81111561411257600080fd5b61411e84828501613d47565b91505092915050565b60006020828403121561413957600080fd5b600061414784828501613d71565b91505092915050565b60006020828403121561416257600080fd5b600061417084828501613d86565b91505092915050565b60006020828403121561418b57600080fd5b600061419984828501613d9b565b91505092915050565b6141ab81614dad565b82525050565b6141ba81614dbf565b82525050565b60006141cb82614b4b565b6141d58185614b61565b93506141e5818560208601614e5d565b6141ee81615054565b840191505092915050565b600061420482614b56565b61420e8185614b72565b935061421e818560208601614e5d565b61422781615054565b840191505092915050565b600061423d82614b56565b6142478185614b83565b9350614257818560208601614e5d565b80840191505092915050565b6000614270602283614b72565b915061427b82615065565b604082019050919050565b6000614293601383614b72565b915061429e826150b4565b602082019050919050565b60006142b6603283614b72565b91506142c1826150dd565b604082019050919050565b60006142d9602683614b72565b91506142e48261512c565b604082019050919050565b60006142fc601c83614b72565b91506143078261517b565b602082019050919050565b600061431f602483614b72565b915061432a826151a4565b604082019050919050565b6000614342601983614b72565b915061434d826151f3565b602082019050919050565b6000614365601283614b72565b91506143708261521c565b602082019050919050565b6000614388601a83614b72565b915061439382615245565b602082019050919050565b60006143ab602c83614b72565b91506143b68261526e565b604082019050919050565b60006143ce603883614b72565b91506143d9826152bd565b604082019050919050565b60006143f1602183614b72565b91506143fc8261530c565b604082019050919050565b6000614414602a83614b72565b915061441f8261535b565b604082019050919050565b6000614437602983614b72565b9150614442826153aa565b604082019050919050565b600061445a602083614b72565b9150614465826153f9565b602082019050919050565b600061447d602c83614b72565b915061448882615422565b604082019050919050565b60006144a0602083614b72565b91506144ab82615471565b602082019050919050565b60006144c3602983614b72565b91506144ce8261549a565b604082019050919050565b60006144e6602f83614b72565b91506144f1826154e9565b604082019050919050565b6000614509602183614b72565b915061451482615538565b604082019050919050565b600061452c601483614b72565b915061453782615587565b602082019050919050565b600061454f603183614b72565b915061455a826155b0565b604082019050919050565b6000614572601583614b72565b915061457d826155ff565b602082019050919050565b6000614595600e83614b72565b91506145a082615628565b602082019050919050565b60006145b8601b83614b72565b91506145c382615651565b602082019050919050565b6145d781614df7565b82525050565b6145e681614e25565b82525050565b6145f581614e3c565b82525050565b61460481614e2f565b82525050565b60006146168285614232565b91506146228284614232565b91508190509392505050565b600060208201905061464360008301846141a2565b92915050565b600060808201905061465e60008301876141a2565b61466b60208301866141a2565b61467860408301856145dd565b818103606083015261468a81846141c0565b905095945050505050565b60006020820190506146aa60008301846141b1565b92915050565b600060208201905081810360008301526146ca81846141f9565b905092915050565b600060208201905081810360008301526146eb81614263565b9050919050565b6000602082019050818103600083015261470b81614286565b9050919050565b6000602082019050818103600083015261472b816142a9565b9050919050565b6000602082019050818103600083015261474b816142cc565b9050919050565b6000602082019050818103600083015261476b816142ef565b9050919050565b6000602082019050818103600083015261478b81614312565b9050919050565b600060208201905081810360008301526147ab81614335565b9050919050565b600060208201905081810360008301526147cb81614358565b9050919050565b600060208201905081810360008301526147eb8161437b565b9050919050565b6000602082019050818103600083015261480b8161439e565b9050919050565b6000602082019050818103600083015261482b816143c1565b9050919050565b6000602082019050818103600083015261484b816143e4565b9050919050565b6000602082019050818103600083015261486b81614407565b9050919050565b6000602082019050818103600083015261488b8161442a565b9050919050565b600060208201905081810360008301526148ab8161444d565b9050919050565b600060208201905081810360008301526148cb81614470565b9050919050565b600060208201905081810360008301526148eb81614493565b9050919050565b6000602082019050818103600083015261490b816144b6565b9050919050565b6000602082019050818103600083015261492b816144d9565b9050919050565b6000602082019050818103600083015261494b816144fc565b9050919050565b6000602082019050818103600083015261496b8161451f565b9050919050565b6000602082019050818103600083015261498b81614542565b9050919050565b600060208201905081810360008301526149ab81614565565b9050919050565b600060208201905081810360008301526149cb81614588565b9050919050565b600060208201905081810360008301526149eb816145ab565b9050919050565b6000602082019050614a0760008301846145ce565b92915050565b6000604082019050614a2260008301856145ce565b614a2f60208301846145ec565b9392505050565b6000602082019050614a4b60008301846145dd565b92915050565b6000602082019050614a6660008301846145fb565b92915050565b6000614a76614a87565b9050614a828282614ec2565b919050565b6000604051905090565b600067ffffffffffffffff821115614aac57614aab615025565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ad857614ad7615025565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b0457614b03615025565b5b614b0d82615054565b9050602081019050919050565b600067ffffffffffffffff821115614b3557614b34615025565b5b614b3e82615054565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60008085851115614b9e57600080fd5b83861115614bab57600080fd5b6001850283019150848603905094509492505050565b6000614bcc82614df7565b9150614bd783614df7565b92508261ffff03821115614bee57614bed614f98565b5b828201905092915050565b6000614c0482614e25565b9150614c0f83614e25565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c4457614c43614f98565b5b828201905092915050565b6000614c5a82614e2f565b9150614c6583614e2f565b92508260ff03821115614c7b57614c7a614f98565b5b828201905092915050565b6000614c9182614e25565b9150614c9c83614e25565b925082614cac57614cab614fc7565b5b828204905092915050565b6000614cc282614e25565b9150614ccd83614e25565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0657614d05614f98565b5b828202905092915050565b6000614d1c82614df7565b9150614d2783614df7565b925082821015614d3a57614d39614f98565b5b828203905092915050565b6000614d5082614e25565b9150614d5b83614e25565b925082821015614d6e57614d6d614f98565b5b828203905092915050565b6000614d8482614e2f565b9150614d8f83614e2f565b925082821015614da257614da1614f98565b5b828203905092915050565b6000614db882614e05565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e4782614e2f565b9050919050565b82818337600083830152505050565b60005b83811015614e7b578082015181840152602081019050614e60565b83811115614e8a576000848401525b50505050565b60006002820490506001821680614ea857607f821691505b60208210811415614ebc57614ebb614ff6565b5b50919050565b614ecb82615054565b810181811067ffffffffffffffff82111715614eea57614ee9615025565b5b80604052505050565b6000614efe82614df7565b915061ffff821415614f1357614f12614f98565b5b600182019050919050565b6000614f2982614e25565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f5c57614f5b614f98565b5b600182019050919050565b6000614f7282614e25565b9150614f7d83614e25565b925082614f8d57614f8c614fc7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f46756e6374696f6e2063616e206f6e6c792062652063616c6c6564206279204960008201527f4d58000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642070726963652076616c756500000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4d696e7461626c653a20696e76616c6964207175616e74697479000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f596f752063616e206e6f7420627579206d6f7265207468616e20616c6c6f776560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f536570617261746f72206d757374206578697374000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f50726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b7f4e6f206d6f726520737570706c79000000000000000000000000000000000000600082015250565b7f596f752063616e206e6f74206d696e74206f6e2070726573616c650000000000600082015250565b61568381614dad565b811461568e57600080fd5b50565b61569a81614dbf565b81146156a557600080fd5b50565b6156b181614dcb565b81146156bc57600080fd5b50565b6156c881614df7565b81146156d357600080fd5b50565b6156df81614e25565b81146156ea57600080fd5b50565b6156f681614e2f565b811461570157600080fd5b5056fea26469706673582212202f8a6a24f9071844916e4bd7e4bf3d3395bd177413702e9a110c9f40ef51e66f64736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002600000000000000000000000005d4aa08db128a9960364e1ff270af6ab676d38ee0000000000000000000000005fdcca53617f4d2b9134b29090c87d01058e27e90000000000000000000000000000000000000000000000000000000000000010496d6d757461626c65204170657320580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054150455358000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6170692e74686561706573617265636f6d696e672e636f6d2f6f70656e7365612f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Immutable Apes X
Arg [1] : _ticker (string): APESX
Arg [2] : _price (uint256): 70000000000000000
Arg [3] : _totalSupply (uint16): 10000
Arg [4] : _maxTx (uint8): 5
Arg [5] : _maxPublic (uint8): 1
Arg [6] : baseURI_ (string): https://api.theapesarecoming.com/opensea/

-----Encoded View---------------
20 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 00000000000000000000000000000000000000000000000000f8b0a10e470000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [9] : 0000000000000000000000005d4aa08db128a9960364e1ff270af6ab676d38ee
Arg [10] : 0000000000000000000000005fdcca53617f4d2b9134b29090c87d01058e27e9
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [12] : 496d6d757461626c652041706573205800000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [14] : 4150455358000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [16] : 68747470733a2f2f6170692e74686561706573617265636f6d696e672e636f6d
Arg [17] : 2f6f70656e7365612f0000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38917:5692:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26630:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41478:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27575;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29134:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28657:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39241:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42882:809;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39153:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43993:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41299:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30024:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44497:109;;;;;;;;;;;;;:::i;:::-;;30434:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40306:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41093:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41947:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39266:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27269:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41386:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38961:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26999:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8265:94;;;;;;;;;;;;;:::i;:::-;;41586:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39185:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39210:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39121:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7614:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40754:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27744:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41804:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39097:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29427:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43699:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42084:790;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39067:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30690:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40976:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41206:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27919:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40668:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29793:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8514:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38992:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26630:305;26732:4;26784:25;26769:40;;;:11;:40;;;;:105;;;;26841:33;26826:48;;;:11;:48;;;;26769:105;:158;;;;26891:36;26915:11;26891:23;:36::i;:::-;26769:158;26749:178;;26630:305;;;:::o;41478:100::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41560:10:::1;41548:9;;:22;;;;;;;;;;;;;;;;;;41478:100:::0;:::o;27575:::-;27629:13;27662:5;27655:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27575:100;:::o;29134:221::-;29210:7;29238:16;29246:7;29238;:16::i;:::-;29230:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29323:15;:24;29339:7;29323:24;;;;;;;;;;;;;;;;;;;;;29316:31;;29134:221;;;:::o;28657:411::-;28738:13;28754:23;28769:7;28754:14;:23::i;:::-;28738:39;;28802:5;28796:11;;:2;:11;;;;28788:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28896:5;28880:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28905:37;28922:5;28929:12;:10;:12::i;:::-;28905:16;:37::i;:::-;28880:62;28858:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29039:21;29048:2;29052:7;29039:8;:21::i;:::-;28657:411;;;:::o;39241:18::-;;;;;;;;;;;;;:::o;42882:809::-;42935:16;42954:11;:23;42966:10;42954:23;;;;;;;;;;;;;;;;;;;;;;;;;42935:42;;42996:4;;;;;;;;;;;42988:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;43070:11;;;;;;;;;;;43042:39;;43065:1;43057:5;;;;;;;;;;;43049:4;43042:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;43034:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43147:11;;;;;;;;;;;43119:39;;43142:1;43134:5;;;;;;;;;;;43126:4;43119:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;43111:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43217:9;;;;;;;;;;;43196:30;;43209:4;43196:10;:17;;;;:::i;:::-;:30;;;;43188:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43291:5;;;;;;;;;;;43283:13;;:4;:13;;;;:25;;;;43307:1;43300:4;:8;;;43283:25;43275:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;43386:4;43378:12;;:5;;:12;;;;:::i;:::-;43365:9;:25;;43357:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;43479:4;43453:11;:23;43465:10;43453:23;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;43427:11;:23;43439:10;43427:23;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;43504:14;;;;;;;;;;;43496:32;;:43;43529:9;43496:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43550:21;43574:5;;;;;;;;;;;43550:29;;43613:4;43606:12;;43598:5;;;;;;;;;;;:20;;;;:::i;:::-;43590:5;;:28;;;;;;;;;;;;;;;;;;43650:10;43634:49;;;43662:14;43678:4;43634:49;;;;;;;:::i;:::-;;;;;;;;42882:809;;;:::o;39153:25::-;;;;;;;;;;;;;:::o;43993:349::-;40598:3;;;;;;;;;;;40584:17;;:10;:17;;;40576:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44152:1:::1;44140:8;:13;44132:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;44196:10;44208:22:::0;44234:26:::1;44248:11;;44234:13;:26::i;:::-;44195:65;;;;44271:29;44280:4;44286:2;44290:9;44271:8;:29::i;:::-;44325:4;44318:16;;;44331:2;44318:16;;;;;;:::i;:::-;;;;;;;;40651:1;;43993:349:::0;;;;:::o;41299:79::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41364:6:::1;41357:4;;:13;;;;;;;;;;;;;;;;;;41299:79:::0;:::o;30024:339::-;30219:41;30238:12;:10;:12::i;:::-;30252:7;30219:18;:41::i;:::-;30211:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30327:28;30337:4;30343:2;30347:7;30327:9;:28::i;:::-;30024:339;;;:::o;44497:109::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44555:10:::1;44547:28;;:51;44576:21;44547:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44497:109::o:0;30434:185::-;30572:39;30589:4;30595:2;30599:7;30572:39;;;;;;;;;;;;:16;:39::i;:::-;30434:185;;;:::o;40306:107::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40397:8:::1;40378:16;:27;;;;;;;;;;;;:::i;:::-;;40306:107:::0;:::o;41093:105::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41180:10:::1;41166:11;;:24;;;;;;;;;;;;;;;;;;41093:105:::0;:::o;41947:129::-;42023:5;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42048:11:::1;:20;42060:7;42048:20;;;;;;;;;;;;;;;;;;;;;;;;;42041:27;;41947:129:::0;;;:::o;39266:29::-;;;;;;;;;;;;;:::o;27269:239::-;27341:7;27361:13;27377:7;:16;27385:7;27377:16;;;;;;;;;;;;;;;;;;;;;27361:32;;27429:1;27412:19;;:5;:19;;;;27404:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27495:5;27488:12;;;27269:239;;;:::o;41386:84::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41456:6:::1;41448:5;;:14;;;;;;;;;;;;;;;;;;41386:84:::0;:::o;38961:24::-;;;;;;;;;;;;;:::o;26999:208::-;27071:7;27116:1;27099:19;;:5;:19;;;;27091:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27183:9;:16;27193:5;27183:16;;;;;;;;;;;;;;;;27176:23;;26999:208;;;:::o;8265:94::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8330:21:::1;8348:1;8330:9;:21::i;:::-;8265:94::o:0;41586:210::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41698:8:::1;41693:96;41712:2;:9;41708:1;:13;;;41693:96;;;41767:7;41775:1;41767:10;;;;;;;;;;;;;;;;;;;;;;;;41743:14;:21;41758:2;41761:1;41758:5;;;;;;;;;;;;;;;;;;;;;;;;41743:21;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;41723:3;;;;;:::i;:::-;;;;41693:96;;;;41586:210:::0;;:::o;39185:18::-;;;;;;;;;;;;;:::o;39210:22::-;;;;;;;;;;;;;:::o;39121:25::-;;;;;;;;;;;;;:::o;7614:87::-;7660:7;7687:6;;;;;;;;;;;7680:13;;7614:87;:::o;40754:89::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40826:9:::1;40818:5;:17;;;;40754:89:::0;:::o;27744:104::-;27800:13;27833:7;27826:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27744:104;:::o;41804:135::-;41883:5;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41908:14:::1;:23;41923:7;41908:23;;;;;;;;;;;;;;;;;;;;;;;;;41901:30;;41804:135:::0;;;:::o;39097:17::-;;;;:::o;29427:295::-;29542:12;:10;:12::i;:::-;29530:24;;:8;:24;;;;29522:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29642:8;29597:18;:32;29616:12;:10;:12::i;:::-;29597:32;;;;;;;;;;;;;;;:42;29630:8;29597:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29695:8;29666:48;;29681:12;:10;:12::i;:::-;29666:48;;;29705:8;29666:48;;;;;;:::i;:::-;;;;;;;;29427:295;;:::o;43699:286::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43808:11:::1;;;;;;;;;;;43780:39;;43803:1;43795:5;;;;;;;;;;;43787:4;43780:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;43772:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43851:21;43875:5;;;;;;;;;;;43851:29;;43914:4;43907:12;;43899:5;;;;;;;;;;;:20;;;;:::i;:::-;43891:5;;:28;;;;;;;;;;;;;;;;;;43951:3;43935:42;;;43956:14;43972:4;43935:42;;;;;;;:::i;:::-;;;;;;;;7905:1;43699:286:::0;;:::o;42084:790::-;42144:17;42164:14;:26;42179:10;42164:26;;;;;;;;;;;;;;;;;;;;;;;;;42144:46;;42209:7;;;;;;;;;;;42201:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;42289:11;;;;;;;;;;;42261:39;;42284:1;42276:5;;;;;;;;;;;42268:4;42261:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;42253:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42366:11;;;;;;;;;;;42338:39;;42361:1;42353:5;;;;;;;;;;;42345:4;42338:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;42330:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42423:11;42415:19;;:4;:19;;;;42407:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42505:1;42491:11;:15;;;42483:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42578:4;42570:12;;:5;;:12;;;;:::i;:::-;42557:9;:25;;42549:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;42662:4;42648:11;:18;;;;:::i;:::-;42619:14;:26;42634:10;42619:26;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;42687:14;;;;;;;;;;;42679:32;;:43;42712:9;42679:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42733:21;42757:5;;;;;;;;;;;42733:29;;42796:4;42789:12;;42781:5;;;;;;;;;;;:20;;;;:::i;:::-;42773:5;;:28;;;;;;;;;;;;;;;;;;42833:10;42817:49;;;42845:14;42861:4;42817:49;;;;;;;:::i;:::-;;;;;;;;42084:790;;;:::o;39067:23::-;;;;;;;;;;;;;:::o;30690:328::-;30865:41;30884:12;:10;:12::i;:::-;30898:7;30865:18;:41::i;:::-;30857:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30971:39;30985:4;30991:2;30995:7;31004:5;30971:13;:39::i;:::-;30690:328;;;;:::o;40976:109::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41065:12:::1;41051:11;;:26;;;;;;;;;;;;;;;;;;40976:109:::0;:::o;41206:85::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41277:6:::1;41267:7;;:16;;;;;;;;;;;;;;;;;;41206:85:::0;:::o;27919:334::-;27992:13;28026:16;28034:7;28026;:16::i;:::-;28018:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28107:21;28131:10;:8;:10::i;:::-;28107:34;;28183:1;28165:7;28159:21;:25;:86;;;;;;;;;;;;;;;;;28211:7;28220:18;:7;:16;:18::i;:::-;28194:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28159:86;28152:93;;;27919:334;;;:::o;40668:78::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40734:4:::1;40728:3;;:10;;;;;;;;;;;;;;;;;;40668:78:::0;:::o;29793:164::-;29890:4;29914:18;:25;29933:5;29914:25;;;;;;;;;;;;;;;:35;29940:8;29914:35;;;;;;;;;;;;;;;;;;;;;;;;;29907:42;;29793:164;;;;:::o;8514:192::-;7845:12;:10;:12::i;:::-;7834:23;;:7;:5;:7::i;:::-;:23;;;7826:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8623:1:::1;8603:22;;:8;:22;;;;8595:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8679:19;8689:8;8679:9;:19::i;:::-;8514:192:::0;:::o;38992:26::-;;;;;;;;;;;;;:::o;19600:157::-;19685:4;19724:25;19709:40;;;:11;:40;;;;19702:47;;19600:157;;;:::o;6402:98::-;6455:7;6482:10;6475:17;;6402:98;:::o;32528:127::-;32593:4;32645:1;32617:30;;:7;:16;32625:7;32617:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32610:37;;32528:127;;;:::o;36510:174::-;36612:2;36585:15;:24;36601:7;36585:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36668:7;36664:2;36630:46;;36639:23;36654:7;36639:14;:23::i;:::-;36630:46;;;;;;;;;;;;36510:174;;:::o;3080:622::-;3166:7;3175:12;3205;3220:27;3234:4;;3220:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3245:1;3220:13;:27::i;:::-;3205:42;;3275:1;3266:5;:10;;3258:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;3361:15;3379:40;3392:4;;3397:1;3392:26;3416:1;3407:5;3399:18;;;;:::i;:::-;3392:26;;;;;;;:::i;:::-;3379:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:40::i;:::-;3361:58;;3430:23;3487:1;3478:5;3456:4;;:11;;:28;;;;:::i;:::-;:32;;;;:::i;:::-;3430:58;;3522:1;3503:15;:20;3499:80;;;3548:7;3557:9;;;;;;;;;;;;3540:27;;;;;;;;;3499:80;3589:24;;3616:4;;3638:1;3629:5;3621:18;;;;:::i;:::-;3616:40;3654:1;3640:4;;:11;;:15;;;;:::i;:::-;3616:40;;;;;;;:::i;:::-;3589:67;;;;3675:7;3684:9;;3667:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3080:622;;;;;;:::o;44350:139::-;44462:19;44472:4;44478:2;44462:9;:19::i;:::-;44350:139;;;:::o;32822:348::-;32915:4;32940:16;32948:7;32940;:16::i;:::-;32932:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33016:13;33032:23;33047:7;33032:14;:23::i;:::-;33016:39;;33085:5;33074:16;;:7;:16;;;:51;;;;33118:7;33094:31;;:20;33106:7;33094:11;:20::i;:::-;:31;;;33074:51;:87;;;;33129:32;33146:5;33153:7;33129:16;:32::i;:::-;33074:87;33066:96;;;32822:348;;;;:::o;35814:578::-;35973:4;35946:31;;:23;35961:7;35946:14;:23::i;:::-;:31;;;35938:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36056:1;36042:16;;:2;:16;;;;36034:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36112:39;36133:4;36139:2;36143:7;36112:20;:39::i;:::-;36216:29;36233:1;36237:7;36216:8;:29::i;:::-;36277:1;36258:9;:15;36268:4;36258:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36306:1;36289:9;:13;36299:2;36289:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36337:2;36318:7;:16;36326:7;36318:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36376:7;36372:2;36357:27;;36366:4;36357:27;;;;;;;;;;;;35814:578;;;:::o;8714:173::-;8770:16;8789:6;;;;;;;;;;;8770:25;;8815:8;8806:6;;:17;;;;;;;;;;;;;;;;;;8870:8;8839:40;;8860:8;8839:40;;;;;;;;;;;;8714:173;;:::o;31900:315::-;32057:28;32067:4;32073:2;32077:7;32057:9;:28::i;:::-;32104:48;32127:4;32133:2;32137:7;32146:5;32104:22;:48::i;:::-;32096:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31900:315;;;;:::o;40421:117::-;40481:13;40514:16;40507:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40421:117;:::o;4018:723::-;4074:13;4304:1;4295:5;:10;4291:53;;;4322:10;;;;;;;;;;;;;;;;;;;;;4291:53;4354:12;4369:5;4354:20;;4385:14;4410:78;4425:1;4417:4;:9;4410:78;;4443:8;;;;;:::i;:::-;;;;4474:2;4466:10;;;;;:::i;:::-;;;4410:78;;;4498:19;4530:6;4520:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4498:39;;4548:154;4564:1;4555:5;:10;4548:154;;4592:1;4582:11;;;;;:::i;:::-;;;4659:2;4651:5;:10;;;;:::i;:::-;4638:2;:24;;;;:::i;:::-;4625:39;;4608:6;4615;4608:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;4688:2;4679:11;;;;;:::i;:::-;;;4548:154;;;4726:6;4712:21;;;;;4018:723;;;;:::o;1700:436::-;1833:6;1852:24;1885:6;1852:40;;1934:1;1912:11;:18;:23;1905:31;;;;;;;;;;;;1954:9;1966:7;1954:19;;1949:158;1979:5;:12;1975:1;:16;1949:158;;;2029:11;2041:1;2029:14;;;;;;;;;;;;;;;;;;;;;;;;2017:26;;;:5;2023:1;2017:8;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;2013:83;;;2078:1;2064:16;;;;;;2013:83;1993:3;;;;;:::i;:::-;;;;1949:158;;;;2126:2;2119:9;;;1700:436;;;;;;:::o;2530:345::-;2585:7;2605:14;2622:1;2605:18;;2639:9;2634:210;2658:1;:8;2654:1;:12;2634:210;;;2688:11;2716:1;2718;2716:4;;;;;;;;;;;;;;;;;;;;;;;;2710:11;;2702:20;;2688:34;;2748:2;2741:3;:9;;:22;;;;;2761:2;2754:3;:9;;2741:22;2737:96;;;2814:2;2808:3;:8;;;;:::i;:::-;2802:2;2793:6;:11;;;;:::i;:::-;:24;;;;:::i;:::-;2784:33;;2737:96;2634:210;2668:3;;;;;:::i;:::-;;;;2634:210;;;;2861:6;2854:13;;;2530:345;;;:::o;33512:110::-;33588:26;33598:2;33602:7;33588:26;;;;;;;;;;;;:9;:26::i;:::-;33512:110;;:::o;38620:126::-;;;;:::o;37249:799::-;37404:4;37425:15;:2;:13;;;:15::i;:::-;37421:620;;;37477:2;37461:36;;;37498:12;:10;:12::i;:::-;37512:4;37518:7;37527:5;37461:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37457:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37720:1;37703:6;:13;:18;37699:272;;;37746:60;;;;;;;;;;:::i;:::-;;;;;;;;37699:272;37921:6;37915:13;37906:6;37902:2;37898:15;37891:38;37457:529;37594:41;;;37584:51;;;:6;:51;;;;37577:58;;;;;37421:620;38025:4;38018:11;;37249:799;;;;;;;:::o;33849:321::-;33979:18;33985:2;33989:7;33979:5;:18::i;:::-;34030:54;34061:1;34065:2;34069:7;34078:5;34030:22;:54::i;:::-;34008:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33849:321;;;:::o;9660:387::-;9720:4;9928:12;9995:7;9983:20;9975:28;;10038:1;10031:4;:8;10024:15;;;9660:387;;;:::o;34506:382::-;34600:1;34586:16;;:2;:16;;;;34578:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34659:16;34667:7;34659;:16::i;:::-;34658:17;34650:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34721:45;34750:1;34754:2;34758:7;34721:20;:45::i;:::-;34796:1;34779:9;:13;34789:2;34779:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34827:2;34808:7;:16;34816:7;34808:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34872:7;34868:2;34847:33;;34864:1;34847:33;;;;;;;;;;;;34506:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;700:649::-;794:5;819:79;835:62;890:6;835:62;:::i;:::-;819:79;:::i;:::-;810:88;;918:5;947:6;940:5;933:21;981:4;974:5;970:16;963:23;;1007:6;1057:3;1049:4;1041:6;1037:17;1032:3;1028:27;1025:36;1022:2;;;1086:1;1083;1076:12;1022:2;1122:1;1107:236;1132:6;1129:1;1126:13;1107:236;;;1200:3;1229:35;1260:3;1248:10;1229:35;:::i;:::-;1224:3;1217:48;1294:4;1289:3;1285:14;1278:21;;1328:4;1323:3;1319:14;1312:21;;1167:176;1154:1;1151;1147:9;1142:14;;1107:236;;;1111:14;800:549;;;;;;;:::o;1355:343::-;1432:5;1457:65;1473:48;1514:6;1473:48;:::i;:::-;1457:65;:::i;:::-;1448:74;;1545:6;1538:5;1531:21;1583:4;1576:5;1572:16;1621:3;1612:6;1607:3;1603:16;1600:25;1597:2;;;1638:1;1635;1628:12;1597:2;1651:41;1685:6;1680:3;1675;1651:41;:::i;:::-;1438:260;;;;;;:::o;1704:345::-;1782:5;1807:66;1823:49;1865:6;1823:49;:::i;:::-;1807:66;:::i;:::-;1798:75;;1896:6;1889:5;1882:21;1934:4;1927:5;1923:16;1972:3;1963:6;1958:3;1954:16;1951:25;1948:2;;;1989:1;1986;1979:12;1948:2;2002:41;2036:6;2031:3;2026;2002:41;:::i;:::-;1788:261;;;;;;:::o;2055:139::-;2101:5;2139:6;2126:20;2117:29;;2155:33;2182:5;2155:33;:::i;:::-;2107:87;;;;:::o;2217:303::-;2288:5;2337:3;2330:4;2322:6;2318:17;2314:27;2304:2;;2355:1;2352;2345:12;2304:2;2395:6;2382:20;2420:94;2510:3;2502:6;2495:4;2487:6;2483:17;2420:94;:::i;:::-;2411:103;;2294:226;;;;;:::o;2541:299::-;2610:5;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:92;2830:3;2822:6;2815:4;2807:6;2803:17;2742:92;:::i;:::-;2733:101;;2616:224;;;;;:::o;2846:133::-;2889:5;2927:6;2914:20;2905:29;;2943:30;2967:5;2943:30;:::i;:::-;2895:84;;;;:::o;2985:137::-;3030:5;3068:6;3055:20;3046:29;;3084:32;3110:5;3084:32;:::i;:::-;3036:86;;;;:::o;3128:141::-;3184:5;3215:6;3209:13;3200:22;;3231:32;3257:5;3231:32;:::i;:::-;3190:79;;;;:::o;3288:351::-;3345:8;3355:6;3405:3;3398:4;3390:6;3386:17;3382:27;3372:2;;3423:1;3420;3413:12;3372:2;3459:6;3446:20;3436:30;;3489:18;3481:6;3478:30;3475:2;;;3521:1;3518;3511:12;3475:2;3558:4;3550:6;3546:17;3534:29;;3612:3;3604:4;3596:6;3592:17;3582:8;3578:32;3575:41;3572:2;;;3629:1;3626;3619:12;3572:2;3362:277;;;;;:::o;3658:271::-;3713:5;3762:3;3755:4;3747:6;3743:17;3739:27;3729:2;;3780:1;3777;3770:12;3729:2;3820:6;3807:20;3845:78;3919:3;3911:6;3904:4;3896:6;3892:17;3845:78;:::i;:::-;3836:87;;3719:210;;;;;:::o;3949:273::-;4005:5;4054:3;4047:4;4039:6;4035:17;4031:27;4021:2;;4072:1;4069;4062:12;4021:2;4112:6;4099:20;4137:79;4212:3;4204:6;4197:4;4189:6;4185:17;4137:79;:::i;:::-;4128:88;;4011:211;;;;;:::o;4228:137::-;4273:5;4311:6;4298:20;4289:29;;4327:32;4353:5;4327:32;:::i;:::-;4279:86;;;;:::o;4371:139::-;4417:5;4455:6;4442:20;4433:29;;4471:33;4498:5;4471:33;:::i;:::-;4423:87;;;;:::o;4516:135::-;4560:5;4598:6;4585:20;4576:29;;4614:31;4639:5;4614:31;:::i;:::-;4566:85;;;;:::o;4657:262::-;4716:6;4765:2;4753:9;4744:7;4740:23;4736:32;4733:2;;;4781:1;4778;4771:12;4733:2;4824:1;4849:53;4894:7;4885:6;4874:9;4870:22;4849:53;:::i;:::-;4839:63;;4795:117;4723:196;;;;:::o;4925:407::-;4993:6;5001;5050:2;5038:9;5029:7;5025:23;5021:32;5018:2;;;5066:1;5063;5056:12;5018:2;5109:1;5134:53;5179:7;5170:6;5159:9;5155:22;5134:53;:::i;:::-;5124:63;;5080:117;5236:2;5262:53;5307:7;5298:6;5287:9;5283:22;5262:53;:::i;:::-;5252:63;;5207:118;5008:324;;;;;:::o;5338:552::-;5415:6;5423;5431;5480:2;5468:9;5459:7;5455:23;5451:32;5448:2;;;5496:1;5493;5486:12;5448:2;5539:1;5564:53;5609:7;5600:6;5589:9;5585:22;5564:53;:::i;:::-;5554:63;;5510:117;5666:2;5692:53;5737:7;5728:6;5717:9;5713:22;5692:53;:::i;:::-;5682:63;;5637:118;5794:2;5820:53;5865:7;5856:6;5845:9;5841:22;5820:53;:::i;:::-;5810:63;;5765:118;5438:452;;;;;:::o;5896:809::-;5991:6;5999;6007;6015;6064:3;6052:9;6043:7;6039:23;6035:33;6032:2;;;6081:1;6078;6071:12;6032:2;6124:1;6149:53;6194:7;6185:6;6174:9;6170:22;6149:53;:::i;:::-;6139:63;;6095:117;6251:2;6277:53;6322:7;6313:6;6302:9;6298:22;6277:53;:::i;:::-;6267:63;;6222:118;6379:2;6405:53;6450:7;6441:6;6430:9;6426:22;6405:53;:::i;:::-;6395:63;;6350:118;6535:2;6524:9;6520:18;6507:32;6566:18;6558:6;6555:30;6552:2;;;6598:1;6595;6588:12;6552:2;6626:62;6680:7;6671:6;6660:9;6656:22;6626:62;:::i;:::-;6616:72;;6478:220;6022:683;;;;;;;:::o;6711:401::-;6776:6;6784;6833:2;6821:9;6812:7;6808:23;6804:32;6801:2;;;6849:1;6846;6839:12;6801:2;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;7019:2;7045:50;7087:7;7078:6;7067:9;7063:22;7045:50;:::i;:::-;7035:60;;6990:115;6791:321;;;;;:::o;7118:407::-;7186:6;7194;7243:2;7231:9;7222:7;7218:23;7214:32;7211:2;;;7259:1;7256;7249:12;7211:2;7302:1;7327:53;7372:7;7363:6;7352:9;7348:22;7327:53;:::i;:::-;7317:63;;7273:117;7429:2;7455:53;7500:7;7491:6;7480:9;7476:22;7455:53;:::i;:::-;7445:63;;7400:118;7201:324;;;;;:::o;7531:683::-;7619:6;7627;7635;7643;7692:2;7680:9;7671:7;7667:23;7663:32;7660:2;;;7708:1;7705;7698:12;7660:2;7751:1;7776:53;7821:7;7812:6;7801:9;7797:22;7776:53;:::i;:::-;7766:63;;7722:117;7878:2;7904:53;7949:7;7940:6;7929:9;7925:22;7904:53;:::i;:::-;7894:63;;7849:118;8034:2;8023:9;8019:18;8006:32;8065:18;8057:6;8054:30;8051:2;;;8097:1;8094;8087:12;8051:2;8133:64;8189:7;8180:6;8169:9;8165:22;8133:64;:::i;:::-;8115:82;;;;7977:230;7650:564;;;;;;;:::o;8220:403::-;8286:6;8294;8343:2;8331:9;8322:7;8318:23;8314:32;8311:2;;;8359:1;8356;8349:12;8311:2;8402:1;8427:53;8472:7;8463:6;8452:9;8448:22;8427:53;:::i;:::-;8417:63;;8373:117;8529:2;8555:51;8598:7;8589:6;8578:9;8574:22;8555:51;:::i;:::-;8545:61;;8500:116;8301:322;;;;;:::o;8629:689::-;8745:6;8753;8802:2;8790:9;8781:7;8777:23;8773:32;8770:2;;;8818:1;8815;8808:12;8770:2;8889:1;8878:9;8874:17;8861:31;8919:18;8911:6;8908:30;8905:2;;;8951:1;8948;8941:12;8905:2;8979:78;9049:7;9040:6;9029:9;9025:22;8979:78;:::i;:::-;8969:88;;8832:235;9134:2;9123:9;9119:18;9106:32;9165:18;9157:6;9154:30;9151:2;;;9197:1;9194;9187:12;9151:2;9225:76;9293:7;9284:6;9273:9;9269:22;9225:76;:::i;:::-;9215:86;;9077:234;8760:558;;;;;:::o;9324:256::-;9380:6;9429:2;9417:9;9408:7;9404:23;9400:32;9397:2;;;9445:1;9442;9435:12;9397:2;9488:1;9513:50;9555:7;9546:6;9535:9;9531:22;9513:50;:::i;:::-;9503:60;;9459:114;9387:193;;;;:::o;9586:260::-;9644:6;9693:2;9681:9;9672:7;9668:23;9664:32;9661:2;;;9709:1;9706;9699:12;9661:2;9752:1;9777:52;9821:7;9812:6;9801:9;9797:22;9777:52;:::i;:::-;9767:62;;9723:116;9651:195;;;;:::o;9852:282::-;9921:6;9970:2;9958:9;9949:7;9945:23;9941:32;9938:2;;;9986:1;9983;9976:12;9938:2;10029:1;10054:63;10109:7;10100:6;10089:9;10085:22;10054:63;:::i;:::-;10044:73;;10000:127;9928:206;;;;:::o;10140:375::-;10209:6;10258:2;10246:9;10237:7;10233:23;10229:32;10226:2;;;10274:1;10271;10264:12;10226:2;10345:1;10334:9;10330:17;10317:31;10375:18;10367:6;10364:30;10361:2;;;10407:1;10404;10397:12;10361:2;10435:63;10490:7;10481:6;10470:9;10466:22;10435:63;:::i;:::-;10425:73;;10288:220;10216:299;;;;:::o;10521:260::-;10579:6;10628:2;10616:9;10607:7;10603:23;10599:32;10596:2;;;10644:1;10641;10634:12;10596:2;10687:1;10712:52;10756:7;10747:6;10736:9;10732:22;10712:52;:::i;:::-;10702:62;;10658:116;10586:195;;;;:::o;10787:262::-;10846:6;10895:2;10883:9;10874:7;10870:23;10866:32;10863:2;;;10911:1;10908;10901:12;10863:2;10954:1;10979:53;11024:7;11015:6;11004:9;11000:22;10979:53;:::i;:::-;10969:63;;10925:117;10853:196;;;;:::o;11055:258::-;11112:6;11161:2;11149:9;11140:7;11136:23;11132:32;11129:2;;;11177:1;11174;11167:12;11129:2;11220:1;11245:51;11288:7;11279:6;11268:9;11264:22;11245:51;:::i;:::-;11235:61;;11191:115;11119:194;;;;:::o;11319:118::-;11406:24;11424:5;11406:24;:::i;:::-;11401:3;11394:37;11384:53;;:::o;11443:109::-;11524:21;11539:5;11524:21;:::i;:::-;11519:3;11512:34;11502:50;;:::o;11558:360::-;11644:3;11672:38;11704:5;11672:38;:::i;:::-;11726:70;11789:6;11784:3;11726:70;:::i;:::-;11719:77;;11805:52;11850:6;11845:3;11838:4;11831:5;11827:16;11805:52;:::i;:::-;11882:29;11904:6;11882:29;:::i;:::-;11877:3;11873:39;11866:46;;11648:270;;;;;:::o;11924:364::-;12012:3;12040:39;12073:5;12040:39;:::i;:::-;12095:71;12159:6;12154:3;12095:71;:::i;:::-;12088:78;;12175:52;12220:6;12215:3;12208:4;12201:5;12197:16;12175:52;:::i;:::-;12252:29;12274:6;12252:29;:::i;:::-;12247:3;12243:39;12236:46;;12016:272;;;;;:::o;12294:377::-;12400:3;12428:39;12461:5;12428:39;:::i;:::-;12483:89;12565:6;12560:3;12483:89;:::i;:::-;12476:96;;12581:52;12626:6;12621:3;12614:4;12607:5;12603:16;12581:52;:::i;:::-;12658:6;12653:3;12649:16;12642:23;;12404:267;;;;;:::o;12677:366::-;12819:3;12840:67;12904:2;12899:3;12840:67;:::i;:::-;12833:74;;12916:93;13005:3;12916:93;:::i;:::-;13034:2;13029:3;13025:12;13018:19;;12823:220;;;:::o;13049:366::-;13191:3;13212:67;13276:2;13271:3;13212:67;:::i;:::-;13205:74;;13288:93;13377:3;13288:93;:::i;:::-;13406:2;13401:3;13397:12;13390:19;;13195:220;;;:::o;13421:366::-;13563:3;13584:67;13648:2;13643:3;13584:67;:::i;:::-;13577:74;;13660:93;13749:3;13660:93;:::i;:::-;13778:2;13773:3;13769:12;13762:19;;13567:220;;;:::o;13793:366::-;13935:3;13956:67;14020:2;14015:3;13956:67;:::i;:::-;13949:74;;14032:93;14121:3;14032:93;:::i;:::-;14150:2;14145:3;14141:12;14134:19;;13939:220;;;:::o;14165:366::-;14307:3;14328:67;14392:2;14387:3;14328:67;:::i;:::-;14321:74;;14404:93;14493:3;14404:93;:::i;:::-;14522:2;14517:3;14513:12;14506:19;;14311:220;;;:::o;14537:366::-;14679:3;14700:67;14764:2;14759:3;14700:67;:::i;:::-;14693:74;;14776:93;14865:3;14776:93;:::i;:::-;14894:2;14889:3;14885:12;14878:19;;14683:220;;;:::o;14909:366::-;15051:3;15072:67;15136:2;15131:3;15072:67;:::i;:::-;15065:74;;15148:93;15237:3;15148:93;:::i;:::-;15266:2;15261:3;15257:12;15250:19;;15055:220;;;:::o;15281:366::-;15423:3;15444:67;15508:2;15503:3;15444:67;:::i;:::-;15437:74;;15520:93;15609:3;15520:93;:::i;:::-;15638:2;15633:3;15629:12;15622:19;;15427:220;;;:::o;15653:366::-;15795:3;15816:67;15880:2;15875:3;15816:67;:::i;:::-;15809:74;;15892:93;15981:3;15892:93;:::i;:::-;16010:2;16005:3;16001:12;15994:19;;15799:220;;;:::o;16025:366::-;16167:3;16188:67;16252:2;16247:3;16188:67;:::i;:::-;16181:74;;16264:93;16353:3;16264:93;:::i;:::-;16382:2;16377:3;16373:12;16366:19;;16171:220;;;:::o;16397:366::-;16539:3;16560:67;16624:2;16619:3;16560:67;:::i;:::-;16553:74;;16636:93;16725:3;16636:93;:::i;:::-;16754:2;16749:3;16745:12;16738:19;;16543:220;;;:::o;16769:366::-;16911:3;16932:67;16996:2;16991:3;16932:67;:::i;:::-;16925:74;;17008:93;17097:3;17008:93;:::i;:::-;17126:2;17121:3;17117:12;17110:19;;16915:220;;;:::o;17141:366::-;17283:3;17304:67;17368:2;17363:3;17304:67;:::i;:::-;17297:74;;17380:93;17469:3;17380:93;:::i;:::-;17498:2;17493:3;17489:12;17482:19;;17287:220;;;:::o;17513:366::-;17655:3;17676:67;17740:2;17735:3;17676:67;:::i;:::-;17669:74;;17752:93;17841:3;17752:93;:::i;:::-;17870:2;17865:3;17861:12;17854:19;;17659:220;;;:::o;17885:366::-;18027:3;18048:67;18112:2;18107:3;18048:67;:::i;:::-;18041:74;;18124:93;18213:3;18124:93;:::i;:::-;18242:2;18237:3;18233:12;18226:19;;18031:220;;;:::o;18257:366::-;18399:3;18420:67;18484:2;18479:3;18420:67;:::i;:::-;18413:74;;18496:93;18585:3;18496:93;:::i;:::-;18614:2;18609:3;18605:12;18598:19;;18403:220;;;:::o;18629:366::-;18771:3;18792:67;18856:2;18851:3;18792:67;:::i;:::-;18785:74;;18868:93;18957:3;18868:93;:::i;:::-;18986:2;18981:3;18977:12;18970:19;;18775:220;;;:::o;19001:366::-;19143:3;19164:67;19228:2;19223:3;19164:67;:::i;:::-;19157:74;;19240:93;19329:3;19240:93;:::i;:::-;19358:2;19353:3;19349:12;19342:19;;19147:220;;;:::o;19373:366::-;19515:3;19536:67;19600:2;19595:3;19536:67;:::i;:::-;19529:74;;19612:93;19701:3;19612:93;:::i;:::-;19730:2;19725:3;19721:12;19714:19;;19519:220;;;:::o;19745:366::-;19887:3;19908:67;19972:2;19967:3;19908:67;:::i;:::-;19901:74;;19984:93;20073:3;19984:93;:::i;:::-;20102:2;20097:3;20093:12;20086:19;;19891:220;;;:::o;20117:366::-;20259:3;20280:67;20344:2;20339:3;20280:67;:::i;:::-;20273:74;;20356:93;20445:3;20356:93;:::i;:::-;20474:2;20469:3;20465:12;20458:19;;20263:220;;;:::o;20489:366::-;20631:3;20652:67;20716:2;20711:3;20652:67;:::i;:::-;20645:74;;20728:93;20817:3;20728:93;:::i;:::-;20846:2;20841:3;20837:12;20830:19;;20635:220;;;:::o;20861:366::-;21003:3;21024:67;21088:2;21083:3;21024:67;:::i;:::-;21017:74;;21100:93;21189:3;21100:93;:::i;:::-;21218:2;21213:3;21209:12;21202:19;;21007:220;;;:::o;21233:366::-;21375:3;21396:67;21460:2;21455:3;21396:67;:::i;:::-;21389:74;;21472:93;21561:3;21472:93;:::i;:::-;21590:2;21585:3;21581:12;21574:19;;21379:220;;;:::o;21605:366::-;21747:3;21768:67;21832:2;21827:3;21768:67;:::i;:::-;21761:74;;21844:93;21933:3;21844:93;:::i;:::-;21962:2;21957:3;21953:12;21946:19;;21751:220;;;:::o;21977:115::-;22062:23;22079:5;22062:23;:::i;:::-;22057:3;22050:36;22040:52;;:::o;22098:118::-;22185:24;22203:5;22185:24;:::i;:::-;22180:3;22173:37;22163:53;;:::o;22222:125::-;22306:34;22334:5;22306:34;:::i;:::-;22301:3;22294:47;22284:63;;:::o;22353:112::-;22436:22;22452:5;22436:22;:::i;:::-;22431:3;22424:35;22414:51;;:::o;22471:435::-;22651:3;22673:95;22764:3;22755:6;22673:95;:::i;:::-;22666:102;;22785:95;22876:3;22867:6;22785:95;:::i;:::-;22778:102;;22897:3;22890:10;;22655:251;;;;;:::o;22912:222::-;23005:4;23043:2;23032:9;23028:18;23020:26;;23056:71;23124:1;23113:9;23109:17;23100:6;23056:71;:::i;:::-;23010:124;;;;:::o;23140:640::-;23335:4;23373:3;23362:9;23358:19;23350:27;;23387:71;23455:1;23444:9;23440:17;23431:6;23387:71;:::i;:::-;23468:72;23536:2;23525:9;23521:18;23512:6;23468:72;:::i;:::-;23550;23618:2;23607:9;23603:18;23594:6;23550:72;:::i;:::-;23669:9;23663:4;23659:20;23654:2;23643:9;23639:18;23632:48;23697:76;23768:4;23759:6;23697:76;:::i;:::-;23689:84;;23340:440;;;;;;;:::o;23786:210::-;23873:4;23911:2;23900:9;23896:18;23888:26;;23924:65;23986:1;23975:9;23971:17;23962:6;23924:65;:::i;:::-;23878:118;;;;:::o;24002:313::-;24115:4;24153:2;24142:9;24138:18;24130:26;;24202:9;24196:4;24192:20;24188:1;24177:9;24173:17;24166:47;24230:78;24303:4;24294:6;24230:78;:::i;:::-;24222:86;;24120:195;;;;:::o;24321:419::-;24487:4;24525:2;24514:9;24510:18;24502:26;;24574:9;24568:4;24564:20;24560:1;24549:9;24545:17;24538:47;24602:131;24728:4;24602:131;:::i;:::-;24594:139;;24492:248;;;:::o;24746:419::-;24912:4;24950:2;24939:9;24935:18;24927:26;;24999:9;24993:4;24989:20;24985:1;24974:9;24970:17;24963:47;25027:131;25153:4;25027:131;:::i;:::-;25019:139;;24917:248;;;:::o;25171:419::-;25337:4;25375:2;25364:9;25360:18;25352:26;;25424:9;25418:4;25414:20;25410:1;25399:9;25395:17;25388:47;25452:131;25578:4;25452:131;:::i;:::-;25444:139;;25342:248;;;:::o;25596:419::-;25762:4;25800:2;25789:9;25785:18;25777:26;;25849:9;25843:4;25839:20;25835:1;25824:9;25820:17;25813:47;25877:131;26003:4;25877:131;:::i;:::-;25869:139;;25767:248;;;:::o;26021:419::-;26187:4;26225:2;26214:9;26210:18;26202:26;;26274:9;26268:4;26264:20;26260:1;26249:9;26245:17;26238:47;26302:131;26428:4;26302:131;:::i;:::-;26294:139;;26192:248;;;:::o;26446:419::-;26612:4;26650:2;26639:9;26635:18;26627:26;;26699:9;26693:4;26689:20;26685:1;26674:9;26670:17;26663:47;26727:131;26853:4;26727:131;:::i;:::-;26719:139;;26617:248;;;:::o;26871:419::-;27037:4;27075:2;27064:9;27060:18;27052:26;;27124:9;27118:4;27114:20;27110:1;27099:9;27095:17;27088:47;27152:131;27278:4;27152:131;:::i;:::-;27144:139;;27042:248;;;:::o;27296:419::-;27462:4;27500:2;27489:9;27485:18;27477:26;;27549:9;27543:4;27539:20;27535:1;27524:9;27520:17;27513:47;27577:131;27703:4;27577:131;:::i;:::-;27569:139;;27467:248;;;:::o;27721:419::-;27887:4;27925:2;27914:9;27910:18;27902:26;;27974:9;27968:4;27964:20;27960:1;27949:9;27945:17;27938:47;28002:131;28128:4;28002:131;:::i;:::-;27994:139;;27892:248;;;:::o;28146:419::-;28312:4;28350:2;28339:9;28335:18;28327:26;;28399:9;28393:4;28389:20;28385:1;28374:9;28370:17;28363:47;28427:131;28553:4;28427:131;:::i;:::-;28419:139;;28317:248;;;:::o;28571:419::-;28737:4;28775:2;28764:9;28760:18;28752:26;;28824:9;28818:4;28814:20;28810:1;28799:9;28795:17;28788:47;28852:131;28978:4;28852:131;:::i;:::-;28844:139;;28742:248;;;:::o;28996:419::-;29162:4;29200:2;29189:9;29185:18;29177:26;;29249:9;29243:4;29239:20;29235:1;29224:9;29220:17;29213:47;29277:131;29403:4;29277:131;:::i;:::-;29269:139;;29167:248;;;:::o;29421:419::-;29587:4;29625:2;29614:9;29610:18;29602:26;;29674:9;29668:4;29664:20;29660:1;29649:9;29645:17;29638:47;29702:131;29828:4;29702:131;:::i;:::-;29694:139;;29592:248;;;:::o;29846:419::-;30012:4;30050:2;30039:9;30035:18;30027:26;;30099:9;30093:4;30089:20;30085:1;30074:9;30070:17;30063:47;30127:131;30253:4;30127:131;:::i;:::-;30119:139;;30017:248;;;:::o;30271:419::-;30437:4;30475:2;30464:9;30460:18;30452:26;;30524:9;30518:4;30514:20;30510:1;30499:9;30495:17;30488:47;30552:131;30678:4;30552:131;:::i;:::-;30544:139;;30442:248;;;:::o;30696:419::-;30862:4;30900:2;30889:9;30885:18;30877:26;;30949:9;30943:4;30939:20;30935:1;30924:9;30920:17;30913:47;30977:131;31103:4;30977:131;:::i;:::-;30969:139;;30867:248;;;:::o;31121:419::-;31287:4;31325:2;31314:9;31310:18;31302:26;;31374:9;31368:4;31364:20;31360:1;31349:9;31345:17;31338:47;31402:131;31528:4;31402:131;:::i;:::-;31394:139;;31292:248;;;:::o;31546:419::-;31712:4;31750:2;31739:9;31735:18;31727:26;;31799:9;31793:4;31789:20;31785:1;31774:9;31770:17;31763:47;31827:131;31953:4;31827:131;:::i;:::-;31819:139;;31717:248;;;:::o;31971:419::-;32137:4;32175:2;32164:9;32160:18;32152:26;;32224:9;32218:4;32214:20;32210:1;32199:9;32195:17;32188:47;32252:131;32378:4;32252:131;:::i;:::-;32244:139;;32142:248;;;:::o;32396:419::-;32562:4;32600:2;32589:9;32585:18;32577:26;;32649:9;32643:4;32639:20;32635:1;32624:9;32620:17;32613:47;32677:131;32803:4;32677:131;:::i;:::-;32669:139;;32567:248;;;:::o;32821:419::-;32987:4;33025:2;33014:9;33010:18;33002:26;;33074:9;33068:4;33064:20;33060:1;33049:9;33045:17;33038:47;33102:131;33228:4;33102:131;:::i;:::-;33094:139;;32992:248;;;:::o;33246:419::-;33412:4;33450:2;33439:9;33435:18;33427:26;;33499:9;33493:4;33489:20;33485:1;33474:9;33470:17;33463:47;33527:131;33653:4;33527:131;:::i;:::-;33519:139;;33417:248;;;:::o;33671:419::-;33837:4;33875:2;33864:9;33860:18;33852:26;;33924:9;33918:4;33914:20;33910:1;33899:9;33895:17;33888:47;33952:131;34078:4;33952:131;:::i;:::-;33944:139;;33842:248;;;:::o;34096:419::-;34262:4;34300:2;34289:9;34285:18;34277:26;;34349:9;34343:4;34339:20;34335:1;34324:9;34320:17;34313:47;34377:131;34503:4;34377:131;:::i;:::-;34369:139;;34267:248;;;:::o;34521:419::-;34687:4;34725:2;34714:9;34710:18;34702:26;;34774:9;34768:4;34764:20;34760:1;34749:9;34745:17;34738:47;34802:131;34928:4;34802:131;:::i;:::-;34794:139;;34692:248;;;:::o;34946:218::-;35037:4;35075:2;35064:9;35060:18;35052:26;;35088:69;35154:1;35143:9;35139:17;35130:6;35088:69;:::i;:::-;35042:122;;;;:::o;35170:322::-;35286:4;35324:2;35313:9;35309:18;35301:26;;35337:69;35403:1;35392:9;35388:17;35379:6;35337:69;:::i;:::-;35416;35481:2;35470:9;35466:18;35457:6;35416:69;:::i;:::-;35291:201;;;;;:::o;35498:222::-;35591:4;35629:2;35618:9;35614:18;35606:26;;35642:71;35710:1;35699:9;35695:17;35686:6;35642:71;:::i;:::-;35596:124;;;;:::o;35726:214::-;35815:4;35853:2;35842:9;35838:18;35830:26;;35866:67;35930:1;35919:9;35915:17;35906:6;35866:67;:::i;:::-;35820:120;;;;:::o;35946:129::-;35980:6;36007:20;;:::i;:::-;35997:30;;36036:33;36064:4;36056:6;36036:33;:::i;:::-;35987:88;;;:::o;36081:75::-;36114:6;36147:2;36141:9;36131:19;;36121:35;:::o;36162:311::-;36239:4;36329:18;36321:6;36318:30;36315:2;;;36351:18;;:::i;:::-;36315:2;36401:4;36393:6;36389:17;36381:25;;36461:4;36455;36451:15;36443:23;;36244:229;;;:::o;36479:309::-;36554:4;36644:18;36636:6;36633:30;36630:2;;;36666:18;;:::i;:::-;36630:2;36716:4;36708:6;36704:17;36696:25;;36776:4;36770;36766:15;36758:23;;36559:229;;;:::o;36794:307::-;36855:4;36945:18;36937:6;36934:30;36931:2;;;36967:18;;:::i;:::-;36931:2;37005:29;37027:6;37005:29;:::i;:::-;36997:37;;37089:4;37083;37079:15;37071:23;;36860:241;;;:::o;37107:308::-;37169:4;37259:18;37251:6;37248:30;37245:2;;;37281:18;;:::i;:::-;37245:2;37319:29;37341:6;37319:29;:::i;:::-;37311:37;;37403:4;37397;37393:15;37385:23;;37174:241;;;:::o;37421:98::-;37472:6;37506:5;37500:12;37490:22;;37479:40;;;:::o;37525:99::-;37577:6;37611:5;37605:12;37595:22;;37584:40;;;:::o;37630:168::-;37713:11;37747:6;37742:3;37735:19;37787:4;37782:3;37778:14;37763:29;;37725:73;;;;:::o;37804:169::-;37888:11;37922:6;37917:3;37910:19;37962:4;37957:3;37953:14;37938:29;;37900:73;;;;:::o;37979:148::-;38081:11;38118:3;38103:18;;38093:34;;;;:::o;38133:335::-;38238:9;38249;38287:8;38275:10;38272:24;38269:2;;;38309:1;38306;38299:12;38269:2;38338:6;38328:8;38325:20;38322:2;;;38358:1;38355;38348:12;38322:2;38412:1;38400:10;38396:18;38388:6;38384:31;38371:44;;38451:10;38441:8;38437:25;38424:38;;38259:209;;;;;;;:::o;38474:242::-;38513:3;38532:19;38549:1;38532:19;:::i;:::-;38527:24;;38565:19;38582:1;38565:19;:::i;:::-;38560:24;;38658:1;38650:6;38646:14;38643:1;38640:21;38637:2;;;38664:18;;:::i;:::-;38637:2;38708:1;38705;38701:9;38694:16;;38517:199;;;;:::o;38722:305::-;38762:3;38781:20;38799:1;38781:20;:::i;:::-;38776:25;;38815:20;38833:1;38815:20;:::i;:::-;38810:25;;38969:1;38901:66;38897:74;38894:1;38891:81;38888:2;;;38975:18;;:::i;:::-;38888:2;39019:1;39016;39012:9;39005:16;;38766:261;;;;:::o;39033:237::-;39071:3;39090:18;39106:1;39090:18;:::i;:::-;39085:23;;39122:18;39138:1;39122:18;:::i;:::-;39117:23;;39212:1;39206:4;39202:12;39199:1;39196:19;39193:2;;;39218:18;;:::i;:::-;39193:2;39262:1;39259;39255:9;39248:16;;39075:195;;;;:::o;39276:185::-;39316:1;39333:20;39351:1;39333:20;:::i;:::-;39328:25;;39367:20;39385:1;39367:20;:::i;:::-;39362:25;;39406:1;39396:2;;39411:18;;:::i;:::-;39396:2;39453:1;39450;39446:9;39441:14;;39318:143;;;;:::o;39467:348::-;39507:7;39530:20;39548:1;39530:20;:::i;:::-;39525:25;;39564:20;39582:1;39564:20;:::i;:::-;39559:25;;39752:1;39684:66;39680:74;39677:1;39674:81;39669:1;39662:9;39655:17;39651:105;39648:2;;;39759:18;;:::i;:::-;39648:2;39807:1;39804;39800:9;39789:20;;39515:300;;;;:::o;39821:188::-;39860:4;39880:19;39897:1;39880:19;:::i;:::-;39875:24;;39913:19;39930:1;39913:19;:::i;:::-;39908:24;;39951:1;39948;39945:8;39942:2;;;39956:18;;:::i;:::-;39942:2;40001:1;39998;39994:9;39986:17;;39865:144;;;;:::o;40015:191::-;40055:4;40075:20;40093:1;40075:20;:::i;:::-;40070:25;;40109:20;40127:1;40109:20;:::i;:::-;40104:25;;40148:1;40145;40142:8;40139:2;;;40153:18;;:::i;:::-;40139:2;40198:1;40195;40191:9;40183:17;;40060:146;;;;:::o;40212:185::-;40250:4;40270:18;40286:1;40270:18;:::i;:::-;40265:23;;40302:18;40318:1;40302:18;:::i;:::-;40297:23;;40339:1;40336;40333:8;40330:2;;;40344:18;;:::i;:::-;40330:2;40389:1;40386;40382:9;40374:17;;40255:142;;;;:::o;40403:96::-;40440:7;40469:24;40487:5;40469:24;:::i;:::-;40458:35;;40448:51;;;:::o;40505:90::-;40539:7;40582:5;40575:13;40568:21;40557:32;;40547:48;;;:::o;40601:149::-;40637:7;40677:66;40670:5;40666:78;40655:89;;40645:105;;;:::o;40756:89::-;40792:7;40832:6;40825:5;40821:18;40810:29;;40800:45;;;:::o;40851:126::-;40888:7;40928:42;40921:5;40917:54;40906:65;;40896:81;;;:::o;40983:77::-;41020:7;41049:5;41038:16;;41028:32;;;:::o;41066:86::-;41101:7;41141:4;41134:5;41130:16;41119:27;;41109:43;;;:::o;41158:108::-;41205:9;41238:22;41254:5;41238:22;:::i;:::-;41225:35;;41215:51;;;:::o;41272:154::-;41356:6;41351:3;41346;41333:30;41418:1;41409:6;41404:3;41400:16;41393:27;41323:103;;;:::o;41432:307::-;41500:1;41510:113;41524:6;41521:1;41518:13;41510:113;;;41609:1;41604:3;41600:11;41594:18;41590:1;41585:3;41581:11;41574:39;41546:2;41543:1;41539:10;41534:15;;41510:113;;;41641:6;41638:1;41635:13;41632:2;;;41721:1;41712:6;41707:3;41703:16;41696:27;41632:2;41481:258;;;;:::o;41745:320::-;41789:6;41826:1;41820:4;41816:12;41806:22;;41873:1;41867:4;41863:12;41894:18;41884:2;;41950:4;41942:6;41938:17;41928:27;;41884:2;42012;42004:6;42001:14;41981:18;41978:38;41975:2;;;42031:18;;:::i;:::-;41975:2;41796:269;;;;:::o;42071:281::-;42154:27;42176:4;42154:27;:::i;:::-;42146:6;42142:40;42284:6;42272:10;42269:22;42248:18;42236:10;42233:34;42230:62;42227:2;;;42295:18;;:::i;:::-;42227:2;42335:10;42331:2;42324:22;42114:238;;;:::o;42358:171::-;42396:3;42419:23;42436:5;42419:23;:::i;:::-;42410:32;;42464:6;42457:5;42454:17;42451:2;;;42474:18;;:::i;:::-;42451:2;42521:1;42514:5;42510:13;42503:20;;42400:129;;;:::o;42535:233::-;42574:3;42597:24;42615:5;42597:24;:::i;:::-;42588:33;;42643:66;42636:5;42633:77;42630:2;;;42713:18;;:::i;:::-;42630:2;42760:1;42753:5;42749:13;42742:20;;42578:190;;;:::o;42774:176::-;42806:1;42823:20;42841:1;42823:20;:::i;:::-;42818:25;;42857:20;42875:1;42857:20;:::i;:::-;42852:25;;42896:1;42886:2;;42901:18;;:::i;:::-;42886:2;42942:1;42939;42935:9;42930:14;;42808:142;;;;:::o;42956:180::-;43004:77;43001:1;42994:88;43101:4;43098:1;43091:15;43125:4;43122:1;43115:15;43142:180;43190:77;43187:1;43180:88;43287:4;43284:1;43277:15;43311:4;43308:1;43301:15;43328:180;43376:77;43373:1;43366:88;43473:4;43470:1;43463:15;43497:4;43494:1;43487:15;43514:180;43562:77;43559:1;43552:88;43659:4;43656:1;43649:15;43683:4;43680:1;43673:15;43700:102;43741:6;43792:2;43788:7;43783:2;43776:5;43772:14;43768:28;43758:38;;43748:54;;;:::o;43808:221::-;43948:34;43944:1;43936:6;43932:14;43925:58;44017:4;44012:2;44004:6;44000:15;43993:29;43914:115;:::o;44035:169::-;44175:21;44171:1;44163:6;44159:14;44152:45;44141:63;:::o;44210:237::-;44350:34;44346:1;44338:6;44334:14;44327:58;44419:20;44414:2;44406:6;44402:15;44395:45;44316:131;:::o;44453:225::-;44593:34;44589:1;44581:6;44577:14;44570:58;44662:8;44657:2;44649:6;44645:15;44638:33;44559:119;:::o;44684:178::-;44824:30;44820:1;44812:6;44808:14;44801:54;44790:72;:::o;44868:223::-;45008:34;45004:1;44996:6;44992:14;44985:58;45077:6;45072:2;45064:6;45060:15;45053:31;44974:117;:::o;45097:175::-;45237:27;45233:1;45225:6;45221:14;45214:51;45203:69;:::o;45278:168::-;45418:20;45414:1;45406:6;45402:14;45395:44;45384:62;:::o;45452:176::-;45592:28;45588:1;45580:6;45576:14;45569:52;45558:70;:::o;45634:231::-;45774:34;45770:1;45762:6;45758:14;45751:58;45843:14;45838:2;45830:6;45826:15;45819:39;45740:125;:::o;45871:243::-;46011:34;46007:1;45999:6;45995:14;45988:58;46080:26;46075:2;46067:6;46063:15;46056:51;45977:137;:::o;46120:220::-;46260:34;46256:1;46248:6;46244:14;46237:58;46329:3;46324:2;46316:6;46312:15;46305:28;46226:114;:::o;46346:229::-;46486:34;46482:1;46474:6;46470:14;46463:58;46555:12;46550:2;46542:6;46538:15;46531:37;46452:123;:::o;46581:228::-;46721:34;46717:1;46709:6;46705:14;46698:58;46790:11;46785:2;46777:6;46773:15;46766:36;46687:122;:::o;46815:182::-;46955:34;46951:1;46943:6;46939:14;46932:58;46921:76;:::o;47003:231::-;47143:34;47139:1;47131:6;47127:14;47120:58;47212:14;47207:2;47199:6;47195:15;47188:39;47109:125;:::o;47240:182::-;47380:34;47376:1;47368:6;47364:14;47357:58;47346:76;:::o;47428:228::-;47568:34;47564:1;47556:6;47552:14;47545:58;47637:11;47632:2;47624:6;47620:15;47613:36;47534:122;:::o;47662:234::-;47802:34;47798:1;47790:6;47786:14;47779:58;47871:17;47866:2;47858:6;47854:15;47847:42;47768:128;:::o;47902:220::-;48042:34;48038:1;48030:6;48026:14;48019:58;48111:3;48106:2;48098:6;48094:15;48087:28;48008:114;:::o;48128:170::-;48268:22;48264:1;48256:6;48252:14;48245:46;48234:64;:::o;48304:236::-;48444:34;48440:1;48432:6;48428:14;48421:58;48513:19;48508:2;48500:6;48496:15;48489:44;48410:130;:::o;48546:171::-;48686:23;48682:1;48674:6;48670:14;48663:47;48652:65;:::o;48723:164::-;48863:16;48859:1;48851:6;48847:14;48840:40;48829:58;:::o;48893:177::-;49033:29;49029:1;49021:6;49017:14;49010:53;48999:71;:::o;49076:122::-;49149:24;49167:5;49149:24;:::i;:::-;49142:5;49139:35;49129:2;;49188:1;49185;49178:12;49129:2;49119:79;:::o;49204:116::-;49274:21;49289:5;49274:21;:::i;:::-;49267:5;49264:32;49254:2;;49310:1;49307;49300:12;49254:2;49244:76;:::o;49326:120::-;49398:23;49415:5;49398:23;:::i;:::-;49391:5;49388:34;49378:2;;49436:1;49433;49426:12;49378:2;49368:78;:::o;49452:120::-;49524:23;49541:5;49524:23;:::i;:::-;49517:5;49514:34;49504:2;;49562:1;49559;49552:12;49504:2;49494:78;:::o;49578:122::-;49651:24;49669:5;49651:24;:::i;:::-;49644:5;49641:35;49631:2;;49690:1;49687;49680:12;49631:2;49621:79;:::o;49706:118::-;49777:22;49793:5;49777:22;:::i;:::-;49770:5;49767:33;49757:2;;49814:1;49811;49804:12;49757:2;49747:77;:::o

Swarm Source

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