ETH Price: $2,416.56 (+2.87%)

BHZ-LONGSTRANGETRIP (BHZLST)
 

Overview

TokenID

145

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

An illustrated account of the journey that occurred after a strange bottle labeled C20H25N3O fell into the mixer at the Bread Heads bakery. now minting at breadheads.io

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LST

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: LST.sol
pragma solidity ^0.8.6;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

/**
 * @title LST
 * LST - Smart contract for LST BreadHeads project
 */
contract LST is ERC721, Ownable {
    address openseaProxyAddress;
    string public contract_ipfs_json;
    string public contract_base_uri;
    string private baseURI;
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;
    bool public is_collection_revealed = false;
    uint256 MAX_NFTS = 10000;
    uint256 minting_price = 0.035 ether;
    uint256 minting_price_presale = 0.03 ether;
    bool whitelist_active = true;
    bool collection_locked = false;
    string public notrevealed_nft;
    IERC721 private OG;
    
    constructor(
        address _openseaProxyAddress,
        string memory _name,
        string memory _ticker,
        string memory _contract_ipfs
    ) ERC721(_name, _ticker) {
        openseaProxyAddress = _openseaProxyAddress;
        contract_ipfs_json = _contract_ipfs;
        contract_base_uri = "https://ipfs.io/ipfs/RevealedCollection/";
        notrevealed_nft = "https://ipfs.io/ipfs/QmYqo7QERmfKVytPfKaVdES9qUC4FKVAeSNKZLPbifAkSr";
    }

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

    function tokenURI(uint256 _tokenId)
        public
        view
        override(ERC721)
        returns (string memory)
    {
        if(is_collection_revealed == true){
            string memory _tknId = Strings.toString(_tokenId);
            return string(abi.encodePacked(contract_base_uri, _tknId, ".json"));
        } else {
            return notrevealed_nft;
        }
    }

    function contractURI() public view returns (string memory) {
        return contract_ipfs_json;
    }

    function getOGBalance(address _address) public view returns (uint256) {
        uint256 balance = OG.balanceOf(_address);
        return balance;
    }

    function maxPresaleMint(address _address) public view returns (uint256) {
        uint256 balance = OG.balanceOf(_address);
        uint256 max_mint = balance * 2;
        return max_mint;
    }

    function tokensOfOwner(address _owner) external view returns(uint256[] memory ownerTokens) {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) {
            // Return an empty array
            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 totalNFTs = totalSupply();
            uint256 resultIndex = 0;
            uint256 nftId;

            for (nftId = 1; nftId <= totalNFTs; nftId++) {
                if (ownerOf(nftId) == _owner) {
                    result[resultIndex] = nftId;
                    resultIndex++;
                }
            }

            return result;
        }
    }

    /*
        This method will first mint the token to the address.
    */
    function mintNFT() public payable {
        bool canMint = false;
        uint256 price = minting_price;
        uint256 max_mint = 10000;
        if(whitelist_active){
            price = minting_price_presale;
            uint256 balance = OG.balanceOf(msg.sender);
            if(balance > 0){
                max_mint = 2 * balance;
                canMint = true;
            }
        }else{
            canMint = true;
        }
        require(canMint, "LST: You can't mint because don't match requirements");
        require(msg.value % price == 0, 'LST: Amount should be a multiple of minting cost');
        uint256 amount = msg.value / price;
        require(amount >= 1, 'LST: Amount should be at least 1');
        require(amount <= 5, 'LST: Amount must be less or equal to 5');
        uint256 reached = amount + _tokenIdCounter.current();
        require(reached <= MAX_NFTS, "LST: Hard cap reached.");
        uint256 purchases = balanceOf(msg.sender) + amount;
        require(purchases <= max_mint, 'LST: Cannot purchase more than 2 per OG nft');
        uint j = 0;
        for (j = 0; j < amount; j++) {
            _tokenIdCounter.increment();
            uint256 newTokenId = _tokenIdCounter.current();
            _mint(msg.sender, newTokenId);
        }
    }

    function totalSupply() public view returns (uint256) {
        return _tokenIdCounter.current();
    }

    /*
        This method will allow owner to fix the contract details
     */

    function fixContractDescription(string memory newDescription) public onlyOwner {
        contract_ipfs_json = newDescription;
    }

    /*
        This method will allow owner to fix the unrevealed nft
     */

    function fixNotRevealedNft(string memory newNFT) public onlyOwner {
        notrevealed_nft = newNFT;
    }    

    /*
        This method will allow owner to fix the minting price
     */

    function fixPrice(uint256 price) public onlyOwner {
        minting_price = price;
    }

    /*
        This method will allow owner to fix the contract baseURI
     */

    function fixBaseURI(string memory newURI) public onlyOwner {
        require(!collection_locked, "LST: Collection is locked.");
        contract_base_uri = newURI;
    }
    
    /*
        This method will allow owner reveal the collection
     */

    function revealCollection() public onlyOwner {
        is_collection_revealed = true;
    }
    
    /*
        This method will allow to select the gate
     */
    function selectGate(address _og_address) public onlyOwner {
        OG = IERC721(_og_address);
    }

    /*
        This method will allow owner to lock the collection
     */

    function lockCollection() public onlyOwner {
        collection_locked = true;
    }

    /*
        This method will allow owner to fix the whitelist role
     */

    function fixWhitelist(bool state) public onlyOwner {
        whitelist_active = state;
    }

    /*
        This method will allow owner to mint tokens
     */
    function ownerMint() public onlyOwner {
        _tokenIdCounter.increment();
        uint256 newTokenId = _tokenIdCounter.current();
        _mint(msg.sender, newTokenId);
    }

    /*
        This method will allow owner to get the balance of the smart contract
     */

    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }

    /*
        This method will allow owner tow withdraw all ethers
     */

    function withdrawEther() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, 'LST: Nothing to withdraw!');
        payable(msg.sender).transfer(balance);
    }

    /**
     * Override isApprovedForAll to whitelist proxy accounts
     */
    function isApprovedForAll(address _owner, address _operator)
        public
        override
        view
        returns (bool isOperator)
    {
        // Opensea address
        if (
            _operator == address(openseaProxyAddress)
        ) {
            return true;
        }

        return super.isApprovedForAll(_owner, _operator);
    }
}

File 2 of 2: Migrations.sol
pragma solidity >=0.4.21 <=0.8.6;


