ETH Price: $3,337.85 (-0.17%)

Token

Dope Lyrics (LYRICS)
 

Overview

Max Total Supply

190 LYRICS

Holders

61

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
neet.eth
Balance
5 LYRICS
0x326E90EBe2957EB593CD4210ab7e314c719aCAA2
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:
DopeLyrics

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";
        uint256 encodedLen = 4 * ((len + 2) / 3);
        bytes memory result = new bytes(encodedLen + 32);
        bytes memory table = TABLE;
        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)
            for {
                let i := 0
            } lt(i, len) {
            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)
                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)
                mstore(resultPtr, out)
                resultPtr := add(resultPtr, 4)
            }
            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
            mstore(result, encodedLen)
        }
        return string(result);
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

library Buffer {
    function hasCapacityFor(bytes memory buffer, uint256 needed) internal pure returns (bool) {
        uint256 size;
        uint256 used;
        assembly {
            size := mload(buffer)
            used := mload(add(buffer, 32))
        }
        return size >= 32 && used <= size - 32 && used + needed <= size - 32;
    }
    
    function toString(bytes memory buffer) internal pure returns (string memory) {
        require(hasCapacityFor(buffer, 0), "Buffer.toString: invalid buffer");
        string memory ret;
        assembly {
            ret := add(buffer, 32)
        }
        return ret;
    }
    
    function append(bytes memory buffer, string memory str) internal view {
        require(hasCapacityFor(buffer, bytes(str).length), "Buffer.append: no capacity");
        assembly {
            let len := mload(add(buffer, 32))
            pop(staticcall(gas(), 0x4, add(str, 32), mload(str), add(len, add(buffer, 64)), mload(str)))
            mstore(add(buffer, 32), add(len, mload(str)))
        }
    }
}

interface Dope
{
    function ownerOf (uint256 tokenId) external view returns (address);
}

interface RareQr
{
    function ownerOf (uint256 tokenId) external view returns (address);
}

