ETH Price: $3,272.76 (+0.55%)
Gas: 5 Gwei

Token

Motley Ds (MOTD)
 

Overview

Max Total Supply

46 MOTD

Holders

41

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 MOTD
0x7cf196415cdd1ef08ca2358a8282d33ba089b9f3
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:
MotleyDs

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-09
*/

//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.6;

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


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


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

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


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


/**
 * @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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


/*
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}


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

    string internal _tokenURI;


    // 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;
    }
    
    /// @notice It all points to base reality being a higher order of consciousness, take a deep dive into the work of Jacobo Grinberg.

    function _baseURI() internal view  returns (string memory) {
        return _tokenURI;
    }

    /**
     * @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 uri = _baseURI();
        return
            bytes(uri).length > 0
                ? string(abi.encodePacked(uri, _tokenId.toString(),".json"))
                : "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


contract Ownable is Context {
    address private _owner;

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/// @title Motley Ds
/// @author Sergio Martell
/// @notice This work is a compilation of what I considered best practices, "Talent borrows, genious..."
/// @dev Feel free to build on top of this work, we are just midgets sitting in the shoulders of giants. 
/// Special shoutout to Shahzain, thank you brother for helping out!  

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

/**  
* @notice Meta-realist Collectibles, 
* these assets are created with the intention of using art to 
* explore that which is not possible to delve into with the constraints 
* of traditional mechanics, in a reality where fuzziness is a rule, 
* our reality is determined by what we decide to describe and build
* narratives to serve it.  Motley Ds are here to take over narratives 
* and defy the realm of the possible, and build a community while having fun 
* in the process.
*/
    /// Motley Ds are here for the long run, and focused on utility.

    uint256 public constant motleyPrice = 0.1 ether;
    uint public constant maxMotleyPurchase = 15;
    bool public activeSale = false;
    uint256 public _maxMotleys = 10000;
    
    
    address private constant dTreasury = 0xb5713725B6E5E8B719596a3Db218011B1286885c;
    address private constant dArt= 0x1462d5cBFa31733650CF84150136e3aE1573bbb1;
    address private constant dOps = 0x4D166881A15db2E8c1CE2B058424A55234932892;
    
    
    constructor(uint256 totalMotleys) ERC721("Motley Ds", "MOTD"){
        _maxMotleys = totalMotleys;    
    }

 /*
 * With much less we filled San Miguel de Allende with art, brought the Earth Harp to the parroquia.
 * and pretty much blew people's minds.
 * 30% of the proceeds will go to the D-Treasury. 
 * 
 */

    function disburse()public onlyOwner{
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance*30/100);
        payable(dTreasury).transfer(balance*30/100);
        payable(dArt).transfer(balance*20/100);
        payable(dOps).transfer(balance*20/100);
    }

    function setBaseURI(string memory uri) public onlyOwner {
        _tokenURI = uri;
    }

// The Ds are coming!  the Ds are coming!

    function setSaleState(bool isActive) public onlyOwner {
        activeSale = isActive;
    }


/** 
* Meta-reality is not accessible to all, 
* but the Motley D community is.  
* We are gathering a crew of Motleys
* that will help us have strong footings
* to build our community.
*/

    function setAsideDs() public onlyOwner {
        uint supply = totalSupply();
        uint i;
        for(i = 0; i < 30; i++){
            _safeMint(dTreasury, supply + i);
        }
    }

/** 
*  @notice this: First there is "Geometric Unity", (see Eric Weinstein)
*  then came sound as the first disruption of the base field, 
*  from there light was perceived, that formed matter, 
*  matter requires a sense of self, since it needs to be observed.
*  Self creates narratives, and those narratives create institutions.
*  Wanna crack reality?  Reverse engineer it!
*/

    function releaseTheD(uint numberOfMotleys) public payable{
        require(activeSale, "Sale is not yet open.  Come back later.");
        require(numberOfMotleys <= maxMotleyPurchase, "Reality does everything with 15 particles, you can do with 15 Ds!");
        require(totalSupply() + numberOfMotleys <= _maxMotleys, "Purchase would exceed the total supply of Ds");
        require(motleyPrice*numberOfMotleys<= msg.value, "Wrong amount of Ether sent");
        
        for(uint i = 0; i < numberOfMotleys; i++){
            uint mintIndex = totalSupply();
            if(totalSupply() < _maxMotleys){
                _safeMint(msg.sender, mintIndex);
            }
        }
    }

/// Yeah, only those with a D may enter. 

function verifyDegeneracy(address _owner) public view returns(uint256[]memory){
  uint256 tokenCount = balanceOf(_owner);
        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
}