// SPDX-License-Identifier: MIT
contract Migrations {
  address public owner;
  uint public last_completed_migration;

  constructor() {
    owner = msg.sender;
  }

  modifier restricted() {
    if (msg.sender == owner) _;
  }

  function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }

  function upgrade(address new_address) public restricted {
    Migrations upgraded = Migrations(new_address);
    upgraded.setCompleted(last_completed_migration);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_openseaProxyAddress","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_ticker","type":"string"},{"internalType":"string","name":"_contract_ipfs","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contract_base_uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contract_ipfs_json","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"fixBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newDescription","type":"string"}],"name":"fixContractDescription","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newNFT","type":"string"}],"name":"fixNotRevealedNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"fixPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"fixWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getOGBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"is_collection_revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"maxPresaleMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notrevealed_nft","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_og_address","type":"address"}],"name":"selectGate","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"ownerTokens","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600c60006101000a81548160ff021916908315150217905550612710600d55667c585087238000600e55666a94d74f430000600f556001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055503480156200007e57600080fd5b5060405162004dff38038062004dff8339818101604052810190620000a49190620003d5565b82828160009080519060200190620000be92919062000290565b508060019080519060200190620000d792919062000290565b505050620000fa620000ee620001c260201b60201c565b620001ca60201b60201c565b83600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600890805190602001906200015392919062000290565b5060405180606001604052806028815260200162004dd760289139600990805190602001906200018592919062000290565b5060405180608001604052806043815260200162004d946043913960119080519060200190620001b792919062000290565b505050505062000676565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200029e906200056d565b90600052602060002090601f016020900481019282620002c257600085556200030e565b82601f10620002dd57805160ff19168380011785556200030e565b828001600101855582156200030e579182015b828111156200030d578251825591602001919060010190620002f0565b5b5090506200031d919062000321565b5090565b5b808211156200033c57600081600090555060010162000322565b5090565b6000620003576200035184620004cd565b620004a4565b9050828152602081018484840111156200037657620003756200063c565b5b6200038384828562000537565b509392505050565b6000815190506200039c816200065c565b92915050565b600082601f830112620003ba57620003b962000637565b5b8151620003cc84826020860162000340565b91505092915050565b60008060008060808587031215620003f257620003f162000646565b5b600062000402878288016200038b565b945050602085015167ffffffffffffffff81111562000426576200042562000641565b5b6200043487828801620003a2565b935050604085015167ffffffffffffffff81111562000458576200045762000641565b5b6200046687828801620003a2565b925050606085015167ffffffffffffffff8111156200048a576200048962000641565b5b6200049887828801620003a2565b91505092959194509250565b6000620004b0620004c3565b9050620004be8282620005a3565b919050565b6000604051905090565b600067ffffffffffffffff821115620004eb57620004ea62000608565b5b620004f6826200064b565b9050602081019050919050565b6000620005108262000517565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620005575780820151818401526020810190506200053a565b8381111562000567576000848401525b50505050565b600060028204905060018216806200058657607f821691505b602082108114156200059d576200059c620005d9565b5b50919050565b620005ae826200064b565b810181811067ffffffffffffffff82111715620005d057620005cf62000608565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006678162000503565b81146200067357600080fd5b50565b61470e80620006866000396000f3fe60806040526004361061021a5760003560e01c8063715018a611610123578063b12dc991116100ab578063c87b56dd1161006f578063c87b56dd14610762578063e89874981461079f578063e8a3d485146107ca578063e985e9c5146107f5578063f2fde38b146108325761021a565b8063b12dc99114610693578063b703a9f4146106aa578063b88d4fde146106d3578063be3f954d146106fc578063bfc974cc146107255761021a565b80638462151c116100f25780638462151c146105ac5780638da5cb5b146105e957806395d89b4114610614578063a0073b881461063f578063a22cb4651461066a5761021a565b8063715018a614610518578063725d15351461052f5780637362377b1461056c57806379250f14146105835761021a565b80631a4fba6c116101a657806340d0b4a91161017557806340d0b4a91461043357806342842e0e1461044a57806361ad2057146104735780636352211e1461049e57806370a08231146104db5761021a565b80631a4fba6c1461038f578063211eb07d146103b857806323b872dd146103e15780632a1436c21461040a5761021a565b8063095ea7b3116101ed578063095ea7b3146102ef5780630ee83a711461031857806312065fe01461032f57806314f710fe1461035a57806318160ddd146103645761021a565b806301ffc9a71461021f5780630346f18f1461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613191565b61085b565b6040516102539190613862565b60405180910390f35b34801561026857600080fd5b5061027161093d565b60405161027e919061387d565b60405180910390f35b34801561029357600080fd5b5061029c6109cb565b6040516102a9919061387d565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613234565b610a5d565b6040516102e691906137d9565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190613124565b610ae2565b005b34801561032457600080fd5b5061032d610bfa565b005b34801561033b57600080fd5b50610344610c93565b6040516103519190613b7f565b60405180910390f35b610362610c9b565b005b34801561037057600080fd5b50610379610fc4565b6040516103869190613b7f565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b191906131eb565b610fd5565b005b3480156103c457600080fd5b506103df60048036038101906103da91906131eb565b61106b565b005b3480156103ed57600080fd5b506104086004803603810190610403919061300e565b611151565b005b34801561041657600080fd5b50610431600480360381019061042c9190613164565b6111b1565b005b34801561043f57600080fd5b5061044861124a565b005b34801561045657600080fd5b50610471600480360381019061046c919061300e565b6112e3565b005b34801561047f57600080fd5b50610488611303565b604051610495919061387d565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613234565b611391565b6040516104d291906137d9565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190612fa1565b611443565b60405161050f9190613b7f565b60405180910390f35b34801561052457600080fd5b5061052d6114fb565b005b34801561053b57600080fd5b5061055660048036038101906105519190612fa1565b611583565b6040516105639190613b7f565b60405180910390f35b34801561057857600080fd5b5061058161163c565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190612fa1565b61174a565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190612fa1565b61180a565b6040516105e09190613840565b60405180910390f35b3480156105f557600080fd5b506105fe611968565b60405161060b91906137d9565b60405180910390f35b34801561062057600080fd5b50610629611992565b604051610636919061387d565b60405180910390f35b34801561064b57600080fd5b50610654611a24565b604051610661919061387d565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c91906130e4565b611ab2565b005b34801561069f57600080fd5b506106a8611c33565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190613234565b611cd4565b005b3480156106df57600080fd5b506106fa60048036038101906106f59190613061565b611d5a565b005b34801561070857600080fd5b50610723600480360381019061071e91906131eb565b611dbc565b005b34801561073157600080fd5b5061074c60048036038101906107479190612fa1565b611e52565b6040516107599190613b7f565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190613234565b611f1d565b604051610796919061387d565b60405180910390f35b3480156107ab57600080fd5b506107b4612006565b6040516107c19190613862565b60405180910390f35b3480156107d657600080fd5b506107df612019565b6040516107ec919061387d565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190612fce565b6120ab565b6040516108299190613862565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190612fa1565b61211f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610936575061093582612217565b5b9050919050565b6008805461094a90613e7d565b80601f016020809104026020016040519081016040528092919081815260200182805461097690613e7d565b80156109c35780601f10610998576101008083540402835291602001916109c3565b820191906000526020600020905b8154815290600101906020018083116109a657829003601f168201915b505050505081565b6060600080546109da90613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0690613e7d565b8015610a535780601f10610a2857610100808354040283529160200191610a53565b820191906000526020600020905b815481529060010190602001808311610a3657829003601f168201915b5050505050905090565b6000610a6882612281565b610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90613a7f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aed82611391565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613adf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7d6122ed565b73ffffffffffffffffffffffffffffffffffffffff161480610bac5750610bab81610ba66122ed565b6120ab565b5b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be2906139bf565b60405180910390fd5b610bf583836122f5565b505050565b610c026122ed565b73ffffffffffffffffffffffffffffffffffffffff16610c20611968565b73ffffffffffffffffffffffffffffffffffffffff1614610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d90613a9f565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b600047905090565b600080600e54905060006127109050601060009054906101000a900460ff1615610d9657600f5491506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d2191906137d9565b60206040518083038186803b158015610d3957600080fd5b505afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d719190613261565b90506000811115610d9057806002610d899190613d39565b9150600193505b50610d9b565b600192505b82610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613aff565b60405180910390fd5b60008234610de99190613f29565b14610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090613a3f565b60405180910390fd5b60008234610e379190613d08565b90506001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e74906139ff565b60405180910390fd5b6005811115610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb89061399f565b60405180910390fd5b6000610ecd600b6123ae565b82610ed89190613cb2565b9050600d54811115610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f169061391f565b60405180910390fd5b600082610f2b33611443565b610f359190613cb2565b905083811115610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190613b5f565b60405180910390fd5b60005b83811015610fbb57610f8f600b6123bc565b6000610f9b600b6123ae565b9050610fa733826123d2565b508080610fb390613ee0565b915050610f7d565b50505050505050565b6000610fd0600b6123ae565b905090565b610fdd6122ed565b73ffffffffffffffffffffffffffffffffffffffff16610ffb611968565b73ffffffffffffffffffffffffffffffffffffffff1614611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613a9f565b60405180910390fd5b8060089080519060200190611067929190612da0565b5050565b6110736122ed565b73ffffffffffffffffffffffffffffffffffffffff16611091611968565b73ffffffffffffffffffffffffffffffffffffffff16146110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90613a9f565b60405180910390fd5b601060019054906101000a900460ff1615611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e9061389f565b60405180910390fd5b806009908051906020019061114d929190612da0565b5050565b61116261115c6122ed565b826125a0565b6111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890613b1f565b60405180910390fd5b6111ac83838361267e565b505050565b6111b96122ed565b73ffffffffffffffffffffffffffffffffffffffff166111d7611968565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490613a9f565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6112526122ed565b73ffffffffffffffffffffffffffffffffffffffff16611270611968565b73ffffffffffffffffffffffffffffffffffffffff16146112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd90613a9f565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b6112fe83838360405180602001604052806000815250611d5a565b505050565b6009805461131090613e7d565b80601f016020809104026020016040519081016040528092919081815260200182805461133c90613e7d565b80156113895780601f1061135e57610100808354040283529160200191611389565b820191906000526020600020905b81548152906001019060200180831161136c57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190613a1f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ab906139df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115036122ed565b73ffffffffffffffffffffffffffffffffffffffff16611521611968565b73ffffffffffffffffffffffffffffffffffffffff1614611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156e90613a9f565b60405180910390fd5b61158160006128da565b565b600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016115e191906137d9565b60206040518083038186803b1580156115f957600080fd5b505afa15801561160d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116319190613261565b905080915050919050565b6116446122ed565b73ffffffffffffffffffffffffffffffffffffffff16611662611968565b73ffffffffffffffffffffffffffffffffffffffff16146116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af90613a9f565b60405180910390fd5b600047905060008111611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613b3f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611746573d6000803e3d6000fd5b5050565b6117526122ed565b73ffffffffffffffffffffffffffffffffffffffff16611770611968565b73ffffffffffffffffffffffffffffffffffffffff16146117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90613a9f565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600061181783611443565b9050600081141561187457600067ffffffffffffffff81111561183d5761183c614016565b5b60405190808252806020026020018201604052801561186b5781602001602082028036833780820191505090505b50915050611963565b60008167ffffffffffffffff8111156118905761188f614016565b5b6040519080825280602002602001820160405280156118be5781602001602082028036833780820191505090505b50905060006118cb610fc4565b9050600080600190505b82811161195a578673ffffffffffffffffffffffffffffffffffffffff166118fc82611391565b73ffffffffffffffffffffffffffffffffffffffff161415611947578084838151811061192c5761192b613fe7565b5b602002602001018181525050818061194390613ee0565b9250505b808061195290613ee0565b9150506118d5565b83955050505050505b919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119a190613e7d565b80601f01602080910402602001604051908101604052809291908181526020018280546119cd90613e7d565b8015611a1a5780601f106119ef57610100808354040283529160200191611a1a565b820191906000526020600020905b8154815290600101906020018083116119fd57829003601f168201915b5050505050905090565b60118054611a3190613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5d90613e7d565b8015611aaa5780601f10611a7f57610100808354040283529160200191611aaa565b820191906000526020600020905b815481529060010190602001808311611a8d57829003601f168201915b505050505081565b611aba6122ed565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f9061395f565b60405180910390fd5b8060056000611b356122ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611be26122ed565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c279190613862565b60405180910390a35050565b611c3b6122ed565b73ffffffffffffffffffffffffffffffffffffffff16611c59611968565b73ffffffffffffffffffffffffffffffffffffffff1614611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca690613a9f565b60405180910390fd5b611cb9600b6123bc565b6000611cc5600b6123ae565b9050611cd133826123d2565b50565b611cdc6122ed565b73ffffffffffffffffffffffffffffffffffffffff16611cfa611968565b73ffffffffffffffffffffffffffffffffffffffff1614611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790613a9f565b60405180910390fd5b80600e8190555050565b611d6b611d656122ed565b836125a0565b611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190613b1f565b60405180910390fd5b611db6848484846129a0565b50505050565b611dc46122ed565b73ffffffffffffffffffffffffffffffffffffffff16611de2611968565b73ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613a9f565b60405180910390fd5b8060119080519060200190611e4e929190612da0565b5050565b600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401611eb091906137d9565b60206040518083038186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f009190613261565b90506000600282611f119190613d39565b90508092505050919050565b606060011515600c60009054906101000a900460ff1615151415611f73576000611f46836129fc565b9050600981604051602001611f5c9291906137aa565b604051602081830303815290604052915050612001565b60118054611f8090613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054611fac90613e7d565b8015611ff95780601f10611fce57610100808354040283529160200191611ff9565b820191906000526020600020905b815481529060010190602001808311611fdc57829003601f168201915b505050505090505b919050565b600c60009054906101000a900460ff1681565b60606008805461202890613e7d565b80601f016020809104026020016040519081016040528092919081815260200182805461205490613e7d565b80156120a15780601f10612076576101008083540402835291602001916120a1565b820191906000526020600020905b81548152906001019060200180831161208457829003601f168201915b5050505050905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561210c5760019050612119565b6121168383612b5d565b90505b92915050565b6121276122ed565b73ffffffffffffffffffffffffffffffffffffffff16612145611968565b73ffffffffffffffffffffffffffffffffffffffff161461219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219290613a9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561220b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612202906138df565b60405180910390fd5b612214816128da565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661236883611391565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243990613a5f565b60405180910390fd5b61244b81612281565b1561248b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612482906138ff565b60405180910390fd5b61249760008383612bf1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124e79190613cb2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006125ab82612281565b6125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e19061397f565b60405180910390fd5b60006125f583611391565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266457508373ffffffffffffffffffffffffffffffffffffffff1661264c84610a5d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612675575061267481856120ab565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661269e82611391565b73ffffffffffffffffffffffffffffffffffffffff16146126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb90613abf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275b9061393f565b60405180910390fd5b61276f838383612bf1565b61277a6000826122f5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ca9190613d93565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128219190613cb2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129ab84848461267e565b6129b784848484612bf6565b6129f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ed906138bf565b60405180910390fd5b50505050565b60606000821415612a44576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b58565b600082905060005b60008214612a76578080612a5f90613ee0565b915050600a82612a6f9190613d08565b9150612a4c565b60008167ffffffffffffffff811115612a9257612a91614016565b5b6040519080825280601f01601f191660200182016040528015612ac45781602001600182028036833780820191505090505b5090505b60008514612b5157600182612add9190613d93565b9150600a85612aec9190613f29565b6030612af89190613cb2565b60f81b818381518110612b0e57612b0d613fe7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b4a9190613d08565b9450612ac8565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b6000612c178473ffffffffffffffffffffffffffffffffffffffff16612d8d565b15612d80578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c406122ed565b8786866040518563ffffffff1660e01b8152600401612c6294939291906137f4565b602060405180830381600087803b158015612c7c57600080fd5b505af1925050508015612cad57506040513d601f19601f82011682018060405250810190612caa91906131be565b60015b612d30573d8060008114612cdd576040519150601f19603f3d011682016040523d82523d6000602084013e612ce2565b606091505b50600081511415612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f906138bf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d85565b600190505b949350505050565b600080823b905060008111915050919050565b828054612dac90613e7d565b90600052602060002090601f016020900481019282612dce5760008555612e15565b82601f10612de757805160ff1916838001178555612e15565b82800160010185558215612e15579182015b82811115612e14578251825591602001919060010190612df9565b5b509050612e229190612e26565b5090565b5b80821115612e3f576000816000905550600101612e27565b5090565b6000612e56612e5184613bbf565b613b9a565b905082815260208101848484011115612e7257612e7161404a565b5b612e7d848285613e3b565b509392505050565b6000612e98612e9384613bf0565b613b9a565b905082815260208101848484011115612eb457612eb361404a565b5b612ebf848285613e3b565b509392505050565b600081359050612ed68161467c565b92915050565b600081359050612eeb81614693565b92915050565b600081359050612f00816146aa565b92915050565b600081519050612f15816146aa565b92915050565b600082601f830112612f3057612f2f614045565b5b8135612f40848260208601612e43565b91505092915050565b600082601f830112612f5e57612f5d614045565b5b8135612f6e848260208601612e85565b91505092915050565b600081359050612f86816146c1565b92915050565b600081519050612f9b816146c1565b92915050565b600060208284031215612fb757612fb6614054565b5b6000612fc584828501612ec7565b91505092915050565b60008060408385031215612fe557612fe4614054565b5b6000612ff385828601612ec7565b925050602061300485828601612ec7565b9150509250929050565b60008060006060848603121561302757613026614054565b5b600061303586828701612ec7565b935050602061304686828701612ec7565b925050604061305786828701612f77565b9150509250925092565b6000806000806080858703121561307b5761307a614054565b5b600061308987828801612ec7565b945050602061309a87828801612ec7565b93505060406130ab87828801612f77565b925050606085013567ffffffffffffffff8111156130cc576130cb61404f565b5b6130d887828801612f1b565b91505092959194509250565b600080604083850312156130fb576130fa614054565b5b600061310985828601612ec7565b925050602061311a85828601612edc565b9150509250929050565b6000806040838503121561313b5761313a614054565b5b600061314985828601612ec7565b925050602061315a85828601612f77565b9150509250929050565b60006020828403121561317a57613179614054565b5b600061318884828501612edc565b91505092915050565b6000602082840312156131a7576131a6614054565b5b60006131b584828501612ef1565b91505092915050565b6000602082840312156131d4576131d3614054565b5b60006131e284828501612f06565b91505092915050565b60006020828403121561320157613200614054565b5b600082013567ffffffffffffffff81111561321f5761321e61404f565b5b61322b84828501612f49565b91505092915050565b60006020828403121561324a57613249614054565b5b600061325884828501612f77565b91505092915050565b60006020828403121561327757613276614054565b5b600061328584828501612f8c565b91505092915050565b600061329a838361378c565b60208301905092915050565b6132af81613dc7565b82525050565b60006132c082613c46565b6132ca8185613c74565b93506132d583613c21565b8060005b838110156133065781516132ed888261328e565b97506132f883613c67565b9250506001810190506132d9565b5085935050505092915050565b61331c81613dd9565b82525050565b600061332d82613c51565b6133378185613c85565b9350613347818560208601613e4a565b61335081614059565b840191505092915050565b600061336682613c5c565b6133708185613c96565b9350613380818560208601613e4a565b61338981614059565b840191505092915050565b600061339f82613c5c565b6133a98185613ca7565b93506133b9818560208601613e4a565b80840191505092915050565b600081546133d281613e7d565b6133dc8186613ca7565b945060018216600081146133f757600181146134085761343b565b60ff1983168652818601935061343b565b61341185613c31565b60005b8381101561343357815481890152600182019150602081019050613414565b838801955050505b50505092915050565b6000613451601a83613c96565b915061345c8261406a565b602082019050919050565b6000613474603283613c96565b915061347f82614093565b604082019050919050565b6000613497602683613c96565b91506134a2826140e2565b604082019050919050565b60006134ba601c83613c96565b91506134c582614131565b602082019050919050565b60006134dd601683613c96565b91506134e88261415a565b602082019050919050565b6000613500602483613c96565b915061350b82614183565b604082019050919050565b6000613523601983613c96565b915061352e826141d2565b602082019050919050565b6000613546602c83613c96565b9150613551826141fb565b604082019050919050565b6000613569602683613c96565b91506135748261424a565b604082019050919050565b600061358c603883613c96565b915061359782614299565b604082019050919050565b60006135af602a83613c96565b91506135ba826142e8565b604082019050919050565b60006135d2602083613c96565b91506135dd82614337565b602082019050919050565b60006135f5602983613c96565b915061360082614360565b604082019050919050565b6000613618603083613c96565b9150613623826143af565b604082019050919050565b600061363b602083613c96565b9150613646826143fe565b602082019050919050565b600061365e602c83613c96565b915061366982614427565b604082019050919050565b6000613681600583613ca7565b915061368c82614476565b600582019050919050565b60006136a4602083613c96565b91506136af8261449f565b602082019050919050565b60006136c7602983613c96565b91506136d2826144c8565b604082019050919050565b60006136ea602183613c96565b91506136f582614517565b604082019050919050565b600061370d603483613c96565b915061371882614566565b604082019050919050565b6000613730603183613c96565b915061373b826145b5565b604082019050919050565b6000613753601983613c96565b915061375e82614604565b602082019050919050565b6000613776602b83613c96565b91506137818261462d565b604082019050919050565b61379581613e31565b82525050565b6137a481613e31565b82525050565b60006137b682856133c5565b91506137c28284613394565b91506137cd82613674565b91508190509392505050565b60006020820190506137ee60008301846132a6565b92915050565b600060808201905061380960008301876132a6565b61381660208301866132a6565b613823604083018561379b565b81810360608301526138358184613322565b905095945050505050565b6000602082019050818103600083015261385a81846132b5565b905092915050565b60006020820190506138776000830184613313565b92915050565b60006020820190508181036000830152613897818461335b565b905092915050565b600060208201905081810360008301526138b881613444565b9050919050565b600060208201905081810360008301526138d881613467565b9050919050565b600060208201905081810360008301526138f88161348a565b9050919050565b60006020820190508181036000830152613918816134ad565b9050919050565b60006020820190508181036000830152613938816134d0565b9050919050565b60006020820190508181036000830152613958816134f3565b9050919050565b6000602082019050818103600083015261397881613516565b9050919050565b6000602082019050818103600083015261399881613539565b9050919050565b600060208201905081810360008301526139b88161355c565b9050919050565b600060208201905081810360008301526139d88161357f565b9050919050565b600060208201905081810360008301526139f8816135a2565b9050919050565b60006020820190508181036000830152613a18816135c5565b9050919050565b60006020820190508181036000830152613a38816135e8565b9050919050565b60006020820190508181036000830152613a588161360b565b9050919050565b60006020820190508181036000830152613a788161362e565b9050919050565b60006020820190508181036000830152613a9881613651565b9050919050565b60006020820190508181036000830152613ab881613697565b9050919050565b60006020820190508181036000830152613ad8816136ba565b9050919050565b60006020820190508181036000830152613af8816136dd565b9050919050565b60006020820190508181036000830152613b1881613700565b9050919050565b60006020820190508181036000830152613b3881613723565b9050919050565b60006020820190508181036000830152613b5881613746565b9050919050565b60006020820190508181036000830152613b7881613769565b9050919050565b6000602082019050613b94600083018461379b565b92915050565b6000613ba4613bb5565b9050613bb08282613eaf565b919050565b6000604051905090565b600067ffffffffffffffff821115613bda57613bd9614016565b5b613be382614059565b9050602081019050919050565b600067ffffffffffffffff821115613c0b57613c0a614016565b5b613c1482614059565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cbd82613e31565b9150613cc883613e31565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cfd57613cfc613f5a565b5b828201905092915050565b6000613d1382613e31565b9150613d1e83613e31565b925082613d2e57613d2d613f89565b5b828204905092915050565b6000613d4482613e31565b9150613d4f83613e31565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8857613d87613f5a565b5b828202905092915050565b6000613d9e82613e31565b9150613da983613e31565b925082821015613dbc57613dbb613f5a565b5b828203905092915050565b6000613dd282613e11565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e68578082015181840152602081019050613e4d565b83811115613e77576000848401525b50505050565b60006002820490506001821680613e9557607f821691505b60208210811415613ea957613ea8613fb8565b5b50919050565b613eb882614059565b810181811067ffffffffffffffff82111715613ed757613ed6614016565b5b80604052505050565b6000613eeb82613e31565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f1e57613f1d613f5a565b5b600182019050919050565b6000613f3482613e31565b9150613f3f83613e31565b925082613f4f57613f4e613f89565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4c53543a20436f6c6c656374696f6e206973206c6f636b65642e000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4c53543a20486172642063617020726561636865642e00000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4c53543a20416d6f756e74206d757374206265206c657373206f72206571756160008201527f6c20746f20350000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4c53543a20416d6f756e742073686f756c64206265206174206c656173742031600082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4c53543a20416d6f756e742073686f756c642062652061206d756c7469706c6560008201527f206f66206d696e74696e6720636f737400000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c53543a20596f752063616e2774206d696e74206265636175736520646f6e2760008201527f74206d6174636820726571756972656d656e7473000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4c53543a204e6f7468696e6720746f2077697468647261772100000000000000600082015250565b7f4c53543a2043616e6e6f74207075726368617365206d6f7265207468616e203260008201527f20706572204f47206e6674000000000000000000000000000000000000000000602082015250565b61468581613dc7565b811461469057600080fd5b50565b61469c81613dd9565b81146146a757600080fd5b50565b6146b381613de5565b81146146be57600080fd5b50565b6146ca81613e31565b81146146d557600080fd5b5056fea2646970667358221220a8e215aeacb425e4ec1a4aac473f1b6765cade0187ad7ff66431bd80b4ea13cb64736f6c6343000806003368747470733a2f2f697066732e696f2f697066732f516d59716f375145526d664b56797450664b61566445533971554334464b564165534e4b5a4c50626966416b537268747470733a2f2f697066732e696f2f697066732f52657665616c6564436f6c6c656374696f6e2f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001342485a2d4c4f4e47535452414e47455452495000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000642485a4c53540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d58475a554d37363859596d47683539386d746d72414778665942534e4d4671626b685763663735326b6736320000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061021a5760003560e01c8063715018a611610123578063b12dc991116100ab578063c87b56dd1161006f578063c87b56dd14610762578063e89874981461079f578063e8a3d485146107ca578063e985e9c5146107f5578063f2fde38b146108325761021a565b8063b12dc99114610693578063b703a9f4146106aa578063b88d4fde146106d3578063be3f954d146106fc578063bfc974cc146107255761021a565b80638462151c116100f25780638462151c146105ac5780638da5cb5b146105e957806395d89b4114610614578063a0073b881461063f578063a22cb4651461066a5761021a565b8063715018a614610518578063725d15351461052f5780637362377b1461056c57806379250f14146105835761021a565b80631a4fba6c116101a657806340d0b4a91161017557806340d0b4a91461043357806342842e0e1461044a57806361ad2057146104735780636352211e1461049e57806370a08231146104db5761021a565b80631a4fba6c1461038f578063211eb07d146103b857806323b872dd146103e15780632a1436c21461040a5761021a565b8063095ea7b3116101ed578063095ea7b3146102ef5780630ee83a711461031857806312065fe01461032f57806314f710fe1461035a57806318160ddd146103645761021a565b806301ffc9a71461021f5780630346f18f1461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613191565b61085b565b6040516102539190613862565b60405180910390f35b34801561026857600080fd5b5061027161093d565b60405161027e919061387d565b60405180910390f35b34801561029357600080fd5b5061029c6109cb565b6040516102a9919061387d565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613234565b610a5d565b6040516102e691906137d9565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190613124565b610ae2565b005b34801561032457600080fd5b5061032d610bfa565b005b34801561033b57600080fd5b50610344610c93565b6040516103519190613b7f565b60405180910390f35b610362610c9b565b005b34801561037057600080fd5b50610379610fc4565b6040516103869190613b7f565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b191906131eb565b610fd5565b005b3480156103c457600080fd5b506103df60048036038101906103da91906131eb565b61106b565b005b3480156103ed57600080fd5b506104086004803603810190610403919061300e565b611151565b005b34801561041657600080fd5b50610431600480360381019061042c9190613164565b6111b1565b005b34801561043f57600080fd5b5061044861124a565b005b34801561045657600080fd5b50610471600480360381019061046c919061300e565b6112e3565b005b34801561047f57600080fd5b50610488611303565b604051610495919061387d565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613234565b611391565b6040516104d291906137d9565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190612fa1565b611443565b60405161050f9190613b7f565b60405180910390f35b34801561052457600080fd5b5061052d6114fb565b005b34801561053b57600080fd5b5061055660048036038101906105519190612fa1565b611583565b6040516105639190613b7f565b60405180910390f35b34801561057857600080fd5b5061058161163c565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190612fa1565b61174a565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190612fa1565b61180a565b6040516105e09190613840565b60405180910390f35b3480156105f557600080fd5b506105fe611968565b60405161060b91906137d9565b60405180910390f35b34801561062057600080fd5b50610629611992565b604051610636919061387d565b60405180910390f35b34801561064b57600080fd5b50610654611a24565b604051610661919061387d565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c91906130e4565b611ab2565b005b34801561069f57600080fd5b506106a8611c33565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190613234565b611cd4565b005b3480156106df57600080fd5b506106fa60048036038101906106f59190613061565b611d5a565b005b34801561070857600080fd5b50610723600480360381019061071e91906131eb565b611dbc565b005b34801561073157600080fd5b5061074c60048036038101906107479190612fa1565b611e52565b6040516107599190613b7f565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190613234565b611f1d565b604051610796919061387d565b60405180910390f35b3480156107ab57600080fd5b506107b4612006565b6040516107c19190613862565b60405180910390f35b3480156107d657600080fd5b506107df612019565b6040516107ec919061387d565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190612fce565b6120ab565b6040516108299190613862565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190612fa1565b61211f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610936575061093582612217565b5b9050919050565b6008805461094a90613e7d565b80601f016020809104026020016040519081016040528092919081815260200182805461097690613e7d565b80156109c35780601f10610998576101008083540402835291602001916109c3565b820191906000526020600020905b8154815290600101906020018083116109a657829003601f168201915b505050505081565b6060600080546109da90613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0690613e7d565b8015610a535780601f10610a2857610100808354040283529160200191610a53565b820191906000526020600020905b815481529060010190602001808311610a3657829003601f168201915b5050505050905090565b6000610a6882612281565b610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90613a7f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aed82611391565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613adf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7d6122ed565b73ffffffffffffffffffffffffffffffffffffffff161480610bac5750610bab81610ba66122ed565b6120ab565b5b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be2906139bf565b60405180910390fd5b610bf583836122f5565b505050565b610c026122ed565b73ffffffffffffffffffffffffffffffffffffffff16610c20611968565b73ffffffffffffffffffffffffffffffffffffffff1614610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d90613a9f565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b600047905090565b600080600e54905060006127109050601060009054906101000a900460ff1615610d9657600f5491506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d2191906137d9565b60206040518083038186803b158015610d3957600080fd5b505afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d719190613261565b90506000811115610d9057806002610d899190613d39565b9150600193505b50610d9b565b600192505b82610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613aff565b60405180910390fd5b60008234610de99190613f29565b14610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090613a3f565b60405180910390fd5b60008234610e379190613d08565b90506001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e74906139ff565b60405180910390fd5b6005811115610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb89061399f565b60405180910390fd5b6000610ecd600b6123ae565b82610ed89190613cb2565b9050600d54811115610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f169061391f565b60405180910390fd5b600082610f2b33611443565b610f359190613cb2565b905083811115610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190613b5f565b60405180910390fd5b60005b83811015610fbb57610f8f600b6123bc565b6000610f9b600b6123ae565b9050610fa733826123d2565b508080610fb390613ee0565b915050610f7d565b50505050505050565b6000610fd0600b6123ae565b905090565b610fdd6122ed565b73ffffffffffffffffffffffffffffffffffffffff16610ffb611968565b73ffffffffffffffffffffffffffffffffffffffff1614611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613a9f565b60405180910390fd5b8060089080519060200190611067929190612da0565b5050565b6110736122ed565b73ffffffffffffffffffffffffffffffffffffffff16611091611968565b73ffffffffffffffffffffffffffffffffffffffff16146110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90613a9f565b60405180910390fd5b601060019054906101000a900460ff1615611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e9061389f565b60405180910390fd5b806009908051906020019061114d929190612da0565b5050565b61116261115c6122ed565b826125a0565b6111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890613b1f565b60405180910390fd5b6111ac83838361267e565b505050565b6111b96122ed565b73ffffffffffffffffffffffffffffffffffffffff166111d7611968565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490613a9f565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6112526122ed565b73ffffffffffffffffffffffffffffffffffffffff16611270611968565b73ffffffffffffffffffffffffffffffffffffffff16146112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd90613a9f565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b6112fe83838360405180602001604052806000815250611d5a565b505050565b6009805461131090613e7d565b80601f016020809104026020016040519081016040528092919081815260200182805461133c90613e7d565b80156113895780601f1061135e57610100808354040283529160200191611389565b820191906000526020600020905b81548152906001019060200180831161136c57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190613a1f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ab906139df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115036122ed565b73ffffffffffffffffffffffffffffffffffffffff16611521611968565b73ffffffffffffffffffffffffffffffffffffffff1614611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156e90613a9f565b60405180910390fd5b61158160006128da565b565b600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016115e191906137d9565b60206040518083038186803b1580156115f957600080fd5b505afa15801561160d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116319190613261565b905080915050919050565b6116446122ed565b73ffffffffffffffffffffffffffffffffffffffff16611662611968565b73ffffffffffffffffffffffffffffffffffffffff16146116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af90613a9f565b60405180910390fd5b600047905060008111611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613b3f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611746573d6000803e3d6000fd5b5050565b6117526122ed565b73ffffffffffffffffffffffffffffffffffffffff16611770611968565b73ffffffffffffffffffffffffffffffffffffffff16146117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90613a9f565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600061181783611443565b9050600081141561187457600067ffffffffffffffff81111561183d5761183c614016565b5b60405190808252806020026020018201604052801561186b5781602001602082028036833780820191505090505b50915050611963565b60008167ffffffffffffffff8111156118905761188f614016565b5b6040519080825280602002602001820160405280156118be5781602001602082028036833780820191505090505b50905060006118cb610fc4565b9050600080600190505b82811161195a578673ffffffffffffffffffffffffffffffffffffffff166118fc82611391565b73ffffffffffffffffffffffffffffffffffffffff161415611947578084838151811061192c5761192b613fe7565b5b602002602001018181525050818061194390613ee0565b9250505b808061195290613ee0565b9150506118d5565b83955050505050505b919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119a190613e7d565b80601f01602080910402602001604051908101604052809291908181526020018280546119cd90613e7d565b8015611a1a5780601f106119ef57610100808354040283529160200191611a1a565b820191906000526020600020905b8154815290600101906020018083116119fd57829003601f168201915b5050505050905090565b60118054611a3190613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5d90613e7d565b8015611aaa5780601f10611a7f57610100808354040283529160200191611aaa565b820191906000526020600020905b815481529060010190602001808311611a8d57829003601f168201915b505050505081565b611aba6122ed565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f9061395f565b60405180910390fd5b8060056000611b356122ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611be26122ed565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c279190613862565b60405180910390a35050565b611c3b6122ed565b73ffffffffffffffffffffffffffffffffffffffff16611c59611968565b73ffffffffffffffffffffffffffffffffffffffff1614611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca690613a9f565b60405180910390fd5b611cb9600b6123bc565b6000611cc5600b6123ae565b9050611cd133826123d2565b50565b611cdc6122ed565b73ffffffffffffffffffffffffffffffffffffffff16611cfa611968565b73ffffffffffffffffffffffffffffffffffffffff1614611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790613a9f565b60405180910390fd5b80600e8190555050565b611d6b611d656122ed565b836125a0565b611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190613b1f565b60405180910390fd5b611db6848484846129a0565b50505050565b611dc46122ed565b73ffffffffffffffffffffffffffffffffffffffff16611de2611968565b73ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613a9f565b60405180910390fd5b8060119080519060200190611e4e929190612da0565b5050565b600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401611eb091906137d9565b60206040518083038186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f009190613261565b90506000600282611f119190613d39565b90508092505050919050565b606060011515600c60009054906101000a900460ff1615151415611f73576000611f46836129fc565b9050600981604051602001611f5c9291906137aa565b604051602081830303815290604052915050612001565b60118054611f8090613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054611fac90613e7d565b8015611ff95780601f10611fce57610100808354040283529160200191611ff9565b820191906000526020600020905b815481529060010190602001808311611fdc57829003601f168201915b505050505090505b919050565b600c60009054906101000a900460ff1681565b60606008805461202890613e7d565b80601f016020809104026020016040519081016040528092919081815260200182805461205490613e7d565b80156120a15780601f10612076576101008083540402835291602001916120a1565b820191906000526020600020905b81548152906001019060200180831161208457829003601f168201915b5050505050905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561210c5760019050612119565b6121168383612b5d565b90505b92915050565b6121276122ed565b73ffffffffffffffffffffffffffffffffffffffff16612145611968565b73ffffffffffffffffffffffffffffffffffffffff161461219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219290613a9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561220b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612202906138df565b60405180910390fd5b612214816128da565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661236883611391565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243990613a5f565b60405180910390fd5b61244b81612281565b1561248b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612482906138ff565b60405180910390fd5b61249760008383612bf1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124e79190613cb2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006125ab82612281565b6125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e19061397f565b60405180910390fd5b60006125f583611391565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266457508373ffffffffffffffffffffffffffffffffffffffff1661264c84610a5d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612675575061267481856120ab565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661269e82611391565b73ffffffffffffffffffffffffffffffffffffffff16146126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb90613abf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275b9061393f565b60405180910390fd5b61276f838383612bf1565b61277a6000826122f5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ca9190613d93565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128219190613cb2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129ab84848461267e565b6129b784848484612bf6565b6129f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ed906138bf565b60405180910390fd5b50505050565b60606000821415612a44576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b58565b600082905060005b60008214612a76578080612a5f90613ee0565b915050600a82612a6f9190613d08565b9150612a4c565b60008167ffffffffffffffff811115612a9257612a91614016565b5b6040519080825280601f01601f191660200182016040528015612ac45781602001600182028036833780820191505090505b5090505b60008514612b5157600182612add9190613d93565b9150600a85612aec9190613f29565b6030612af89190613cb2565b60f81b818381518110612b0e57612b0d613fe7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b4a9190613d08565b9450612ac8565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b6000612c178473ffffffffffffffffffffffffffffffffffffffff16612d8d565b15612d80578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c406122ed565b8786866040518563ffffffff1660e01b8152600401612c6294939291906137f4565b602060405180830381600087803b158015612c7c57600080fd5b505af1925050508015612cad57506040513d601f19601f82011682018060405250810190612caa91906131be565b60015b612d30573d8060008114612cdd576040519150601f19603f3d011682016040523d82523d6000602084013e612ce2565b606091505b50600081511415612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f906138bf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d85565b600190505b949350505050565b600080823b905060008111915050919050565b828054612dac90613e7d565b90600052602060002090601f016020900481019282612dce5760008555612e15565b82601f10612de757805160ff1916838001178555612e15565b82800160010185558215612e15579182015b82811115612e14578251825591602001919060010190612df9565b5b509050612e229190612e26565b5090565b5b80821115612e3f576000816000905550600101612e27565b5090565b6000612e56612e5184613bbf565b613b9a565b905082815260208101848484011115612e7257612e7161404a565b5b612e7d848285613e3b565b509392505050565b6000612e98612e9384613bf0565b613b9a565b905082815260208101848484011115612eb457612eb361404a565b5b612ebf848285613e3b565b509392505050565b600081359050612ed68161467c565b92915050565b600081359050612eeb81614693565b92915050565b600081359050612f00816146aa565b92915050565b600081519050612f15816146aa565b92915050565b600082601f830112612f3057612f2f614045565b5b8135612f40848260208601612e43565b91505092915050565b600082601f830112612f5e57612f5d614045565b5b8135612f6e848260208601612e85565b91505092915050565b600081359050612f86816146c1565b92915050565b600081519050612f9b816146c1565b92915050565b600060208284031215612fb757612fb6614054565b5b6000612fc584828501612ec7565b91505092915050565b60008060408385031215612fe557612fe4614054565b5b6000612ff385828601612ec7565b925050602061300485828601612ec7565b9150509250929050565b60008060006060848603121561302757613026614054565b5b600061303586828701612ec7565b935050602061304686828701612ec7565b925050604061305786828701612f77565b9150509250925092565b6000806000806080858703121561307b5761307a614054565b5b600061308987828801612ec7565b945050602061309a87828801612ec7565b93505060406130ab87828801612f77565b925050606085013567ffffffffffffffff8111156130cc576130cb61404f565b5b6130d887828801612f1b565b91505092959194509250565b600080604083850312156130fb576130fa614054565b5b600061310985828601612ec7565b925050602061311a85828601612edc565b9150509250929050565b6000806040838503121561313b5761313a614054565b5b600061314985828601612ec7565b925050602061315a85828601612f77565b9150509250929050565b60006020828403121561317a57613179614054565b5b600061318884828501612edc565b91505092915050565b6000602082840312156131a7576131a6614054565b5b60006131b584828501612ef1565b91505092915050565b6000602082840312156131d4576131d3614054565b5b60006131e284828501612f06565b91505092915050565b60006020828403121561320157613200614054565b5b600082013567ffffffffffffffff81111561321f5761321e61404f565b5b61322b84828501612f49565b91505092915050565b60006020828403121561324a57613249614054565b5b600061325884828501612f77565b91505092915050565b60006020828403121561327757613276614054565b5b600061328584828501612f8c565b91505092915050565b600061329a838361378c565b60208301905092915050565b6132af81613dc7565b82525050565b60006132c082613c46565b6132ca8185613c74565b93506132d583613c21565b8060005b838110156133065781516132ed888261328e565b97506132f883613c67565b9250506001810190506132d9565b5085935050505092915050565b61331c81613dd9565b82525050565b600061332d82613c51565b6133378185613c85565b9350613347818560208601613e4a565b61335081614059565b840191505092915050565b600061336682613c5c565b6133708185613c96565b9350613380818560208601613e4a565b61338981614059565b840191505092915050565b600061339f82613c5c565b6133a98185613ca7565b93506133b9818560208601613e4a565b80840191505092915050565b600081546133d281613e7d565b6133dc8186613ca7565b945060018216600081146133f757600181146134085761343b565b60ff1983168652818601935061343b565b61341185613c31565b60005b8381101561343357815481890152600182019150602081019050613414565b838801955050505b50505092915050565b6000613451601a83613c96565b915061345c8261406a565b602082019050919050565b6000613474603283613c96565b915061347f82614093565b604082019050919050565b6000613497602683613c96565b91506134a2826140e2565b604082019050919050565b60006134ba601c83613c96565b91506134c582614131565b602082019050919050565b60006134dd601683613c96565b91506134e88261415a565b602082019050919050565b6000613500602483613c96565b915061350b82614183565b604082019050919050565b6000613523601983613c96565b915061352e826141d2565b602082019050919050565b6000613546602c83613c96565b9150613551826141fb565b604082019050919050565b6000613569602683613c96565b91506135748261424a565b604082019050919050565b600061358c603883613c96565b915061359782614299565b604082019050919050565b60006135af602a83613c96565b91506135ba826142e8565b604082019050919050565b60006135d2602083613c96565b91506135dd82614337565b602082019050919050565b60006135f5602983613c96565b915061360082614360565b604082019050919050565b6000613618603083613c96565b9150613623826143af565b604082019050919050565b600061363b602083613c96565b9150613646826143fe565b602082019050919050565b600061365e602c83613c96565b915061366982614427565b604082019050919050565b6000613681600583613ca7565b915061368c82614476565b600582019050919050565b60006136a4602083613c96565b91506136af8261449f565b602082019050919050565b60006136c7602983613c96565b91506136d2826144c8565b604082019050919050565b60006136ea602183613c96565b91506136f582614517565b604082019050919050565b600061370d603483613c96565b915061371882614566565b604082019050919050565b6000613730603183613c96565b915061373b826145b5565b604082019050919050565b6000613753601983613c96565b915061375e82614604565b602082019050919050565b6000613776602b83613c96565b91506137818261462d565b604082019050919050565b61379581613e31565b82525050565b6137a481613e31565b82525050565b60006137b682856133c5565b91506137c28284613394565b91506137cd82613674565b91508190509392505050565b60006020820190506137ee60008301846132a6565b92915050565b600060808201905061380960008301876132a6565b61381660208301866132a6565b613823604083018561379b565b81810360608301526138358184613322565b905095945050505050565b6000602082019050818103600083015261385a81846132b5565b905092915050565b60006020820190506138776000830184613313565b92915050565b60006020820190508181036000830152613897818461335b565b905092915050565b600060208201905081810360008301526138b881613444565b9050919050565b600060208201905081810360008301526138d881613467565b9050919050565b600060208201905081810360008301526138f88161348a565b9050919050565b60006020820190508181036000830152613918816134ad565b9050919050565b60006020820190508181036000830152613938816134d0565b9050919050565b60006020820190508181036000830152613958816134f3565b9050919050565b6000602082019050818103600083015261397881613516565b9050919050565b6000602082019050818103600083015261399881613539565b9050919050565b600060208201905081810360008301526139b88161355c565b9050919050565b600060208201905081810360008301526139d88161357f565b9050919050565b600060208201905081810360008301526139f8816135a2565b9050919050565b60006020820190508181036000830152613a18816135c5565b9050919050565b60006020820190508181036000830152613a38816135e8565b9050919050565b60006020820190508181036000830152613a588161360b565b9050919050565b60006020820190508181036000830152613a788161362e565b9050919050565b60006020820190508181036000830152613a9881613651565b9050919050565b60006020820190508181036000830152613ab881613697565b9050919050565b60006020820190508181036000830152613ad8816136ba565b9050919050565b60006020820190508181036000830152613af8816136dd565b9050919050565b60006020820190508181036000830152613b1881613700565b9050919050565b60006020820190508181036000830152613b3881613723565b9050919050565b60006020820190508181036000830152613b5881613746565b9050919050565b60006020820190508181036000830152613b7881613769565b9050919050565b6000602082019050613b94600083018461379b565b92915050565b6000613ba4613bb5565b9050613bb08282613eaf565b919050565b6000604051905090565b600067ffffffffffffffff821115613bda57613bd9614016565b5b613be382614059565b9050602081019050919050565b600067ffffffffffffffff821115613c0b57613c0a614016565b5b613c1482614059565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cbd82613e31565b9150613cc883613e31565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cfd57613cfc613f5a565b5b828201905092915050565b6000613d1382613e31565b9150613d1e83613e31565b925082613d2e57613d2d613f89565b5b828204905092915050565b6000613d4482613e31565b9150613d4f83613e31565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8857613d87613f5a565b5b828202905092915050565b6000613d9e82613e31565b9150613da983613e31565b925082821015613dbc57613dbb613f5a565b5b828203905092915050565b6000613dd282613e11565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e68578082015181840152602081019050613e4d565b83811115613e77576000848401525b50505050565b60006002820490506001821680613e9557607f821691505b60208210811415613ea957613ea8613fb8565b5b50919050565b613eb882614059565b810181811067ffffffffffffffff82111715613ed757613ed6614016565b5b80604052505050565b6000613eeb82613e31565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f1e57613f1d613f5a565b5b600182019050919050565b6000613f3482613e31565b9150613f3f83613e31565b925082613f4f57613f4e613f89565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4c53543a20436f6c6c656374696f6e206973206c6f636b65642e000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4c53543a20486172642063617020726561636865642e00000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4c53543a20416d6f756e74206d757374206265206c657373206f72206571756160008201527f6c20746f20350000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4c53543a20416d6f756e742073686f756c64206265206174206c656173742031600082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4c53543a20416d6f756e742073686f756c642062652061206d756c7469706c6560008201527f206f66206d696e74696e6720636f737400000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c53543a20596f752063616e2774206d696e74206265636175736520646f6e2760008201527f74206d6174636820726571756972656d656e7473000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4c53543a204e6f7468696e6720746f2077697468647261772100000000000000600082015250565b7f4c53543a2043616e6e6f74207075726368617365206d6f7265207468616e203260008201527f20706572204f47206e6674000000000000000000000000000000000000000000602082015250565b61468581613dc7565b811461469057600080fd5b50565b61469c81613dd9565b81146146a757600080fd5b50565b6146b381613de5565b81146146be57600080fd5b50565b6146ca81613e31565b81146146d557600080fd5b5056fea2646970667358221220a8e215aeacb425e4ec1a4aac473f1b6765cade0187ad7ff66431bd80b4ea13cb64736f6c63430008060033

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001342485a2d4c4f4e47535452414e47455452495000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000642485a4c53540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d58475a554d37363859596d47683539386d746d72414778665942534e4d4671626b685763663735326b6736320000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _openseaProxyAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [1] : _name (string): BHZ-LONGSTRANGETRIP
Arg [2] : _ticker (string): BHZLST
Arg [3] : _contract_ipfs (string): https://ipfs.io/ipfs/QmXGZUM768YYmGh598mtmrAGxfYBSNMFqbkhWcf752kg62

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [5] : 42485a2d4c4f4e47535452414e47455452495000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 42485a4c53540000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [9] : 68747470733a2f2f697066732e696f2f697066732f516d58475a554d37363859
Arg [10] : 596d47683539386d746d72414778665942534e4d4671626b685763663735326b
Arg [11] : 6736320000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