contract DopeLyrics is ERC721, ReentrancyGuard {
    address payable public owner;
    address private dopeAddress = 0x8707276DF042E89669d69A177d3DA7dC78bd8723;
    address private qrAddress = 0x00000000fFfD97acDc8C5585C818F6b0f946C0eD;
    Dope dopeContract = Dope(dopeAddress);
    RareQr qrContract = RareQr(qrAddress);
    uint256 public _maxSupply = 4096;
    uint16 private _count = 0;
    uint16 private _offset = 150;
    uint256 private _maxLen = 12;
    mapping(uint256 => bool) private _dopeMints;
    mapping(uint256 => bool) private _qrMints;
    string[] private _words = ["God"];
    
    constructor() ERC721("Dope Lyrics", "LYRICS") {
        owner = payable(msg.sender);
    }

    function random(string memory input) internal pure returns (uint256) {
        return uint256(keccak256(abi.encodePacked(input)));
    }

    function getWord(uint256 _a, uint256 tokenId) internal view returns (string memory, uint256) {
        uint i;
        uint256 rand = random(string(abi.encodePacked(toString(_a), toString(tokenId))));
        i = rand % _words.length;
        return (_words[i], i);
    }

    function tokenURI(uint256 tokenId) override public view returns (string memory) {
        uint itemIndex;
        string memory jsonOut;
        string memory svgOut;
        string memory style;
        string memory item;
        uint x;
        uint y;
        uint yCnt = 0;
        
        bytes memory svgBuffer = new bytes(4096);
        Buffer.append(svgBuffer, '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 480 480"><style>.base{fill:#FFFFFF;font-family:monospace;font-size:16px;}.rare{fill:#00FF00;font-family:monospace;font-size:16px;}.vrare{fill:#FFD700;font-family:monospace;font-size:14px;}</style><rect width="100%" height="100%" fill="black"/>');
        
        for (uint i=0; i<9; ++i) {
            (item, itemIndex) = getWord(i, tokenId);
            if (itemIndex == 0) {
                style = "vrare";
            } else if (itemIndex <= 50) {
                style = "rare";
            } else {
                style = "base";
            }
            x = i / 3 * _offset + _offset / 4;
            y = yCnt * _offset + _offset / 2;
            ++yCnt;
            if (yCnt > 2) {
                yCnt = 0;
            }
            Buffer.append(svgBuffer, string(abi.encodePacked('<text x="', toString(x), '" y="', toString(y), '" class="', style, '">', item, '</text>')));
        }

        Buffer.append(svgBuffer, '</svg>');
        svgOut = Buffer.toString(svgBuffer);
        bytes memory jsonBuffer = new bytes(4096);
        Buffer.append(jsonBuffer, string(abi.encodePacked('{"name": "Lyrics #', toString(tokenId), '", "description": "Dope Lyrics are a set of generative NFTs that source their information from words input upon minting. Once the total supply is hit, the lyrics are set in stone forever.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(svgOut)), '"}')));
        jsonOut = Base64.encode(bytes(Buffer.toString(jsonBuffer)));
        bytes memory result = new bytes(4096);
        Buffer.append(result, 'data:application/json;base64,');
        Buffer.append(result, jsonOut);
        return Buffer.toString(result);
    }
    
    function toUint8(bytes memory _bytes, uint256 _start) internal pure returns (uint8) {
        require(_bytes.length >= _start + 1, "toUint8_outOfBounds");
        uint8 tempUint;
        assembly {
            tempUint := mload(add(add(_bytes, 0x1), _start))
        }
        return tempUint;
    }

    function mint(string memory prose) internal {
        require(_count < _maxSupply, "Capped!");
        bytes memory proseBytes = bytes(prose);
        bool onlySpaces = true;
        uint8 ord;
        for (uint i=0; i<proseBytes.length; ++i) {
            ord = toUint8(bytes.concat(proseBytes[i]), 0);
            require(ord == 32 || ord >= 97 && ord <= 122, "Only use lowercase latin letters and spaces!");
            if (onlySpaces && ord != 32) {
                onlySpaces = false;
            }
        }
        _safeMint(_msgSender(), _count);
        ++_count;
        if (!onlySpaces) {
            bytes1 current;
            bytes memory tempWord;
            uint p = 0;
            for (uint i=0; i<proseBytes.length; ++i) {
                current = proseBytes[i];
                if (current == 0x20 && tempWord.length > 0) {
                    if (tempWord.length <= _maxLen) {
                        _words.push(string(abi.encodePacked(tempWord)));
                    }
                    delete tempWord;
                    p = 0;
                } else if (current != 0x20) {
                    tempWord = bytes.concat(tempWord, current);
                    ++p;
                }
            }
            if (tempWord.length <= _maxLen) {
                _words.push(string(abi.encodePacked(tempWord)));
            }
        }
    }
    
    function mintWithDope(uint256 _dopeId, string memory _prose) public payable nonReentrant {
        require(msg.value >= 1 ether / 200, "Mints from Dope Loot requires 0.005 ETH!");
        require(dopeContract.ownerOf(_dopeId) == msg.sender, "Not the owner of this Dope Loot bag.");
        require(!_dopeMints[_dopeId], "This Dope Loot bag has already been used.");
        _dopeMints[_dopeId] = true;
        mint(_prose);
    }
    
    function mintWithQr(uint256 _qrId, string memory _prose) external nonReentrant {
        require(qrContract.ownerOf(_qrId) == msg.sender, "Not the owner of this Rare QR code.");
        require(!_qrMints[_qrId], "This Rare QR code has already been used.");
        _qrMints[_qrId] = true;
        mint(_prose);
    }
    
    function mintLyrics(string memory _prose) public payable nonReentrant {
        require(msg.value >= 1 ether / 100, "Price is 0.01 ETH!");
        mint(_prose);
    }
    
    function withdraw() external {
        owner.transfer(address(this).balance);
    }
    
    event Received(address, uint);
    receive() external payable {
        emit Received(msg.sender, msg.value);
    }
    
    function totalSupply() external view returns (uint256) {
        return _count;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"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":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Received","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":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"string","name":"_prose","type":"string"}],"name":"mintLyrics","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dopeId","type":"uint256"},{"internalType":"string","name":"_prose","type":"string"}],"name":"mintWithDope","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qrId","type":"uint256"},{"internalType":"string","name":"_prose","type":"string"}],"name":"mintWithQr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052738707276df042e89669d69a177d3da7dc78bd8723600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ffffd97acdc8c5585c818f6b0f946c0ed600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611000600c556000600d60006101000a81548161ffff021916908361ffff1602179055506096600d60026101000a81548161ffff021916908361ffff160217905550600c600e5560405180602001604052806040518060400160405280600381526020017f476f64000000000000000000000000000000000000000000000000000000000081525081525060119060016200020d9291906200030b565b503480156200021b57600080fd5b506040518060400160405280600b81526020017f446f7065204c79726963730000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4c595249435300000000000000000000000000000000000000000000000000008152508160009080519060200190620002a092919062000372565b508060019080519060200190620002b992919062000372565b505050600160068190555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004f5565b8280548282559060005260206000209081019282156200035f579160200282015b828111156200035e5782518290805190602001906200034d92919062000372565b50916020019190600101906200032c565b5b5090506200036e919062000403565b5090565b828054620003809062000490565b90600052602060002090601f016020900481019282620003a45760008555620003f0565b82601f10620003bf57805160ff1916838001178555620003f0565b82800160010185558215620003f0579182015b82811115620003ef578251825591602001919060010190620003d2565b5b509050620003ff91906200042b565b5090565b5b808211156200042757600081816200041d91906200044a565b5060010162000404565b5090565b5b80821115620004465760008160009055506001016200042c565b5090565b508054620004589062000490565b6000825580601f106200046c57506200048d565b601f0160209004906000526020600020908101906200048c91906200042b565b5b50565b60006002820490506001821680620004a957607f821691505b60208210811415620004c057620004bf620004c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61496e80620005056000396000f3fe6080604052600436106101235760003560e01c80636352211e116100a0578063b88d4fde11610064578063b88d4fde1461040a578063b95b029614610433578063c87b56dd1461045c578063d02e71c414610499578063e985e9c5146104b557610163565b80636352211e1461031157806370a082311461034e5780638da5cb5b1461038b57806395d89b41146103b6578063a22cb465146103e157610163565b806322f4596f116100e757806322f4596f1461026157806323b872dd1461028c5780633ccfd60b146102b557806342842e0e146102cc578063491d37a8146102f557610163565b806301ffc9a71461016857806306fdde03146101a5578063081812fc146101d0578063095ea7b31461020d57806318160ddd1461023657610163565b36610163577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587433346040516101599291906135bd565b60405180910390a1005b600080fd5b34801561017457600080fd5b5061018f600480360381019061018a9190612d16565b6104f2565b60405161019c91906135e6565b60405180910390f35b3480156101b157600080fd5b506101ba6105d4565b6040516101c79190613601565b60405180910390f35b3480156101dc57600080fd5b506101f760048036038101906101f29190612db9565b610666565b604051610204919061353b565b60405180910390f35b34801561021957600080fd5b50610234600480360381019061022f9190612cd6565b6106eb565b005b34801561024257600080fd5b5061024b610803565b6040516102589190613943565b60405180910390f35b34801561026d57600080fd5b5061027661081f565b6040516102839190613943565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612bc0565b610825565b005b3480156102c157600080fd5b506102ca610885565b005b3480156102d857600080fd5b506102f360048036038101906102ee9190612bc0565b6108f0565b005b61030f600480360381019061030a9190612d70565b610910565b005b34801561031d57600080fd5b5061033860048036038101906103339190612db9565b6109bc565b604051610345919061353b565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612b26565b610a6e565b6040516103829190613943565b60405180910390f35b34801561039757600080fd5b506103a0610b26565b6040516103ad9190613556565b60405180910390f35b3480156103c257600080fd5b506103cb610b4c565b6040516103d89190613601565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190612c96565b610bde565b005b34801561041657600080fd5b50610431600480360381019061042c9190612c13565b610d5f565b005b34801561043f57600080fd5b5061045a60048036038101906104559190612de6565b610dc1565b005b34801561046857600080fd5b50610483600480360381019061047e9190612db9565b610fc9565b6040516104909190613601565b60405180910390f35b6104b360048036038101906104ae9190612de6565b6113e5565b005b3480156104c157600080fd5b506104dc60048036038101906104d79190612b80565b611637565b6040516104e991906135e6565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105bd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105cd57506105cc826116cb565b5b9050919050565b6060600080546105e390613c7b565b80601f016020809104026020016040519081016040528092919081815260200182805461060f90613c7b565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b5050505050905090565b600061067182611735565b6106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a790613803565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106f6826109bc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90613883565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107866117a1565b73ffffffffffffffffffffffffffffffffffffffff1614806107b557506107b4816107af6117a1565b611637565b5b6107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90613783565b60405180910390fd5b6107fe83836117a9565b505050565b6000600d60009054906101000a900461ffff1661ffff16905090565b600c5481565b6108366108306117a1565b82611862565b610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086c906138c3565b60405180910390fd5b610880838383611940565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108ed573d6000803e3d6000fd5b50565b61090b83838360405180602001604052806000815250610d5f565b505050565b60026006541415610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613923565b60405180910390fd5b6002600681905550662386f26fc100003410156109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f90613643565b60405180910390fd5b6109b181611b9c565b600160068190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c906137c3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad6906137a3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610b5b90613c7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8790613c7b565b8015610bd45780601f10610ba957610100808354040283529160200191610bd4565b820191906000526020600020905b815481529060010190602001808311610bb757829003601f168201915b5050505050905090565b610be66117a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b906136e3565b60405180910390fd5b8060056000610c616117a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610d0e6117a1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d5391906135e6565b60405180910390a35050565b610d70610d6a6117a1565b83611862565b610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da6906138c3565b60405180910390fd5b610dbb84848484611f0b565b50505050565b60026006541415610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613923565b60405180910390fd5b60026006819055503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610e819190613943565b60206040518083038186803b158015610e9957600080fd5b505afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190612b53565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613743565b60405180910390fd5b6010600083815260200190815260200160002060009054906101000a900460ff1615610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90613723565b60405180910390fd5b60016010600084815260200190815260200160002060006101000a81548160ff021916908315150217905550610fbd81611b9c565b60016006819055505050565b6060600060608060608060008060008061100067ffffffffffffffff811115610ff557610ff4613e49565b5b6040519080825280601f01601f1916602001820160405280156110275781602001600182028036833780820191505090505b50905061104f8160405180610180016040528061014c81526020016147ed61014c9139611f67565b60005b600981101561124257611065818d611fd7565b809b50819750505060008a14156110b3576040518060400160405280600581526020017f76726172650000000000000000000000000000000000000000000000000000008152509650611132565b60328a116110f8576040518060400160405280600481526020017f72617265000000000000000000000000000000000000000000000000000000008152509650611131565b6040518060400160405280600481526020017f626173650000000000000000000000000000000000000000000000000000000081525096505b5b6004600d60029054906101000a900461ffff1661114f9190613a89565b61ffff16600d60029054906101000a900461ffff1661ffff166003836111759190613aba565b61117f9190613aeb565b6111899190613a33565b94506002600d60029054906101000a900461ffff166111a89190613a89565b61ffff16600d60029054906101000a900461ffff1661ffff16846111cc9190613aeb565b6111d69190613a33565b9350826111e290613d09565b925060028311156111f257600092505b611231826111ff876120e5565b611208876120e5565b8a8a60405160200161121d94939291906134c6565b604051602081830303815290604052611f67565b8061123b90613d09565b9050611052565b50611282816040518060400160405280600681526020017f3c2f7376673e0000000000000000000000000000000000000000000000000000815250611f67565b61128b81612246565b9650600061100067ffffffffffffffff8111156112ab576112aa613e49565b5b6040519080825280601f01601f1916602001820160405280156112dd5781602001600182028036833780820191505090505b50905061131b816112ed8e6120e5565b6112f68b6122a3565b604051602001611307929190613481565b604051602081830303815290604052611f67565b61132c61132782612246565b6122a3565b9850600061100067ffffffffffffffff81111561134c5761134b613e49565b5b6040519080825280601f01601f19166020018201604052801561137e5781602001600182028036833780820191505090505b5090506113c0816040518060400160405280601d81526020017f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815250611f67565b6113ca818b611f67565b6113d381612246565b9b505050505050505050505050919050565b6002600654141561142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142290613923565b60405180910390fd5b60026006819055506611c37937e0800034101561147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906136a3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016114ef9190613943565b60206040518083038186803b15801561150757600080fd5b505afa15801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190612b53565b73ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c90613823565b60405180910390fd5b600f600083815260200190815260200160002060009054906101000a900460ff16156115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613683565b60405180910390fd5b6001600f600084815260200190815260200160002060006101000a81548160ff02191690831515021790555061162b81611b9c565b60016006819055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661181c836109bc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061186d82611735565b6118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390613703565b60405180910390fd5b60006118b7836109bc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061192657508373ffffffffffffffffffffffffffffffffffffffff1661190e84610666565b73ffffffffffffffffffffffffffffffffffffffff16145b8061193757506119368185611637565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611960826109bc565b73ffffffffffffffffffffffffffffffffffffffff16146119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90613863565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d906136c3565b60405180910390fd5b611a3183838361243b565b611a3c6000826117a9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8c9190613b45565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ae39190613a33565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600c54600d60009054906101000a900461ffff1661ffff1610611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb90613763565b60405180910390fd5b6000819050600060019050600080600090505b8351811015611cea57611c57848281518110611c2657611c25613e1a565b5b602001015160f81c60f81b604051602001611c4191906133ec565b6040516020818303038152906040526000612440565b915060208260ff161480611c7f575060618260ff1610158015611c7e5750607a8260ff1611155b5b611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb590613843565b60405180910390fd5b828015611ccf575060208260ff1614155b15611cd957600092505b80611ce390613d09565b9050611c07565b50611d10611cf66117a1565b600d60009054906101000a900461ffff1661ffff166124a7565b600d600081819054906101000a900461ffff16611d2c90613cde565b91906101000a81548161ffff021916908361ffff16021790555081611f0557600060606000805b8651811015611e9a57868181518110611d6f57611d6e613e1a565b5b602001015160f81c60f81b9350602060f81b847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148015611db2575060008351115b15611e2a57600e54835111611e1d57601183604051602001611dd49190613407565b604051602081830303815290604052908060018154018082558091505060019003906000526020600020016000909190919091509080519060200190611e1b929190612925565b505b6060925060009150611e89565b602060f81b847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611e88578284604051602001611e6a92919061341e565b604051602081830303815290604052925081611e8590613d09565b91505b5b80611e9390613d09565b9050611d53565b50600e54825111611f0157601182604051602001611eb89190613407565b604051602081830303815290604052908060018154018082558091505060019003906000526020600020016000909190919091509080519060200190611eff929190612925565b505b5050505b50505050565b611f16848484611940565b611f22848484846124c5565b611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890613623565b60405180910390fd5b50505050565b611f7282825161265c565b611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890613903565b60405180910390fd5b6020820151815160408401820183516020850160045afa50815181016020840152505050565b60606000806000612018611fea876120e5565b611ff3876120e5565b60405160200161200492919061345d565b6040516020818303038152906040526126b6565b90506011805490508161202b9190613d5c565b91506011828154811061204157612040613e1a565b5b906000526020600020018281805461205890613c7b565b80601f016020809104026020016040519081016040528092919081815260200182805461208490613c7b565b80156120d15780601f106120a6576101008083540402835291602001916120d1565b820191906000526020600020905b8154815290600101906020018083116120b457829003601f168201915b505050505091509350935050509250929050565b6060600082141561212d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612241565b600082905060005b6000821461215f57808061214890613d09565b915050600a826121589190613aba565b9150612135565b60008167ffffffffffffffff81111561217b5761217a613e49565b5b6040519080825280601f01601f1916602001820160405280156121ad5781602001600182028036833780820191505090505b5090505b6000851461223a576001826121c69190613b45565b9150600a856121d59190613d5c565b60306121e19190613a33565b60f81b8183815181106121f7576121f6613e1a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122339190613aba565b94506121b1565b8093505050505b919050565b606061225382600061265c565b612292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612289906138a3565b60405180910390fd5b606060208301905080915050919050565b606060008251905060008114156122cc5760405180602001604052806000815250915050612436565b600060036002836122dd9190613a33565b6122e79190613aba565b60046122f39190613aeb565b905060006020826123049190613a33565b67ffffffffffffffff81111561231d5761231c613e49565b5b6040519080825280601f01601f19166020018201604052801561234f5781602001600182028036833780820191505090505b50905060006040518060600160405280604081526020016147ad604091399050600181016020830160005b868110156123f35760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b9050808452600484019350505061237a565b50600386066001811461240d576002811461241d57612428565b613d3d60f01b6002830352612428565b603d60f81b60018303525b508484525050819450505050505b919050565b505050565b600060018261244f9190613a33565b83511015612492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612489906138e3565b60405180910390fd5b60008260018501015190508091505092915050565b6124c18282604051806020016040528060008152506126e9565b5050565b60006124e68473ffffffffffffffffffffffffffffffffffffffff16612744565b1561264f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261250f6117a1565b8786866040518563ffffffff1660e01b81526004016125319493929190613571565b602060405180830381600087803b15801561254b57600080fd5b505af192505050801561257c57506040513d601f19601f820116820180604052508101906125799190612d43565b60015b6125ff573d80600081146125ac576040519150601f19603f3d011682016040523d82523d6000602084013e6125b1565b606091505b506000815114156125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ee90613623565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612654565b600190505b949350505050565b600080600084519150602085015190506020821015801561268957506020826126859190613b45565b8111155b80156126ac575060208261269d9190613b45565b84826126a99190613a33565b11155b9250505092915050565b6000816040516020016126c99190613446565b6040516020818303038152906040528051906020012060001c9050919050565b6126f38383612757565b61270060008484846124c5565b61273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690613623565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127be906137e3565b60405180910390fd5b6127d081611735565b15612810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280790613663565b60405180910390fd5b61281c6000838361243b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461286c9190613a33565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461293190613c7b565b90600052602060002090601f016020900481019282612953576000855561299a565b82601f1061296c57805160ff191683800117855561299a565b8280016001018555821561299a579182015b8281111561299957825182559160200191906001019061297e565b5b5090506129a791906129ab565b5090565b5b808211156129c45760008160009055506001016129ac565b5090565b60006129db6129d684613983565b61395e565b9050828152602081018484840111156129f7576129f6613e7d565b5b612a02848285613c39565b509392505050565b6000612a1d612a18846139b4565b61395e565b905082815260208101848484011115612a3957612a38613e7d565b5b612a44848285613c39565b509392505050565b600081359050612a5b81614750565b92915050565b600081519050612a7081614750565b92915050565b600081359050612a8581614767565b92915050565b600081359050612a9a8161477e565b92915050565b600081519050612aaf8161477e565b92915050565b600082601f830112612aca57612ac9613e78565b5b8135612ada8482602086016129c8565b91505092915050565b600082601f830112612af857612af7613e78565b5b8135612b08848260208601612a0a565b91505092915050565b600081359050612b2081614795565b92915050565b600060208284031215612b3c57612b3b613e87565b5b6000612b4a84828501612a4c565b91505092915050565b600060208284031215612b6957612b68613e87565b5b6000612b7784828501612a61565b91505092915050565b60008060408385031215612b9757612b96613e87565b5b6000612ba585828601612a4c565b9250506020612bb685828601612a4c565b9150509250929050565b600080600060608486031215612bd957612bd8613e87565b5b6000612be786828701612a4c565b9350506020612bf886828701612a4c565b9250506040612c0986828701612b11565b9150509250925092565b60008060008060808587031215612c2d57612c2c613e87565b5b6000612c3b87828801612a4c565b9450506020612c4c87828801612a4c565b9350506040612c5d87828801612b11565b925050606085013567ffffffffffffffff811115612c7e57612c7d613e82565b5b612c8a87828801612ab5565b91505092959194509250565b60008060408385031215612cad57612cac613e87565b5b6000612cbb85828601612a4c565b9250506020612ccc85828601612a76565b9150509250929050565b60008060408385031215612ced57612cec613e87565b5b6000612cfb85828601612a4c565b9250506020612d0c85828601612b11565b9150509250929050565b600060208284031215612d2c57612d2b613e87565b5b6000612d3a84828501612a8b565b91505092915050565b600060208284031215612d5957612d58613e87565b5b6000612d6784828501612aa0565b91505092915050565b600060208284031215612d8657612d85613e87565b5b600082013567ffffffffffffffff811115612da457612da3613e82565b5b612db084828501612ae3565b91505092915050565b600060208284031215612dcf57612dce613e87565b5b6000612ddd84828501612b11565b91505092915050565b60008060408385031215612dfd57612dfc613e87565b5b6000612e0b85828601612b11565b925050602083013567ffffffffffffffff811115612e2c57612e2b613e82565b5b612e3885828601612ae3565b9150509250929050565b612e4b81613b8b565b82525050565b612e5a81613b79565b82525050565b612e6981613b9d565b82525050565b612e80612e7b82613ba9565b613d52565b82525050565b6000612e91826139e5565b612e9b81856139fb565b9350612eab818560208601613c48565b612eb481613e8c565b840191505092915050565b6000612eca826139e5565b612ed48185613a0c565b9350612ee4818560208601613c48565b80840191505092915050565b6000612efb826139f0565b612f058185613a17565b9350612f15818560208601613c48565b612f1e81613e8c565b840191505092915050565b6000612f34826139f0565b612f3e8185613a28565b9350612f4e818560208601613c48565b80840191505092915050565b6000612f67601283613a28565b9150612f7282613e9d565b601282019050919050565b6000612f8a603283613a17565b9150612f9582613ec6565b604082019050919050565b6000612fad601283613a17565b9150612fb882613f15565b602082019050919050565b6000612fd0601c83613a17565b9150612fdb82613f3e565b602082019050919050565b6000612ff3602983613a17565b9150612ffe82613f67565b604082019050919050565b6000613016602883613a17565b915061302182613fb6565b604082019050919050565b6000613039602483613a17565b915061304482614005565b604082019050919050565b600061305c601983613a17565b915061306782614054565b602082019050919050565b600061307f600983613a28565b915061308a8261407d565b600982019050919050565b60006130a2602c83613a17565b91506130ad826140a6565b604082019050919050565b60006130c5602883613a17565b91506130d0826140f5565b604082019050919050565b60006130e8602383613a17565b91506130f382614144565b604082019050919050565b600061310b600783613a17565b915061311682614193565b602082019050919050565b600061312e60e283613a28565b9150613139826141bc565b60e282019050919050565b6000613151603883613a17565b915061315c826142ef565b604082019050919050565b6000613174602a83613a17565b915061317f8261433e565b604082019050919050565b6000613197602983613a17565b91506131a28261438d565b604082019050919050565b60006131ba600283613a28565b91506131c5826143dc565b600282019050919050565b60006131dd600783613a28565b91506131e882614405565b600782019050919050565b6000613200602083613a17565b915061320b8261442e565b602082019050919050565b6000613223602c83613a17565b915061322e82614457565b604082019050919050565b6000613246602483613a17565b9150613251826144a6565b604082019050919050565b6000613269602c83613a17565b9150613274826144f5565b604082019050919050565b600061328c602983613a17565b915061329782614544565b604082019050919050565b60006132af602183613a17565b91506132ba82614593565b604082019050919050565b60006132d2600983613a28565b91506132dd826145e2565b600982019050919050565b60006132f5600583613a28565b91506133008261460b565b600582019050919050565b6000613318601f83613a17565b915061332382614634565b602082019050919050565b600061333b603183613a17565b91506133468261465d565b604082019050919050565b600061335e601383613a17565b9150613369826146ac565b602082019050919050565b6000613381600283613a28565b915061338c826146d5565b600282019050919050565b60006133a4601a83613a17565b91506133af826146fe565b602082019050919050565b60006133c7601f83613a17565b91506133d282614727565b602082019050919050565b6133e681613c2f565b82525050565b60006133f88284612e6f565b60018201915081905092915050565b60006134138284612ebf565b915081905092915050565b600061342a8285612ebf565b91506134368284612e6f565b6001820191508190509392505050565b60006134528284612f29565b915081905092915050565b60006134698285612f29565b91506134758284612f29565b91508190509392505050565b600061348c82612f5a565b91506134988285612f29565b91506134a382613121565b91506134af8284612f29565b91506134ba826131ad565b91508190509392505050565b60006134d182613072565b91506134dd8287612f29565b91506134e8826132e8565b91506134f48286612f29565b91506134ff826132c5565b915061350b8285612f29565b915061351682613374565b91506135228284612f29565b915061352d826131d0565b915081905095945050505050565b60006020820190506135506000830184612e51565b92915050565b600060208201905061356b6000830184612e42565b92915050565b60006080820190506135866000830187612e51565b6135936020830186612e51565b6135a060408301856133dd565b81810360608301526135b28184612e86565b905095945050505050565b60006040820190506135d26000830185612e51565b6135df60208301846133dd565b9392505050565b60006020820190506135fb6000830184612e60565b92915050565b6000602082019050818103600083015261361b8184612ef0565b905092915050565b6000602082019050818103600083015261363c81612f7d565b9050919050565b6000602082019050818103600083015261365c81612fa0565b9050919050565b6000602082019050818103600083015261367c81612fc3565b9050919050565b6000602082019050818103600083015261369c81612fe6565b9050919050565b600060208201905081810360008301526136bc81613009565b9050919050565b600060208201905081810360008301526136dc8161302c565b9050919050565b600060208201905081810360008301526136fc8161304f565b9050919050565b6000602082019050818103600083015261371c81613095565b9050919050565b6000602082019050818103600083015261373c816130b8565b9050919050565b6000602082019050818103600083015261375c816130db565b9050919050565b6000602082019050818103600083015261377c816130fe565b9050919050565b6000602082019050818103600083015261379c81613144565b9050919050565b600060208201905081810360008301526137bc81613167565b9050919050565b600060208201905081810360008301526137dc8161318a565b9050919050565b600060208201905081810360008301526137fc816131f3565b9050919050565b6000602082019050818103600083015261381c81613216565b9050919050565b6000602082019050818103600083015261383c81613239565b9050919050565b6000602082019050818103600083015261385c8161325c565b9050919050565b6000602082019050818103600083015261387c8161327f565b9050919050565b6000602082019050818103600083015261389c816132a2565b9050919050565b600060208201905081810360008301526138bc8161330b565b9050919050565b600060208201905081810360008301526138dc8161332e565b9050919050565b600060208201905081810360008301526138fc81613351565b9050919050565b6000602082019050818103600083015261391c81613397565b9050919050565b6000602082019050818103600083015261393c816133ba565b9050919050565b600060208201905061395860008301846133dd565b92915050565b6000613968613979565b90506139748282613cad565b919050565b6000604051905090565b600067ffffffffffffffff82111561399e5761399d613e49565b5b6139a782613e8c565b9050602081019050919050565b600067ffffffffffffffff8211156139cf576139ce613e49565b5b6139d882613e8c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a3e82613c2f565b9150613a4983613c2f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a7e57613a7d613d8d565b5b828201905092915050565b6000613a9482613c01565b9150613a9f83613c01565b925082613aaf57613aae613dbc565b5b828204905092915050565b6000613ac582613c2f565b9150613ad083613c2f565b925082613ae057613adf613dbc565b5b828204905092915050565b6000613af682613c2f565b9150613b0183613c2f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b3a57613b39613d8d565b5b828202905092915050565b6000613b5082613c2f565b9150613b5b83613c2f565b925082821015613b6e57613b6d613d8d565b5b828203905092915050565b6000613b8482613c0f565b9050919050565b6000613b9682613c0f565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c66578082015181840152602081019050613c4b565b83811115613c75576000848401525b50505050565b60006002820490506001821680613c9357607f821691505b60208210811415613ca757613ca6613deb565b5b50919050565b613cb682613e8c565b810181811067ffffffffffffffff82111715613cd557613cd4613e49565b5b80604052505050565b6000613ce982613c01565b915061ffff821415613cfe57613cfd613d8d565b5b600182019050919050565b6000613d1482613c2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d4757613d46613d8d565b5b600182019050919050565b6000819050919050565b6000613d6782613c2f565b9150613d7283613c2f565b925082613d8257613d81613dbc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7b226e616d65223a20224c797269637320230000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f507269636520697320302e303120455448210000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5468697320446f7065204c6f6f74206261672068617320616c7265616479206260008201527f65656e20757365642e0000000000000000000000000000000000000000000000602082015250565b7f4d696e74732066726f6d20446f7065204c6f6f7420726571756972657320302e60008201527f3030352045544821000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f3c7465787420783d220000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f54686973205261726520515220636f64652068617320616c726561647920626560008201527f656e20757365642e000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420746865206f776e6572206f662074686973205261726520515220636f60008201527f64652e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4361707065642100000000000000000000000000000000000000000000000000600082015250565b7f222c20226465736372697074696f6e223a2022446f7065204c7972696373206160008201527f7265206120736574206f662067656e65726174697665204e465473207468617460208201527f20736f7572636520746865697220696e666f726d6174696f6e2066726f6d207760408201527f6f72647320696e7075742075706f6e206d696e74696e672e204f6e636520746860608201527f6520746f74616c20737570706c79206973206869742c20746865206c7972696360808201527f73206172652073657420696e2073746f6e6520666f72657665722e222c20226960a08201527f6d616765223a2022646174613a696d6167652f7376672b786d6c3b626173653660c08201527f342c00000000000000000000000000000000000000000000000000000000000060e082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f3c2f746578743e00000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f7420746865206f776e6572206f66207468697320446f7065204c6f6f742060008201527f6261672e00000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c7920757365206c6f77657263617365206c6174696e206c65747465727360008201527f20616e6420737061636573210000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f2220636c6173733d220000000000000000000000000000000000000000000000600082015250565b7f2220793d22000000000000000000000000000000000000000000000000000000600082015250565b7f4275666665722e746f537472696e673a20696e76616c69642062756666657200600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f746f55696e74385f6f75744f66426f756e647300000000000000000000000000600082015250565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b7f4275666665722e617070656e643a206e6f206361706163697479000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61475981613b79565b811461476457600080fd5b50565b61477081613b9d565b811461477b57600080fd5b50565b61478781613bd5565b811461479257600080fd5b50565b61479e81613c2f565b81146147a957600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302034383020343830223e3c7374796c653e2e626173657b66696c6c3a234646464646463b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a313670783b7d2e726172657b66696c6c3a233030464630303b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a313670783b7d2e76726172657b66696c6c3a234646443730303b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a313470783b7d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b222f3ea2646970667358221220bcba53464009bbc664c5f4ba3d2aab10fa5efcfbe0bc36aa71fc6440a61deea864736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101235760003560e01c80636352211e116100a0578063b88d4fde11610064578063b88d4fde1461040a578063b95b029614610433578063c87b56dd1461045c578063d02e71c414610499578063e985e9c5146104b557610163565b80636352211e1461031157806370a082311461034e5780638da5cb5b1461038b57806395d89b41146103b6578063a22cb465146103e157610163565b806322f4596f116100e757806322f4596f1461026157806323b872dd1461028c5780633ccfd60b146102b557806342842e0e146102cc578063491d37a8146102f557610163565b806301ffc9a71461016857806306fdde03146101a5578063081812fc146101d0578063095ea7b31461020d57806318160ddd1461023657610163565b36610163577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587433346040516101599291906135bd565b60405180910390a1005b600080fd5b34801561017457600080fd5b5061018f600480360381019061018a9190612d16565b6104f2565b60405161019c91906135e6565b60405180910390f35b3480156101b157600080fd5b506101ba6105d4565b6040516101c79190613601565b60405180910390f35b3480156101dc57600080fd5b506101f760048036038101906101f29190612db9565b610666565b604051610204919061353b565b60405180910390f35b34801561021957600080fd5b50610234600480360381019061022f9190612cd6565b6106eb565b005b34801561024257600080fd5b5061024b610803565b6040516102589190613943565b60405180910390f35b34801561026d57600080fd5b5061027661081f565b6040516102839190613943565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612bc0565b610825565b005b3480156102c157600080fd5b506102ca610885565b005b3480156102d857600080fd5b506102f360048036038101906102ee9190612bc0565b6108f0565b005b61030f600480360381019061030a9190612d70565b610910565b005b34801561031d57600080fd5b5061033860048036038101906103339190612db9565b6109bc565b604051610345919061353b565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612b26565b610a6e565b6040516103829190613943565b60405180910390f35b34801561039757600080fd5b506103a0610b26565b6040516103ad9190613556565b60405180910390f35b3480156103c257600080fd5b506103cb610b4c565b6040516103d89190613601565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190612c96565b610bde565b005b34801561041657600080fd5b50610431600480360381019061042c9190612c13565b610d5f565b005b34801561043f57600080fd5b5061045a60048036038101906104559190612de6565b610dc1565b005b34801561046857600080fd5b50610483600480360381019061047e9190612db9565b610fc9565b6040516104909190613601565b60405180910390f35b6104b360048036038101906104ae9190612de6565b6113e5565b005b3480156104c157600080fd5b506104dc60048036038101906104d79190612b80565b611637565b6040516104e991906135e6565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105bd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105cd57506105cc826116cb565b5b9050919050565b6060600080546105e390613c7b565b80601f016020809104026020016040519081016040528092919081815260200182805461060f90613c7b565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b5050505050905090565b600061067182611735565b6106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a790613803565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106f6826109bc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90613883565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107866117a1565b73ffffffffffffffffffffffffffffffffffffffff1614806107b557506107b4816107af6117a1565b611637565b5b6107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90613783565b60405180910390fd5b6107fe83836117a9565b505050565b6000600d60009054906101000a900461ffff1661ffff16905090565b600c5481565b6108366108306117a1565b82611862565b610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086c906138c3565b60405180910390fd5b610880838383611940565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108ed573d6000803e3d6000fd5b50565b61090b83838360405180602001604052806000815250610d5f565b505050565b60026006541415610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613923565b60405180910390fd5b6002600681905550662386f26fc100003410156109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f90613643565b60405180910390fd5b6109b181611b9c565b600160068190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c906137c3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad6906137a3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610b5b90613c7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8790613c7b565b8015610bd45780601f10610ba957610100808354040283529160200191610bd4565b820191906000526020600020905b815481529060010190602001808311610bb757829003601f168201915b5050505050905090565b610be66117a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b906136e3565b60405180910390fd5b8060056000610c616117a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610d0e6117a1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d5391906135e6565b60405180910390a35050565b610d70610d6a6117a1565b83611862565b610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da6906138c3565b60405180910390fd5b610dbb84848484611f0b565b50505050565b60026006541415610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613923565b60405180910390fd5b60026006819055503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610e819190613943565b60206040518083038186803b158015610e9957600080fd5b505afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190612b53565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613743565b60405180910390fd5b6010600083815260200190815260200160002060009054906101000a900460ff1615610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90613723565b60405180910390fd5b60016010600084815260200190815260200160002060006101000a81548160ff021916908315150217905550610fbd81611b9c565b60016006819055505050565b6060600060608060608060008060008061100067ffffffffffffffff811115610ff557610ff4613e49565b5b6040519080825280601f01601f1916602001820160405280156110275781602001600182028036833780820191505090505b50905061104f8160405180610180016040528061014c81526020016147ed61014c9139611f67565b60005b600981101561124257611065818d611fd7565b809b50819750505060008a14156110b3576040518060400160405280600581526020017f76726172650000000000000000000000000000000000000000000000000000008152509650611132565b60328a116110f8576040518060400160405280600481526020017f72617265000000000000000000000000000000000000000000000000000000008152509650611131565b6040518060400160405280600481526020017f626173650000000000000000000000000000000000000000000000000000000081525096505b5b6004600d60029054906101000a900461ffff1661114f9190613a89565b61ffff16600d60029054906101000a900461ffff1661ffff166003836111759190613aba565b61117f9190613aeb565b6111899190613a33565b94506002600d60029054906101000a900461ffff166111a89190613a89565b61ffff16600d60029054906101000a900461ffff1661ffff16846111cc9190613aeb565b6111d69190613a33565b9350826111e290613d09565b925060028311156111f257600092505b611231826111ff876120e5565b611208876120e5565b8a8a60405160200161121d94939291906134c6565b604051602081830303815290604052611f67565b8061123b90613d09565b9050611052565b50611282816040518060400160405280600681526020017f3c2f7376673e0000000000000000000000000000000000000000000000000000815250611f67565b61128b81612246565b9650600061100067ffffffffffffffff8111156112ab576112aa613e49565b5b6040519080825280601f01601f1916602001820160405280156112dd5781602001600182028036833780820191505090505b50905061131b816112ed8e6120e5565b6112f68b6122a3565b604051602001611307929190613481565b604051602081830303815290604052611f67565b61132c61132782612246565b6122a3565b9850600061100067ffffffffffffffff81111561134c5761134b613e49565b5b6040519080825280601f01601f19166020018201604052801561137e5781602001600182028036833780820191505090505b5090506113c0816040518060400160405280601d81526020017f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815250611f67565b6113ca818b611f67565b6113d381612246565b9b505050505050505050505050919050565b6002600654141561142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142290613923565b60405180910390fd5b60026006819055506611c37937e0800034101561147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906136a3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016114ef9190613943565b60206040518083038186803b15801561150757600080fd5b505afa15801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190612b53565b73ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c90613823565b60405180910390fd5b600f600083815260200190815260200160002060009054906101000a900460ff16156115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613683565b60405180910390fd5b6001600f600084815260200190815260200160002060006101000a81548160ff02191690831515021790555061162b81611b9c565b60016006819055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661181c836109bc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061186d82611735565b6118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390613703565b60405180910390fd5b60006118b7836109bc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061192657508373ffffffffffffffffffffffffffffffffffffffff1661190e84610666565b73ffffffffffffffffffffffffffffffffffffffff16145b8061193757506119368185611637565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611960826109bc565b73ffffffffffffffffffffffffffffffffffffffff16146119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90613863565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d906136c3565b60405180910390fd5b611a3183838361243b565b611a3c6000826117a9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8c9190613b45565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ae39190613a33565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600c54600d60009054906101000a900461ffff1661ffff1610611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb90613763565b60405180910390fd5b6000819050600060019050600080600090505b8351811015611cea57611c57848281518110611c2657611c25613e1a565b5b602001015160f81c60f81b604051602001611c4191906133ec565b6040516020818303038152906040526000612440565b915060208260ff161480611c7f575060618260ff1610158015611c7e5750607a8260ff1611155b5b611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb590613843565b60405180910390fd5b828015611ccf575060208260ff1614155b15611cd957600092505b80611ce390613d09565b9050611c07565b50611d10611cf66117a1565b600d60009054906101000a900461ffff1661ffff166124a7565b600d600081819054906101000a900461ffff16611d2c90613cde565b91906101000a81548161ffff021916908361ffff16021790555081611f0557600060606000805b8651811015611e9a57868181518110611d6f57611d6e613e1a565b5b602001015160f81c60f81b9350602060f81b847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148015611db2575060008351115b15611e2a57600e54835111611e1d57601183604051602001611dd49190613407565b604051602081830303815290604052908060018154018082558091505060019003906000526020600020016000909190919091509080519060200190611e1b929190612925565b505b6060925060009150611e89565b602060f81b847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611e88578284604051602001611e6a92919061341e565b604051602081830303815290604052925081611e8590613d09565b91505b5b80611e9390613d09565b9050611d53565b50600e54825111611f0157601182604051602001611eb89190613407565b604051602081830303815290604052908060018154018082558091505060019003906000526020600020016000909190919091509080519060200190611eff929190612925565b505b5050505b50505050565b611f16848484611940565b611f22848484846124c5565b611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890613623565b60405180910390fd5b50505050565b611f7282825161265c565b611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890613903565b60405180910390fd5b6020820151815160408401820183516020850160045afa50815181016020840152505050565b60606000806000612018611fea876120e5565b611ff3876120e5565b60405160200161200492919061345d565b6040516020818303038152906040526126b6565b90506011805490508161202b9190613d5c565b91506011828154811061204157612040613e1a565b5b906000526020600020018281805461205890613c7b565b80601f016020809104026020016040519081016040528092919081815260200182805461208490613c7b565b80156120d15780601f106120a6576101008083540402835291602001916120d1565b820191906000526020600020905b8154815290600101906020018083116120b457829003601f168201915b505050505091509350935050509250929050565b6060600082141561212d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612241565b600082905060005b6000821461215f57808061214890613d09565b915050600a826121589190613aba565b9150612135565b60008167ffffffffffffffff81111561217b5761217a613e49565b5b6040519080825280601f01601f1916602001820160405280156121ad5781602001600182028036833780820191505090505b5090505b6000851461223a576001826121c69190613b45565b9150600a856121d59190613d5c565b60306121e19190613a33565b60f81b8183815181106121f7576121f6613e1a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122339190613aba565b94506121b1565b8093505050505b919050565b606061225382600061265c565b612292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612289906138a3565b60405180910390fd5b606060208301905080915050919050565b606060008251905060008114156122cc5760405180602001604052806000815250915050612436565b600060036002836122dd9190613a33565b6122e79190613aba565b60046122f39190613aeb565b905060006020826123049190613a33565b67ffffffffffffffff81111561231d5761231c613e49565b5b6040519080825280601f01601f19166020018201604052801561234f5781602001600182028036833780820191505090505b50905060006040518060600160405280604081526020016147ad604091399050600181016020830160005b868110156123f35760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b9050808452600484019350505061237a565b50600386066001811461240d576002811461241d57612428565b613d3d60f01b6002830352612428565b603d60f81b60018303525b508484525050819450505050505b919050565b505050565b600060018261244f9190613a33565b83511015612492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612489906138e3565b60405180910390fd5b60008260018501015190508091505092915050565b6124c18282604051806020016040528060008152506126e9565b5050565b60006124e68473ffffffffffffffffffffffffffffffffffffffff16612744565b1561264f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261250f6117a1565b8786866040518563ffffffff1660e01b81526004016125319493929190613571565b602060405180830381600087803b15801561254b57600080fd5b505af192505050801561257c57506040513d601f19601f820116820180604052508101906125799190612d43565b60015b6125ff573d80600081146125ac576040519150601f19603f3d011682016040523d82523d6000602084013e6125b1565b606091505b506000815114156125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ee90613623565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612654565b600190505b949350505050565b600080600084519150602085015190506020821015801561268957506020826126859190613b45565b8111155b80156126ac575060208261269d9190613b45565b84826126a99190613a33565b11155b9250505092915050565b6000816040516020016126c99190613446565b6040516020818303038152906040528051906020012060001c9050919050565b6126f38383612757565b61270060008484846124c5565b61273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690613623565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127be906137e3565b60405180910390fd5b6127d081611735565b15612810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280790613663565b60405180910390fd5b61281c6000838361243b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461286c9190613a33565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461293190613c7b565b90600052602060002090601f016020900481019282612953576000855561299a565b82601f1061296c57805160ff191683800117855561299a565b8280016001018555821561299a579182015b8281111561299957825182559160200191906001019061297e565b5b5090506129a791906129ab565b5090565b5b808211156129c45760008160009055506001016129ac565b5090565b60006129db6129d684613983565b61395e565b9050828152602081018484840111156129f7576129f6613e7d565b5b612a02848285613c39565b509392505050565b6000612a1d612a18846139b4565b61395e565b905082815260208101848484011115612a3957612a38613e7d565b5b612a44848285613c39565b509392505050565b600081359050612a5b81614750565b92915050565b600081519050612a7081614750565b92915050565b600081359050612a8581614767565b92915050565b600081359050612a9a8161477e565b92915050565b600081519050612aaf8161477e565b92915050565b600082601f830112612aca57612ac9613e78565b5b8135612ada8482602086016129c8565b91505092915050565b600082601f830112612af857612af7613e78565b5b8135612b08848260208601612a0a565b91505092915050565b600081359050612b2081614795565b92915050565b600060208284031215612b3c57612b3b613e87565b5b6000612b4a84828501612a4c565b91505092915050565b600060208284031215612b6957612b68613e87565b5b6000612b7784828501612a61565b91505092915050565b60008060408385031215612b9757612b96613e87565b5b6000612ba585828601612a4c565b9250506020612bb685828601612a4c565b9150509250929050565b600080600060608486031215612bd957612bd8613e87565b5b6000612be786828701612a4c565b9350506020612bf886828701612a4c565b9250506040612c0986828701612b11565b9150509250925092565b60008060008060808587031215612c2d57612c2c613e87565b5b6000612c3b87828801612a4c565b9450506020612c4c87828801612a4c565b9350506040612c5d87828801612b11565b925050606085013567ffffffffffffffff811115612c7e57612c7d613e82565b5b612c8a87828801612ab5565b91505092959194509250565b60008060408385031215612cad57612cac613e87565b5b6000612cbb85828601612a4c565b9250506020612ccc85828601612a76565b9150509250929050565b60008060408385031215612ced57612cec613e87565b5b6000612cfb85828601612a4c565b9250506020612d0c85828601612b11565b9150509250929050565b600060208284031215612d2c57612d2b613e87565b5b6000612d3a84828501612a8b565b91505092915050565b600060208284031215612d5957612d58613e87565b5b6000612d6784828501612aa0565b91505092915050565b600060208284031215612d8657612d85613e87565b5b600082013567ffffffffffffffff811115612da457612da3613e82565b5b612db084828501612ae3565b91505092915050565b600060208284031215612dcf57612dce613e87565b5b6000612ddd84828501612b11565b91505092915050565b60008060408385031215612dfd57612dfc613e87565b5b6000612e0b85828601612b11565b925050602083013567ffffffffffffffff811115612e2c57612e2b613e82565b5b612e3885828601612ae3565b9150509250929050565b612e4b81613b8b565b82525050565b612e5a81613b79565b82525050565b612e6981613b9d565b82525050565b612e80612e7b82613ba9565b613d52565b82525050565b6000612e91826139e5565b612e9b81856139fb565b9350612eab818560208601613c48565b612eb481613e8c565b840191505092915050565b6000612eca826139e5565b612ed48185613a0c565b9350612ee4818560208601613c48565b80840191505092915050565b6000612efb826139f0565b612f058185613a17565b9350612f15818560208601613c48565b612f1e81613e8c565b840191505092915050565b6000612f34826139f0565b612f3e8185613a28565b9350612f4e818560208601613c48565b80840191505092915050565b6000612f67601283613a28565b9150612f7282613e9d565b601282019050919050565b6000612f8a603283613a17565b9150612f9582613ec6565b604082019050919050565b6000612fad601283613a17565b9150612fb882613f15565b602082019050919050565b6000612fd0601c83613a17565b9150612fdb82613f3e565b602082019050919050565b6000612ff3602983613a17565b9150612ffe82613f67565b604082019050919050565b6000613016602883613a17565b915061302182613fb6565b604082019050919050565b6000613039602483613a17565b915061304482614005565b604082019050919050565b600061305c601983613a17565b915061306782614054565b602082019050919050565b600061307f600983613a28565b915061308a8261407d565b600982019050919050565b60006130a2602c83613a17565b91506130ad826140a6565b604082019050919050565b60006130c5602883613a17565b91506130d0826140f5565b604082019050919050565b60006130e8602383613a17565b91506130f382614144565b604082019050919050565b600061310b600783613a17565b915061311682614193565b602082019050919050565b600061312e60e283613a28565b9150613139826141bc565b60e282019050919050565b6000613151603883613a17565b915061315c826142ef565b604082019050919050565b6000613174602a83613a17565b915061317f8261433e565b604082019050919050565b6000613197602983613a17565b91506131a28261438d565b604082019050919050565b60006131ba600283613a28565b91506131c5826143dc565b600282019050919050565b60006131dd600783613a28565b91506131e882614405565b600782019050919050565b6000613200602083613a17565b915061320b8261442e565b602082019050919050565b6000613223602c83613a17565b915061322e82614457565b604082019050919050565b6000613246602483613a17565b9150613251826144a6565b604082019050919050565b6000613269602c83613a17565b9150613274826144f5565b604082019050919050565b600061328c602983613a17565b915061329782614544565b604082019050919050565b60006132af602183613a17565b91506132ba82614593565b604082019050919050565b60006132d2600983613a28565b91506132dd826145e2565b600982019050919050565b60006132f5600583613a28565b91506133008261460b565b600582019050919050565b6000613318601f83613a17565b915061332382614634565b602082019050919050565b600061333b603183613a17565b91506133468261465d565b604082019050919050565b600061335e601383613a17565b9150613369826146ac565b602082019050919050565b6000613381600283613a28565b915061338c826146d5565b600282019050919050565b60006133a4601a83613a17565b91506133af826146fe565b602082019050919050565b60006133c7601f83613a17565b91506133d282614727565b602082019050919050565b6133e681613c2f565b82525050565b60006133f88284612e6f565b60018201915081905092915050565b60006134138284612ebf565b915081905092915050565b600061342a8285612ebf565b91506134368284612e6f565b6001820191508190509392505050565b60006134528284612f29565b915081905092915050565b60006134698285612f29565b91506134758284612f29565b91508190509392505050565b600061348c82612f5a565b91506134988285612f29565b91506134a382613121565b91506134af8284612f29565b91506134ba826131ad565b91508190509392505050565b60006134d182613072565b91506134dd8287612f29565b91506134e8826132e8565b91506134f48286612f29565b91506134ff826132c5565b915061350b8285612f29565b915061351682613374565b91506135228284612f29565b915061352d826131d0565b915081905095945050505050565b60006020820190506135506000830184612e51565b92915050565b600060208201905061356b6000830184612e42565b92915050565b60006080820190506135866000830187612e51565b6135936020830186612e51565b6135a060408301856133dd565b81810360608301526135b28184612e86565b905095945050505050565b60006040820190506135d26000830185612e51565b6135df60208301846133dd565b9392505050565b60006020820190506135fb6000830184612e60565b92915050565b6000602082019050818103600083015261361b8184612ef0565b905092915050565b6000602082019050818103600083015261363c81612f7d565b9050919050565b6000602082019050818103600083015261365c81612fa0565b9050919050565b6000602082019050818103600083015261367c81612fc3565b9050919050565b6000602082019050818103600083015261369c81612fe6565b9050919050565b600060208201905081810360008301526136bc81613009565b9050919050565b600060208201905081810360008301526136dc8161302c565b9050919050565b600060208201905081810360008301526136fc8161304f565b9050919050565b6000602082019050818103600083015261371c81613095565b9050919050565b6000602082019050818103600083015261373c816130b8565b9050919050565b6000602082019050818103600083015261375c816130db565b9050919050565b6000602082019050818103600083015261377c816130fe565b9050919050565b6000602082019050818103600083015261379c81613144565b9050919050565b600060208201905081810360008301526137bc81613167565b9050919050565b600060208201905081810360008301526137dc8161318a565b9050919050565b600060208201905081810360008301526137fc816131f3565b9050919050565b6000602082019050818103600083015261381c81613216565b9050919050565b6000602082019050818103600083015261383c81613239565b9050919050565b6000602082019050818103600083015261385c8161325c565b9050919050565b6000602082019050818103600083015261387c8161327f565b9050919050565b6000602082019050818103600083015261389c816132a2565b9050919050565b600060208201905081810360008301526138bc8161330b565b9050919050565b600060208201905081810360008301526138dc8161332e565b9050919050565b600060208201905081810360008301526138fc81613351565b9050919050565b6000602082019050818103600083015261391c81613397565b9050919050565b6000602082019050818103600083015261393c816133ba565b9050919050565b600060208201905061395860008301846133dd565b92915050565b6000613968613979565b90506139748282613cad565b919050565b6000604051905090565b600067ffffffffffffffff82111561399e5761399d613e49565b5b6139a782613e8c565b9050602081019050919050565b600067ffffffffffffffff8211156139cf576139ce613e49565b5b6139d882613e8c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a3e82613c2f565b9150613a4983613c2f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a7e57613a7d613d8d565b5b828201905092915050565b6000613a9482613c01565b9150613a9f83613c01565b925082613aaf57613aae613dbc565b5b828204905092915050565b6000613ac582613c2f565b9150613ad083613c2f565b925082613ae057613adf613dbc565b5b828204905092915050565b6000613af682613c2f565b9150613b0183613c2f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b3a57613b39613d8d565b5b828202905092915050565b6000613b5082613c2f565b9150613b5b83613c2f565b925082821015613b6e57613b6d613d8d565b5b828203905092915050565b6000613b8482613c0f565b9050919050565b6000613b9682613c0f565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c66578082015181840152602081019050613c4b565b83811115613c75576000848401525b50505050565b60006002820490506001821680613c9357607f821691505b60208210811415613ca757613ca6613deb565b5b50919050565b613cb682613e8c565b810181811067ffffffffffffffff82111715613cd557613cd4613e49565b5b80604052505050565b6000613ce982613c01565b915061ffff821415613cfe57613cfd613d8d565b5b600182019050919050565b6000613d1482613c2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d4757613d46613d8d565b5b600182019050919050565b6000819050919050565b6000613d6782613c2f565b9150613d7283613c2f565b925082613d8257613d81613dbc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7b226e616d65223a20224c797269637320230000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f507269636520697320302e303120455448210000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5468697320446f7065204c6f6f74206261672068617320616c7265616479206260008201527f65656e20757365642e0000000000000000000000000000000000000000000000602082015250565b7f4d696e74732066726f6d20446f7065204c6f6f7420726571756972657320302e60008201527f3030352045544821000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f3c7465787420783d220000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f54686973205261726520515220636f64652068617320616c726561647920626560008201527f656e20757365642e000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420746865206f776e6572206f662074686973205261726520515220636f60008201527f64652e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4361707065642100000000000000000000000000000000000000000000000000600082015250565b7f222c20226465736372697074696f6e223a2022446f7065204c7972696373206160008201527f7265206120736574206f662067656e65726174697665204e465473207468617460208201527f20736f7572636520746865697220696e666f726d6174696f6e2066726f6d207760408201527f6f72647320696e7075742075706f6e206d696e74696e672e204f6e636520746860608201527f6520746f74616c20737570706c79206973206869742c20746865206c7972696360808201527f73206172652073657420696e2073746f6e6520666f72657665722e222c20226960a08201527f6d616765223a2022646174613a696d6167652f7376672b786d6c3b626173653660c08201527f342c00000000000000000000000000000000000000000000000000000000000060e082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f3c2f746578743e00000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f7420746865206f776e6572206f66207468697320446f7065204c6f6f742060008201527f6261672e00000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c7920757365206c6f77657263617365206c6174696e206c65747465727360008201527f20616e6420737061636573210000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f2220636c6173733d220000000000000000000000000000000000000000000000600082015250565b7f2220793d22000000000000000000000000000000000000000000000000000000600082015250565b7f4275666665722e746f537472696e673a20696e76616c69642062756666657200600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f746f55696e74385f6f75744f66426f756e647300000000000000000000000000600082015250565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b7f4275666665722e617070656e643a206e6f206361706163697479000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61475981613b79565b811461476457600080fd5b50565b61477081613b9d565b811461477b57600080fd5b50565b61478781613bd5565b811461479257600080fd5b50565b61479e81613c2f565b81146147a957600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302034383020343830223e3c7374796c653e2e626173657b66696c6c3a234646464646463b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a313670783b7d2e726172657b66696c6c3a233030464630303b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a313670783b7d2e76726172657b66696c6c3a234646443730303b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a313470783b7d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b222f3ea2646970667358221220bcba53464009bbc664c5f4ba3d2aab10fa5efcfbe0bc36aa71fc6440a61deea864736f6c63430008070033

Deployed Bytecode Sourcemap

33239:6877:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39435:31;39444:10;39456:9;39435:31;;;;;;;:::i;:::-;;;;;;;;33239:6877;;;;;17795:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18740:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20299:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19822:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39486:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33572:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21189:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39259:85;;;;;;;;;;;;;:::i;:::-;;21599:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39078:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18434:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18164:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33293:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18909:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20592:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21855:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38745:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34387:2173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38298:435;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20958:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17795:305;17897:4;17949:25;17934:40;;;:11;:40;;;;:105;;;;18006:33;17991:48;;;:11;:48;;;;17934:105;:158;;;;18056:36;18080:11;18056:23;:36::i;:::-;17934:158;17914:178;;17795:305;;;:::o;18740:100::-;18794:13;18827:5;18820:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18740:100;:::o;20299:221::-;20375:7;20403:16;20411:7;20403;:16::i;:::-;20395:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20488:15;:24;20504:7;20488:24;;;;;;;;;;;;;;;;;;;;;20481:31;;20299:221;;;:::o;19822:411::-;19903:13;19919:23;19934:7;19919:14;:23::i;:::-;19903:39;;19967:5;19961:11;;:2;:11;;;;19953:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20061:5;20045:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;20070:37;20087:5;20094:12;:10;:12::i;:::-;20070:16;:37::i;:::-;20045:62;20023:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;20204:21;20213:2;20217:7;20204:8;:21::i;:::-;19892:341;19822:411;;:::o;39486:87::-;39532:7;39559:6;;;;;;;;;;;39552:13;;;;39486:87;:::o;33572:32::-;;;;:::o;21189:339::-;21384:41;21403:12;:10;:12::i;:::-;21417:7;21384:18;:41::i;:::-;21376:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21492:28;21502:4;21508:2;21512:7;21492:9;:28::i;:::-;21189:339;;;:::o;39259:85::-;39299:5;;;;;;;;;;;:14;;:37;39314:21;39299:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39259:85::o;21599:185::-;21737:39;21754:4;21760:2;21764:7;21737:39;;;;;;;;;;;;:16;:39::i;:::-;21599:185;;;:::o;39078:169::-;31678:1;31820:7;;:19;;31812:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31678:1;31886:7;:18;;;;39180:13:::1;39167:9;:26;;39159:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;39227:12;39232:6;39227:4;:12::i;:::-;31634:1:::0;31927:7;:22;;;;39078:169;:::o;18434:239::-;18506:7;18526:13;18542:7;:16;18550:7;18542:16;;;;;;;;;;;;;;;;;;;;;18526:32;;18594:1;18577:19;;:5;:19;;;;18569:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18660:5;18653:12;;;18434:239;;;:::o;18164:208::-;18236:7;18281:1;18264:19;;:5;:19;;;;18256:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18348:9;:16;18358:5;18348:16;;;;;;;;;;;;;;;;18341:23;;18164:208;;;:::o;33293:28::-;;;;;;;;;;;;;:::o;18909:104::-;18965:13;18998:7;18991:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18909:104;:::o;20592:295::-;20707:12;:10;:12::i;:::-;20695:24;;:8;:24;;;;20687:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20807:8;20762:18;:32;20781:12;:10;:12::i;:::-;20762:32;;;;;;;;;;;;;;;:42;20795:8;20762:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20860:8;20831:48;;20846:12;:10;:12::i;:::-;20831:48;;;20870:8;20831:48;;;;;;:::i;:::-;;;;;;;;20592:295;;:::o;21855:328::-;22030:41;22049:12;:10;:12::i;:::-;22063:7;22030:18;:41::i;:::-;22022:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22136:39;22150:4;22156:2;22160:7;22169:5;22136:13;:39::i;:::-;21855:328;;;;:::o;38745:321::-;31678:1;31820:7;;:19;;31812:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31678:1;31886:7;:18;;;;38872:10:::1;38843:39;;:10;;;;;;;;;;;:18;;;38862:5;38843:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;38835:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38942:8;:15;38951:5;38942:15;;;;;;;;;;;;;;;;;;;;;38941:16;38933:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39031:4;39013:8;:15;39022:5;39013:15;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;39046:12;39051:6;39046:4;:12::i;:::-;31634:1:::0;31927:7;:22;;;;38745:321;;:::o;34387:2173::-;34452:13;34478:14;34503:21;34535:20;34566:19;34596:18;34625:6;34642;34659:9;34693:22;34728:4;34718:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34693:40;;34744:360;34758:9;34744:360;;;;;;;;;;;;;;;;;:13;:360::i;:::-;35130:6;35125:649;35142:1;35140;:3;35125:649;;;35185:19;35193:1;35196:7;35185;:19::i;:::-;35165:39;;;;;;;;35236:1;35223:9;:14;35219:201;;;35258:15;;;;;;;;;;;;;;;;;;;35219:201;;;35312:2;35299:9;:15;35295:125;;35335:14;;;;;;;;;;;;;;;;;;;35295:125;;;35390:14;;;;;;;;;;;;;;;;;;;35295:125;35219:201;35466:1;35456:7;;;;;;;;;;;:11;;;;:::i;:::-;35438:29;;35446:7;;;;;;;;;;;35438:15;;35442:1;35438;:5;;;;:::i;:::-;:15;;;;:::i;:::-;:29;;;;:::i;:::-;35434:33;;35513:1;35503:7;;;;;;;;;;;:11;;;;:::i;:::-;35486:28;;35493:7;;;;;;;;;;;35486:14;;:4;:14;;;;:::i;:::-;:28;;;;:::i;:::-;35482:32;;35529:6;;;;:::i;:::-;;;35561:1;35554:4;:8;35550:57;;;35590:1;35583:8;;35550:57;35621:141;35635:9;35683:11;35692:1;35683:8;:11::i;:::-;35705;35714:1;35705:8;:11::i;:::-;35731:5;35744:4;35653:107;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35621:13;:141::i;:::-;35145:3;;;;:::i;:::-;;;35125:649;;;;35786:34;35800:9;35786:34;;;;;;;;;;;;;;;;;:13;:34::i;:::-;35840:26;35856:9;35840:15;:26::i;:::-;35831:35;;35877:23;35913:4;35903:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35877:41;;35929:358;35943:10;36001:17;36010:7;36001:8;:17::i;:::-;36250:28;36270:6;36250:13;:28::i;:::-;35962:323;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35929:13;:358::i;:::-;36308:49;36328:27;36344:10;36328:15;:27::i;:::-;36308:13;:49::i;:::-;36298:59;;36368:19;36400:4;36390:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36368:37;;36416:54;36430:6;36416:54;;;;;;;;;;;;;;;;;:13;:54::i;:::-;36481:30;36495:6;36503:7;36481:13;:30::i;:::-;36529:23;36545:6;36529:15;:23::i;:::-;36522:30;;;;;;;;;;;;;34387:2173;;;:::o;38298:435::-;31678:1;31820:7;;:19;;31812:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31678:1;31886:7;:18;;;;38419:13:::1;38406:9;:26;;38398:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;38529:10;38496:43;;:12;;;;;;;;;;;:20;;;38517:7;38496:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;38488:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;38600:10;:19;38611:7;38600:19;;;;;;;;;;;;;;;;;;;;;38599:20;38591:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;38698:4;38676:10;:19;38687:7;38676:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;38713:12;38718:6;38713:4;:12::i;:::-;31634:1:::0;31927:7;:22;;;;38298:435;;:::o;20958:164::-;21055:4;21079:18;:25;21098:5;21079:25;;;;;;;;;;;;;;;:35;21105:8;21079:35;;;;;;;;;;;;;;;;;;;;;;;;;21072:42;;20958:164;;;;:::o;630:157::-;715:4;754:25;739:40;;;:11;:40;;;;732:47;;630:157;;;:::o;23693:127::-;23758:4;23810:1;23782:30;;:7;:16;23790:7;23782:16;;;;;;;;;;;;;;;;;;;;;:30;;;;23775:37;;23693:127;;;:::o;14661:98::-;14714:7;14741:10;14734:17;;14661:98;:::o;27675:174::-;27777:2;27750:15;:24;27766:7;27750:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27833:7;27829:2;27795:46;;27804:23;27819:7;27804:14;:23::i;:::-;27795:46;;;;;;;;;;;;27675:174;;:::o;23987:348::-;24080:4;24105:16;24113:7;24105;:16::i;:::-;24097:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24181:13;24197:23;24212:7;24197:14;:23::i;:::-;24181:39;;24250:5;24239:16;;:7;:16;;;:51;;;;24283:7;24259:31;;:20;24271:7;24259:11;:20::i;:::-;:31;;;24239:51;:87;;;;24294:32;24311:5;24318:7;24294:16;:32::i;:::-;24239:87;24231:96;;;23987:348;;;;:::o;26979:578::-;27138:4;27111:31;;:23;27126:7;27111:14;:23::i;:::-;:31;;;27103:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27221:1;27207:16;;:2;:16;;;;27199:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27277:39;27298:4;27304:2;27308:7;27277:20;:39::i;:::-;27381:29;27398:1;27402:7;27381:8;:29::i;:::-;27442:1;27423:9;:15;27433:4;27423:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;27471:1;27454:9;:13;27464:2;27454:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27502:2;27483:7;:16;27491:7;27483:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27541:7;27537:2;27522:27;;27531:4;27522:27;;;;;;;;;;;;26979:578;;;:::o;36886:1400::-;36958:10;;36949:6;;;;;;;;;;;:19;;;36941:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;36991:23;37023:5;36991:38;;37040:15;37058:4;37040:22;;37073:9;37098:6;37105:1;37098:8;;37093:317;37110:10;:17;37108:1;:19;37093:317;;;37155:39;37176:10;37187:1;37176:13;;;;;;;;:::i;:::-;;;;;;;;;;37163:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;37192:1;37155:7;:39::i;:::-;37149:45;;37224:2;37217:3;:9;;;:36;;;;37237:2;37230:3;:9;;;;:23;;;;;37250:3;37243;:10;;;;37230:23;37217:36;37209:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;37321:10;:23;;;;;37342:2;37335:3;:9;;;;37321:23;37317:82;;;37378:5;37365:18;;37317:82;37129:3;;;;:::i;:::-;;;37093:317;;;;37420:31;37430:12;:10;:12::i;:::-;37444:6;;;;;;;;;;;37420:31;;:9;:31::i;:::-;37464:6;;37462:8;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37486:10;37481:798;;37513:14;37542:21;37578:6;37608;37603:537;37620:10;:17;37618:1;:19;37603:537;;;37673:10;37684:1;37673:13;;;;;;;;:::i;:::-;;;;;;;;;;37663:23;;37720:4;37709:15;;:7;:15;;;;:38;;;;;37746:1;37728:8;:15;:19;37709:38;37705:420;;;37795:7;;37776:8;:15;:26;37772:130;;37831:6;37867:8;37850:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;37831:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37772:130;37924:15;;;37966:1;37962:5;;37705:420;;;38008:4;37997:15;;:7;:15;;;;37993:132;;38061:8;38071:7;38048:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38037:42;;38102:3;;;;:::i;:::-;;;37993:132;37705:420;37639:3;;;;:::i;:::-;;;37603:537;;;;38177:7;;38158:8;:15;:26;38154:114;;38205:6;38241:8;38224:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;38205:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38154:114;37498:781;;;37481:798;36930:1356;;;36886:1400;:::o;23065:315::-;23222:28;23232:4;23238:2;23242:7;23222:9;:28::i;:::-;23269:48;23292:4;23298:2;23302:7;23311:5;23269:22;:48::i;:::-;23261:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23065:315;;;;:::o;32624:412::-;32713:41;32728:6;32742:3;32736:17;32713:14;:41::i;:::-;32705:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32849:2;32841:6;32837:15;32831:22;32953:3;32947:10;32941:2;32933:6;32929:15;32924:3;32920:25;32914:3;32908:10;32903:2;32898:3;32894:12;32889:3;32882:5;32871:87;32867:92;33012:3;33006:10;33001:3;32997:20;32992:2;32984:6;32980:15;32973:45;32805:224;32624:412;;:::o;34103:276::-;34172:13;34187:7;34207:6;34224:12;34239:65;34270:12;34279:2;34270:8;:12::i;:::-;34284:17;34293:7;34284:8;:17::i;:::-;34253:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34239:6;:65::i;:::-;34224:80;;34326:6;:13;;;;34319:4;:20;;;;:::i;:::-;34315:24;;34358:6;34365:1;34358:9;;;;;;;;:::i;:::-;;;;;;;;;34369:1;34350:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34103:276;;;;;:::o;39581:532::-;39637:13;39676:1;39667:5;:10;39663:53;;;39694:10;;;;;;;;;;;;;;;;;;;;;39663:53;39726:12;39741:5;39726:20;;39757:14;39782:78;39797:1;39789:4;:9;39782:78;;39815:8;;;;;:::i;:::-;;;;39846:2;39838:10;;;;;:::i;:::-;;;39782:78;;;39870:19;39902:6;39892:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39870:39;;39920:154;39936:1;39927:5;:10;39920:154;;39964:1;39954:11;;;;;:::i;:::-;;;40031:2;40023:5;:10;;;;:::i;:::-;40010:2;:24;;;;:::i;:::-;39997:39;;39980:6;39987;39980:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;40060:2;40051:11;;;;;:::i;:::-;;;39920:154;;;40098:6;40084:21;;;;;39581:532;;;;:::o;32331:281::-;32393:13;32427:25;32442:6;32450:1;32427:14;:25::i;:::-;32419:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32499:17;32570:2;32562:6;32558:15;32551:22;;32601:3;32594:10;;;32331:281;;;:::o;30047:1499::-;30105:13;30131:11;30145:4;:11;30131:25;;30178:1;30171:3;:8;30167:23;;;30181:9;;;;;;;;;;;;;;;;;30167:23;30201:18;30239:1;30234;30228:3;:7;;;;:::i;:::-;30227:13;;;;:::i;:::-;30222:1;:19;;;;:::i;:::-;30201:40;;30252:19;30297:2;30284:10;:15;;;;:::i;:::-;30274:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30252:48;;30311:18;30332:5;;;;;;;;;;;;;;;;;30311:26;;30399:1;30392:5;30388:13;30444:2;30436:6;30432:15;30493:1;30461:769;30516:3;30513:1;30510:10;30461:769;;;30569:1;30566;30562:9;30557:14;;30627:8;30622:1;30616:4;30612:12;30606:19;30602:34;30705:4;30697:5;30693:2;30689:14;30685:25;30675:8;30671:40;30665:47;30744:3;30741:1;30737:11;30730:18;;30835:4;30826;30818:5;30814:2;30810:14;30806:25;30796:8;30792:40;30786:47;30782:58;30777:3;30773:68;30766:75;;30873:3;30870:1;30866:11;30859:18;;30963:4;30954;30946:5;30943:1;30939:13;30935:24;30925:8;30921:39;30915:46;30911:57;30906:3;30902:67;30895:74;;31001:3;30998:1;30994:11;30987:18;;31083:4;31074;31067:5;31063:16;31053:8;31049:31;31043:38;31039:49;31034:3;31030:59;31023:66;;31123:3;31118;31114:13;31107:20;;31163:3;31152:9;31145:22;31213:1;31202:9;31198:17;31185:30;;30538:692;;30461:769;;;30465:44;31260:1;31255:3;31251:11;31281:1;31276:84;;;;31379:1;31374:82;;;;31244:212;;31276:84;31337:6;31332:3;31328:16;31324:1;31313:9;31309:17;31302:43;31276:84;;31374:82;31435:4;31430:3;31426:14;31422:1;31411:9;31407:17;31400:41;31244:212;;31485:10;31477:6;31470:26;30357:1150;;31531:6;31517:21;;;;;;30047:1499;;;;:::o;29785:126::-;;;;:::o;36572:306::-;36649:5;36701:1;36692:6;:10;;;;:::i;:::-;36675:6;:13;:27;;36667:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;36737:14;36826:6;36820:3;36812:6;36808:16;36804:29;36798:36;36786:48;;36862:8;36855:15;;;36572:306;;;;:::o;24677:110::-;24753:26;24763:2;24767:7;24753:26;;;;;;;;;;;;:9;:26::i;:::-;24677:110;;:::o;28414:799::-;28569:4;28590:15;:2;:13;;;:15::i;:::-;28586:620;;;28642:2;28626:36;;;28663:12;:10;:12::i;:::-;28677:4;28683:7;28692:5;28626:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28622:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28885:1;28868:6;:13;:18;28864:272;;;28911:60;;;;;;;;;;:::i;:::-;;;;;;;;28864:272;29086:6;29080:13;29071:6;29067:2;29063:15;29056:38;28622:529;28759:41;;;28749:51;;;:6;:51;;;;28742:58;;;;;28586:620;29190:4;29183:11;;28414:799;;;;;;;:::o;31986:333::-;32070:4;32087:12;32110;32171:6;32165:13;32157:21;;32218:2;32210:6;32206:15;32200:22;32192:30;;32258:2;32250:4;:10;;:31;;;;;32279:2;32272:4;:9;;;;:::i;:::-;32264:4;:17;;32250:31;:61;;;;;32309:2;32302:4;:9;;;;:::i;:::-;32292:6;32285:4;:13;;;;:::i;:::-;:26;;32250:61;32243:68;;;;31986:333;;;;:::o;33957:138::-;34017:7;34079:5;34062:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;34052:34;;;;;;34044:43;;34037:50;;33957:138;;;:::o;25014:321::-;25144:18;25150:2;25154:7;25144:5;:18::i;:::-;25195:54;25226:1;25230:2;25234:7;25243:5;25195:22;:54::i;:::-;25173:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25014:321;;;:::o;7297:387::-;7357:4;7565:12;7632:7;7620:20;7612:28;;7675:1;7668:4;:8;7661:15;;;7297:387;;;:::o;25671:382::-;25765:1;25751:16;;:2;:16;;;;25743:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25824:16;25832:7;25824;:16::i;:::-;25823:17;25815:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25886:45;25915:1;25919:2;25923:7;25886:20;:45::i;:::-;25961:1;25944:9;:13;25954:2;25944:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;25992:2;25973:7;:16;25981:7;25973:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26037:7;26033:2;26012:33;;26029:1;26012:33;;;;;;;;;;;;25671:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1135:133::-;1178:5;1216:6;1203:20;1194:29;;1232:30;1256:5;1232:30;:::i;:::-;1135:133;;;;:::o;1274:137::-;1319:5;1357:6;1344:20;1335:29;;1373:32;1399:5;1373:32;:::i;:::-;1274:137;;;;:::o;1417:141::-;1473:5;1504:6;1498:13;1489:22;;1520:32;1546:5;1520:32;:::i;:::-;1417:141;;;;:::o;1577:338::-;1632:5;1681:3;1674:4;1666:6;1662:17;1658:27;1648:122;;1689:79;;:::i;:::-;1648:122;1806:6;1793:20;1831:78;1905:3;1897:6;1890:4;1882:6;1878:17;1831:78;:::i;:::-;1822:87;;1638:277;1577:338;;;;:::o;1935:340::-;1991:5;2040:3;2033:4;2025:6;2021:17;2017:27;2007:122;;2048:79;;:::i;:::-;2007:122;2165:6;2152:20;2190:79;2265:3;2257:6;2250:4;2242:6;2238:17;2190:79;:::i;:::-;2181:88;;1997:278;1935:340;;;;:::o;2281:139::-;2327:5;2365:6;2352:20;2343:29;;2381:33;2408:5;2381:33;:::i;:::-;2281:139;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:351::-;2831:6;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:64;3087:7;3078:6;3067:9;3063:22;3031:64;:::i;:::-;3021:74;;2977:128;2761:351;;;;:::o;3118:474::-;3186:6;3194;3243:2;3231:9;3222:7;3218:23;3214:32;3211:119;;;3249:79;;:::i;:::-;3211:119;3369:1;3394:53;3439:7;3430:6;3419:9;3415:22;3394:53;:::i;:::-;3384:63;;3340:117;3496:2;3522:53;3567:7;3558:6;3547:9;3543:22;3522:53;:::i;:::-;3512:63;;3467:118;3118:474;;;;;:::o;3598:619::-;3675:6;3683;3691;3740:2;3728:9;3719:7;3715:23;3711:32;3708:119;;;3746:79;;:::i;:::-;3708:119;3866:1;3891:53;3936:7;3927:6;3916:9;3912:22;3891:53;:::i;:::-;3881:63;;3837:117;3993:2;4019:53;4064:7;4055:6;4044:9;4040:22;4019:53;:::i;:::-;4009:63;;3964:118;4121:2;4147:53;4192:7;4183:6;4172:9;4168:22;4147:53;:::i;:::-;4137:63;;4092:118;3598:619;;;;;:::o;4223:943::-;4318:6;4326;4334;4342;4391:3;4379:9;4370:7;4366:23;4362:33;4359:120;;;4398:79;;:::i;:::-;4359:120;4518:1;4543:53;4588:7;4579:6;4568:9;4564:22;4543:53;:::i;:::-;4533:63;;4489:117;4645:2;4671:53;4716:7;4707:6;4696:9;4692:22;4671:53;:::i;:::-;4661:63;;4616:118;4773:2;4799:53;4844:7;4835:6;4824:9;4820:22;4799:53;:::i;:::-;4789:63;;4744:118;4929:2;4918:9;4914:18;4901:32;4960:18;4952:6;4949:30;4946:117;;;4982:79;;:::i;:::-;4946:117;5087:62;5141:7;5132:6;5121:9;5117:22;5087:62;:::i;:::-;5077:72;;4872:287;4223:943;;;;;;;:::o;5172:468::-;5237:6;5245;5294:2;5282:9;5273:7;5269:23;5265:32;5262:119;;;5300:79;;:::i;:::-;5262:119;5420:1;5445:53;5490:7;5481:6;5470:9;5466:22;5445:53;:::i;:::-;5435:63;;5391:117;5547:2;5573:50;5615:7;5606:6;5595:9;5591:22;5573:50;:::i;:::-;5563:60;;5518:115;5172:468;;;;;:::o;5646:474::-;5714:6;5722;5771:2;5759:9;5750:7;5746:23;5742:32;5739:119;;;5777:79;;:::i;:::-;5739:119;5897:1;5922:53;5967:7;5958:6;5947:9;5943:22;5922:53;:::i;:::-;5912:63;;5868:117;6024:2;6050:53;6095:7;6086:6;6075:9;6071:22;6050:53;:::i;:::-;6040:63;;5995:118;5646:474;;;;;:::o;6126:327::-;6184:6;6233:2;6221:9;6212:7;6208:23;6204:32;6201:119;;;6239:79;;:::i;:::-;6201:119;6359:1;6384:52;6428:7;6419:6;6408:9;6404:22;6384:52;:::i;:::-;6374:62;;6330:116;6126:327;;;;:::o;6459:349::-;6528:6;6577:2;6565:9;6556:7;6552:23;6548:32;6545:119;;;6583:79;;:::i;:::-;6545:119;6703:1;6728:63;6783:7;6774:6;6763:9;6759:22;6728:63;:::i;:::-;6718:73;;6674:127;6459:349;;;;:::o;6814:509::-;6883:6;6932:2;6920:9;6911:7;6907:23;6903:32;6900:119;;;6938:79;;:::i;:::-;6900:119;7086:1;7075:9;7071:17;7058:31;7116:18;7108:6;7105:30;7102:117;;;7138:79;;:::i;:::-;7102:117;7243:63;7298:7;7289:6;7278:9;7274:22;7243:63;:::i;:::-;7233:73;;7029:287;6814:509;;;;:::o;7329:329::-;7388:6;7437:2;7425:9;7416:7;7412:23;7408:32;7405:119;;;7443:79;;:::i;:::-;7405:119;7563:1;7588:53;7633:7;7624:6;7613:9;7609:22;7588:53;:::i;:::-;7578:63;;7534:117;7329:329;;;;:::o;7664:654::-;7742:6;7750;7799:2;7787:9;7778:7;7774:23;7770:32;7767:119;;;7805:79;;:::i;:::-;7767:119;7925:1;7950:53;7995:7;7986:6;7975:9;7971:22;7950:53;:::i;:::-;7940:63;;7896:117;8080:2;8069:9;8065:18;8052:32;8111:18;8103:6;8100:30;8097:117;;;8133:79;;:::i;:::-;8097:117;8238:63;8293:7;8284:6;8273:9;8269:22;8238:63;:::i;:::-;8228:73;;8023:288;7664:654;;;;;:::o;8324:142::-;8427:32;8453:5;8427:32;:::i;:::-;8422:3;8415:45;8324:142;;:::o;8472:118::-;8559:24;8577:5;8559:24;:::i;:::-;8554:3;8547:37;8472:118;;:::o;8596:109::-;8677:21;8692:5;8677:21;:::i;:::-;8672:3;8665:34;8596:109;;:::o;8711:153::-;8814:43;8833:23;8850:5;8833:23;:::i;:::-;8814:43;:::i;:::-;8809:3;8802:56;8711:153;;:::o;8870:360::-;8956:3;8984:38;9016:5;8984:38;:::i;:::-;9038:70;9101:6;9096:3;9038:70;:::i;:::-;9031:77;;9117:52;9162:6;9157:3;9150:4;9143:5;9139:16;9117:52;:::i;:::-;9194:29;9216:6;9194:29;:::i;:::-;9189:3;9185:39;9178:46;;8960:270;8870:360;;;;:::o;9236:373::-;9340:3;9368:38;9400:5;9368:38;:::i;:::-;9422:88;9503:6;9498:3;9422:88;:::i;:::-;9415:95;;9519:52;9564:6;9559:3;9552:4;9545:5;9541:16;9519:52;:::i;:::-;9596:6;9591:3;9587:16;9580:23;;9344:265;9236:373;;;;:::o;9615:364::-;9703:3;9731:39;9764:5;9731:39;:::i;:::-;9786:71;9850:6;9845:3;9786:71;:::i;:::-;9779:78;;9866:52;9911:6;9906:3;9899:4;9892:5;9888:16;9866:52;:::i;:::-;9943:29;9965:6;9943:29;:::i;:::-;9938:3;9934:39;9927:46;;9707:272;9615:364;;;;:::o;9985:377::-;10091:3;10119:39;10152:5;10119:39;:::i;:::-;10174:89;10256:6;10251:3;10174:89;:::i;:::-;10167:96;;10272:52;10317:6;10312:3;10305:4;10298:5;10294:16;10272:52;:::i;:::-;10349:6;10344:3;10340:16;10333:23;;10095:267;9985:377;;;;:::o;10368:402::-;10528:3;10549:85;10631:2;10626:3;10549:85;:::i;:::-;10542:92;;10643:93;10732:3;10643:93;:::i;:::-;10761:2;10756:3;10752:12;10745:19;;10368:402;;;:::o;10776:366::-;10918:3;10939:67;11003:2;10998:3;10939:67;:::i;:::-;10932:74;;11015:93;11104:3;11015:93;:::i;:::-;11133:2;11128:3;11124:12;11117:19;;10776:366;;;:::o;11148:::-;11290:3;11311:67;11375:2;11370:3;11311:67;:::i;:::-;11304:74;;11387:93;11476:3;11387:93;:::i;:::-;11505:2;11500:3;11496:12;11489:19;;11148:366;;;:::o;11520:::-;11662:3;11683:67;11747:2;11742:3;11683:67;:::i;:::-;11676:74;;11759:93;11848:3;11759:93;:::i;:::-;11877:2;11872:3;11868:12;11861:19;;11520:366;;;:::o;11892:::-;12034:3;12055:67;12119:2;12114:3;12055:67;:::i;:::-;12048:74;;12131:93;12220:3;12131:93;:::i;:::-;12249:2;12244:3;12240:12;12233:19;;11892:366;;;:::o;12264:::-;12406:3;12427:67;12491:2;12486:3;12427:67;:::i;:::-;12420:74;;12503:93;12592:3;12503:93;:::i;:::-;12621:2;12616:3;12612:12;12605:19;;12264:366;;;:::o;12636:::-;12778:3;12799:67;12863:2;12858:3;12799:67;:::i;:::-;12792:74;;12875:93;12964:3;12875:93;:::i;:::-;12993:2;12988:3;12984:12;12977:19;;12636:366;;;:::o;13008:::-;13150:3;13171:67;13235:2;13230:3;13171:67;:::i;:::-;13164:74;;13247:93;13336:3;13247:93;:::i;:::-;13365:2;13360:3;13356:12;13349:19;;13008:366;;;:::o;13380:400::-;13540:3;13561:84;13643:1;13638:3;13561:84;:::i;:::-;13554:91;;13654:93;13743:3;13654:93;:::i;:::-;13772:1;13767:3;13763:11;13756:18;;13380:400;;;:::o;13786:366::-;13928:3;13949:67;14013:2;14008:3;13949:67;:::i;:::-;13942:74;;14025:93;14114:3;14025:93;:::i;:::-;14143:2;14138:3;14134:12;14127:19;;13786:366;;;:::o;14158:::-;14300:3;14321:67;14385:2;14380:3;14321:67;:::i;:::-;14314:74;;14397:93;14486:3;14397:93;:::i;:::-;14515:2;14510:3;14506:12;14499:19;;14158:366;;;:::o;14530:::-;14672:3;14693:67;14757:2;14752:3;14693:67;:::i;:::-;14686:74;;14769:93;14858:3;14769:93;:::i;:::-;14887:2;14882:3;14878:12;14871:19;;14530:366;;;:::o;14902:365::-;15044:3;15065:66;15129:1;15124:3;15065:66;:::i;:::-;15058:73;;15140:93;15229:3;15140:93;:::i;:::-;15258:2;15253:3;15249:12;15242:19;;14902:365;;;:::o;15273:404::-;15433:3;15454:86;15536:3;15531;15454:86;:::i;:::-;15447:93;;15549;15638:3;15549:93;:::i;:::-;15667:3;15662;15658:13;15651:20;;15273:404;;;:::o;15683:366::-;15825:3;15846:67;15910:2;15905:3;15846:67;:::i;:::-;15839:74;;15922:93;16011:3;15922:93;:::i;:::-;16040:2;16035:3;16031:12;16024:19;;15683:366;;;:::o;16055:::-;16197:3;16218:67;16282:2;16277:3;16218:67;:::i;:::-;16211:74;;16294:93;16383:3;16294:93;:::i;:::-;16412:2;16407:3;16403:12;16396:19;;16055:366;;;:::o;16427:::-;16569:3;16590:67;16654:2;16649:3;16590:67;:::i;:::-;16583:74;;16666:93;16755:3;16666:93;:::i;:::-;16784:2;16779:3;16775:12;16768:19;;16427:366;;;:::o;16799:400::-;16959:3;16980:84;17062:1;17057:3;16980:84;:::i;:::-;16973:91;;17073:93;17162:3;17073:93;:::i;:::-;17191:1;17186:3;17182:11;17175:18;;16799:400;;;:::o;17205:::-;17365:3;17386:84;17468:1;17463:3;17386:84;:::i;:::-;17379:91;;17479:93;17568:3;17479:93;:::i;:::-;17597:1;17592:3;17588:11;17581:18;;17205:400;;;:::o;17611:366::-;17753:3;17774:67;17838:2;17833:3;17774:67;:::i;:::-;17767:74;;17850:93;17939:3;17850:93;:::i;:::-;17968:2;17963:3;17959:12;17952:19;;17611:366;;;:::o;17983:::-;18125:3;18146:67;18210:2;18205:3;18146:67;:::i;:::-;18139:74;;18222:93;18311:3;18222:93;:::i;:::-;18340:2;18335:3;18331:12;18324:19;;17983:366;;;:::o;18355:::-;18497:3;18518:67;18582:2;18577:3;18518:67;:::i;:::-;18511:74;;18594:93;18683:3;18594:93;:::i;:::-;18712:2;18707:3;18703:12;18696:19;;18355:366;;;:::o;18727:::-;18869:3;18890:67;18954:2;18949:3;18890:67;:::i;:::-;18883:74;;18966:93;19055:3;18966:93;:::i;:::-;19084:2;19079:3;19075:12;19068:19;;18727:366;;;:::o;19099:::-;19241:3;19262:67;19326:2;19321:3;19262:67;:::i;:::-;19255:74;;19338:93;19427:3;19338:93;:::i;:::-;19456:2;19451:3;19447:12;19440:19;;19099:366;;;:::o;19471:::-;19613:3;19634:67;19698:2;19693:3;19634:67;:::i;:::-;19627:74;;19710:93;19799:3;19710:93;:::i;:::-;19828:2;19823:3;19819:12;19812:19;;19471:366;;;:::o;19843:400::-;20003:3;20024:84;20106:1;20101:3;20024:84;:::i;:::-;20017:91;;20117:93;20206:3;20117:93;:::i;:::-;20235:1;20230:3;20226:11;20219:18;;19843:400;;;:::o;20249:::-;20409:3;20430:84;20512:1;20507:3;20430:84;:::i;:::-;20423:91;;20523:93;20612:3;20523:93;:::i;:::-;20641:1;20636:3;20632:11;20625:18;;20249:400;;;:::o;20655:366::-;20797:3;20818:67;20882:2;20877:3;20818:67;:::i;:::-;20811:74;;20894:93;20983:3;20894:93;:::i;:::-;21012:2;21007:3;21003:12;20996:19;;20655:366;;;:::o;21027:::-;21169:3;21190:67;21254:2;21249:3;21190:67;:::i;:::-;21183:74;;21266:93;21355:3;21266:93;:::i;:::-;21384:2;21379:3;21375:12;21368:19;;21027:366;;;:::o;21399:::-;21541:3;21562:67;21626:2;21621:3;21562:67;:::i;:::-;21555:74;;21638:93;21727:3;21638:93;:::i;:::-;21756:2;21751:3;21747:12;21740:19;;21399:366;;;:::o;21771:400::-;21931:3;21952:84;22034:1;22029:3;21952:84;:::i;:::-;21945:91;;22045:93;22134:3;22045:93;:::i;:::-;22163:1;22158:3;22154:11;22147:18;;21771:400;;;:::o;22177:366::-;22319:3;22340:67;22404:2;22399:3;22340:67;:::i;:::-;22333:74;;22416:93;22505:3;22416:93;:::i;:::-;22534:2;22529:3;22525:12;22518:19;;22177:366;;;:::o;22549:::-;22691:3;22712:67;22776:2;22771:3;22712:67;:::i;:::-;22705:74;;22788:93;22877:3;22788:93;:::i;:::-;22906:2;22901:3;22897:12;22890:19;;22549:366;;;:::o;22921:118::-;23008:24;23026:5;23008:24;:::i;:::-;23003:3;22996:37;22921:118;;:::o;23045:251::-;23155:3;23170:73;23239:3;23230:6;23170:73;:::i;:::-;23268:1;23263:3;23259:11;23252:18;;23287:3;23280:10;;23045:251;;;;:::o;23302:271::-;23432:3;23454:93;23543:3;23534:6;23454:93;:::i;:::-;23447:100;;23564:3;23557:10;;23302:271;;;;:::o;23579:407::-;23735:3;23757:93;23846:3;23837:6;23757:93;:::i;:::-;23750:100;;23860:73;23929:3;23920:6;23860:73;:::i;:::-;23958:1;23953:3;23949:11;23942:18;;23977:3;23970:10;;23579:407;;;;;:::o;23992:275::-;24124:3;24146:95;24237:3;24228:6;24146:95;:::i;:::-;24139:102;;24258:3;24251:10;;23992:275;;;;:::o;24273:435::-;24453:3;24475:95;24566:3;24557:6;24475:95;:::i;:::-;24468:102;;24587:95;24678:3;24669:6;24587:95;:::i;:::-;24580:102;;24699:3;24692:10;;24273:435;;;;;:::o;24714:1233::-;25197:3;25219:148;25363:3;25219:148;:::i;:::-;25212:155;;25384:95;25475:3;25466:6;25384:95;:::i;:::-;25377:102;;25496:148;25640:3;25496:148;:::i;:::-;25489:155;;25661:95;25752:3;25743:6;25661:95;:::i;:::-;25654:102;;25773:148;25917:3;25773:148;:::i;:::-;25766:155;;25938:3;25931:10;;24714:1233;;;;;:::o;25953:2085::-;26734:3;26756:148;26900:3;26756:148;:::i;:::-;26749:155;;26921:95;27012:3;27003:6;26921:95;:::i;:::-;26914:102;;27033:148;27177:3;27033:148;:::i;:::-;27026:155;;27198:95;27289:3;27280:6;27198:95;:::i;:::-;27191:102;;27310:148;27454:3;27310:148;:::i;:::-;27303:155;;27475:95;27566:3;27557:6;27475:95;:::i;:::-;27468:102;;27587:148;27731:3;27587:148;:::i;:::-;27580:155;;27752:95;27843:3;27834:6;27752:95;:::i;:::-;27745:102;;27864:148;28008:3;27864:148;:::i;:::-;27857:155;;28029:3;28022:10;;25953:2085;;;;;;;:::o;28044:222::-;28137:4;28175:2;28164:9;28160:18;28152:26;;28188:71;28256:1;28245:9;28241:17;28232:6;28188:71;:::i;:::-;28044:222;;;;:::o;28272:254::-;28381:4;28419:2;28408:9;28404:18;28396:26;;28432:87;28516:1;28505:9;28501:17;28492:6;28432:87;:::i;:::-;28272:254;;;;:::o;28532:640::-;28727:4;28765:3;28754:9;28750:19;28742:27;;28779:71;28847:1;28836:9;28832:17;28823:6;28779:71;:::i;:::-;28860:72;28928:2;28917:9;28913:18;28904:6;28860:72;:::i;:::-;28942;29010:2;28999:9;28995:18;28986:6;28942:72;:::i;:::-;29061:9;29055:4;29051:20;29046:2;29035:9;29031:18;29024:48;29089:76;29160:4;29151:6;29089:76;:::i;:::-;29081:84;;28532:640;;;;;;;:::o;29178:332::-;29299:4;29337:2;29326:9;29322:18;29314:26;;29350:71;29418:1;29407:9;29403:17;29394:6;29350:71;:::i;:::-;29431:72;29499:2;29488:9;29484:18;29475:6;29431:72;:::i;:::-;29178:332;;;;;:::o;29516:210::-;29603:4;29641:2;29630:9;29626:18;29618:26;;29654:65;29716:1;29705:9;29701:17;29692:6;29654:65;:::i;:::-;29516:210;;;;:::o;29732:313::-;29845:4;29883:2;29872:9;29868:18;29860:26;;29932:9;29926:4;29922:20;29918:1;29907:9;29903:17;29896:47;29960:78;30033:4;30024:6;29960:78;:::i;:::-;29952:86;;29732:313;;;;:::o;30051:419::-;30217:4;30255:2;30244:9;30240:18;30232:26;;30304:9;30298:4;30294:20;30290:1;30279:9;30275:17;30268:47;30332:131;30458:4;30332:131;:::i;:::-;30324:139;;30051:419;;;:::o;30476:::-;30642:4;30680:2;30669:9;30665:18;30657:26;;30729:9;30723:4;30719:20;30715:1;30704:9;30700:17;30693:47;30757:131;30883:4;30757:131;:::i;:::-;30749:139;;30476:419;;;:::o;30901:::-;31067:4;31105:2;31094:9;31090:18;31082:26;;31154:9;31148:4;31144:20;31140:1;31129:9;31125:17;31118:47;31182:131;31308:4;31182:131;:::i;:::-;31174:139;;30901:419;;;:::o;31326:::-;31492:4;31530:2;31519:9;31515:18;31507:26;;31579:9;31573:4;31569:20;31565:1;31554:9;31550:17;31543:47;31607:131;31733:4;31607:131;:::i;:::-;31599:139;;31326:419;;;:::o;31751:::-;31917:4;31955:2;31944:9;31940:18;31932:26;;32004:9;31998:4;31994:20;31990:1;31979:9;31975:17;31968:47;32032:131;32158:4;32032:131;:::i;:::-;32024:139;;31751:419;;;:::o;32176:::-;32342:4;32380:2;32369:9;32365:18;32357:26;;32429:9;32423:4;32419:20;32415:1;32404:9;32400:17;32393:47;32457:131;32583:4;32457:131;:::i;:::-;32449:139;;32176:419;;;:::o;32601:::-;32767:4;32805:2;32794:9;32790:18;32782:26;;32854:9;32848:4;32844:20;32840:1;32829:9;32825:17;32818:47;32882:131;33008:4;32882:131;:::i;:::-;32874:139;;32601:419;;;:::o;33026:::-;33192:4;33230:2;33219:9;33215:18;33207:26;;33279:9;33273:4;33269:20;33265:1;33254:9;33250:17;33243:47;33307:131;33433:4;33307:131;:::i;:::-;33299:139;;33026:419;;;:::o;33451:::-;33617:4;33655:2;33644:9;33640:18;33632:26;;33704:9;33698:4;33694:20;33690:1;33679:9;33675:17;33668:47;33732:131;33858:4;33732:131;:::i;:::-;33724:139;;33451:419;;;:::o;33876:::-;34042:4;34080:2;34069:9;34065:18;34057:26;;34129:9;34123:4;34119:20;34115:1;34104:9;34100:17;34093:47;34157:131;34283:4;34157:131;:::i;:::-;34149:139;;33876:419;;;:::o;34301:::-;34467:4;34505:2;34494:9;34490:18;34482:26;;34554:9;34548:4;34544:20;34540:1;34529:9;34525:17;34518:47;34582:131;34708:4;34582:131;:::i;:::-;34574:139;;34301:419;;;:::o;34726:::-;34892:4;34930:2;34919:9;34915:18;34907:26;;34979:9;34973:4;34969:20;34965:1;34954:9;34950:17;34943:47;35007:131;35133:4;35007:131;:::i;:::-;34999:139;;34726:419;;;:::o;35151:::-;35317:4;35355:2;35344:9;35340:18;35332:26;;35404:9;35398:4;35394:20;35390:1;35379:9;35375:17;35368:47;35432:131;35558:4;35432:131;:::i;:::-;35424:139;;35151:419;;;:::o;35576:::-;35742:4;35780:2;35769:9;35765:18;35757:26;;35829:9;35823:4;35819:20;35815:1;35804:9;35800:17;35793:47;35857:131;35983:4;35857:131;:::i;:::-;35849:139;;35576:419;;;:::o;36001:::-;36167:4;36205:2;36194:9;36190:18;36182:26;;36254:9;36248:4;36244:20;36240:1;36229:9;36225:17;36218:47;36282:131;36408:4;36282:131;:::i;:::-;36274:139;;36001:419;;;:::o;36426:::-;36592:4;36630:2;36619:9;36615:18;36607:26;;36679:9;36673:4;36669:20;36665:1;36654:9;36650:17;36643:47;36707:131;36833:4;36707:131;:::i;:::-;36699:139;;36426:419;;;:::o;36851:::-;37017:4;37055:2;37044:9;37040:18;37032:26;;37104:9;37098:4;37094:20;37090:1;37079:9;37075:17;37068:47;37132:131;37258:4;37132:131;:::i;:::-;37124:139;;36851:419;;;:::o;37276:::-;37442:4;37480:2;37469:9;37465:18;37457:26;;37529:9;37523:4;37519:20;37515:1;37504:9;37500:17;37493:47;37557:131;37683:4;37557:131;:::i;:::-;37549:139;;37276:419;;;:::o;37701:::-;37867:4;37905:2;37894:9;37890:18;37882:26;;37954:9;37948:4;37944:20;37940:1;37929:9;37925:17;37918:47;37982:131;38108:4;37982:131;:::i;:::-;37974:139;;37701:419;;;:::o;38126:::-;38292:4;38330:2;38319:9;38315:18;38307:26;;38379:9;38373:4;38369:20;38365:1;38354:9;38350:17;38343:47;38407:131;38533:4;38407:131;:::i;:::-;38399:139;;38126:419;;;:::o;38551:::-;38717:4;38755:2;38744:9;38740:18;38732:26;;38804:9;38798:4;38794:20;38790:1;38779:9;38775:17;38768:47;38832:131;38958:4;38832:131;:::i;:::-;38824:139;;38551:419;;;:::o;38976:::-;39142:4;39180:2;39169:9;39165:18;39157:26;;39229:9;39223:4;39219:20;39215:1;39204:9;39200:17;39193:47;39257:131;39383:4;39257:131;:::i;:::-;39249:139;;38976:419;;;:::o;39401:::-;39567:4;39605:2;39594:9;39590:18;39582:26;;39654:9;39648:4;39644:20;39640:1;39629:9;39625:17;39618:47;39682:131;39808:4;39682:131;:::i;:::-;39674:139;;39401:419;;;:::o;39826:::-;39992:4;40030:2;40019:9;40015:18;40007:26;;40079:9;40073:4;40069:20;40065:1;40054:9;40050:17;40043:47;40107:131;40233:4;40107:131;:::i;:::-;40099:139;;39826:419;;;:::o;40251:::-;40417:4;40455:2;40444:9;40440:18;40432:26;;40504:9;40498:4;40494:20;40490:1;40479:9;40475:17;40468:47;40532:131;40658:4;40532:131;:::i;:::-;40524:139;;40251:419;;;:::o;40676:222::-;40769:4;40807:2;40796:9;40792:18;40784:26;;40820:71;40888:1;40877:9;40873:17;40864:6;40820:71;:::i;:::-;40676:222;;;;:::o;40904:129::-;40938:6;40965:20;;:::i;:::-;40955:30;;40994:33;41022:4;41014:6;40994:33;:::i;:::-;40904:129;;;:::o;41039:75::-;41072:6;41105:2;41099:9;41089:19;;41039:75;:::o;41120:307::-;41181:4;41271:18;41263:6;41260:30;41257:56;;;41293:18;;:::i;:::-;41257:56;41331:29;41353:6;41331:29;:::i;:::-;41323:37;;41415:4;41409;41405:15;41397:23;;41120:307;;;:::o;41433:308::-;41495:4;41585:18;41577:6;41574:30;41571:56;;;41607:18;;:::i;:::-;41571:56;41645:29;41667:6;41645:29;:::i;:::-;41637:37;;41729:4;41723;41719:15;41711:23;;41433:308;;;:::o;41747:98::-;41798:6;41832:5;41826:12;41816:22;;41747:98;;;:::o;41851:99::-;41903:6;41937:5;41931:12;41921:22;;41851:99;;;:::o;41956:168::-;42039:11;42073:6;42068:3;42061:19;42113:4;42108:3;42104:14;42089:29;;41956:168;;;;:::o;42130:147::-;42231:11;42268:3;42253:18;;42130:147;;;;:::o;42283:169::-;42367:11;42401:6;42396:3;42389:19;42441:4;42436:3;42432:14;42417:29;;42283:169;;;;:::o;42458:148::-;42560:11;42597:3;42582:18;;42458:148;;;;:::o;42612:305::-;42652:3;42671:20;42689:1;42671:20;:::i;:::-;42666:25;;42705:20;42723:1;42705:20;:::i;:::-;42700:25;;42859:1;42791:66;42787:74;42784:1;42781:81;42778:107;;;42865:18;;:::i;:::-;42778:107;42909:1;42906;42902:9;42895:16;;42612:305;;;;:::o;42923:182::-;42962:1;42979:19;42996:1;42979:19;:::i;:::-;42974:24;;43012:19;43029:1;43012:19;:::i;:::-;43007:24;;43050:1;43040:35;;43055:18;;:::i;:::-;43040:35;43097:1;43094;43090:9;43085:14;;42923:182;;;;:::o;43111:185::-;43151:1;43168:20;43186:1;43168:20;:::i;:::-;43163:25;;43202:20;43220:1;43202:20;:::i;:::-;43197:25;;43241:1;43231:35;;43246:18;;:::i;:::-;43231:35;43288:1;43285;43281:9;43276:14;;43111:185;;;;:::o;43302:348::-;43342:7;43365:20;43383:1;43365:20;:::i;:::-;43360:25;;43399:20;43417:1;43399:20;:::i;:::-;43394:25;;43587:1;43519:66;43515:74;43512:1;43509:81;43504:1;43497:9;43490:17;43486:105;43483:131;;;43594:18;;:::i;:::-;43483:131;43642:1;43639;43635:9;43624:20;;43302:348;;;;:::o;43656:191::-;43696:4;43716:20;43734:1;43716:20;:::i;:::-;43711:25;;43750:20;43768:1;43750:20;:::i;:::-;43745:25;;43789:1;43786;43783:8;43780:34;;;43794:18;;:::i;:::-;43780:34;43839:1;43836;43832:9;43824:17;;43656:191;;;;:::o;43853:96::-;43890:7;43919:24;43937:5;43919:24;:::i;:::-;43908:35;;43853:96;;;:::o;43955:104::-;44000:7;44029:24;44047:5;44029:24;:::i;:::-;44018:35;;43955:104;;;:::o;44065:90::-;44099:7;44142:5;44135:13;44128:21;44117:32;;44065:90;;;:::o;44161:149::-;44197:7;44237:66;44230:5;44226:78;44215:89;;44161:149;;;:::o;44316:::-;44352:7;44392:66;44385:5;44381:78;44370:89;;44316:149;;;:::o;44471:89::-;44507:7;44547:6;44540:5;44536:18;44525:29;;44471:89;;;:::o;44566:126::-;44603:7;44643:42;44636:5;44632:54;44621:65;;44566:126;;;:::o;44698:77::-;44735:7;44764:5;44753:16;;44698:77;;;:::o;44781:154::-;44865:6;44860:3;44855;44842:30;44927:1;44918:6;44913:3;44909:16;44902:27;44781:154;;;:::o;44941:307::-;45009:1;45019:113;45033:6;45030:1;45027:13;45019:113;;;45118:1;45113:3;45109:11;45103:18;45099:1;45094:3;45090:11;45083:39;45055:2;45052:1;45048:10;45043:15;;45019:113;;;45150:6;45147:1;45144:13;45141:101;;;45230:1;45221:6;45216:3;45212:16;45205:27;45141:101;44990:258;44941:307;;;:::o;45254:320::-;45298:6;45335:1;45329:4;45325:12;45315:22;;45382:1;45376:4;45372:12;45403:18;45393:81;;45459:4;45451:6;45447:17;45437:27;;45393:81;45521:2;45513:6;45510:14;45490:18;45487:38;45484:84;;;45540:18;;:::i;:::-;45484:84;45305:269;45254:320;;;:::o;45580:281::-;45663:27;45685:4;45663:27;:::i;:::-;45655:6;45651:40;45793:6;45781:10;45778:22;45757:18;45745:10;45742:34;45739:62;45736:88;;;45804:18;;:::i;:::-;45736:88;45844:10;45840:2;45833:22;45623:238;45580:281;;:::o;45867:171::-;45905:3;45928:23;45945:5;45928:23;:::i;:::-;45919:32;;45973:6;45966:5;45963:17;45960:43;;;45983:18;;:::i;:::-;45960:43;46030:1;46023:5;46019:13;46012:20;;45867:171;;;:::o;46044:233::-;46083:3;46106:24;46124:5;46106:24;:::i;:::-;46097:33;;46152:66;46145:5;46142:77;46139:103;;;46222:18;;:::i;:::-;46139:103;46269:1;46262:5;46258:13;46251:20;;46044:233;;;:::o;46283:78::-;46321:7;46350:5;46339:16;;46283:78;;;:::o;46367:176::-;46399:1;46416:20;46434:1;46416:20;:::i;:::-;46411:25;;46450:20;46468:1;46450:20;:::i;:::-;46445:25;;46489:1;46479:35;;46494:18;;:::i;:::-;46479:35;46535:1;46532;46528:9;46523:14;;46367:176;;;;:::o;46549:180::-;46597:77;46594:1;46587:88;46694:4;46691:1;46684:15;46718:4;46715:1;46708:15;46735:180;46783:77;46780:1;46773:88;46880:4;46877:1;46870:15;46904:4;46901:1;46894:15;46921:180;46969:77;46966:1;46959:88;47066:4;47063:1;47056:15;47090:4;47087:1;47080:15;47107:180;47155:77;47152:1;47145:88;47252:4;47249:1;47242:15;47276:4;47273:1;47266:15;47293:180;47341:77;47338:1;47331:88;47438:4;47435:1;47428:15;47462:4;47459:1;47452:15;47479:117;47588:1;47585;47578:12;47602:117;47711:1;47708;47701:12;47725:117;47834:1;47831;47824:12;47848:117;47957:1;47954;47947:12;47971:102;48012:6;48063:2;48059:7;48054:2;48047:5;48043:14;48039:28;48029:38;;47971:102;;;:::o;48079:214::-;48219:66;48215:1;48207:6;48203:14;48196:90;48079:214;:::o;48299:237::-;48439:34;48435:1;48427:6;48423:14;48416:58;48508:20;48503:2;48495:6;48491:15;48484:45;48299:237;:::o;48542:168::-;48682:20;48678:1;48670:6;48666:14;48659:44;48542:168;:::o;48716:178::-;48856:30;48852:1;48844:6;48840:14;48833:54;48716:178;:::o;48900:228::-;49040:34;49036:1;49028:6;49024:14;49017:58;49109:11;49104:2;49096:6;49092:15;49085:36;48900:228;:::o;49134:227::-;49274:34;49270:1;49262:6;49258:14;49251:58;49343:10;49338:2;49330:6;49326:15;49319:35;49134:227;:::o;49367:223::-;49507:34;49503:1;49495:6;49491:14;49484:58;49576:6;49571:2;49563:6;49559:15;49552:31;49367:223;:::o;49596:175::-;49736:27;49732:1;49724:6;49720:14;49713:51;49596:175;:::o;49777:214::-;49917:66;49913:1;49905:6;49901:14;49894:90;49777:214;:::o;49997:231::-;50137:34;50133:1;50125:6;50121:14;50114:58;50206:14;50201:2;50193:6;50189:15;50182:39;49997:231;:::o;50234:227::-;50374:34;50370:1;50362:6;50358:14;50351:58;50443:10;50438:2;50430:6;50426:15;50419:35;50234:227;:::o;50467:222::-;50607:34;50603:1;50595:6;50591:14;50584:58;50676:5;50671:2;50663:6;50659:15;50652:30;50467:222;:::o;50695:157::-;50835:9;50831:1;50823:6;50819:14;50812:33;50695:157;:::o;50858:735::-;50998:66;50994:1;50986:6;50982:14;50975:90;51099:34;51094:2;51086:6;51082:15;51075:59;51168:34;51163:2;51155:6;51151:15;51144:59;51237:34;51232:2;51224:6;51220:15;51213:59;51307:34;51301:3;51293:6;51289:16;51282:60;51377:66;51371:3;51363:6;51359:16;51352:92;51479:66;51473:3;51465:6;51461:16;51454:92;51581:4;51575:3;51567:6;51563:16;51556:30;50858:735;:::o;51599:243::-;51739:34;51735:1;51727:6;51723:14;51716:58;51808:26;51803:2;51795:6;51791:15;51784:51;51599:243;:::o;51848:229::-;51988:34;51984:1;51976:6;51972:14;51965:58;52057:12;52052:2;52044:6;52040:15;52033:37;51848:229;:::o;52083:228::-;52223:34;52219:1;52211:6;52207:14;52200:58;52292:11;52287:2;52279:6;52275:15;52268:36;52083:228;:::o;52317:214::-;52457:66;52453:1;52445:6;52441:14;52434:90;52317:214;:::o;52537:157::-;52677:9;52673:1;52665:6;52661:14;52654:33;52537:157;:::o;52700:182::-;52840:34;52836:1;52828:6;52824:14;52817:58;52700:182;:::o;52888:231::-;53028:34;53024:1;53016:6;53012:14;53005:58;53097:14;53092:2;53084:6;53080:15;53073:39;52888:231;:::o;53125:223::-;53265:34;53261:1;53253:6;53249:14;53242:58;53334:6;53329:2;53321:6;53317:15;53310:31;53125:223;:::o;53354:231::-;53494:34;53490:1;53482:6;53478:14;53471:58;53563:14;53558:2;53550:6;53546:15;53539:39;53354:231;:::o;53591:228::-;53731:34;53727:1;53719:6;53715:14;53708:58;53800:11;53795:2;53787:6;53783:15;53776:36;53591:228;:::o;53825:220::-;53965:34;53961:1;53953:6;53949:14;53942:58;54034:3;54029:2;54021:6;54017:15;54010:28;53825:220;:::o;54051:214::-;54191:66;54187:1;54179:6;54175:14;54168:90;54051:214;:::o;54271:::-;54411:66;54407:1;54399:6;54395:14;54388:90;54271:214;:::o;54491:181::-;54631:33;54627:1;54619:6;54615:14;54608:57;54491:181;:::o;54678:236::-;54818:34;54814:1;54806:6;54802:14;54795:58;54887:19;54882:2;54874:6;54870:15;54863:44;54678:236;:::o;54920:169::-;55060:21;55056:1;55048:6;55044:14;55037:45;54920:169;:::o;55095:214::-;55235:66;55231:1;55223:6;55219:14;55212:90;55095:214;:::o;55315:176::-;55455:28;55451:1;55443:6;55439:14;55432:52;55315:176;:::o;55497:181::-;55637:33;55633:1;55625:6;55621:14;55614:57;55497:181;:::o;55684:122::-;55757:24;55775:5;55757:24;:::i;:::-;55750:5;55747:35;55737:63;;55796:1;55793;55786:12;55737:63;55684:122;:::o;55812:116::-;55882:21;55897:5;55882:21;:::i;:::-;55875:5;55872:32;55862:60;;55918:1;55915;55908:12;55862:60;55812:116;:::o;55934:120::-;56006:23;56023:5;56006:23;:::i;:::-;55999:5;55996:34;55986:62;;56044:1;56041;56034:12;55986:62;55934:120;:::o;56060:122::-;56133:24;56151:5;56133:24;:::i;:::-;56126:5;56123:35;56113:63;;56172:1;56169;56162:12;56113:63;56060:122;:::o

Swarm Source

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