/**
* Mimetic Desire is expressed by René Girard as the force that shapes our wants.
* In today's narrative landscape, where very few people have a sense of "self" we
* are constantly trying to find ourselves by gazing towards others.
* Motley Ds Mission is to open the gates of the self by the creation of transformational
* experiences, a large percentage of the funds raised will be destined to that purpose, 
* and 5% of proceeds of secondary sales will also be destined to enhance the value of holding
* a Motley D.
*/

    function contractURI()public pure returns(string memory){
      return "https://ipfs.io/ipfs/bafkreiaxcy7jbtezihcwyb7gq4awp4i26kaxeui7zbog63ngv5lx2ribje";
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"totalMotleys","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxMotleys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disburse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMotleyPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"motleyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMotleys","type":"uint256"}],"name":"releaseTheD","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAsideDs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"verifyDegeneracy","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]

60806040526000600b60146101000a81548160ff021916908315150217905550612710600c553480156200003257600080fd5b506040516200478538038062004785833981810160405281019062000058919062000286565b6040518060400160405280600981526020017f4d6f746c657920447300000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d4f5444000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000dc929190620001bf565b508060019080519060200190620000f5929190620001bf565b50505060006200010a620001b760201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600c819055505062000346565b600033905090565b828054620001cd90620002c2565b90600052602060002090601f016020900481019282620001f157600085556200023d565b82601f106200020c57805160ff19168380011785556200023d565b828001600101855582156200023d579182015b828111156200023c5782518255916020019190600101906200021f565b5b5090506200024c919062000250565b5090565b5b808211156200026b57600081600090555060010162000251565b5090565b60008151905062000280816200032c565b92915050565b6000602082840312156200029f576200029e62000327565b5b6000620002af848285016200026f565b91505092915050565b6000819050919050565b60006002820490506001821680620002db57607f821691505b60208210811415620002f257620002f1620002f8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200033781620002b8565b81146200034357600080fd5b50565b61442f80620003566000396000f3fe6080604052600436106101cd5760003560e01c806390dfad50116100f7578063c4e3709511610095578063e8a3d48511610064578063e8a3d48514610655578063e985e9c514610680578063ea2fb1eb146106bd578063f2fde38b146106fa576101cd565b8063c4e3709514610599578063c87b56dd146105c2578063c8e607e0146105ff578063dec6eac01461062a576101cd565b8063a22cb465116100d1578063a22cb46514610519578063aa582d9014610542578063abc6fd0b14610559578063b88d4fde14610570576101cd565b806390dfad50146104a757806395d89b41146104d25780639c2d420f146104fd576101cd565b806342842e0e1161016f5780636352211e1161013e5780636352211e146103eb57806370a0823114610428578063715018a6146104655780638da5cb5b1461047c576101cd565b806342842e0e146103315780634e17700a1461035a5780634f6ccce71461038557806355f804b3146103c2576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632f745c59146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612eee565b610723565b60405161020691906134f0565b60405180910390f35b34801561021b57600080fd5b5061022461079d565b604051610231919061350b565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612f91565b61082f565b60405161026e9190613467565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612e81565b6108b4565b005b3480156102ac57600080fd5b506102b56109cc565b6040516102c291906137ed565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190612d6b565b6109d9565b005b34801561030057600080fd5b5061031b60048036038101906103169190612e81565b610a39565b60405161032891906137ed565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190612d6b565b610ade565b005b34801561036657600080fd5b5061036f610afe565b60405161037c91906134f0565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612f91565b610b11565b6040516103b991906137ed565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190612f48565b610b82565b005b3480156103f757600080fd5b50610412600480360381019061040d9190612f91565b610c33565b60405161041f9190613467565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190612cfe565b610ce5565b60405161045c91906137ed565b60405180910390f35b34801561047157600080fd5b5061047a610d9d565b005b34801561048857600080fd5b50610491610ef5565b60405161049e9190613467565b60405180910390f35b3480156104b357600080fd5b506104bc610f1f565b6040516104c991906137ed565b60405180910390f35b3480156104de57600080fd5b506104e7610f2b565b6040516104f4919061350b565b60405180910390f35b61051760048036038101906105129190612f91565b610fbd565b005b34801561052557600080fd5b50610540600480360381019061053b9190612e41565b611148565b005b34801561054e57600080fd5b506105576112c9565b005b34801561056557600080fd5b5061056e6113b8565b005b34801561057c57600080fd5b5061059760048036038101906105929190612dbe565b61160f565b005b3480156105a557600080fd5b506105c060048036038101906105bb9190612ec1565b611671565b005b3480156105ce57600080fd5b506105e960048036038101906105e49190612f91565b611725565b6040516105f6919061350b565b60405180910390f35b34801561060b57600080fd5b506106146117cc565b60405161062191906137ed565b60405180910390f35b34801561063657600080fd5b5061063f6117d1565b60405161064c91906137ed565b60405180910390f35b34801561066157600080fd5b5061066a6117d7565b604051610677919061350b565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190612d2b565b6117f7565b6040516106b491906134f0565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190612cfe565b61188b565b6040516106f191906134ce565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190612cfe565b611939565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610796575061079582611b00565b5b9050919050565b6060600080546107ac90613ad6565b80601f01602080910402602001604051908101604052809291908181526020018280546107d890613ad6565b80156108255780601f106107fa57610100808354040283529160200191610825565b820191906000526020600020905b81548152906001019060200180831161080857829003601f168201915b5050505050905090565b600061083a82611be2565b610879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610870906136cd565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108bf82610c33565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610930576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109279061374d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094f611c4e565b73ffffffffffffffffffffffffffffffffffffffff16148061097e575061097d81610978611c4e565b6117f7565b5b6109bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b49061364d565b60405180910390fd5b6109c78383611c56565b505050565b6000600980549050905090565b6109ea6109e4611c4e565b82611d0f565b610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a209061376d565b60405180910390fd5b610a34838383611ded565b505050565b6000610a4483610ce5565b8210610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c9061354d565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610af98383836040518060200160405280600081525061160f565b505050565b600b60149054906101000a900460ff1681565b6000610b1b6109cc565b8210610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b53906137ad565b60405180910390fd5b60098281548110610b7057610b6f613c6f565b5b90600052602060002001549050919050565b610b8a611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c10906136ed565b60405180910390fd5b8060029080519060200190610c2f929190612b12565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd39061368d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d9061366d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610da5611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906136ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b67016345785d8a000081565b606060018054610f3a90613ad6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6690613ad6565b8015610fb35780601f10610f8857610100808354040283529160200191610fb3565b820191906000526020600020905b815481529060010190602001808311610f9657829003601f168201915b5050505050905090565b600b60149054906101000a900460ff1661100c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611003906135cd565b60405180910390fd5b600f811115611050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110479061378d565b60405180910390fd5b600c548161105c6109cc565b611066919061390b565b11156110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e9061352d565b60405180910390fd5b348167016345785d8a00006110bc9190613992565b11156110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f4906137cd565b60405180910390fd5b60005b818110156111445760006111126109cc565b9050600c5461111f6109cc565b10156111305761112f3382612049565b5b50808061113c90613b39565b915050611100565b5050565b611150611c4e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b59061360d565b60405180910390fd5b80600660006111cb611c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611278611c4e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112bd91906134f0565b60405180910390a35050565b6112d1611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611357906136ed565b60405180910390fd5b600061136a6109cc565b905060005b601e8110156113b4576113a173b5713725b6e5e8b719596a3db218011b1286885c828461139c919061390b565b612049565b80806113ac90613b39565b91505061136f565b5050565b6113c0611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446906136ed565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc6064601e8461147d9190613992565b6114879190613961565b9081150290604051600060405180830381858888f193505050501580156114b2573d6000803e3d6000fd5b5073b5713725b6e5e8b719596a3db218011b1286885c73ffffffffffffffffffffffffffffffffffffffff166108fc6064601e846114f09190613992565b6114fa9190613961565b9081150290604051600060405180830381858888f19350505050158015611525573d6000803e3d6000fd5b50731462d5cbfa31733650cf84150136e3ae1573bbb173ffffffffffffffffffffffffffffffffffffffff166108fc60646014846115639190613992565b61156d9190613961565b9081150290604051600060405180830381858888f19350505050158015611598573d6000803e3d6000fd5b50734d166881a15db2e8c1ce2b058424a5523493289273ffffffffffffffffffffffffffffffffffffffff166108fc60646014846115d69190613992565b6115e09190613961565b9081150290604051600060405180830381858888f1935050505015801561160b573d6000803e3d6000fd5b5050565b61162061161a611c4e565b83611d0f565b61165f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116569061376d565b60405180910390fd5b61166b84848484612067565b50505050565b611679611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff906136ed565b60405180910390fd5b80600b60146101000a81548160ff02191690831515021790555050565b606061173082611be2565b61176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117669061372d565b60405180910390fd5b60006117796120c3565b9050600081511161179957604051806020016040528060008152506117c4565b806117a384612155565b6040516020016117b4929190613438565b6040516020818303038152906040525b915050919050565b600f81565b600c5481565b60606040518060800160405280605081526020016143aa60509139905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600061189883610ce5565b905060008167ffffffffffffffff8111156118b6576118b5613c9e565b5b6040519080825280602002602001820160405280156118e45781602001602082028036833780820191505090505b50905060005b8281101561192e576118fc8582610a39565b82828151811061190f5761190e613c6f565b5b602002602001018181525050808061192690613b39565b9150506118ea565b508092505050919050565b611941611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c7906136ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a379061358d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bcb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bdb5750611bda826122b6565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cc983610c33565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d1a82611be2565b611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d509061362d565b60405180910390fd5b6000611d6483610c33565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dd357508373ffffffffffffffffffffffffffffffffffffffff16611dbb8461082f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611de45750611de381856117f7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e0d82610c33565b73ffffffffffffffffffffffffffffffffffffffff1614611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a9061370d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca906135ed565b60405180910390fd5b611ede838383612320565b611ee9600082611c56565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f3991906139ec565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f90919061390b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612063828260405180602001604052806000815250612434565b5050565b612072848484611ded565b61207e8484848461248f565b6120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b49061356d565b60405180910390fd5b50505050565b6060600280546120d290613ad6565b80601f01602080910402602001604051908101604052809291908181526020018280546120fe90613ad6565b801561214b5780601f106121205761010080835404028352916020019161214b565b820191906000526020600020905b81548152906001019060200180831161212e57829003601f168201915b5050505050905090565b6060600082141561219d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122b1565b600082905060005b600082146121cf5780806121b890613b39565b915050600a826121c89190613961565b91506121a5565b60008167ffffffffffffffff8111156121eb576121ea613c9e565b5b6040519080825280601f01601f19166020018201604052801561221d5781602001600182028036833780820191505090505b5090505b600085146122aa5760018261223691906139ec565b9150600a856122459190613b82565b6030612251919061390b565b60f81b81838151811061226757612266613c6f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122a39190613961565b9450612221565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61232b838383612626565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561236e576123698161262b565b6123ad565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123ac576123ab8382612674565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f0576123eb816127e1565b61242f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461242e5761242d82826128b2565b5b5b505050565b61243e8383612931565b61244b600084848461248f565b61248a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124819061356d565b60405180910390fd5b505050565b60006124b08473ffffffffffffffffffffffffffffffffffffffff16612aff565b15612619578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124d9611c4e565b8786866040518563ffffffff1660e01b81526004016124fb9493929190613482565b602060405180830381600087803b15801561251557600080fd5b505af192505050801561254657506040513d601f19601f820116820180604052508101906125439190612f1b565b60015b6125c9573d8060008114612576576040519150601f19603f3d011682016040523d82523d6000602084013e61257b565b606091505b506000815114156125c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b89061356d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061261e565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268184610ce5565b61268b91906139ec565b9050600060086000848152602001908152602001600020549050818114612770576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506127f591906139ec565b90506000600a600084815260200190815260200160002054905060006009838154811061282557612824613c6f565b5b90600052602060002001549050806009838154811061284757612846613c6f565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548061289657612895613c40565b5b6001900381819060005260206000200160009055905550505050565b60006128bd83610ce5565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612998906136ad565b60405180910390fd5b6129aa81611be2565b156129ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e1906135ad565b60405180910390fd5b6129f660008383612320565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a46919061390b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612b1e90613ad6565b90600052602060002090601f016020900481019282612b405760008555612b87565b82601f10612b5957805160ff1916838001178555612b87565b82800160010185558215612b87579182015b82811115612b86578251825591602001919060010190612b6b565b5b509050612b949190612b98565b5090565b5b80821115612bb1576000816000905550600101612b99565b5090565b6000612bc8612bc38461382d565b613808565b905082815260208101848484011115612be457612be3613cd2565b5b612bef848285613a94565b509392505050565b6000612c0a612c058461385e565b613808565b905082815260208101848484011115612c2657612c25613cd2565b5b612c31848285613a94565b509392505050565b600081359050612c488161434d565b92915050565b600081359050612c5d81614364565b92915050565b600081359050612c728161437b565b92915050565b600081519050612c878161437b565b92915050565b600082601f830112612ca257612ca1613ccd565b5b8135612cb2848260208601612bb5565b91505092915050565b600082601f830112612cd057612ccf613ccd565b5b8135612ce0848260208601612bf7565b91505092915050565b600081359050612cf881614392565b92915050565b600060208284031215612d1457612d13613cdc565b5b6000612d2284828501612c39565b91505092915050565b60008060408385031215612d4257612d41613cdc565b5b6000612d5085828601612c39565b9250506020612d6185828601612c39565b9150509250929050565b600080600060608486031215612d8457612d83613cdc565b5b6000612d9286828701612c39565b9350506020612da386828701612c39565b9250506040612db486828701612ce9565b9150509250925092565b60008060008060808587031215612dd857612dd7613cdc565b5b6000612de687828801612c39565b9450506020612df787828801612c39565b9350506040612e0887828801612ce9565b925050606085013567ffffffffffffffff811115612e2957612e28613cd7565b5b612e3587828801612c8d565b91505092959194509250565b60008060408385031215612e5857612e57613cdc565b5b6000612e6685828601612c39565b9250506020612e7785828601612c4e565b9150509250929050565b60008060408385031215612e9857612e97613cdc565b5b6000612ea685828601612c39565b9250506020612eb785828601612ce9565b9150509250929050565b600060208284031215612ed757612ed6613cdc565b5b6000612ee584828501612c4e565b91505092915050565b600060208284031215612f0457612f03613cdc565b5b6000612f1284828501612c63565b91505092915050565b600060208284031215612f3157612f30613cdc565b5b6000612f3f84828501612c78565b91505092915050565b600060208284031215612f5e57612f5d613cdc565b5b600082013567ffffffffffffffff811115612f7c57612f7b613cd7565b5b612f8884828501612cbb565b91505092915050565b600060208284031215612fa757612fa6613cdc565b5b6000612fb584828501612ce9565b91505092915050565b6000612fca838361341a565b60208301905092915050565b612fdf81613a20565b82525050565b6000612ff08261389f565b612ffa81856138cd565b93506130058361388f565b8060005b8381101561303657815161301d8882612fbe565b9750613028836138c0565b925050600181019050613009565b5085935050505092915050565b61304c81613a32565b82525050565b600061305d826138aa565b61306781856138de565b9350613077818560208601613aa3565b61308081613ce1565b840191505092915050565b6000613096826138b5565b6130a081856138ef565b93506130b0818560208601613aa3565b6130b981613ce1565b840191505092915050565b60006130cf826138b5565b6130d98185613900565b93506130e9818560208601613aa3565b80840191505092915050565b6000613102602c836138ef565b915061310d82613cf2565b604082019050919050565b6000613125602b836138ef565b915061313082613d41565b604082019050919050565b60006131486032836138ef565b915061315382613d90565b604082019050919050565b600061316b6026836138ef565b915061317682613ddf565b604082019050919050565b600061318e601c836138ef565b915061319982613e2e565b602082019050919050565b60006131b16027836138ef565b91506131bc82613e57565b604082019050919050565b60006131d46024836138ef565b91506131df82613ea6565b604082019050919050565b60006131f76019836138ef565b915061320282613ef5565b602082019050919050565b600061321a602c836138ef565b915061322582613f1e565b604082019050919050565b600061323d6038836138ef565b915061324882613f6d565b604082019050919050565b6000613260602a836138ef565b915061326b82613fbc565b604082019050919050565b60006132836029836138ef565b915061328e8261400b565b604082019050919050565b60006132a66020836138ef565b91506132b18261405a565b602082019050919050565b60006132c9602c836138ef565b91506132d482614083565b604082019050919050565b60006132ec600583613900565b91506132f7826140d2565b600582019050919050565b600061330f6020836138ef565b915061331a826140fb565b602082019050919050565b60006133326029836138ef565b915061333d82614124565b604082019050919050565b6000613355602f836138ef565b915061336082614173565b604082019050919050565b60006133786021836138ef565b9150613383826141c2565b604082019050919050565b600061339b6031836138ef565b91506133a682614211565b604082019050919050565b60006133be6041836138ef565b91506133c982614260565b606082019050919050565b60006133e1602c836138ef565b91506133ec826142d5565b604082019050919050565b6000613404601a836138ef565b915061340f82614324565b602082019050919050565b61342381613a8a565b82525050565b61343281613a8a565b82525050565b600061344482856130c4565b915061345082846130c4565b915061345b826132df565b91508190509392505050565b600060208201905061347c6000830184612fd6565b92915050565b60006080820190506134976000830187612fd6565b6134a46020830186612fd6565b6134b16040830185613429565b81810360608301526134c38184613052565b905095945050505050565b600060208201905081810360008301526134e88184612fe5565b905092915050565b60006020820190506135056000830184613043565b92915050565b60006020820190508181036000830152613525818461308b565b905092915050565b60006020820190508181036000830152613546816130f5565b9050919050565b6000602082019050818103600083015261356681613118565b9050919050565b600060208201905081810360008301526135868161313b565b9050919050565b600060208201905081810360008301526135a68161315e565b9050919050565b600060208201905081810360008301526135c681613181565b9050919050565b600060208201905081810360008301526135e6816131a4565b9050919050565b60006020820190508181036000830152613606816131c7565b9050919050565b60006020820190508181036000830152613626816131ea565b9050919050565b600060208201905081810360008301526136468161320d565b9050919050565b6000602082019050818103600083015261366681613230565b9050919050565b6000602082019050818103600083015261368681613253565b9050919050565b600060208201905081810360008301526136a681613276565b9050919050565b600060208201905081810360008301526136c681613299565b9050919050565b600060208201905081810360008301526136e6816132bc565b9050919050565b6000602082019050818103600083015261370681613302565b9050919050565b6000602082019050818103600083015261372681613325565b9050919050565b6000602082019050818103600083015261374681613348565b9050919050565b600060208201905081810360008301526137668161336b565b9050919050565b600060208201905081810360008301526137868161338e565b9050919050565b600060208201905081810360008301526137a6816133b1565b9050919050565b600060208201905081810360008301526137c6816133d4565b9050919050565b600060208201905081810360008301526137e6816133f7565b9050919050565b60006020820190506138026000830184613429565b92915050565b6000613812613823565b905061381e8282613b08565b919050565b6000604051905090565b600067ffffffffffffffff82111561384857613847613c9e565b5b61385182613ce1565b9050602081019050919050565b600067ffffffffffffffff82111561387957613878613c9e565b5b61388282613ce1565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061391682613a8a565b915061392183613a8a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395657613955613bb3565b5b828201905092915050565b600061396c82613a8a565b915061397783613a8a565b92508261398757613986613be2565b5b828204905092915050565b600061399d82613a8a565b91506139a883613a8a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139e1576139e0613bb3565b5b828202905092915050565b60006139f782613a8a565b9150613a0283613a8a565b925082821015613a1557613a14613bb3565b5b828203905092915050565b6000613a2b82613a6a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ac1578082015181840152602081019050613aa6565b83811115613ad0576000848401525b50505050565b60006002820490506001821680613aee57607f821691505b60208210811415613b0257613b01613c11565b5b50919050565b613b1182613ce1565b810181811067ffffffffffffffff82111715613b3057613b2f613c9e565b5b80604052505050565b6000613b4482613a8a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b7757613b76613bb3565b5b600182019050919050565b6000613b8d82613a8a565b9150613b9883613a8a565b925082613ba857613ba7613be2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f507572636861736520776f756c64206578636565642074686520746f74616c2060008201527f737570706c79206f662044730000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65206973206e6f7420796574206f70656e2e2020436f6d65206261636b60008201527f206c617465722e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5265616c69747920646f65732065766572797468696e6720776974682031352060008201527f7061727469636c65732c20796f752063616e20646f207769746820313520447360208201527f2100000000000000000000000000000000000000000000000000000000000000604082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57726f6e6720616d6f756e74206f662045746865722073656e74000000000000600082015250565b61435681613a20565b811461436157600080fd5b50565b61436d81613a32565b811461437857600080fd5b50565b61438481613a3e565b811461438f57600080fd5b50565b61439b81613a8a565b81146143a657600080fd5b5056fe68747470733a2f2f697066732e696f2f697066732f6261666b72656961786379376a6274657a69686377796237677134617770346932366b6178657569377a626f6736336e6776356c78327269626a65a26469706673582212207a6bae09f7572be18556c7512a360b24e99f14761777a9a00cfb51cd52786c9a64736f6c634300080600330000000000000000000000000000000000000000000000000000000000002710

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c806390dfad50116100f7578063c4e3709511610095578063e8a3d48511610064578063e8a3d48514610655578063e985e9c514610680578063ea2fb1eb146106bd578063f2fde38b146106fa576101cd565b8063c4e3709514610599578063c87b56dd146105c2578063c8e607e0146105ff578063dec6eac01461062a576101cd565b8063a22cb465116100d1578063a22cb46514610519578063aa582d9014610542578063abc6fd0b14610559578063b88d4fde14610570576101cd565b806390dfad50146104a757806395d89b41146104d25780639c2d420f146104fd576101cd565b806342842e0e1161016f5780636352211e1161013e5780636352211e146103eb57806370a0823114610428578063715018a6146104655780638da5cb5b1461047c576101cd565b806342842e0e146103315780634e17700a1461035a5780634f6ccce71461038557806355f804b3146103c2576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632f745c59146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612eee565b610723565b60405161020691906134f0565b60405180910390f35b34801561021b57600080fd5b5061022461079d565b604051610231919061350b565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612f91565b61082f565b60405161026e9190613467565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612e81565b6108b4565b005b3480156102ac57600080fd5b506102b56109cc565b6040516102c291906137ed565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190612d6b565b6109d9565b005b34801561030057600080fd5b5061031b60048036038101906103169190612e81565b610a39565b60405161032891906137ed565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190612d6b565b610ade565b005b34801561036657600080fd5b5061036f610afe565b60405161037c91906134f0565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612f91565b610b11565b6040516103b991906137ed565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190612f48565b610b82565b005b3480156103f757600080fd5b50610412600480360381019061040d9190612f91565b610c33565b60405161041f9190613467565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190612cfe565b610ce5565b60405161045c91906137ed565b60405180910390f35b34801561047157600080fd5b5061047a610d9d565b005b34801561048857600080fd5b50610491610ef5565b60405161049e9190613467565b60405180910390f35b3480156104b357600080fd5b506104bc610f1f565b6040516104c991906137ed565b60405180910390f35b3480156104de57600080fd5b506104e7610f2b565b6040516104f4919061350b565b60405180910390f35b61051760048036038101906105129190612f91565b610fbd565b005b34801561052557600080fd5b50610540600480360381019061053b9190612e41565b611148565b005b34801561054e57600080fd5b506105576112c9565b005b34801561056557600080fd5b5061056e6113b8565b005b34801561057c57600080fd5b5061059760048036038101906105929190612dbe565b61160f565b005b3480156105a557600080fd5b506105c060048036038101906105bb9190612ec1565b611671565b005b3480156105ce57600080fd5b506105e960048036038101906105e49190612f91565b611725565b6040516105f6919061350b565b60405180910390f35b34801561060b57600080fd5b506106146117cc565b60405161062191906137ed565b60405180910390f35b34801561063657600080fd5b5061063f6117d1565b60405161064c91906137ed565b60405180910390f35b34801561066157600080fd5b5061066a6117d7565b604051610677919061350b565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190612d2b565b6117f7565b6040516106b491906134f0565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190612cfe565b61188b565b6040516106f191906134ce565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190612cfe565b611939565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610796575061079582611b00565b5b9050919050565b6060600080546107ac90613ad6565b80601f01602080910402602001604051908101604052809291908181526020018280546107d890613ad6565b80156108255780601f106107fa57610100808354040283529160200191610825565b820191906000526020600020905b81548152906001019060200180831161080857829003601f168201915b5050505050905090565b600061083a82611be2565b610879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610870906136cd565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108bf82610c33565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610930576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109279061374d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094f611c4e565b73ffffffffffffffffffffffffffffffffffffffff16148061097e575061097d81610978611c4e565b6117f7565b5b6109bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b49061364d565b60405180910390fd5b6109c78383611c56565b505050565b6000600980549050905090565b6109ea6109e4611c4e565b82611d0f565b610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a209061376d565b60405180910390fd5b610a34838383611ded565b505050565b6000610a4483610ce5565b8210610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c9061354d565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610af98383836040518060200160405280600081525061160f565b505050565b600b60149054906101000a900460ff1681565b6000610b1b6109cc565b8210610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b53906137ad565b60405180910390fd5b60098281548110610b7057610b6f613c6f565b5b90600052602060002001549050919050565b610b8a611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c10906136ed565b60405180910390fd5b8060029080519060200190610c2f929190612b12565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd39061368d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d9061366d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610da5611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906136ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b67016345785d8a000081565b606060018054610f3a90613ad6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6690613ad6565b8015610fb35780601f10610f8857610100808354040283529160200191610fb3565b820191906000526020600020905b815481529060010190602001808311610f9657829003601f168201915b5050505050905090565b600b60149054906101000a900460ff1661100c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611003906135cd565b60405180910390fd5b600f811115611050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110479061378d565b60405180910390fd5b600c548161105c6109cc565b611066919061390b565b11156110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e9061352d565b60405180910390fd5b348167016345785d8a00006110bc9190613992565b11156110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f4906137cd565b60405180910390fd5b60005b818110156111445760006111126109cc565b9050600c5461111f6109cc565b10156111305761112f3382612049565b5b50808061113c90613b39565b915050611100565b5050565b611150611c4e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b59061360d565b60405180910390fd5b80600660006111cb611c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611278611c4e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112bd91906134f0565b60405180910390a35050565b6112d1611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611357906136ed565b60405180910390fd5b600061136a6109cc565b905060005b601e8110156113b4576113a173b5713725b6e5e8b719596a3db218011b1286885c828461139c919061390b565b612049565b80806113ac90613b39565b91505061136f565b5050565b6113c0611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446906136ed565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc6064601e8461147d9190613992565b6114879190613961565b9081150290604051600060405180830381858888f193505050501580156114b2573d6000803e3d6000fd5b5073b5713725b6e5e8b719596a3db218011b1286885c73ffffffffffffffffffffffffffffffffffffffff166108fc6064601e846114f09190613992565b6114fa9190613961565b9081150290604051600060405180830381858888f19350505050158015611525573d6000803e3d6000fd5b50731462d5cbfa31733650cf84150136e3ae1573bbb173ffffffffffffffffffffffffffffffffffffffff166108fc60646014846115639190613992565b61156d9190613961565b9081150290604051600060405180830381858888f19350505050158015611598573d6000803e3d6000fd5b50734d166881a15db2e8c1ce2b058424a5523493289273ffffffffffffffffffffffffffffffffffffffff166108fc60646014846115d69190613992565b6115e09190613961565b9081150290604051600060405180830381858888f1935050505015801561160b573d6000803e3d6000fd5b5050565b61162061161a611c4e565b83611d0f565b61165f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116569061376d565b60405180910390fd5b61166b84848484612067565b50505050565b611679611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff906136ed565b60405180910390fd5b80600b60146101000a81548160ff02191690831515021790555050565b606061173082611be2565b61176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117669061372d565b60405180910390fd5b60006117796120c3565b9050600081511161179957604051806020016040528060008152506117c4565b806117a384612155565b6040516020016117b4929190613438565b6040516020818303038152906040525b915050919050565b600f81565b600c5481565b60606040518060800160405280605081526020016143aa60509139905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600061189883610ce5565b905060008167ffffffffffffffff8111156118b6576118b5613c9e565b5b6040519080825280602002602001820160405280156118e45781602001602082028036833780820191505090505b50905060005b8281101561192e576118fc8582610a39565b82828151811061190f5761190e613c6f565b5b602002602001018181525050808061192690613b39565b9150506118ea565b508092505050919050565b611941611c4e565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c7906136ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a379061358d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bcb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bdb5750611bda826122b6565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cc983610c33565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d1a82611be2565b611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d509061362d565b60405180910390fd5b6000611d6483610c33565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dd357508373ffffffffffffffffffffffffffffffffffffffff16611dbb8461082f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611de45750611de381856117f7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e0d82610c33565b73ffffffffffffffffffffffffffffffffffffffff1614611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a9061370d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca906135ed565b60405180910390fd5b611ede838383612320565b611ee9600082611c56565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f3991906139ec565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f90919061390b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612063828260405180602001604052806000815250612434565b5050565b612072848484611ded565b61207e8484848461248f565b6120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b49061356d565b60405180910390fd5b50505050565b6060600280546120d290613ad6565b80601f01602080910402602001604051908101604052809291908181526020018280546120fe90613ad6565b801561214b5780601f106121205761010080835404028352916020019161214b565b820191906000526020600020905b81548152906001019060200180831161212e57829003601f168201915b5050505050905090565b6060600082141561219d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122b1565b600082905060005b600082146121cf5780806121b890613b39565b915050600a826121c89190613961565b91506121a5565b60008167ffffffffffffffff8111156121eb576121ea613c9e565b5b6040519080825280601f01601f19166020018201604052801561221d5781602001600182028036833780820191505090505b5090505b600085146122aa5760018261223691906139ec565b9150600a856122459190613b82565b6030612251919061390b565b60f81b81838151811061226757612266613c6f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122a39190613961565b9450612221565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61232b838383612626565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561236e576123698161262b565b6123ad565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123ac576123ab8382612674565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f0576123eb816127e1565b61242f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461242e5761242d82826128b2565b5b5b505050565b61243e8383612931565b61244b600084848461248f565b61248a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124819061356d565b60405180910390fd5b505050565b60006124b08473ffffffffffffffffffffffffffffffffffffffff16612aff565b15612619578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124d9611c4e565b8786866040518563ffffffff1660e01b81526004016124fb9493929190613482565b602060405180830381600087803b15801561251557600080fd5b505af192505050801561254657506040513d601f19601f820116820180604052508101906125439190612f1b565b60015b6125c9573d8060008114612576576040519150601f19603f3d011682016040523d82523d6000602084013e61257b565b606091505b506000815114156125c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b89061356d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061261e565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268184610ce5565b61268b91906139ec565b9050600060086000848152602001908152602001600020549050818114612770576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506127f591906139ec565b90506000600a600084815260200190815260200160002054905060006009838154811061282557612824613c6f565b5b90600052602060002001549050806009838154811061284757612846613c6f565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548061289657612895613c40565b5b6001900381819060005260206000200160009055905550505050565b60006128bd83610ce5565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612998906136ad565b60405180910390fd5b6129aa81611be2565b156129ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e1906135ad565b60405180910390fd5b6129f660008383612320565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a46919061390b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612b1e90613ad6565b90600052602060002090601f016020900481019282612b405760008555612b87565b82601f10612b5957805160ff1916838001178555612b87565b82800160010185558215612b87579182015b82811115612b86578251825591602001919060010190612b6b565b5b509050612b949190612b98565b5090565b5b80821115612bb1576000816000905550600101612b99565b5090565b6000612bc8612bc38461382d565b613808565b905082815260208101848484011115612be457612be3613cd2565b5b612bef848285613a94565b509392505050565b6000612c0a612c058461385e565b613808565b905082815260208101848484011115612c2657612c25613cd2565b5b612c31848285613a94565b509392505050565b600081359050612c488161434d565b92915050565b600081359050612c5d81614364565b92915050565b600081359050612c728161437b565b92915050565b600081519050612c878161437b565b92915050565b600082601f830112612ca257612ca1613ccd565b5b8135612cb2848260208601612bb5565b91505092915050565b600082601f830112612cd057612ccf613ccd565b5b8135612ce0848260208601612bf7565b91505092915050565b600081359050612cf881614392565b92915050565b600060208284031215612d1457612d13613cdc565b5b6000612d2284828501612c39565b91505092915050565b60008060408385031215612d4257612d41613cdc565b5b6000612d5085828601612c39565b9250506020612d6185828601612c39565b9150509250929050565b600080600060608486031215612d8457612d83613cdc565b5b6000612d9286828701612c39565b9350506020612da386828701612c39565b9250506040612db486828701612ce9565b9150509250925092565b60008060008060808587031215612dd857612dd7613cdc565b5b6000612de687828801612c39565b9450506020612df787828801612c39565b9350506040612e0887828801612ce9565b925050606085013567ffffffffffffffff811115612e2957612e28613cd7565b5b612e3587828801612c8d565b91505092959194509250565b60008060408385031215612e5857612e57613cdc565b5b6000612e6685828601612c39565b9250506020612e7785828601612c4e565b9150509250929050565b60008060408385031215612e9857612e97613cdc565b5b6000612ea685828601612c39565b9250506020612eb785828601612ce9565b9150509250929050565b600060208284031215612ed757612ed6613cdc565b5b6000612ee584828501612c4e565b91505092915050565b600060208284031215612f0457612f03613cdc565b5b6000612f1284828501612c63565b91505092915050565b600060208284031215612f3157612f30613cdc565b5b6000612f3f84828501612c78565b91505092915050565b600060208284031215612f5e57612f5d613cdc565b5b600082013567ffffffffffffffff811115612f7c57612f7b613cd7565b5b612f8884828501612cbb565b91505092915050565b600060208284031215612fa757612fa6613cdc565b5b6000612fb584828501612ce9565b91505092915050565b6000612fca838361341a565b60208301905092915050565b612fdf81613a20565b82525050565b6000612ff08261389f565b612ffa81856138cd565b93506130058361388f565b8060005b8381101561303657815161301d8882612fbe565b9750613028836138c0565b925050600181019050613009565b5085935050505092915050565b61304c81613a32565b82525050565b600061305d826138aa565b61306781856138de565b9350613077818560208601613aa3565b61308081613ce1565b840191505092915050565b6000613096826138b5565b6130a081856138ef565b93506130b0818560208601613aa3565b6130b981613ce1565b840191505092915050565b60006130cf826138b5565b6130d98185613900565b93506130e9818560208601613aa3565b80840191505092915050565b6000613102602c836138ef565b915061310d82613cf2565b604082019050919050565b6000613125602b836138ef565b915061313082613d41565b604082019050919050565b60006131486032836138ef565b915061315382613d90565b604082019050919050565b600061316b6026836138ef565b915061317682613ddf565b604082019050919050565b600061318e601c836138ef565b915061319982613e2e565b602082019050919050565b60006131b16027836138ef565b91506131bc82613e57565b604082019050919050565b60006131d46024836138ef565b91506131df82613ea6565b604082019050919050565b60006131f76019836138ef565b915061320282613ef5565b602082019050919050565b600061321a602c836138ef565b915061322582613f1e565b604082019050919050565b600061323d6038836138ef565b915061324882613f6d565b604082019050919050565b6000613260602a836138ef565b915061326b82613fbc565b604082019050919050565b60006132836029836138ef565b915061328e8261400b565b604082019050919050565b60006132a66020836138ef565b91506132b18261405a565b602082019050919050565b60006132c9602c836138ef565b91506132d482614083565b604082019050919050565b60006132ec600583613900565b91506132f7826140d2565b600582019050919050565b600061330f6020836138ef565b915061331a826140fb565b602082019050919050565b60006133326029836138ef565b915061333d82614124565b604082019050919050565b6000613355602f836138ef565b915061336082614173565b604082019050919050565b60006133786021836138ef565b9150613383826141c2565b604082019050919050565b600061339b6031836138ef565b91506133a682614211565b604082019050919050565b60006133be6041836138ef565b91506133c982614260565b606082019050919050565b60006133e1602c836138ef565b91506133ec826142d5565b604082019050919050565b6000613404601a836138ef565b915061340f82614324565b602082019050919050565b61342381613a8a565b82525050565b61343281613a8a565b82525050565b600061344482856130c4565b915061345082846130c4565b915061345b826132df565b91508190509392505050565b600060208201905061347c6000830184612fd6565b92915050565b60006080820190506134976000830187612fd6565b6134a46020830186612fd6565b6134b16040830185613429565b81810360608301526134c38184613052565b905095945050505050565b600060208201905081810360008301526134e88184612fe5565b905092915050565b60006020820190506135056000830184613043565b92915050565b60006020820190508181036000830152613525818461308b565b905092915050565b60006020820190508181036000830152613546816130f5565b9050919050565b6000602082019050818103600083015261356681613118565b9050919050565b600060208201905081810360008301526135868161313b565b9050919050565b600060208201905081810360008301526135a68161315e565b9050919050565b600060208201905081810360008301526135c681613181565b9050919050565b600060208201905081810360008301526135e6816131a4565b9050919050565b60006020820190508181036000830152613606816131c7565b9050919050565b60006020820190508181036000830152613626816131ea565b9050919050565b600060208201905081810360008301526136468161320d565b9050919050565b6000602082019050818103600083015261366681613230565b9050919050565b6000602082019050818103600083015261368681613253565b9050919050565b600060208201905081810360008301526136a681613276565b9050919050565b600060208201905081810360008301526136c681613299565b9050919050565b600060208201905081810360008301526136e6816132bc565b9050919050565b6000602082019050818103600083015261370681613302565b9050919050565b6000602082019050818103600083015261372681613325565b9050919050565b6000602082019050818103600083015261374681613348565b9050919050565b600060208201905081810360008301526137668161336b565b9050919050565b600060208201905081810360008301526137868161338e565b9050919050565b600060208201905081810360008301526137a6816133b1565b9050919050565b600060208201905081810360008301526137c6816133d4565b9050919050565b600060208201905081810360008301526137e6816133f7565b9050919050565b60006020820190506138026000830184613429565b92915050565b6000613812613823565b905061381e8282613b08565b919050565b6000604051905090565b600067ffffffffffffffff82111561384857613847613c9e565b5b61385182613ce1565b9050602081019050919050565b600067ffffffffffffffff82111561387957613878613c9e565b5b61388282613ce1565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061391682613a8a565b915061392183613a8a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395657613955613bb3565b5b828201905092915050565b600061396c82613a8a565b915061397783613a8a565b92508261398757613986613be2565b5b828204905092915050565b600061399d82613a8a565b91506139a883613a8a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139e1576139e0613bb3565b5b828202905092915050565b60006139f782613a8a565b9150613a0283613a8a565b925082821015613a1557613a14613bb3565b5b828203905092915050565b6000613a2b82613a6a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ac1578082015181840152602081019050613aa6565b83811115613ad0576000848401525b50505050565b60006002820490506001821680613aee57607f821691505b60208210811415613b0257613b01613c11565b5b50919050565b613b1182613ce1565b810181811067ffffffffffffffff82111715613b3057613b2f613c9e565b5b80604052505050565b6000613b4482613a8a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b7757613b76613bb3565b5b600182019050919050565b6000613b8d82613a8a565b9150613b9883613a8a565b925082613ba857613ba7613be2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f507572636861736520776f756c64206578636565642074686520746f74616c2060008201527f737570706c79206f662044730000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65206973206e6f7420796574206f70656e2e2020436f6d65206261636b60008201527f206c617465722e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5265616c69747920646f65732065766572797468696e6720776974682031352060008201527f7061727469636c65732c20796f752063616e20646f207769746820313520447360208201527f2100000000000000000000000000000000000000000000000000000000000000604082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57726f6e6720616d6f756e74206f662045746865722073656e74000000000000600082015250565b61435681613a20565b811461436157600080fd5b50565b61436d81613a32565b811461437857600080fd5b50565b61438481613a3e565b811461438f57600080fd5b50565b61439b81613a8a565b81146143a657600080fd5b5056fe68747470733a2f2f697066732e696f2f697066732f6261666b72656961786379376a6274657a69686377796237677134617770346932366b6178657569377a626f6736336e6776356c78327269626a65a26469706673582212207a6bae09f7572be18556c7512a360b24e99f14761777a9a00cfb51cd52786c9a64736f6c63430008060033

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

0000000000000000000000000000000000000000000000000000000000002710

-----Decoded View---------------
Arg [0] : totalMotleys (uint256): 10000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000002710


Deployed Bytecode Sourcemap

41534:4600:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35049:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20753:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22252:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21789:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35689:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23142:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35357:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23518:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42326:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35879:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43310:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20447:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20177:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32801:148;;;;;;;;;;;;;:::i;:::-;;32159:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42222:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20922:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44349:696;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22545:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43755:194;;;;;;;;;;;;;:::i;:::-;;43005:297;;;;;;;;;;;;;:::i;:::-;;23740:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43453:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21342:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42276:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42363:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45969:162;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22911:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45094:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33104:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35049:224;35151:4;35190:35;35175:50;;;:11;:50;;;;:90;;;;35229:36;35253:11;35229:23;:36::i;:::-;35175:90;35168:97;;35049:224;;;:::o;20753:100::-;20807:13;20840:5;20833:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20753:100;:::o;22252:221::-;22328:7;22356:16;22364:7;22356;:16::i;:::-;22348:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22441:15;:24;22457:7;22441:24;;;;;;;;;;;;;;;;;;;;;22434:31;;22252:221;;;:::o;21789:397::-;21870:13;21886:23;21901:7;21886:14;:23::i;:::-;21870:39;;21934:5;21928:11;;:2;:11;;;;21920:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22014:5;21998:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22023:37;22040:5;22047:12;:10;:12::i;:::-;22023:16;:37::i;:::-;21998:62;21990:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22157:21;22166:2;22170:7;22157:8;:21::i;:::-;21859:327;21789:397;;:::o;35689:113::-;35750:7;35777:10;:17;;;;35770:24;;35689:113;:::o;23142:305::-;23303:41;23322:12;:10;:12::i;:::-;23336:7;23303:18;:41::i;:::-;23295:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23411:28;23421:4;23427:2;23431:7;23411:9;:28::i;:::-;23142:305;;;:::o;35357:256::-;35454:7;35490:23;35507:5;35490:16;:23::i;:::-;35482:5;:31;35474:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35579:12;:19;35592:5;35579:19;;;;;;;;;;;;;;;:26;35599:5;35579:26;;;;;;;;;;;;35572:33;;35357:256;;;;:::o;23518:151::-;23622:39;23639:4;23645:2;23649:7;23622:39;;;;;;;;;;;;:16;:39::i;:::-;23518:151;;;:::o;42326:30::-;;;;;;;;;;;;;:::o;35879:233::-;35954:7;35990:30;:28;:30::i;:::-;35982:5;:38;35974:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36087:10;36098:5;36087:17;;;;;;;;:::i;:::-;;;;;;;;;;36080:24;;35879:233;;;:::o;43310:90::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43389:3:::1;43377:9;:15;;;;;;;;;;;;:::i;:::-;;43310:90:::0;:::o;20447:239::-;20519:7;20539:13;20555:7;:16;20563:7;20555:16;;;;;;;;;;;;;;;;;;;;;20539:32;;20607:1;20590:19;;:5;:19;;;;20582:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20673:5;20666:12;;;20447:239;;;:::o;20177:208::-;20249:7;20294:1;20277:19;;:5;:19;;;;20269:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20361:9;:16;20371:5;20361:16;;;;;;;;;;;;;;;;20354:23;;20177:208;;;:::o;32801:148::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32908:1:::1;32871:40;;32892:6;;;;;;;;;;;32871:40;;;;;;;;;;;;32939:1;32922:6;;:19;;;;;;;;;;;;;;;;;;32801:148::o:0;32159:79::-;32197:7;32224:6;;;;;;;;;;;32217:13;;32159:79;:::o;42222:47::-;42260:9;42222:47;:::o;20922:104::-;20978:13;21011:7;21004:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20922:104;:::o;44349:696::-;44425:10;;;;;;;;;;;44417:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42317:2;44498:15;:36;;44490:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;44658:11;;44639:15;44623:13;:11;:13::i;:::-;:31;;;;:::i;:::-;:46;;44615:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;44767:9;44749:15;42260:9;44737:27;;;;:::i;:::-;:39;;44729:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44832:6;44828:210;44848:15;44844:1;:19;44828:210;;;44884:14;44901:13;:11;:13::i;:::-;44884:30;;44948:11;;44932:13;:11;:13::i;:::-;:27;44929:98;;;44979:32;44989:10;45001:9;44979;:32::i;:::-;44929:98;44869:169;44865:3;;;;;:::i;:::-;;;;44828:210;;;;44349:696;:::o;22545:295::-;22660:12;:10;:12::i;:::-;22648:24;;:8;:24;;;;22640:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22760:8;22715:18;:32;22734:12;:10;:12::i;:::-;22715:32;;;;;;;;;;;;;;;:42;22748:8;22715:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22813:8;22784:48;;22799:12;:10;:12::i;:::-;22784:48;;;22823:8;22784:48;;;;;;:::i;:::-;;;;;;;;22545:295;;:::o;43755:194::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43805:11:::1;43819:13;:11;:13::i;:::-;43805:27;;43843:6;43860:82;43875:2;43871:1;:6;43860:82;;;43898:32;42453:42;43928:1;43919:6;:10;;;;:::i;:::-;43898:9;:32::i;:::-;43879:3;;;;;:::i;:::-;;;;43860:82;;;43794:155;;43755:194::o:0;43005:297::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43051:12:::1;43066:21;43051:36;;43106:10;43098:28;;:44;43138:3;43135:2;43127:7;:10;;;;:::i;:::-;:14;;;;:::i;:::-;43098:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42453:42;43153:27;;:43;43192:3;43189:2;43181:7;:10;;;;:::i;:::-;:14;;;;:::i;:::-;43153:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42533:42;43207:22;;:38;43241:3;43238:2;43230:7;:10;;;;:::i;:::-;:14;;;;:::i;:::-;43207:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42614:42;43256:22;;:38;43290:3;43287:2;43279:7;:10;;;;:::i;:::-;:14;;;;:::i;:::-;43256:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43040:262;43005:297::o:0;23740:285::-;23872:41;23891:12;:10;:12::i;:::-;23905:7;23872:18;:41::i;:::-;23864:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23978:39;23992:4;23998:2;24002:7;24011:5;23978:13;:39::i;:::-;23740:285;;;;:::o;43453:94::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43531:8:::1;43518:10;;:21;;;;;;;;;;;;;;;;;;43453:94:::0;:::o;21342:380::-;21416:13;21450:17;21458:8;21450:7;:17::i;:::-;21442:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21532:17;21552:10;:8;:10::i;:::-;21532:30;;21613:1;21599:3;21593:17;:21;:121;;;;;;;;;;;;;;;;;21658:3;21663:19;:8;:17;:19::i;:::-;21641:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21593:121;21573:141;;;21342:380;;;:::o;42276:43::-;42317:2;42276:43;:::o;42363:34::-;;;;:::o;45969:162::-;46011:13;46034:89;;;;;;;;;;;;;;;;;;;45969:162;:::o;22911:164::-;23008:4;23032:18;:25;23051:5;23032:25;;;;;;;;;;;;;;;:35;23058:8;23032:35;;;;;;;;;;;;;;;;;;;;;;;;;23025:42;;22911:164;;;;:::o;45094:331::-;45156:15;45177:18;45198:17;45208:6;45198:9;:17::i;:::-;45177:38;;45226:25;45268:10;45254:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45226:53;;45294:9;45290:106;45309:10;45305:1;:14;45290:106;;;45354:30;45374:6;45382:1;45354:19;:30::i;:::-;45340:8;45349:1;45340:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45321:3;;;;;:::i;:::-;;;;45290:106;;;;45413:8;45406:15;;;;45094:331;;;:::o;33104:244::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33213:1:::1;33193:22;;:8;:22;;;;33185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33303:8;33274:38;;33295:6;;;;;;;;;;;33274:38;;;;;;;;;;;;33332:8;33323:6;;:17;;;;;;;;;;;;;;;;;;33104:244:::0;:::o;19821:292::-;19923:4;19962:25;19947:40;;;:11;:40;;;;:105;;;;20019:33;20004:48;;;:11;:48;;;;19947:105;:158;;;;20069:36;20093:11;20069:23;:36::i;:::-;19947:158;19940:165;;19821:292;;;:::o;25492:127::-;25557:4;25609:1;25581:30;;:7;:16;25589:7;25581:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25574:37;;25492:127;;;:::o;16215:98::-;16268:7;16295:10;16288:17;;16215:98;:::o;29369:174::-;29471:2;29444:15;:24;29460:7;29444:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29527:7;29523:2;29489:46;;29498:23;29513:7;29498:14;:23::i;:::-;29489:46;;;;;;;;;;;;29369:174;;:::o;25786:348::-;25879:4;25904:16;25912:7;25904;:16::i;:::-;25896:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25980:13;25996:23;26011:7;25996:14;:23::i;:::-;25980:39;;26049:5;26038:16;;:7;:16;;;:51;;;;26082:7;26058:31;;:20;26070:7;26058:11;:20::i;:::-;:31;;;26038:51;:87;;;;26093:32;26110:5;26117:7;26093:16;:32::i;:::-;26038:87;26030:96;;;25786:348;;;;:::o;28707:544::-;28832:4;28805:31;;:23;28820:7;28805:14;:23::i;:::-;:31;;;28797:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28915:1;28901:16;;:2;:16;;;;28893:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28971:39;28992:4;28998:2;29002:7;28971:20;:39::i;:::-;29075:29;29092:1;29096:7;29075:8;:29::i;:::-;29136:1;29117:9;:15;29127:4;29117:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29165:1;29148:9;:13;29158:2;29148:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29196:2;29177:7;:16;29185:7;29177:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29235:7;29231:2;29216:27;;29225:4;29216:27;;;;;;;;;;;;28707:544;;;:::o;26476:110::-;26552:26;26562:2;26566:7;26552:26;;;;;;;;;;;;:9;:26::i;:::-;26476:110;;:::o;24907:272::-;25021:28;25031:4;25037:2;25041:7;25021:9;:28::i;:::-;25068:48;25091:4;25097:2;25101:7;25110:5;25068:22;:48::i;:::-;25060:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24907:272;;;;:::o;21177:94::-;21221:13;21254:9;21247:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21177:94;:::o;16787:723::-;16843:13;17073:1;17064:5;:10;17060:53;;;17091:10;;;;;;;;;;;;;;;;;;;;;17060:53;17123:12;17138:5;17123:20;;17154:14;17179:78;17194:1;17186:4;:9;17179:78;;17212:8;;;;;:::i;:::-;;;;17243:2;17235:10;;;;;:::i;:::-;;;17179:78;;;17267:19;17299:6;17289:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17267:39;;17317:154;17333:1;17324:5;:10;17317:154;;17361:1;17351:11;;;;;:::i;:::-;;;17428:2;17420:5;:10;;;;:::i;:::-;17407:2;:24;;;;:::i;:::-;17394:39;;17377:6;17384;17377:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17457:2;17448:11;;;;;:::i;:::-;;;17317:154;;;17495:6;17481:21;;;;;16787:723;;;;:::o;1515:157::-;1600:4;1639:25;1624:40;;;:11;:40;;;;1617:47;;1515:157;;;:::o;36725:589::-;36869:45;36896:4;36902:2;36906:7;36869:26;:45::i;:::-;36947:1;36931:18;;:4;:18;;;36927:187;;;36966:40;36998:7;36966:31;:40::i;:::-;36927:187;;;37036:2;37028:10;;:4;:10;;;37024:90;;37055:47;37088:4;37094:7;37055:32;:47::i;:::-;37024:90;36927:187;37142:1;37128:16;;:2;:16;;;37124:183;;;37161:45;37198:7;37161:36;:45::i;:::-;37124:183;;;37234:4;37228:10;;:2;:10;;;37224:83;;37255:40;37283:2;37287:7;37255:27;:40::i;:::-;37224:83;37124:183;36725:589;;;:::o;26813:250::-;26909:18;26915:2;26919:7;26909:5;:18::i;:::-;26946:54;26977:1;26981:2;26985:7;26994:5;26946:22;:54::i;:::-;26938:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26813:250;;;:::o;30108:843::-;30229:4;30255:15;:2;:13;;;:15::i;:::-;30251:693;;;30307:2;30291:36;;;30328:12;:10;:12::i;:::-;30342:4;30348:7;30357:5;30291:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30287:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30554:1;30537:6;:13;:18;30533:341;;;30580:60;;;;;;;;;;:::i;:::-;;;;;;;;30533:341;30824:6;30818:13;30809:6;30805:2;30801:15;30794:38;30287:602;30424:45;;;30414:55;;;:6;:55;;;;30407:62;;;;;30251:693;30928:4;30921:11;;30108:843;;;;;;;:::o;31564:93::-;;;;:::o;38037:164::-;38141:10;:17;;;;38114:15;:24;38130:7;38114:24;;;;;;;;;;;:44;;;;38169:10;38185:7;38169:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38037:164;:::o;38828:988::-;39094:22;39144:1;39119:22;39136:4;39119:16;:22::i;:::-;:26;;;;:::i;:::-;39094:51;;39156:18;39177:17;:26;39195:7;39177:26;;;;;;;;;;;;39156:47;;39324:14;39310:10;:28;39306:328;;39355:19;39377:12;:18;39390:4;39377:18;;;;;;;;;;;;;;;:34;39396:14;39377:34;;;;;;;;;;;;39355:56;;39461:11;39428:12;:18;39441:4;39428:18;;;;;;;;;;;;;;;:30;39447:10;39428:30;;;;;;;;;;;:44;;;;39578:10;39545:17;:30;39563:11;39545:30;;;;;;;;;;;:43;;;;39340:294;39306:328;39730:17;:26;39748:7;39730:26;;;;;;;;;;;39723:33;;;39774:12;:18;39787:4;39774:18;;;;;;;;;;;;;;;:34;39793:14;39774:34;;;;;;;;;;;39767:41;;;38909:907;;38828:988;;:::o;40111:1079::-;40364:22;40409:1;40389:10;:17;;;;:21;;;;:::i;:::-;40364:46;;40421:18;40442:15;:24;40458:7;40442:24;;;;;;;;;;;;40421:45;;40793:19;40815:10;40826:14;40815:26;;;;;;;;:::i;:::-;;;;;;;;;;40793:48;;40879:11;40854:10;40865;40854:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40990:10;40959:15;:28;40975:11;40959:28;;;;;;;;;;;:41;;;;41131:15;:24;41147:7;41131:24;;;;;;;;;;;41124:31;;;41166:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40182:1008;;;40111:1079;:::o;37615:221::-;37700:14;37717:20;37734:2;37717:16;:20::i;:::-;37700:37;;37775:7;37748:12;:16;37761:2;37748:16;;;;;;;;;;;;;;;:24;37765:6;37748:24;;;;;;;;;;;:34;;;;37822:6;37793:17;:26;37811:7;37793:26;;;;;;;;;;;:35;;;;37689:147;37615:221;;:::o;27399:382::-;27493:1;27479:16;;:2;:16;;;;27471:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27552:16;27560:7;27552;:16::i;:::-;27551:17;27543:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27614:45;27643:1;27647:2;27651:7;27614:20;:45::i;:::-;27689:1;27672:9;:13;27682:2;27672:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27720:2;27701:7;:16;27709:7;27701:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27765:7;27761:2;27740:33;;27757:1;27740:33;;;;;;;;;;;;27399:382;;:::o;8415:422::-;8475:4;8683:12;8794:7;8782:20;8774:28;;8828:1;8821:4;:8;8814:15;;;8415:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4746:388;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5271:79;;:::i;:::-;5233:2;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5223:391;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:2;;;5731:79;;:::i;:::-;5693:2;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5683:260;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:2;;;6062:79;;:::i;:::-;6024:2;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;6014:262;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:2;;;6406:79;;:::i;:::-;6368:2;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6358:273;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:2;;;6761:79;;:::i;:::-;6723:2;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:2;;;6961:79;;:::i;:::-;6925:2;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6713:433;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:2;;;7266:79;;:::i;:::-;7228:2;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7218:263;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7567:99;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7737:53;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8623:50;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;;;;;:::o;9798:366::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9944:220;;;:::o;10170:366::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10316:220;;;:::o;10542:366::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10688:220;;;:::o;10914:366::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;11060:220;;;:::o;11286:366::-;11428:3;11449:67;11513:2;11508:3;11449:67;:::i;:::-;11442:74;;11525:93;11614:3;11525:93;:::i;:::-;11643:2;11638:3;11634:12;11627:19;;11432:220;;;:::o;11658:366::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11804:220;;;:::o;12030:366::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12176:220;;;:::o;12402:366::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12548:220;;;:::o;12774:366::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12920:220;;;:::o;13146:366::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13292:220;;;:::o;13518:366::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13664:220;;;:::o;13890:366::-;14032:3;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14129:93;14218:3;14129:93;:::i;:::-;14247:2;14242:3;14238:12;14231:19;;14036:220;;;:::o;14262:366::-;14404:3;14425:67;14489:2;14484:3;14425:67;:::i;:::-;14418:74;;14501:93;14590:3;14501:93;:::i;:::-;14619:2;14614:3;14610:12;14603:19;;14408:220;;;:::o;14634:366::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14780:220;;;:::o;15006:400::-;15166:3;15187:84;15269:1;15264:3;15187:84;:::i;:::-;15180:91;;15280:93;15369:3;15280:93;:::i;:::-;15398:1;15393:3;15389:11;15382:18;;15170:236;;;:::o;15412:366::-;15554:3;15575:67;15639:2;15634:3;15575:67;:::i;:::-;15568:74;;15651:93;15740:3;15651:93;:::i;:::-;15769:2;15764:3;15760:12;15753:19;;15558:220;;;:::o;15784:366::-;15926:3;15947:67;16011:2;16006:3;15947:67;:::i;:::-;15940:74;;16023:93;16112:3;16023:93;:::i;:::-;16141:2;16136:3;16132:12;16125:19;;15930:220;;;:::o;16156:366::-;16298:3;16319:67;16383:2;16378:3;16319:67;:::i;:::-;16312:74;;16395:93;16484:3;16395:93;:::i;:::-;16513:2;16508:3;16504:12;16497:19;;16302:220;;;:::o;16528:366::-;16670:3;16691:67;16755:2;16750:3;16691:67;:::i;:::-;16684:74;;16767:93;16856:3;16767:93;:::i;:::-;16885:2;16880:3;16876:12;16869:19;;16674:220;;;:::o;16900:366::-;17042:3;17063:67;17127:2;17122:3;17063:67;:::i;:::-;17056:74;;17139:93;17228:3;17139:93;:::i;:::-;17257:2;17252:3;17248:12;17241:19;;17046:220;;;:::o;17272:366::-;17414:3;17435:67;17499:2;17494:3;17435:67;:::i;:::-;17428:74;;17511:93;17600:3;17511:93;:::i;:::-;17629:2;17624:3;17620:12;17613:19;;17418:220;;;:::o;17644:366::-;17786:3;17807:67;17871:2;17866:3;17807:67;:::i;:::-;17800:74;;17883:93;17972:3;17883:93;:::i;:::-;18001:2;17996:3;17992:12;17985:19;;17790:220;;;:::o;18016:366::-;18158:3;18179:67;18243:2;18238:3;18179:67;:::i;:::-;18172:74;;18255:93;18344:3;18255:93;:::i;:::-;18373:2;18368:3;18364:12;18357:19;;18162:220;;;:::o;18388:108::-;18465:24;18483:5;18465:24;:::i;:::-;18460:3;18453:37;18443:53;;:::o;18502:118::-;18589:24;18607:5;18589:24;:::i;:::-;18584:3;18577:37;18567:53;;:::o;18626:701::-;18907:3;18929:95;19020:3;19011:6;18929:95;:::i;:::-;18922:102;;19041:95;19132:3;19123:6;19041:95;:::i;:::-;19034:102;;19153:148;19297:3;19153:148;:::i;:::-;19146:155;;19318:3;19311:10;;18911:416;;;;;:::o;19333:222::-;19426:4;19464:2;19453:9;19449:18;19441:26;;19477:71;19545:1;19534:9;19530:17;19521:6;19477:71;:::i;:::-;19431:124;;;;:::o;19561:640::-;19756:4;19794:3;19783:9;19779:19;19771:27;;19808:71;19876:1;19865:9;19861:17;19852:6;19808:71;:::i;:::-;19889:72;19957:2;19946:9;19942:18;19933:6;19889:72;:::i;:::-;19971;20039:2;20028:9;20024:18;20015:6;19971:72;:::i;:::-;20090:9;20084:4;20080:20;20075:2;20064:9;20060:18;20053:48;20118:76;20189:4;20180:6;20118:76;:::i;:::-;20110:84;;19761:440;;;;;;;:::o;20207:373::-;20350:4;20388:2;20377:9;20373:18;20365:26;;20437:9;20431:4;20427:20;20423:1;20412:9;20408:17;20401:47;20465:108;20568:4;20559:6;20465:108;:::i;:::-;20457:116;;20355:225;;;;:::o;20586:210::-;20673:4;20711:2;20700:9;20696:18;20688:26;;20724:65;20786:1;20775:9;20771:17;20762:6;20724:65;:::i;:::-;20678:118;;;;:::o;20802:313::-;20915:4;20953:2;20942:9;20938:18;20930:26;;21002:9;20996:4;20992:20;20988:1;20977:9;20973:17;20966:47;21030:78;21103:4;21094:6;21030:78;:::i;:::-;21022:86;;20920:195;;;;:::o;21121:419::-;21287:4;21325:2;21314:9;21310:18;21302:26;;21374:9;21368:4;21364:20;21360:1;21349:9;21345:17;21338:47;21402:131;21528:4;21402:131;:::i;:::-;21394:139;;21292:248;;;:::o;21546:419::-;21712:4;21750:2;21739:9;21735:18;21727:26;;21799:9;21793:4;21789:20;21785:1;21774:9;21770:17;21763:47;21827:131;21953:4;21827:131;:::i;:::-;21819:139;;21717:248;;;:::o;21971:419::-;22137:4;22175:2;22164:9;22160:18;22152:26;;22224:9;22218:4;22214:20;22210:1;22199:9;22195:17;22188:47;22252:131;22378:4;22252:131;:::i;:::-;22244:139;;22142:248;;;:::o;22396:419::-;22562:4;22600:2;22589:9;22585:18;22577:26;;22649:9;22643:4;22639:20;22635:1;22624:9;22620:17;22613:47;22677:131;22803:4;22677:131;:::i;:::-;22669:139;;22567:248;;;:::o;22821:419::-;22987:4;23025:2;23014:9;23010:18;23002:26;;23074:9;23068:4;23064:20;23060:1;23049:9;23045:17;23038:47;23102:131;23228:4;23102:131;:::i;:::-;23094:139;;22992:248;;;:::o;23246:419::-;23412:4;23450:2;23439:9;23435:18;23427:26;;23499:9;23493:4;23489:20;23485:1;23474:9;23470:17;23463:47;23527:131;23653:4;23527:131;:::i;:::-;23519:139;;23417:248;;;:::o;23671:419::-;23837:4;23875:2;23864:9;23860:18;23852:26;;23924:9;23918:4;23914:20;23910:1;23899:9;23895:17;23888:47;23952:131;24078:4;23952:131;:::i;:::-;23944:139;;23842:248;;;:::o;24096:419::-;24262:4;24300:2;24289:9;24285:18;24277:26;;24349:9;24343:4;24339:20;24335:1;24324:9;24320:17;24313:47;24377:131;24503:4;24377:131;:::i;:::-;24369:139;;24267:248;;;:::o;24521:419::-;24687:4;24725:2;24714:9;24710:18;24702:26;;24774:9;24768:4;24764:20;24760:1;24749:9;24745:17;24738:47;24802:131;24928:4;24802:131;:::i;:::-;24794:139;;24692:248;;;:::o;24946:419::-;25112:4;25150:2;25139:9;25135:18;25127:26;;25199:9;25193:4;25189:20;25185:1;25174:9;25170:17;25163:47;25227:131;25353:4;25227:131;:::i;:::-;25219:139;;25117:248;;;:::o;25371:419::-;25537:4;25575:2;25564:9;25560:18;25552:26;;25624:9;25618:4;25614:20;25610:1;25599:9;25595:17;25588:47;25652:131;25778:4;25652:131;:::i;:::-;25644:139;;25542:248;;;:::o;25796:419::-;25962:4;26000:2;25989:9;25985:18;25977:26;;26049:9;26043:4;26039:20;26035:1;26024:9;26020:17;26013:47;26077:131;26203:4;26077:131;:::i;:::-;26069:139;;25967:248;;;:::o;26221:419::-;26387:4;26425:2;26414:9;26410:18;26402:26;;26474:9;26468:4;26464:20;26460:1;26449:9;26445:17;26438:47;26502:131;26628:4;26502:131;:::i;:::-;26494:139;;26392:248;;;:::o;26646:419::-;26812:4;26850:2;26839:9;26835:18;26827:26;;26899:9;26893:4;26889:20;26885:1;26874:9;26870:17;26863:47;26927:131;27053:4;26927:131;:::i;:::-;26919:139;;26817:248;;;:::o;27071:419::-;27237:4;27275:2;27264:9;27260:18;27252:26;;27324:9;27318:4;27314:20;27310:1;27299:9;27295:17;27288:47;27352:131;27478:4;27352:131;:::i;:::-;27344:139;;27242:248;;;:::o;27496:419::-;27662:4;27700:2;27689:9;27685:18;27677:26;;27749:9;27743:4;27739:20;27735:1;27724:9;27720:17;27713:47;27777:131;27903:4;27777:131;:::i;:::-;27769:139;;27667:248;;;:::o;27921:419::-;28087:4;28125:2;28114:9;28110:18;28102:26;;28174:9;28168:4;28164:20;28160:1;28149:9;28145:17;28138:47;28202:131;28328:4;28202:131;:::i;:::-;28194:139;;28092:248;;;:::o;28346:419::-;28512:4;28550:2;28539:9;28535:18;28527:26;;28599:9;28593:4;28589:20;28585:1;28574:9;28570:17;28563:47;28627:131;28753:4;28627:131;:::i;:::-;28619:139;;28517:248;;;:::o;28771:419::-;28937:4;28975:2;28964:9;28960:18;28952:26;;29024:9;29018:4;29014:20;29010:1;28999:9;28995:17;28988:47;29052:131;29178:4;29052:131;:::i;:::-;29044:139;;28942:248;;;:::o;29196:419::-;29362:4;29400:2;29389:9;29385:18;29377:26;;29449:9;29443:4;29439:20;29435:1;29424:9;29420:17;29413:47;29477:131;29603:4;29477:131;:::i;:::-;29469:139;;29367:248;;;:::o;29621:419::-;29787:4;29825:2;29814:9;29810:18;29802:26;;29874:9;29868:4;29864:20;29860:1;29849:9;29845:17;29838:47;29902:131;30028:4;29902:131;:::i;:::-;29894:139;;29792:248;;;:::o;30046:419::-;30212:4;30250:2;30239:9;30235:18;30227:26;;30299:9;30293:4;30289:20;30285:1;30274:9;30270:17;30263:47;30327:131;30453:4;30327:131;:::i;:::-;30319:139;;30217:248;;;:::o;30471:222::-;30564:4;30602:2;30591:9;30587:18;30579:26;;30615:71;30683:1;30672:9;30668:17;30659:6;30615:71;:::i;:::-;30569:124;;;;:::o;30699:129::-;30733:6;30760:20;;:::i;:::-;30750:30;;30789:33;30817:4;30809:6;30789:33;:::i;:::-;30740:88;;;:::o;30834:75::-;30867:6;30900:2;30894:9;30884:19;;30874:35;:::o;30915:307::-;30976:4;31066:18;31058:6;31055:30;31052:2;;;31088:18;;:::i;:::-;31052:2;31126:29;31148:6;31126:29;:::i;:::-;31118:37;;31210:4;31204;31200:15;31192:23;;30981:241;;;:::o;31228:308::-;31290:4;31380:18;31372:6;31369:30;31366:2;;;31402:18;;:::i;:::-;31366:2;31440:29;31462:6;31440:29;:::i;:::-;31432:37;;31524:4;31518;31514:15;31506:23;;31295:241;;;:::o;31542:132::-;31609:4;31632:3;31624:11;;31662:4;31657:3;31653:14;31645:22;;31614:60;;;:::o;31680:114::-;31747:6;31781:5;31775:12;31765:22;;31754:40;;;:::o;31800:98::-;31851:6;31885:5;31879:12;31869:22;;31858:40;;;:::o;31904:99::-;31956:6;31990:5;31984:12;31974:22;;31963:40;;;:::o;32009:113::-;32079:4;32111;32106:3;32102:14;32094:22;;32084:38;;;:::o;32128:184::-;32227:11;32261:6;32256:3;32249:19;32301:4;32296:3;32292:14;32277:29;;32239:73;;;;:::o;32318:168::-;32401:11;32435:6;32430:3;32423:19;32475:4;32470:3;32466:14;32451:29;;32413:73;;;;:::o;32492:169::-;32576:11;32610:6;32605:3;32598:19;32650:4;32645:3;32641:14;32626:29;;32588:73;;;;:::o;32667:148::-;32769:11;32806:3;32791:18;;32781:34;;;;:::o;32821:305::-;32861:3;32880:20;32898:1;32880:20;:::i;:::-;32875:25;;32914:20;32932:1;32914:20;:::i;:::-;32909:25;;33068:1;33000:66;32996:74;32993:1;32990:81;32987:2;;;33074:18;;:::i;:::-;32987:2;33118:1;33115;33111:9;33104:16;;32865:261;;;;:::o;33132:185::-;33172:1;33189:20;33207:1;33189:20;:::i;:::-;33184:25;;33223:20;33241:1;33223:20;:::i;:::-;33218:25;;33262:1;33252:2;;33267:18;;:::i;:::-;33252:2;33309:1;33306;33302:9;33297:14;;33174:143;;;;:::o;33323:348::-;33363:7;33386:20;33404:1;33386:20;:::i;:::-;33381:25;;33420:20;33438:1;33420:20;:::i;:::-;33415:25;;33608:1;33540:66;33536:74;33533:1;33530:81;33525:1;33518:9;33511:17;33507:105;33504:2;;;33615:18;;:::i;:::-;33504:2;33663:1;33660;33656:9;33645:20;;33371:300;;;;:::o;33677:191::-;33717:4;33737:20;33755:1;33737:20;:::i;:::-;33732:25;;33771:20;33789:1;33771:20;:::i;:::-;33766:25;;33810:1;33807;33804:8;33801:2;;;33815:18;;:::i;:::-;33801:2;33860:1;33857;33853:9;33845:17;;33722:146;;;;:::o;33874:96::-;33911:7;33940:24;33958:5;33940:24;:::i;:::-;33929:35;;33919:51;;;:::o;33976:90::-;34010:7;34053:5;34046:13;34039:21;34028:32;;34018:48;;;:::o;34072:149::-;34108:7;34148:66;34141:5;34137:78;34126:89;;34116:105;;;:::o;34227:126::-;34264:7;34304:42;34297:5;34293:54;34282:65;;34272:81;;;:::o;34359:77::-;34396:7;34425:5;34414:16;;34404:32;;;:::o;34442:154::-;34526:6;34521:3;34516;34503:30;34588:1;34579:6;34574:3;34570:16;34563:27;34493:103;;;:::o;34602:307::-;34670:1;34680:113;34694:6;34691:1;34688:13;34680:113;;;34779:1;34774:3;34770:11;34764:18;34760:1;34755:3;34751:11;34744:39;34716:2;34713:1;34709:10;34704:15;;34680:113;;;34811:6;34808:1;34805:13;34802:2;;;34891:1;34882:6;34877:3;34873:16;34866:27;34802:2;34651:258;;;;:::o;34915:320::-;34959:6;34996:1;34990:4;34986:12;34976:22;;35043:1;35037:4;35033:12;35064:18;35054:2;;35120:4;35112:6;35108:17;35098:27;;35054:2;35182;35174:6;35171:14;35151:18;35148:38;35145:2;;;35201:18;;:::i;:::-;35145:2;34966:269;;;;:::o;35241:281::-;35324:27;35346:4;35324:27;:::i;:::-;35316:6;35312:40;35454:6;35442:10;35439:22;35418:18;35406:10;35403:34;35400:62;35397:2;;;35465:18;;:::i;:::-;35397:2;35505:10;35501:2;35494:22;35284:238;;;:::o;35528:233::-;35567:3;35590:24;35608:5;35590:24;:::i;:::-;35581:33;;35636:66;35629:5;35626:77;35623:2;;;35706:18;;:::i;:::-;35623:2;35753:1;35746:5;35742:13;35735:20;;35571:190;;;:::o;35767:176::-;35799:1;35816:20;35834:1;35816:20;:::i;:::-;35811:25;;35850:20;35868:1;35850:20;:::i;:::-;35845:25;;35889:1;35879:2;;35894:18;;:::i;:::-;35879:2;35935:1;35932;35928:9;35923:14;;35801:142;;;;:::o;35949:180::-;35997:77;35994:1;35987:88;36094:4;36091:1;36084:15;36118:4;36115:1;36108:15;36135:180;36183:77;36180:1;36173:88;36280:4;36277:1;36270:15;36304:4;36301:1;36294:15;36321:180;36369:77;36366:1;36359:88;36466:4;36463:1;36456:15;36490:4;36487:1;36480:15;36507:180;36555:77;36552:1;36545:88;36652:4;36649:1;36642:15;36676:4;36673:1;36666:15;36693:180;36741:77;36738:1;36731:88;36838:4;36835:1;36828:15;36862:4;36859:1;36852:15;36879:180;36927:77;36924:1;36917:88;37024:4;37021:1;37014:15;37048:4;37045:1;37038:15;37065:117;37174:1;37171;37164:12;37188:117;37297:1;37294;37287:12;37311:117;37420:1;37417;37410:12;37434:117;37543:1;37540;37533:12;37557:102;37598:6;37649:2;37645:7;37640:2;37633:5;37629:14;37625:28;37615:38;;37605:54;;;:::o;37665:231::-;37805:34;37801:1;37793:6;37789:14;37782:58;37874:14;37869:2;37861:6;37857:15;37850:39;37771:125;:::o;37902:230::-;38042:34;38038:1;38030:6;38026:14;38019:58;38111:13;38106:2;38098:6;38094:15;38087:38;38008:124;:::o;38138:237::-;38278:34;38274:1;38266:6;38262:14;38255:58;38347:20;38342:2;38334:6;38330:15;38323:45;38244:131;:::o;38381:225::-;38521:34;38517:1;38509:6;38505:14;38498:58;38590:8;38585:2;38577:6;38573:15;38566:33;38487:119;:::o;38612:178::-;38752:30;38748:1;38740:6;38736:14;38729:54;38718:72;:::o;38796:226::-;38936:34;38932:1;38924:6;38920:14;38913:58;39005:9;39000:2;38992:6;38988:15;38981:34;38902:120;:::o;39028:223::-;39168:34;39164:1;39156:6;39152:14;39145:58;39237:6;39232:2;39224:6;39220:15;39213:31;39134:117;:::o;39257:175::-;39397:27;39393:1;39385:6;39381:14;39374:51;39363:69;:::o;39438:231::-;39578:34;39574:1;39566:6;39562:14;39555:58;39647:14;39642:2;39634:6;39630:15;39623:39;39544:125;:::o;39675:243::-;39815:34;39811:1;39803:6;39799:14;39792:58;39884:26;39879:2;39871:6;39867:15;39860:51;39781:137;:::o;39924:229::-;40064:34;40060:1;40052:6;40048:14;40041:58;40133:12;40128:2;40120:6;40116:15;40109:37;40030:123;:::o;40159:228::-;40299:34;40295:1;40287:6;40283:14;40276:58;40368:11;40363:2;40355:6;40351:15;40344:36;40265:122;:::o;40393:182::-;40533:34;40529:1;40521:6;40517:14;40510:58;40499:76;:::o;40581:231::-;40721:34;40717:1;40709:6;40705:14;40698:58;40790:14;40785:2;40777:6;40773:15;40766:39;40687:125;:::o;40818:155::-;40958:7;40954:1;40946:6;40942:14;40935:31;40924:49;:::o;40979:182::-;41119:34;41115:1;41107:6;41103:14;41096:58;41085:76;:::o;41167:228::-;41307:34;41303:1;41295:6;41291:14;41284:58;41376:11;41371:2;41363:6;41359:15;41352:36;41273:122;:::o;41401:234::-;41541:34;41537:1;41529:6;41525:14;41518:58;41610:17;41605:2;41597:6;41593:15;41586:42;41507:128;:::o;41641:220::-;41781:34;41777:1;41769:6;41765:14;41758:58;41850:3;41845:2;41837:6;41833:15;41826:28;41747:114;:::o;41867:236::-;42007:34;42003:1;41995:6;41991:14;41984:58;42076:19;42071:2;42063:6;42059:15;42052:44;41973:130;:::o;42109:289::-;42249:34;42245:1;42237:6;42233:14;42226:58;42318:34;42313:2;42305:6;42301:15;42294:59;42387:3;42382:2;42374:6;42370:15;42363:28;42215:183;:::o;42404:231::-;42544:34;42540:1;42532:6;42528:14;42521:58;42613:14;42608:2;42600:6;42596:15;42589:39;42510:125;:::o;42641:176::-;42781:28;42777:1;42769:6;42765:14;42758:52;42747:70;:::o;42823:122::-;42896:24;42914:5;42896:24;:::i;:::-;42889:5;42886:35;42876:2;;42935:1;42932;42925:12;42876:2;42866:79;:::o;42951:116::-;43021:21;43036:5;43021:21;:::i;:::-;43014:5;43011:32;43001:2;;43057:1;43054;43047:12;43001:2;42991:76;:::o;43073:120::-;43145:23;43162:5;43145:23;:::i;:::-;43138:5;43135:34;43125:2;;43183:1;43180;43173:12;43125:2;43115:78;:::o;43199:122::-;43272:24;43290:5;43272:24;:::i;:::-;43265:5;43262:35;43252:2;;43311:1;43308;43301:12;43252:2;43242:79;:::o

Swarm Source

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