34313:6871:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19066:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34384:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19984:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21495:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21033:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39753:84;;;;;;;;;;;;;:::i;:::-;;40364:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37086:1284;;;:::i;:::-;;38376:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38565:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39151:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22359:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39922:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39405:91;;;;;;;;;;;;;:::i;:::-;;22755:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34422:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19687:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19425:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32346:92;;;;;;;;;;;;;:::i;:::-;;35941:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40544:204;;;;;;;;;;;;;:::i;:::-;;39571:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36298:706;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31714:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20146:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34811:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21779:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40087:177;;;;;;;;;;;;;:::i;:::-;;38976:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23000:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38781:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36098:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35445:383;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34574:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35834:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40831:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32587:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19066:300;19168:4;19218:25;19203:40;;;:11;:40;;;;:104;;;;19274:33;19259:48;;;:11;:48;;;;19203:104;:156;;;;19323:36;19347:11;19323:23;:36::i;:::-;19203:156;19184:175;;19066:300;;;:::o;34384:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19984:98::-;20038:13;20070:5;20063:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19984:98;:::o;21495:217::-;21571:7;21598:16;21606:7;21598;:16::i;:::-;21590:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21681:15;:24;21697:7;21681:24;;;;;;;;;;;;;;;;;;;;;21674:31;;21495:217;;;:::o;21033:401::-;21113:13;21129:23;21144:7;21129:14;:23::i;:::-;21113:39;;21176:5;21170:11;;:2;:11;;;;21162:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21267:5;21251:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21276:37;21293:5;21300:12;:10;:12::i;:::-;21276:16;:37::i;:::-;21251:62;21230:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;21406:21;21415:2;21419:7;21406:8;:21::i;:::-;21103:331;21033:401;;:::o;39753:84::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39826:4:::1;39806:17;;:24;;;;;;;;;;;;;;;;;;39753:84::o:0;40364:97::-;40407:7;40433:21;40426:28;;40364:97;:::o;37086:1284::-;37130:12;37160:13;37176;;37160:29;;37199:16;37218:5;37199:24;;37236:16;;;;;;;;;;;37233:288;;;37275:21;;37267:29;;37310:15;37328:2;;;;;;;;;;;:12;;;37341:10;37328:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37310:42;;37379:1;37369:7;:11;37366:102;;;37414:7;37410:1;:11;;;;:::i;:::-;37399:22;;37449:4;37439:14;;37366:102;37253:225;37233:288;;;37506:4;37496:14;;37233:288;37538:7;37530:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;37641:1;37632:5;37620:9;:17;;;;:::i;:::-;:22;37612:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;37705:14;37734:5;37722:9;:17;;;;:::i;:::-;37705:34;;37767:1;37757:6;:11;;37749:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;37833:1;37823:6;:11;;37815:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37887:15;37914:25;:15;:23;:25::i;:::-;37905:6;:34;;;;:::i;:::-;37887:52;;37968:8;;37957:7;:19;;37949:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38013:17;38057:6;38033:21;38043:10;38033:9;:21::i;:::-;:30;;;;:::i;:::-;38013:50;;38094:8;38081:9;:21;;38073:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;38160:6;38180:184;38196:6;38192:1;:10;38180:184;;;38223:27;:15;:25;:27::i;:::-;38264:18;38285:25;:15;:23;:25::i;:::-;38264:46;;38324:29;38330:10;38342;38324:5;:29::i;:::-;38209:155;38204:3;;;;;:::i;:::-;;;;38180:184;;;37120:1250;;;;;;;37086:1284::o;38376:102::-;38420:7;38446:25;:15;:23;:25::i;:::-;38439:32;;38376:102;:::o;38565:131::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38675:14:::1;38654:18;:35;;;;;;;;;;;;:::i;:::-;;38565:131:::0;:::o;39151:169::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39229:17:::1;;;;;;;;;;;39228:18;39220:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;39307:6;39287:17;:26;;;;;;;;;;;;:::i;:::-;;39151:169:::0;:::o;22359:330::-;22548:41;22567:12;:10;:12::i;:::-;22581:7;22548:18;:41::i;:::-;22540:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22654:28;22664:4;22670:2;22674:7;22654:9;:28::i;:::-;22359:330;;;:::o;39922:92::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40002:5:::1;39983:16;;:24;;;;;;;;;;;;;;;;;;39922:92:::0;:::o;39405:91::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39485:4:::1;39460:22;;:29;;;;;;;;;;;;;;;;;;39405:91::o:0;22755:179::-;22888:39;22905:4;22911:2;22915:7;22888:39;;;;;;;;;;;;:16;:39::i;:::-;22755:179;;;:::o;34422:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19687:235::-;19759:7;19778:13;19794:7;:16;19802:7;19794:16;;;;;;;;;;;;;;;;;;;;;19778:32;;19845:1;19828:19;;:5;:19;;;;19820:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19910:5;19903:12;;;19687:235;;;:::o;19425:205::-;19497:7;19541:1;19524:19;;:5;:19;;;;19516:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19607:9;:16;19617:5;19607:16;;;;;;;;;;;;;;;;19600:23;;19425:205;;;:::o;32346:92::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32410:21:::1;32428:1;32410:9;:21::i;:::-;32346:92::o:0;35941:151::-;36002:7;36021:15;36039:2;;;;;;;;;;;:12;;;36052:8;36039:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36021:40;;36078:7;36071:14;;;35941:151;;;:::o;40544:204::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40596:15:::1;40614:21;40596:39;;40663:1;40653:7;:11;40645:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;40712:10;40704:28;;:37;40733:7;40704:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40586:162;40544:204::o:0;39571:100::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39652:11:::1;39639:2;;:25;;;;;;;;;;;;;;;;;;39571:100:::0;:::o;36298:706::-;36359:28;36399:18;36420:17;36430:6;36420:9;:17::i;:::-;36399:38;;36465:1;36451:10;:15;36447:551;;;36540:1;36526:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36519:23;;;;;36447:551;36573:23;36613:10;36599:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36573:51;;36638:17;36658:13;:11;:13::i;:::-;36638:33;;36685:19;36722:13;36763:1;36755:9;;36750:210;36775:9;36766:5;:18;36750:210;;36835:6;36817:24;;:14;36825:5;36817:7;:14::i;:::-;:24;;;36813:133;;;36887:5;36865:6;36872:11;36865:19;;;;;;;;:::i;:::-;;;;;;;:27;;;;;36914:13;;;;;:::i;:::-;;;;36813:133;36786:7;;;;;:::i;:::-;;;;36750:210;;;36981:6;36974:13;;;;;;;36298:706;;;;:::o;31714:85::-;31760:7;31786:6;;;;;;;;;;;31779:13;;31714:85;:::o;20146:102::-;20202:13;20234:7;20227:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20146:102;:::o;34811:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21779:290::-;21893:12;:10;:12::i;:::-;21881:24;;:8;:24;;;;21873:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21991:8;21946:18;:32;21965:12;:10;:12::i;:::-;21946:32;;;;;;;;;;;;;;;:42;21979:8;21946:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22043:8;22014:48;;22029:12;:10;:12::i;:::-;22014:48;;;22053:8;22014:48;;;;;;:::i;:::-;;;;;;;;21779:290;;:::o;40087:177::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40135:27:::1;:15;:25;:27::i;:::-;40172:18;40193:25;:15;:23;:25::i;:::-;40172:46;;40228:29;40234:10;40246;40228:5;:29::i;:::-;40125:139;40087:177::o:0;38976:88::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39052:5:::1;39036:13;:21;;;;38976:88:::0;:::o;23000:320::-;23169:41;23188:12;:10;:12::i;:::-;23202:7;23169:18;:41::i;:::-;23161:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23274:39;23288:4;23294:2;23298:7;23307:5;23274:13;:39::i;:::-;23000:320;;;;:::o;38781:107::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38875:6:::1;38857:15;:24;;;;;;;;;;;;:::i;:::-;;38781:107:::0;:::o;36098:194::-;36161:7;36180:15;36198:2;;;;;;;;;;;:12;;;36211:8;36198:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36180:40;;36230:16;36259:1;36249:7;:11;;;;:::i;:::-;36230:30;;36277:8;36270:15;;;;36098:194;;;:::o;35445:383::-;35551:13;35609:4;35583:30;;:22;;;;;;;;;;;:30;;;35580:242;;;35628:20;35651:26;35668:8;35651:16;:26::i;:::-;35628:49;;35722:17;35741:6;35705:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35691:67;;;;;35580:242;35796:15;35789:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35445:383;;;;:::o;34574:42::-;;;;;;;;;;;;;:::o;35834:101::-;35878:13;35910:18;35903:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35834:101;:::o;40831:351::-;40954:15;41050:19;;;;;;;;;;;41029:41;;:9;:41;;;41012:105;;;41102:4;41095:11;;;;41012:105;41134:41;41157:6;41165:9;41134:22;:41::i;:::-;41127:48;;40831:351;;;;;:::o;32587:189::-;31937:12;:10;:12::i;:::-;31926:23;;:7;:5;:7::i;:::-;:23;;;31918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32695:1:::1;32675:22;;:8;:22;;;;32667:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32750:19;32760:8;32750:9;:19::i;:::-;32587:189:::0;:::o;17718:155::-;17803:4;17841:25;17826:40;;;:11;:40;;;;17819:47;;17718:155;;;:::o;24792:125::-;24857:4;24908:1;24880:30;;:7;:16;24888:7;24880:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24873:37;;24792:125;;;:::o;14911:96::-;14964:7;14990:10;14983:17;;14911:96;:::o;28643:171::-;28744:2;28717:15;:24;28733:7;28717:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28799:7;28795:2;28761:46;;28770:23;28785:7;28770:14;:23::i;:::-;28761:46;;;;;;;;;;;;28643:171;;:::o;33670:112::-;33735:7;33761;:14;;;33754:21;;33670:112;;;:::o;33788:123::-;33893:1;33875:7;:14;;;:19;;;;;;;;;;;33788:123;:::o;26711:372::-;26804:1;26790:16;;:2;:16;;;;26782:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26862:16;26870:7;26862;:16::i;:::-;26861:17;26853:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26922:45;26951:1;26955:2;26959:7;26922:20;:45::i;:::-;26995:1;26978:9;:13;26988:2;26978:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27025:2;27006:7;:16;27014:7;27006:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27068:7;27064:2;27043:33;;27060:1;27043:33;;;;;;;;;;;;26711:372;;:::o;25075:344::-;25168:4;25192:16;25200:7;25192;:16::i;:::-;25184:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25267:13;25283:23;25298:7;25283:14;:23::i;:::-;25267:39;;25335:5;25324:16;;:7;:16;;;:51;;;;25368:7;25344:31;;:20;25356:7;25344:11;:20::i;:::-;:31;;;25324:51;:87;;;;25379:32;25396:5;25403:7;25379:16;:32::i;:::-;25324:87;25316:96;;;25075:344;;;;:::o;27972:560::-;28126:4;28099:31;;:23;28114:7;28099:14;:23::i;:::-;:31;;;28091:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28208:1;28194:16;;:2;:16;;;;28186:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28262:39;28283:4;28289:2;28293:7;28262:20;:39::i;:::-;28363:29;28380:1;28384:7;28363:8;:29::i;:::-;28422:1;28403:9;:15;28413:4;28403:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;28450:1;28433:9;:13;28443:2;28433:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28480:2;28461:7;:16;28469:7;28461:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28517:7;28513:2;28498:27;;28507:4;28498:27;;;;;;;;;;;;27972:560;;;:::o;32782:169::-;32837:16;32856:6;;;;;;;;;;;32837:25;;32881:8;32872:6;;:17;;;;;;;;;;;;;;;;;;32935:8;32904:40;;32925:8;32904:40;;;;;;;;;;;;32827:124;32782:169;:::o;24182:307::-;24333:28;24343:4;24349:2;24353:7;24333:9;:28::i;:::-;24379:48;24402:4;24408:2;24412:7;24421:5;24379:22;:48::i;:::-;24371:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24182:307;;;;:::o;15333:703::-;15389:13;15615:1;15606:5;:10;15602:51;;;15632:10;;;;;;;;;;;;;;;;;;;;;15602:51;15662:12;15677:5;15662:20;;15692:14;15716:75;15731:1;15723:4;:9;15716:75;;15748:8;;;;;:::i;:::-;;;;15778:2;15770:10;;;;;:::i;:::-;;;15716:75;;;15800:19;15832:6;15822:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15800:39;;15849:150;15865:1;15856:5;:10;15849:150;;15892:1;15882:11;;;;;:::i;:::-;;;15958:2;15950:5;:10;;;;:::i;:::-;15937:2;:24;;;;:::i;:::-;15924:39;;15907:6;15914;15907:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15986:2;15977:11;;;;;:::i;:::-;;;15849:150;;;16022:6;16008:21;;;;;15333:703;;;;:::o;22135:162::-;22232:4;22255:18;:25;22274:5;22255:25;;;;;;;;;;;;;;;:35;22281:8;22255:35;;;;;;;;;;;;;;;;;;;;;;;;;22248:42;;22135:162;;;;:::o;30705:122::-;;;;:::o;29367:782::-;29517:4;29537:15;:2;:13;;;:15::i;:::-;29533:610;;;29588:2;29572:36;;;29609:12;:10;:12::i;:::-;29623:4;29629:7;29638:5;29572:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29568:523;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29832:1;29815:6;:13;:18;29811:266;;;29857:60;;;;;;;;;;:::i;:::-;;;;;;;;29811:266;30029:6;30023:13;30014:6;30010:2;30006:15;29999:38;29568:523;29704:45;;;29694:55;;;:6;:55;;;;29687:62;;;;;29533:610;30128:4;30121:11;;29367:782;;;;;;;:::o;7455:377::-;7515:4;7718:12;7783:7;7771:20;7763:28;;7824:1;7817:4;:8;7810:15;;;7455:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:2:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2340:80;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:2;;;2540:79;;:::i;:::-;2502:2;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2492:263;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:2;;;2892:79;;:::i;:::-;2854:2;3012:1;3037:53;3082:7;3073:6;3062:9;3058:22;3037:53;:::i;:::-;3027:63;;2983:117;3139:2;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3110:118;2844:391;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:2;;;3389:79;;:::i;:::-;3351:2;3509:1;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3480:117;3636:2;3662:53;3707:7;3698:6;3687:9;3683:22;3662:53;:::i;:::-;3652:63;;3607:118;3764:2;3790:53;3835:7;3826:6;3815:9;3811:22;3790:53;:::i;:::-;3780:63;;3735:118;3341:519;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:2;;;4041:79;;:::i;:::-;4002:2;4161:1;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4132:117;4288:2;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4259:118;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4572:2;4561:9;4557:18;4544:32;4603:18;4595:6;4592:30;4589:2;;;4625:79;;:::i;:::-;4589:2;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3992:817;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:2;;;4943:79;;:::i;:::-;4905:2;5063:1;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5034:117;5190:2;5216:50;5258:7;5249:6;5238:9;5234:22;5216:50;:::i;:::-;5206:60;;5161:115;4895:388;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:2;;;5420:79;;:::i;:::-;5382:2;5540:1;5565:53;5610:7;5601:6;5590:9;5586:22;5565:53;:::i;:::-;5555:63;;5511:117;5667:2;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5638:118;5372:391;;;;;:::o;5769:323::-;5825:6;5874:2;5862:9;5853:7;5849:23;5845:32;5842:2;;;5880:79;;:::i;:::-;5842:2;6000:1;6025:50;6067:7;6058:6;6047:9;6043:22;6025:50;:::i;:::-;6015:60;;5971:114;5832:260;;;;:::o;6098:327::-;6156:6;6205:2;6193:9;6184:7;6180:23;6176:32;6173:2;;;6211:79;;:::i;:::-;6173:2;6331:1;6356:52;6400:7;6391:6;6380:9;6376:22;6356:52;:::i;:::-;6346:62;;6302:116;6163:262;;;;:::o;6431:349::-;6500:6;6549:2;6537:9;6528:7;6524:23;6520:32;6517:2;;;6555:79;;:::i;:::-;6517:2;6675:1;6700:63;6755:7;6746:6;6735:9;6731:22;6700:63;:::i;:::-;6690:73;;6646:127;6507:273;;;;:::o;6786:509::-;6855:6;6904:2;6892:9;6883:7;6879:23;6875:32;6872:2;;;6910:79;;:::i;:::-;6872:2;7058:1;7047:9;7043:17;7030:31;7088:18;7080:6;7077:30;7074:2;;;7110:79;;:::i;:::-;7074:2;7215:63;7270:7;7261:6;7250:9;7246:22;7215:63;:::i;:::-;7205:73;;7001:287;6862:433;;;;:::o;7301:329::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:2;;;7415:79;;:::i;:::-;7377:2;7535:1;7560:53;7605:7;7596:6;7585:9;7581:22;7560:53;:::i;:::-;7550:63;;7506:117;7367:263;;;;:::o;7636:351::-;7706:6;7755:2;7743:9;7734:7;7730:23;7726:32;7723:2;;;7761:79;;:::i;:::-;7723:2;7881:1;7906:64;7962:7;7953:6;7942:9;7938:22;7906:64;:::i;:::-;7896:74;;7852:128;7713:274;;;;:::o;7993:179::-;8062:10;8083:46;8125:3;8117:6;8083:46;:::i;:::-;8161:4;8156:3;8152:14;8138:28;;8073:99;;;;:::o;8178:118::-;8265:24;8283:5;8265:24;:::i;:::-;8260:3;8253:37;8243:53;;:::o;8332:732::-;8451:3;8480:54;8528:5;8480:54;:::i;:::-;8550:86;8629:6;8624:3;8550:86;:::i;:::-;8543:93;;8660:56;8710:5;8660:56;:::i;:::-;8739:7;8770:1;8755:284;8780:6;8777:1;8774:13;8755:284;;;8856:6;8850:13;8883:63;8942:3;8927:13;8883:63;:::i;:::-;8876:70;;8969:60;9022:6;8969:60;:::i;:::-;8959:70;;8815:224;8802:1;8799;8795:9;8790:14;;8755:284;;;8759:14;9055:3;9048:10;;8456:608;;;;;;;:::o;9070:109::-;9151:21;9166:5;9151:21;:::i;:::-;9146:3;9139:34;9129:50;;:::o;9185:360::-;9271:3;9299:38;9331:5;9299:38;:::i;:::-;9353:70;9416:6;9411:3;9353:70;:::i;:::-;9346:77;;9432:52;9477:6;9472:3;9465:4;9458:5;9454:16;9432:52;:::i;:::-;9509:29;9531:6;9509:29;:::i;:::-;9504:3;9500:39;9493:46;;9275:270;;;;;:::o;9551:364::-;9639:3;9667:39;9700:5;9667:39;:::i;:::-;9722:71;9786:6;9781:3;9722:71;:::i;:::-;9715:78;;9802:52;9847:6;9842:3;9835:4;9828:5;9824:16;9802:52;:::i;:::-;9879:29;9901:6;9879:29;:::i;:::-;9874:3;9870:39;9863:46;;9643:272;;;;;:::o;9921:377::-;10027:3;10055:39;10088:5;10055:39;:::i;:::-;10110:89;10192:6;10187:3;10110:89;:::i;:::-;10103:96;;10208:52;10253:6;10248:3;10241:4;10234:5;10230:16;10208:52;:::i;:::-;10285:6;10280:3;10276:16;10269:23;;10031:267;;;;;:::o;10328:845::-;10431:3;10468:5;10462:12;10497:36;10523:9;10497:36;:::i;:::-;10549:89;10631:6;10626:3;10549:89;:::i;:::-;10542:96;;10669:1;10658:9;10654:17;10685:1;10680:137;;;;10831:1;10826:341;;;;10647:520;;10680:137;10764:4;10760:9;10749;10745:25;10740:3;10733:38;10800:6;10795:3;10791:16;10784:23;;10680:137;;10826:341;10893:38;10925:5;10893:38;:::i;:::-;10953:1;10967:154;10981:6;10978:1;10975:13;10967:154;;;11055:7;11049:14;11045:1;11040:3;11036:11;11029:35;11105:1;11096:7;11092:15;11081:26;;11003:4;11000:1;10996:12;10991:17;;10967:154;;;11150:6;11145:3;11141:16;11134:23;;10833:334;;10647:520;;10435:738;;;;;;:::o;11179:366::-;11321:3;11342:67;11406:2;11401:3;11342:67;:::i;:::-;11335:74;;11418:93;11507:3;11418:93;:::i;:::-;11536:2;11531:3;11527:12;11520:19;;11325:220;;;:::o;11551:366::-;11693:3;11714:67;11778:2;11773:3;11714:67;:::i;:::-;11707:74;;11790:93;11879:3;11790:93;:::i;:::-;11908:2;11903:3;11899:12;11892:19;;11697:220;;;:::o;11923:366::-;12065:3;12086:67;12150:2;12145:3;12086:67;:::i;:::-;12079:74;;12162:93;12251:3;12162:93;:::i;:::-;12280:2;12275:3;12271:12;12264:19;;12069:220;;;:::o;12295:366::-;12437:3;12458:67;12522:2;12517:3;12458:67;:::i;:::-;12451:74;;12534:93;12623:3;12534:93;:::i;:::-;12652:2;12647:3;12643:12;12636:19;;12441:220;;;:::o;12667:366::-;12809:3;12830:67;12894:2;12889:3;12830:67;:::i;:::-;12823:74;;12906:93;12995:3;12906:93;:::i;:::-;13024:2;13019:3;13015:12;13008:19;;12813:220;;;:::o;13039:366::-;13181:3;13202:67;13266:2;13261:3;13202:67;:::i;:::-;13195:74;;13278:93;13367:3;13278:93;:::i;:::-;13396:2;13391:3;13387:12;13380:19;;13185:220;;;:::o;13411:366::-;13553:3;13574:67;13638:2;13633:3;13574:67;:::i;:::-;13567:74;;13650:93;13739:3;13650:93;:::i;:::-;13768:2;13763:3;13759:12;13752:19;;13557:220;;;:::o;13783:366::-;13925:3;13946:67;14010:2;14005:3;13946:67;:::i;:::-;13939:74;;14022:93;14111:3;14022:93;:::i;:::-;14140:2;14135:3;14131:12;14124:19;;13929:220;;;:::o;14155:366::-;14297:3;14318:67;14382:2;14377:3;14318:67;:::i;:::-;14311:74;;14394:93;14483:3;14394:93;:::i;:::-;14512:2;14507:3;14503:12;14496:19;;14301:220;;;:::o;14527:366::-;14669:3;14690:67;14754:2;14749:3;14690:67;:::i;:::-;14683:74;;14766:93;14855:3;14766:93;:::i;:::-;14884:2;14879:3;14875:12;14868:19;;14673:220;;;:::o;14899:366::-;15041:3;15062:67;15126:2;15121:3;15062:67;:::i;:::-;15055:74;;15138:93;15227:3;15138:93;:::i;:::-;15256:2;15251:3;15247:12;15240:19;;15045:220;;;:::o;15271:366::-;15413:3;15434:67;15498:2;15493:3;15434:67;:::i;:::-;15427:74;;15510:93;15599:3;15510:93;:::i;:::-;15628:2;15623:3;15619:12;15612:19;;15417:220;;;:::o;15643:366::-;15785:3;15806:67;15870:2;15865:3;15806:67;:::i;:::-;15799:74;;15882:93;15971:3;15882:93;:::i;:::-;16000:2;15995:3;15991:12;15984:19;;15789:220;;;:::o;16015:366::-;16157:3;16178:67;16242:2;16237:3;16178:67;:::i;:::-;16171:74;;16254:93;16343:3;16254:93;:::i;:::-;16372:2;16367:3;16363:12;16356:19;;16161:220;;;:::o;16387:366::-;16529:3;16550:67;16614:2;16609:3;16550:67;:::i;:::-;16543:74;;16626:93;16715:3;16626:93;:::i;:::-;16744:2;16739:3;16735:12;16728:19;;16533:220;;;:::o;16759:366::-;16901:3;16922:67;16986:2;16981:3;16922:67;:::i;:::-;16915:74;;16998:93;17087:3;16998:93;:::i;:::-;17116:2;17111:3;17107:12;17100:19;;16905:220;;;:::o;17131:400::-;17291:3;17312:84;17394:1;17389:3;17312:84;:::i;:::-;17305:91;;17405:93;17494:3;17405:93;:::i;:::-;17523:1;17518:3;17514:11;17507:18;;17295:236;;;:::o;17537:366::-;17679:3;17700:67;17764:2;17759:3;17700:67;:::i;:::-;17693:74;;17776:93;17865:3;17776:93;:::i;:::-;17894:2;17889:3;17885:12;17878:19;;17683:220;;;:::o;17909:366::-;18051:3;18072:67;18136:2;18131:3;18072:67;:::i;:::-;18065:74;;18148:93;18237:3;18148:93;:::i;:::-;18266:2;18261:3;18257:12;18250:19;;18055:220;;;:::o;18281:366::-;18423:3;18444:67;18508:2;18503:3;18444:67;:::i;:::-;18437:74;;18520:93;18609:3;18520:93;:::i;:::-;18638:2;18633:3;18629:12;18622:19;;18427:220;;;:::o;18653:366::-;18795:3;18816:67;18880:2;18875:3;18816:67;:::i;:::-;18809:74;;18892:93;18981:3;18892:93;:::i;:::-;19010:2;19005:3;19001:12;18994:19;;18799:220;;;:::o;19025:366::-;19167:3;19188:67;19252:2;19247:3;19188:67;:::i;:::-;19181:74;;19264:93;19353:3;19264:93;:::i;:::-;19382:2;19377:3;19373:12;19366:19;;19171:220;;;:::o;19397:366::-;19539:3;19560:67;19624:2;19619:3;19560:67;:::i;:::-;19553:74;;19636:93;19725:3;19636:93;:::i;:::-;19754:2;19749:3;19745:12;19738:19;;19543:220;;;:::o;19769:366::-;19911:3;19932:67;19996:2;19991:3;19932:67;:::i;:::-;19925:74;;20008:93;20097:3;20008:93;:::i;:::-;20126:2;20121:3;20117:12;20110:19;;19915:220;;;:::o;20141:108::-;20218:24;20236:5;20218:24;:::i;:::-;20213:3;20206:37;20196:53;;:::o;20255:118::-;20342:24;20360:5;20342:24;:::i;:::-;20337:3;20330:37;20320:53;;:::o;20379:695::-;20657:3;20679:92;20767:3;20758:6;20679:92;:::i;:::-;20672:99;;20788:95;20879:3;20870:6;20788:95;:::i;:::-;20781:102;;20900:148;21044:3;20900:148;:::i;:::-;20893:155;;21065:3;21058:10;;20661:413;;;;;:::o;21080:222::-;21173:4;21211:2;21200:9;21196:18;21188:26;;21224:71;21292:1;21281:9;21277:17;21268:6;21224:71;:::i;:::-;21178:124;;;;:::o;21308:640::-;21503:4;21541:3;21530:9;21526:19;21518:27;;21555:71;21623:1;21612:9;21608:17;21599:6;21555:71;:::i;:::-;21636:72;21704:2;21693:9;21689:18;21680:6;21636:72;:::i;:::-;21718;21786:2;21775:9;21771:18;21762:6;21718:72;:::i;:::-;21837:9;21831:4;21827:20;21822:2;21811:9;21807:18;21800:48;21865:76;21936:4;21927:6;21865:76;:::i;:::-;21857:84;;21508:440;;;;;;;:::o;21954:373::-;22097:4;22135:2;22124:9;22120:18;22112:26;;22184:9;22178:4;22174:20;22170:1;22159:9;22155:17;22148:47;22212:108;22315:4;22306:6;22212:108;:::i;:::-;22204:116;;22102:225;;;;:::o;22333:210::-;22420:4;22458:2;22447:9;22443:18;22435:26;;22471:65;22533:1;22522:9;22518:17;22509:6;22471:65;:::i;:::-;22425:118;;;;:::o;22549:313::-;22662:4;22700:2;22689:9;22685:18;22677:26;;22749:9;22743:4;22739:20;22735:1;22724:9;22720:17;22713:47;22777:78;22850:4;22841:6;22777:78;:::i;:::-;22769:86;;22667:195;;;;:::o;22868:419::-;23034:4;23072:2;23061:9;23057:18;23049:26;;23121:9;23115:4;23111:20;23107:1;23096:9;23092:17;23085:47;23149:131;23275:4;23149:131;:::i;:::-;23141:139;;23039:248;;;:::o;23293:419::-;23459:4;23497:2;23486:9;23482:18;23474:26;;23546:9;23540:4;23536:20;23532:1;23521:9;23517:17;23510:47;23574:131;23700:4;23574:131;:::i;:::-;23566:139;;23464:248;;;:::o;23718:419::-;23884:4;23922:2;23911:9;23907:18;23899:26;;23971:9;23965:4;23961:20;23957:1;23946:9;23942:17;23935:47;23999:131;24125:4;23999:131;:::i;:::-;23991:139;;23889:248;;;:::o;24143:419::-;24309:4;24347:2;24336:9;24332:18;24324:26;;24396:9;24390:4;24386:20;24382:1;24371:9;24367:17;24360:47;24424:131;24550:4;24424:131;:::i;:::-;24416:139;;24314:248;;;:::o;24568:419::-;24734:4;24772:2;24761:9;24757:18;24749:26;;24821:9;24815:4;24811:20;24807:1;24796:9;24792:17;24785:47;24849:131;24975:4;24849:131;:::i;:::-;24841:139;;24739:248;;;:::o;24993:419::-;25159:4;25197:2;25186:9;25182:18;25174:26;;25246:9;25240:4;25236:20;25232:1;25221:9;25217:17;25210:47;25274:131;25400:4;25274:131;:::i;:::-;25266:139;;25164:248;;;:::o;25418:419::-;25584:4;25622:2;25611:9;25607:18;25599:26;;25671:9;25665:4;25661:20;25657:1;25646:9;25642:17;25635:47;25699:131;25825:4;25699:131;:::i;:::-;25691:139;;25589:248;;;:::o;25843:419::-;26009:4;26047:2;26036:9;26032:18;26024:26;;26096:9;26090:4;26086:20;26082:1;26071:9;26067:17;26060:47;26124:131;26250:4;26124:131;:::i;:::-;26116:139;;26014:248;;;:::o;26268:419::-;26434:4;26472:2;26461:9;26457:18;26449:26;;26521:9;26515:4;26511:20;26507:1;26496:9;26492:17;26485:47;26549:131;26675:4;26549:131;:::i;:::-;26541:139;;26439:248;;;:::o;26693:419::-;26859:4;26897:2;26886:9;26882:18;26874:26;;26946:9;26940:4;26936:20;26932:1;26921:9;26917:17;26910:47;26974:131;27100:4;26974:131;:::i;:::-;26966:139;;26864:248;;;:::o;27118:419::-;27284:4;27322:2;27311:9;27307:18;27299:26;;27371:9;27365:4;27361:20;27357:1;27346:9;27342:17;27335:47;27399:131;27525:4;27399:131;:::i;:::-;27391:139;;27289:248;;;:::o;27543:419::-;27709:4;27747:2;27736:9;27732:18;27724:26;;27796:9;27790:4;27786:20;27782:1;27771:9;27767:17;27760:47;27824:131;27950:4;27824:131;:::i;:::-;27816:139;;27714:248;;;:::o;27968:419::-;28134:4;28172:2;28161:9;28157:18;28149:26;;28221:9;28215:4;28211:20;28207:1;28196:9;28192:17;28185:47;28249:131;28375:4;28249:131;:::i;:::-;28241:139;;28139:248;;;:::o;28393:419::-;28559:4;28597:2;28586:9;28582:18;28574:26;;28646:9;28640:4;28636:20;28632:1;28621:9;28617:17;28610:47;28674:131;28800:4;28674:131;:::i;:::-;28666:139;;28564:248;;;:::o;28818:419::-;28984:4;29022:2;29011:9;29007:18;28999:26;;29071:9;29065:4;29061:20;29057:1;29046:9;29042:17;29035:47;29099:131;29225:4;29099:131;:::i;:::-;29091:139;;28989:248;;;:::o;29243:419::-;29409:4;29447:2;29436:9;29432:18;29424:26;;29496:9;29490:4;29486:20;29482:1;29471:9;29467:17;29460:47;29524:131;29650:4;29524:131;:::i;:::-;29516:139;;29414:248;;;:::o;29668:419::-;29834:4;29872:2;29861:9;29857:18;29849:26;;29921:9;29915:4;29911:20;29907:1;29896:9;29892:17;29885:47;29949:131;30075:4;29949:131;:::i;:::-;29941:139;;29839:248;;;:::o;30093:419::-;30259:4;30297:2;30286:9;30282:18;30274:26;;30346:9;30340:4;30336:20;30332:1;30321:9;30317:17;30310:47;30374:131;30500:4;30374:131;:::i;:::-;30366:139;;30264:248;;;:::o;30518:419::-;30684:4;30722:2;30711:9;30707:18;30699:26;;30771:9;30765:4;30761:20;30757:1;30746:9;30742:17;30735:47;30799:131;30925:4;30799:131;:::i;:::-;30791:139;;30689:248;;;:::o;30943:419::-;31109:4;31147:2;31136:9;31132:18;31124:26;;31196:9;31190:4;31186:20;31182:1;31171:9;31167:17;31160:47;31224:131;31350:4;31224:131;:::i;:::-;31216:139;;31114:248;;;:::o;31368:419::-;31534:4;31572:2;31561:9;31557:18;31549:26;;31621:9;31615:4;31611:20;31607:1;31596:9;31592:17;31585:47;31649:131;31775:4;31649:131;:::i;:::-;31641:139;;31539:248;;;:::o;31793:419::-;31959:4;31997:2;31986:9;31982:18;31974:26;;32046:9;32040:4;32036:20;32032:1;32021:9;32017:17;32010:47;32074:131;32200:4;32074:131;:::i;:::-;32066:139;;31964:248;;;:::o;32218:419::-;32384:4;32422:2;32411:9;32407:18;32399:26;;32471:9;32465:4;32461:20;32457:1;32446:9;32442:17;32435:47;32499:131;32625:4;32499:131;:::i;:::-;32491:139;;32389:248;;;:::o;32643:222::-;32736:4;32774:2;32763:9;32759:18;32751:26;;32787:71;32855:1;32844:9;32840:17;32831:6;32787:71;:::i;:::-;32741:124;;;;:::o;32871:129::-;32905:6;32932:20;;:::i;:::-;32922:30;;32961:33;32989:4;32981:6;32961:33;:::i;:::-;32912:88;;;:::o;33006:75::-;33039:6;33072:2;33066:9;33056:19;;33046:35;:::o;33087:307::-;33148:4;33238:18;33230:6;33227:30;33224:2;;;33260:18;;:::i;:::-;33224:2;33298:29;33320:6;33298:29;:::i;:::-;33290:37;;33382:4;33376;33372:15;33364:23;;33153:241;;;:::o;33400:308::-;33462:4;33552:18;33544:6;33541:30;33538:2;;;33574:18;;:::i;:::-;33538:2;33612:29;33634:6;33612:29;:::i;:::-;33604:37;;33696:4;33690;33686:15;33678:23;;33467:241;;;:::o;33714:132::-;33781:4;33804:3;33796:11;;33834:4;33829:3;33825:14;33817:22;;33786:60;;;:::o;33852:141::-;33901:4;33924:3;33916:11;;33947:3;33944:1;33937:14;33981:4;33978:1;33968:18;33960:26;;33906:87;;;:::o;33999:114::-;34066:6;34100:5;34094:12;34084:22;;34073:40;;;:::o;34119:98::-;34170:6;34204:5;34198:12;34188:22;;34177:40;;;:::o;34223:99::-;34275:6;34309:5;34303:12;34293:22;;34282:40;;;:::o;34328:113::-;34398:4;34430;34425:3;34421:14;34413:22;;34403:38;;;:::o;34447:184::-;34546:11;34580:6;34575:3;34568:19;34620:4;34615:3;34611:14;34596:29;;34558:73;;;;:::o;34637:168::-;34720:11;34754:6;34749:3;34742:19;34794:4;34789:3;34785:14;34770:29;;34732:73;;;;:::o;34811:169::-;34895:11;34929:6;34924:3;34917:19;34969:4;34964:3;34960:14;34945:29;;34907:73;;;;:::o;34986:148::-;35088:11;35125:3;35110:18;;35100:34;;;;:::o;35140:305::-;35180:3;35199:20;35217:1;35199:20;:::i;:::-;35194:25;;35233:20;35251:1;35233:20;:::i;:::-;35228:25;;35387:1;35319:66;35315:74;35312:1;35309:81;35306:2;;;35393:18;;:::i;:::-;35306:2;35437:1;35434;35430:9;35423:16;;35184:261;;;;:::o;35451:185::-;35491:1;35508:20;35526:1;35508:20;:::i;:::-;35503:25;;35542:20;35560:1;35542:20;:::i;:::-;35537:25;;35581:1;35571:2;;35586:18;;:::i;:::-;35571:2;35628:1;35625;35621:9;35616:14;;35493:143;;;;:::o;35642:348::-;35682:7;35705:20;35723:1;35705:20;:::i;:::-;35700:25;;35739:20;35757:1;35739:20;:::i;:::-;35734:25;;35927:1;35859:66;35855:74;35852:1;35849:81;35844:1;35837:9;35830:17;35826:105;35823:2;;;35934:18;;:::i;:::-;35823:2;35982:1;35979;35975:9;35964:20;;35690:300;;;;:::o;35996:191::-;36036:4;36056:20;36074:1;36056:20;:::i;:::-;36051:25;;36090:20;36108:1;36090:20;:::i;:::-;36085:25;;36129:1;36126;36123:8;36120:2;;;36134:18;;:::i;:::-;36120:2;36179:1;36176;36172:9;36164:17;;36041:146;;;;:::o;36193:96::-;36230:7;36259:24;36277:5;36259:24;:::i;:::-;36248:35;;36238:51;;;:::o;36295:90::-;36329:7;36372:5;36365:13;36358:21;36347:32;;36337:48;;;:::o;36391:149::-;36427:7;36467:66;36460:5;36456:78;36445:89;;36435:105;;;:::o;36546:126::-;36583:7;36623:42;36616:5;36612:54;36601:65;;36591:81;;;:::o;36678:77::-;36715:7;36744:5;36733:16;;36723:32;;;:::o;36761:154::-;36845:6;36840:3;36835;36822:30;36907:1;36898:6;36893:3;36889:16;36882:27;36812:103;;;:::o;36921:307::-;36989:1;36999:113;37013:6;37010:1;37007:13;36999:113;;;37098:1;37093:3;37089:11;37083:18;37079:1;37074:3;37070:11;37063:39;37035:2;37032:1;37028:10;37023:15;;36999:113;;;37130:6;37127:1;37124:13;37121:2;;;37210:1;37201:6;37196:3;37192:16;37185:27;37121:2;36970:258;;;;:::o;37234:320::-;37278:6;37315:1;37309:4;37305:12;37295:22;;37362:1;37356:4;37352:12;37383:18;37373:2;;37439:4;37431:6;37427:17;37417:27;;37373:2;37501;37493:6;37490:14;37470:18;37467:38;37464:2;;;37520:18;;:::i;:::-;37464:2;37285:269;;;;:::o;37560:281::-;37643:27;37665:4;37643:27;:::i;:::-;37635:6;37631:40;37773:6;37761:10;37758:22;37737:18;37725:10;37722:34;37719:62;37716:2;;;37784:18;;:::i;:::-;37716:2;37824:10;37820:2;37813:22;37603:238;;;:::o;37847:233::-;37886:3;37909:24;37927:5;37909:24;:::i;:::-;37900:33;;37955:66;37948:5;37945:77;37942:2;;;38025:18;;:::i;:::-;37942:2;38072:1;38065:5;38061:13;38054:20;;37890:190;;;:::o;38086:176::-;38118:1;38135:20;38153:1;38135:20;:::i;:::-;38130:25;;38169:20;38187:1;38169:20;:::i;:::-;38164:25;;38208:1;38198:2;;38213:18;;:::i;:::-;38198:2;38254:1;38251;38247:9;38242:14;;38120:142;;;;:::o;38268:180::-;38316:77;38313:1;38306:88;38413:4;38410:1;38403:15;38437:4;38434:1;38427:15;38454:180;38502:77;38499:1;38492:88;38599:4;38596:1;38589:15;38623:4;38620:1;38613:15;38640:180;38688:77;38685:1;38678:88;38785:4;38782:1;38775:15;38809:4;38806:1;38799:15;38826:180;38874:77;38871:1;38864:88;38971:4;38968:1;38961:15;38995:4;38992:1;38985:15;39012:180;39060:77;39057:1;39050:88;39157:4;39154:1;39147:15;39181:4;39178:1;39171:15;39198:117;39307:1;39304;39297:12;39321:117;39430:1;39427;39420:12;39444:117;39553:1;39550;39543:12;39567:117;39676:1;39673;39666:12;39690:102;39731:6;39782:2;39778:7;39773:2;39766:5;39762:14;39758:28;39748:38;;39738:54;;;:::o;39798:176::-;39938:28;39934:1;39926:6;39922:14;39915:52;39904:70;:::o;39980:237::-;40120:34;40116:1;40108:6;40104:14;40097:58;40189:20;40184:2;40176:6;40172:15;40165:45;40086:131;:::o;40223:225::-;40363:34;40359:1;40351:6;40347:14;40340:58;40432:8;40427:2;40419:6;40415:15;40408:33;40329:119;:::o;40454:178::-;40594:30;40590:1;40582:6;40578:14;40571:54;40560:72;:::o;40638:172::-;40778:24;40774:1;40766:6;40762:14;40755:48;40744:66;:::o;40816:223::-;40956:34;40952:1;40944:6;40940:14;40933:58;41025:6;41020:2;41012:6;41008:15;41001:31;40922:117;:::o;41045:175::-;41185:27;41181:1;41173:6;41169:14;41162:51;41151:69;:::o;41226:231::-;41366:34;41362:1;41354:6;41350:14;41343:58;41435:14;41430:2;41422:6;41418:15;41411:39;41332:125;:::o;41463:225::-;41603:34;41599:1;41591:6;41587:14;41580:58;41672:8;41667:2;41659:6;41655:15;41648:33;41569:119;:::o;41694:243::-;41834:34;41830:1;41822:6;41818:14;41811:58;41903:26;41898:2;41890:6;41886:15;41879:51;41800:137;:::o;41943:229::-;42083:34;42079:1;42071:6;42067:14;42060:58;42152:12;42147:2;42139:6;42135:15;42128:37;42049:123;:::o;42178:182::-;42318:34;42314:1;42306:6;42302:14;42295:58;42284:76;:::o;42366:228::-;42506:34;42502:1;42494:6;42490:14;42483:58;42575:11;42570:2;42562:6;42558:15;42551:36;42472:122;:::o;42600:235::-;42740:34;42736:1;42728:6;42724:14;42717:58;42809:18;42804:2;42796:6;42792:15;42785:43;42706:129;:::o;42841:182::-;42981:34;42977:1;42969:6;42965:14;42958:58;42947:76;:::o;43029:231::-;43169:34;43165:1;43157:6;43153:14;43146:58;43238:14;43233:2;43225:6;43221:15;43214:39;43135:125;:::o;43266:155::-;43406:7;43402:1;43394:6;43390:14;43383:31;43372:49;:::o;43427:182::-;43567:34;43563:1;43555:6;43551:14;43544:58;43533:76;:::o;43615:228::-;43755:34;43751:1;43743:6;43739:14;43732:58;43824:11;43819:2;43811:6;43807:15;43800:36;43721:122;:::o;43849:220::-;43989:34;43985:1;43977:6;43973:14;43966:58;44058:3;44053:2;44045:6;44041:15;44034:28;43955:114;:::o;44075:239::-;44215:34;44211:1;44203:6;44199:14;44192:58;44284:22;44279:2;44271:6;44267:15;44260:47;44181:133;:::o;44320:236::-;44460:34;44456:1;44448:6;44444:14;44437:58;44529:19;44524:2;44516:6;44512:15;44505:44;44426:130;:::o;44562:175::-;44702:27;44698:1;44690:6;44686:14;44679:51;44668:69;:::o;44743:230::-;44883:34;44879:1;44871:6;44867:14;44860:58;44952:13;44947:2;44939:6;44935:15;44928:38;44849:124;:::o;44979:122::-;45052:24;45070:5;45052:24;:::i;:::-;45045:5;45042:35;45032:2;;45091:1;45088;45081:12;45032:2;45022:79;:::o;45107:116::-;45177:21;45192:5;45177:21;:::i;:::-;45170:5;45167:32;45157:2;;45213:1;45210;45203:12;45157:2;45147:76;:::o;45229:120::-;45301:23;45318:5;45301:23;:::i;:::-;45294:5;45291:34;45281:2;;45339:1;45336;45329:12;45281:2;45271:78;:::o;45355:122::-;45428:24;45446:5;45428:24;:::i;:::-;45421:5;45418:35;45408:2;;45467:1;45464;45457:12;45408:2;45398:79;:::o

Swarm Source

ipfs://a8e215aeacb425e4ec1a4aac473f1b6765cade0187ad7ff66431bd80b4ea13cb
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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