ETH Price: $2,972.09 (+1.39%)
Gas: 1 Gwei

Token

Telepath (TLPTH)
 

Overview

Max Total Supply

105 TLPTH

Holders

92

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
slitney.eth
Balance
1 TLPTH
0x7C3db7eeE60FAD212D6BBcd256FAC8782a21b5fF
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Art by GOODNEWSFORBADGUYS in various edition sizes. Made available for free to DROPICALL holders.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
telepath

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-22
*/

// SPDX-License-Identifier: MIT

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



// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**

__/\\\\\\\\\\\\\\\_________________/\\\\\\_______________________________________________________________/\\\_________        
 _\///////\\\/////_________________\////\\\______________________________________________________________\/\\\_________       
  _______\/\\\_________________________\/\\\_____________________/\\\\\\\\\_____________________/\\\______\/\\\_________      
   _______\/\\\___________/\\\\\\\\_____\/\\\________/\\\\\\\\___/\\\/////\\\__/\\\\\\\\\_____/\\\\\\\\\\\_\/\\\_________     
    _______\/\\\_________/\\\/////\\\____\/\\\______/\\\/////\\\_\/\\\\\\\\\\__\////////\\\___\////\\\////__\/\\\\\\\\\\__    
     _______\/\\\________/\\\\\\\\\\\_____\/\\\_____/\\\\\\\\\\\__\/\\\//////_____/\\\\\\\\\\_____\/\\\______\/\\\/////\\\_   
      _______\/\\\_______\//\\///////______\/\\\____\//\\///////___\/\\\__________/\\\/////\\\_____\/\\\_/\\__\/\\\___\/\\\_  
       _______\/\\\________\//\\\\\\\\\\__/\\\\\\\\\__\//\\\\\\\\\\_\/\\\_________\//\\\\\\\\/\\____\//\\\\\___\/\\\___\/\\\_ 
        _______\///__________\//////////__\/////////____\//////////__\///___________\////////\//______\/////____\///____\///__

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

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


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

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


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: contracts/telepath.sol




pragma solidity >=0.7.0 <0.9.0;




contract telepath is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri;
  
  uint256 public maxSupply = 170;
  uint256 public maxMintAmountPerTx = 1;


  bool public paused = true;
  bool public revealed = false;

  address public DropicallAddress;

  constructor() ERC721("Telepath", "TLPTH") {
    setHiddenMetadataUri("ipfs://Qmb9jnN7RqcNpyY4pvWnFRDxfQL74EkBitEeSe9nYdTXue/hidden.json");
    setDropicallAddress(0x8b82D758a95c84Bc5476244f91e9AC6478d2a8B0);
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }

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

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    IERC721 token = IERC721(DropicallAddress);
    uint256 ownerAmount = token.balanceOf(msg.sender);
    require(ownerAmount >= 1, "You don't have any Dropicalls.");

    _mintLoop(msg.sender, _mintAmount);
  }
  
  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }

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

function setDropicallAddress(address _newAddress) public onlyOwner {
    DropicallAddress = _newAddress;
  }

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }


  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }


  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function withdraw() public onlyOwner {
    
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DropicallAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setDropicallAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600890805190602001906200002b92919062000453565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200007992919062000453565b5060aa600b556001600c556001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff021916908315150217905550348015620000c757600080fd5b506040518060400160405280600881526020017f54656c65706174680000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f544c50544800000000000000000000000000000000000000000000000000000081525081600090805190602001906200014c92919062000453565b5080600190805190602001906200016592919062000453565b505050620001886200017c620001dd60201b60201c565b620001e560201b60201c565b620001b2604051806080016040528060418152602001620048e260419139620002ab60201b60201c565b620001d7738b82d758a95c84bc5476244f91e9ac6478d2a8b06200035660201b60201c565b620005eb565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002bb620001dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e16200042960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200033a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000331906200052a565b60405180910390fd5b80600a90805190602001906200035292919062000453565b5050565b62000366620001dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200038c6200042960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003dc906200052a565b60405180910390fd5b80600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000461906200055d565b90600052602060002090601f016020900481019282620004855760008555620004d1565b82601f10620004a057805160ff1916838001178555620004d1565b82800160010185558215620004d1579182015b82811115620004d0578251825591602001919060010190620004b3565b5b509050620004e09190620004e4565b5090565b5b80821115620004ff576000816000905550600101620004e5565b5090565b6000620005126020836200054c565b91506200051f82620005c2565b602082019050919050565b60006020820190508181036000830152620005458162000503565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200057657607f821691505b602082108114156200058d576200058c62000593565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6142e780620005fb6000396000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063b071401b116100a0578063d5abeb011161006f578063d5abeb0114610768578063e0a8085314610793578063e985e9c5146107bc578063efbd73f4146107f9578063f2fde38b146108225761020f565b8063b071401b146106ae578063b88d4fde146106d7578063c87b56dd14610700578063cb61ae171461073d5761020f565b806394354fd0116100e757806394354fd0146105e857806395d89b4114610613578063a0712d681461063e578063a22cb4651461065a578063a45ba8e7146106835761020f565b806370a0823114610540578063715018a61461057d5780637ec4a659146105945780638da5cb5b146105bd5761020f565b80633ccfd60b1161019b578063518302271161016a57806351830227146104575780635503a0e8146104825780635c975abb146104ad57806362b99ad4146104d85780636352211e146105035761020f565b80633ccfd60b146103b157806342842e0e146103c8578063438b6300146103f15780634fdd43cb1461042e5761020f565b806316ba10e0116101e257806316ba10e0146102e257806316c38b3c1461030b57806318160ddd1461033457806323b872dd1461035f5780632f0856e9146103885761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612f3e565b61084b565b60405161024891906135fd565b60405180910390f35b34801561025d57600080fd5b5061026661092d565b6040516102739190613618565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612fe1565b6109bf565b6040516102b09190613574565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190612ed1565b610a44565b005b3480156102ee57600080fd5b5061030960048036038101906103049190612f98565b610b5c565b005b34801561031757600080fd5b50610332600480360381019061032d9190612f11565b610bf2565b005b34801561034057600080fd5b50610349610c8b565b60405161035691906138ba565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190612dbb565b610c9c565b005b34801561039457600080fd5b506103af60048036038101906103aa9190612d4e565b610cfc565b005b3480156103bd57600080fd5b506103c6610dbc565b005b3480156103d457600080fd5b506103ef60048036038101906103ea9190612dbb565b610eb8565b005b3480156103fd57600080fd5b5061041860048036038101906104139190612d4e565b610ed8565b60405161042591906135db565b60405180910390f35b34801561043a57600080fd5b5061045560048036038101906104509190612f98565b610fe3565b005b34801561046357600080fd5b5061046c611079565b60405161047991906135fd565b60405180910390f35b34801561048e57600080fd5b5061049761108c565b6040516104a49190613618565b60405180910390f35b3480156104b957600080fd5b506104c261111a565b6040516104cf91906135fd565b60405180910390f35b3480156104e457600080fd5b506104ed61112d565b6040516104fa9190613618565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190612fe1565b6111bb565b6040516105379190613574565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190612d4e565b61126d565b60405161057491906138ba565b60405180910390f35b34801561058957600080fd5b50610592611325565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190612f98565b6113ad565b005b3480156105c957600080fd5b506105d2611443565b6040516105df9190613574565b60405180910390f35b3480156105f457600080fd5b506105fd61146d565b60405161060a91906138ba565b60405180910390f35b34801561061f57600080fd5b50610628611473565b6040516106359190613618565b60405180910390f35b61065860048036038101906106539190612fe1565b611505565b005b34801561066657600080fd5b50610681600480360381019061067c9190612e91565b611708565b005b34801561068f57600080fd5b5061069861171e565b6040516106a59190613618565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190612fe1565b6117ac565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190612e0e565b611832565b005b34801561070c57600080fd5b5061072760048036038101906107229190612fe1565b611894565b6040516107349190613618565b60405180910390f35b34801561074957600080fd5b506107526119ed565b60405161075f9190613574565b60405180910390f35b34801561077457600080fd5b5061077d611a13565b60405161078a91906138ba565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190612f11565b611a19565b005b3480156107c857600080fd5b506107e360048036038101906107de9190612d7b565b611ab2565b6040516107f091906135fd565b60405180910390f35b34801561080557600080fd5b50610820600480360381019061081b919061303b565b611b46565b005b34801561082e57600080fd5b5061084960048036038101906108449190612d4e565b611c7c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610926575061092582611d74565b5b9050919050565b60606000805461093c90613b69565b80601f016020809104026020016040519081016040528092919081815260200182805461096890613b69565b80156109b55780601f1061098a576101008083540402835291602001916109b5565b820191906000526020600020905b81548152906001019060200180831161099857829003601f168201915b5050505050905090565b60006109ca82611dde565b610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a00906137ba565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4f826111bb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab79061383a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610adf611e4a565b73ffffffffffffffffffffffffffffffffffffffff161480610b0e5750610b0d81610b08611e4a565b611ab2565b5b610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b449061373a565b60405180910390fd5b610b578383611e52565b505050565b610b64611e4a565b73ffffffffffffffffffffffffffffffffffffffff16610b82611443565b73ffffffffffffffffffffffffffffffffffffffff1614610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf906137da565b60405180910390fd5b8060099080519060200190610bee929190612b4d565b5050565b610bfa611e4a565b73ffffffffffffffffffffffffffffffffffffffff16610c18611443565b73ffffffffffffffffffffffffffffffffffffffff1614610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c65906137da565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000610c976007611f0b565b905090565b610cad610ca7611e4a565b82611f19565b610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce39061387a565b60405180910390fd5b610cf7838383611ff7565b505050565b610d04611e4a565b73ffffffffffffffffffffffffffffffffffffffff16610d22611443565b73ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f906137da565b60405180910390fd5b80600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610dc4611e4a565b73ffffffffffffffffffffffffffffffffffffffff16610de2611443565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f906137da565b60405180910390fd5b6000610e42611443565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e659061355f565b60006040518083038185875af1925050503d8060008114610ea2576040519150601f19603f3d011682016040523d82523d6000602084013e610ea7565b606091505b5050905080610eb557600080fd5b50565b610ed383838360405180602001604052806000815250611832565b505050565b60606000610ee58361126d565b905060008167ffffffffffffffff811115610f0357610f02613d02565b5b604051908082528060200260200182016040528015610f315781602001602082028036833780820191505090505b50905060006001905060005b8381108015610f4e5750600b548211155b15610fd7576000610f5e836111bb565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fc35782848381518110610fa857610fa7613cd3565b5b6020026020010181815250508180610fbf90613bcc565b9250505b8280610fce90613bcc565b93505050610f3d565b82945050505050919050565b610feb611e4a565b73ffffffffffffffffffffffffffffffffffffffff16611009611443565b73ffffffffffffffffffffffffffffffffffffffff161461105f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611056906137da565b60405180910390fd5b80600a9080519060200190611075929190612b4d565b5050565b600d60019054906101000a900460ff1681565b6009805461109990613b69565b80601f01602080910402602001604051908101604052809291908181526020018280546110c590613b69565b80156111125780601f106110e757610100808354040283529160200191611112565b820191906000526020600020905b8154815290600101906020018083116110f557829003601f168201915b505050505081565b600d60009054906101000a900460ff1681565b6008805461113a90613b69565b80601f016020809104026020016040519081016040528092919081815260200182805461116690613b69565b80156111b35780601f10611188576101008083540402835291602001916111b3565b820191906000526020600020905b81548152906001019060200180831161119657829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b9061377a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d59061375a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61132d611e4a565b73ffffffffffffffffffffffffffffffffffffffff1661134b611443565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611398906137da565b60405180910390fd5b6113ab600061225e565b565b6113b5611e4a565b73ffffffffffffffffffffffffffffffffffffffff166113d3611443565b73ffffffffffffffffffffffffffffffffffffffff1614611429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611420906137da565b60405180910390fd5b806008908051906020019061143f929190612b4d565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b60606001805461148290613b69565b80601f01602080910402602001604051908101604052809291908181526020018280546114ae90613b69565b80156114fb5780601f106114d0576101008083540402835291602001916114fb565b820191906000526020600020905b8154815290600101906020018083116114de57829003601f168201915b5050505050905090565b806000811180156115185750600c548111155b611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e906136ba565b60405180910390fd5b600b54816115656007611f0b565b61156f91906139f8565b11156115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a79061385a565b60405180910390fd5b600d60009054906101000a900460ff1615611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f7906137fa565b60405180910390fd5b6000600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016116629190613574565b60206040518083038186803b15801561167a57600080fd5b505afa15801561168e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b2919061300e565b905060018110156116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef9061389a565b60405180910390fd5b6117023385612324565b50505050565b61171a611713611e4a565b8383612364565b5050565b600a805461172b90613b69565b80601f016020809104026020016040519081016040528092919081815260200182805461175790613b69565b80156117a45780601f10611779576101008083540402835291602001916117a4565b820191906000526020600020905b81548152906001019060200180831161178757829003601f168201915b505050505081565b6117b4611e4a565b73ffffffffffffffffffffffffffffffffffffffff166117d2611443565b73ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906137da565b60405180910390fd5b80600c8190555050565b61184361183d611e4a565b83611f19565b611882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118799061387a565b60405180910390fd5b61188e848484846124d1565b50505050565b606061189f82611dde565b6118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d59061381a565b60405180910390fd5b60001515600d60019054906101000a900460ff161515141561198c57600a805461190790613b69565b80601f016020809104026020016040519081016040528092919081815260200182805461193390613b69565b80156119805780601f1061195557610100808354040283529160200191611980565b820191906000526020600020905b81548152906001019060200180831161196357829003601f168201915b505050505090506119e8565b600061199661252d565b905060008151116119b657604051806020016040528060008152506119e4565b806119c0846125bf565b60096040516020016119d49392919061352e565b6040516020818303038152906040525b9150505b919050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b611a21611e4a565b73ffffffffffffffffffffffffffffffffffffffff16611a3f611443565b73ffffffffffffffffffffffffffffffffffffffff1614611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c906137da565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611b595750600c548111155b611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f906136ba565b60405180910390fd5b600b5481611ba66007611f0b565b611bb091906139f8565b1115611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be89061385a565b60405180910390fd5b611bf9611e4a565b73ffffffffffffffffffffffffffffffffffffffff16611c17611443565b73ffffffffffffffffffffffffffffffffffffffff1614611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c64906137da565b60405180910390fd5b611c778284612324565b505050565b611c84611e4a565b73ffffffffffffffffffffffffffffffffffffffff16611ca2611443565b73ffffffffffffffffffffffffffffffffffffffff1614611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef906137da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f9061365a565b60405180910390fd5b611d718161225e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ec5836111bb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611f2482611dde565b611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a9061371a565b60405180910390fd5b6000611f6e836111bb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fdd57508373ffffffffffffffffffffffffffffffffffffffff16611fc5846109bf565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fee5750611fed8185611ab2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612017826111bb565b73ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120649061367a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d4906136da565b60405180910390fd5b6120e8838383612720565b6120f3600082611e52565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121439190613a7f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219a91906139f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612259838383612725565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561235f57612339600761272a565b61234c836123476007611f0b565b612740565b808061235790613bcc565b915050612327565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca906136fa565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124c491906135fd565b60405180910390a3505050565b6124dc848484611ff7565b6124e88484848461275e565b612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e9061363a565b60405180910390fd5b50505050565b60606008805461253c90613b69565b80601f016020809104026020016040519081016040528092919081815260200182805461256890613b69565b80156125b55780601f1061258a576101008083540402835291602001916125b5565b820191906000526020600020905b81548152906001019060200180831161259857829003601f168201915b5050505050905090565b60606000821415612607576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061271b565b600082905060005b6000821461263957808061262290613bcc565b915050600a826126329190613a4e565b915061260f565b60008167ffffffffffffffff81111561265557612654613d02565b5b6040519080825280601f01601f1916602001820160405280156126875781602001600182028036833780820191505090505b5090505b60008514612714576001826126a09190613a7f565b9150600a856126af9190613c15565b60306126bb91906139f8565b60f81b8183815181106126d1576126d0613cd3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561270d9190613a4e565b945061268b565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b61275a8282604051806020016040528060008152506128f5565b5050565b600061277f8473ffffffffffffffffffffffffffffffffffffffff16612950565b156128e8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127a8611e4a565b8786866040518563ffffffff1660e01b81526004016127ca949392919061358f565b602060405180830381600087803b1580156127e457600080fd5b505af192505050801561281557506040513d601f19601f820116820180604052508101906128129190612f6b565b60015b612898573d8060008114612845576040519150601f19603f3d011682016040523d82523d6000602084013e61284a565b606091505b50600081511415612890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128879061363a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128ed565b600190505b949350505050565b6128ff8383612973565b61290c600084848461275e565b61294b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129429061363a565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da9061379a565b60405180910390fd5b6129ec81611dde565b15612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a239061369a565b60405180910390fd5b612a3860008383612720565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a8891906139f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b4960008383612725565b5050565b828054612b5990613b69565b90600052602060002090601f016020900481019282612b7b5760008555612bc2565b82601f10612b9457805160ff1916838001178555612bc2565b82800160010185558215612bc2579182015b82811115612bc1578251825591602001919060010190612ba6565b5b509050612bcf9190612bd3565b5090565b5b80821115612bec576000816000905550600101612bd4565b5090565b6000612c03612bfe846138fa565b6138d5565b905082815260208101848484011115612c1f57612c1e613d36565b5b612c2a848285613b27565b509392505050565b6000612c45612c408461392b565b6138d5565b905082815260208101848484011115612c6157612c60613d36565b5b612c6c848285613b27565b509392505050565b600081359050612c8381614255565b92915050565b600081359050612c988161426c565b92915050565b600081359050612cad81614283565b92915050565b600081519050612cc281614283565b92915050565b600082601f830112612cdd57612cdc613d31565b5b8135612ced848260208601612bf0565b91505092915050565b600082601f830112612d0b57612d0a613d31565b5b8135612d1b848260208601612c32565b91505092915050565b600081359050612d338161429a565b92915050565b600081519050612d488161429a565b92915050565b600060208284031215612d6457612d63613d40565b5b6000612d7284828501612c74565b91505092915050565b60008060408385031215612d9257612d91613d40565b5b6000612da085828601612c74565b9250506020612db185828601612c74565b9150509250929050565b600080600060608486031215612dd457612dd3613d40565b5b6000612de286828701612c74565b9350506020612df386828701612c74565b9250506040612e0486828701612d24565b9150509250925092565b60008060008060808587031215612e2857612e27613d40565b5b6000612e3687828801612c74565b9450506020612e4787828801612c74565b9350506040612e5887828801612d24565b925050606085013567ffffffffffffffff811115612e7957612e78613d3b565b5b612e8587828801612cc8565b91505092959194509250565b60008060408385031215612ea857612ea7613d40565b5b6000612eb685828601612c74565b9250506020612ec785828601612c89565b9150509250929050565b60008060408385031215612ee857612ee7613d40565b5b6000612ef685828601612c74565b9250506020612f0785828601612d24565b9150509250929050565b600060208284031215612f2757612f26613d40565b5b6000612f3584828501612c89565b91505092915050565b600060208284031215612f5457612f53613d40565b5b6000612f6284828501612c9e565b91505092915050565b600060208284031215612f8157612f80613d40565b5b6000612f8f84828501612cb3565b91505092915050565b600060208284031215612fae57612fad613d40565b5b600082013567ffffffffffffffff811115612fcc57612fcb613d3b565b5b612fd884828501612cf6565b91505092915050565b600060208284031215612ff757612ff6613d40565b5b600061300584828501612d24565b91505092915050565b60006020828403121561302457613023613d40565b5b600061303284828501612d39565b91505092915050565b6000806040838503121561305257613051613d40565b5b600061306085828601612d24565b925050602061307185828601612c74565b9150509250929050565b60006130878383613510565b60208301905092915050565b61309c81613ab3565b82525050565b60006130ad82613981565b6130b781856139af565b93506130c28361395c565b8060005b838110156130f35781516130da888261307b565b97506130e5836139a2565b9250506001810190506130c6565b5085935050505092915050565b61310981613ac5565b82525050565b600061311a8261398c565b61312481856139c0565b9350613134818560208601613b36565b61313d81613d45565b840191505092915050565b600061315382613997565b61315d81856139dc565b935061316d818560208601613b36565b61317681613d45565b840191505092915050565b600061318c82613997565b61319681856139ed565b93506131a6818560208601613b36565b80840191505092915050565b600081546131bf81613b69565b6131c981866139ed565b945060018216600081146131e457600181146131f557613228565b60ff19831686528186019350613228565b6131fe8561396c565b60005b8381101561322057815481890152600182019150602081019050613201565b838801955050505b50505092915050565b600061323e6032836139dc565b915061324982613d56565b604082019050919050565b60006132616026836139dc565b915061326c82613da5565b604082019050919050565b60006132846025836139dc565b915061328f82613df4565b604082019050919050565b60006132a7601c836139dc565b91506132b282613e43565b602082019050919050565b60006132ca6014836139dc565b91506132d582613e6c565b602082019050919050565b60006132ed6024836139dc565b91506132f882613e95565b604082019050919050565b60006133106019836139dc565b915061331b82613ee4565b602082019050919050565b6000613333602c836139dc565b915061333e82613f0d565b604082019050919050565b60006133566038836139dc565b915061336182613f5c565b604082019050919050565b6000613379602a836139dc565b915061338482613fab565b604082019050919050565b600061339c6029836139dc565b91506133a782613ffa565b604082019050919050565b60006133bf6020836139dc565b91506133ca82614049565b602082019050919050565b60006133e2602c836139dc565b91506133ed82614072565b604082019050919050565b60006134056020836139dc565b9150613410826140c1565b602082019050919050565b60006134286017836139dc565b9150613433826140ea565b602082019050919050565b600061344b602f836139dc565b915061345682614113565b604082019050919050565b600061346e6021836139dc565b915061347982614162565b604082019050919050565b60006134916000836139d1565b915061349c826141b1565b600082019050919050565b60006134b46014836139dc565b91506134bf826141b4565b602082019050919050565b60006134d76031836139dc565b91506134e2826141dd565b604082019050919050565b60006134fa601e836139dc565b91506135058261422c565b602082019050919050565b61351981613b1d565b82525050565b61352881613b1d565b82525050565b600061353a8286613181565b91506135468285613181565b915061355282846131b2565b9150819050949350505050565b600061356a82613484565b9150819050919050565b60006020820190506135896000830184613093565b92915050565b60006080820190506135a46000830187613093565b6135b16020830186613093565b6135be604083018561351f565b81810360608301526135d0818461310f565b905095945050505050565b600060208201905081810360008301526135f581846130a2565b905092915050565b60006020820190506136126000830184613100565b92915050565b600060208201905081810360008301526136328184613148565b905092915050565b6000602082019050818103600083015261365381613231565b9050919050565b6000602082019050818103600083015261367381613254565b9050919050565b6000602082019050818103600083015261369381613277565b9050919050565b600060208201905081810360008301526136b38161329a565b9050919050565b600060208201905081810360008301526136d3816132bd565b9050919050565b600060208201905081810360008301526136f3816132e0565b9050919050565b6000602082019050818103600083015261371381613303565b9050919050565b6000602082019050818103600083015261373381613326565b9050919050565b6000602082019050818103600083015261375381613349565b9050919050565b600060208201905081810360008301526137738161336c565b9050919050565b600060208201905081810360008301526137938161338f565b9050919050565b600060208201905081810360008301526137b3816133b2565b9050919050565b600060208201905081810360008301526137d3816133d5565b9050919050565b600060208201905081810360008301526137f3816133f8565b9050919050565b600060208201905081810360008301526138138161341b565b9050919050565b600060208201905081810360008301526138338161343e565b9050919050565b6000602082019050818103600083015261385381613461565b9050919050565b60006020820190508181036000830152613873816134a7565b9050919050565b60006020820190508181036000830152613893816134ca565b9050919050565b600060208201905081810360008301526138b3816134ed565b9050919050565b60006020820190506138cf600083018461351f565b92915050565b60006138df6138f0565b90506138eb8282613b9b565b919050565b6000604051905090565b600067ffffffffffffffff82111561391557613914613d02565b5b61391e82613d45565b9050602081019050919050565b600067ffffffffffffffff82111561394657613945613d02565b5b61394f82613d45565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a0382613b1d565b9150613a0e83613b1d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a4357613a42613c46565b5b828201905092915050565b6000613a5982613b1d565b9150613a6483613b1d565b925082613a7457613a73613c75565b5b828204905092915050565b6000613a8a82613b1d565b9150613a9583613b1d565b925082821015613aa857613aa7613c46565b5b828203905092915050565b6000613abe82613afd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b54578082015181840152602081019050613b39565b83811115613b63576000848401525b50505050565b60006002820490506001821680613b8157607f821691505b60208210811415613b9557613b94613ca4565b5b50919050565b613ba482613d45565b810181811067ffffffffffffffff82111715613bc357613bc2613d02565b5b80604052505050565b6000613bd782613b1d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c0a57613c09613c46565b5b600182019050919050565b6000613c2082613b1d565b9150613c2b83613b1d565b925082613c3b57613c3a613c75565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f7520646f6e2774206861766520616e792044726f706963616c6c732e0000600082015250565b61425e81613ab3565b811461426957600080fd5b50565b61427581613ac5565b811461428057600080fd5b50565b61428c81613ad1565b811461429757600080fd5b50565b6142a381613b1d565b81146142ae57600080fd5b5056fea2646970667358221220982bf4b7cf8868d47d567a72f854fc12b2526567fe078e2a224d4c664e75a7f764736f6c63430008070033697066733a2f2f516d62396a6e4e375271634e707959347076576e4652447866514c3734456b42697445655365396e5964545875652f68696464656e2e6a736f6e

Deployed Bytecode

0x60806040526004361061020f5760003560e01c806370a0823111610118578063b071401b116100a0578063d5abeb011161006f578063d5abeb0114610768578063e0a8085314610793578063e985e9c5146107bc578063efbd73f4146107f9578063f2fde38b146108225761020f565b8063b071401b146106ae578063b88d4fde146106d7578063c87b56dd14610700578063cb61ae171461073d5761020f565b806394354fd0116100e757806394354fd0146105e857806395d89b4114610613578063a0712d681461063e578063a22cb4651461065a578063a45ba8e7146106835761020f565b806370a0823114610540578063715018a61461057d5780637ec4a659146105945780638da5cb5b146105bd5761020f565b80633ccfd60b1161019b578063518302271161016a57806351830227146104575780635503a0e8146104825780635c975abb146104ad57806362b99ad4146104d85780636352211e146105035761020f565b80633ccfd60b146103b157806342842e0e146103c8578063438b6300146103f15780634fdd43cb1461042e5761020f565b806316ba10e0116101e257806316ba10e0146102e257806316c38b3c1461030b57806318160ddd1461033457806323b872dd1461035f5780632f0856e9146103885761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612f3e565b61084b565b60405161024891906135fd565b60405180910390f35b34801561025d57600080fd5b5061026661092d565b6040516102739190613618565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612fe1565b6109bf565b6040516102b09190613574565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190612ed1565b610a44565b005b3480156102ee57600080fd5b5061030960048036038101906103049190612f98565b610b5c565b005b34801561031757600080fd5b50610332600480360381019061032d9190612f11565b610bf2565b005b34801561034057600080fd5b50610349610c8b565b60405161035691906138ba565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190612dbb565b610c9c565b005b34801561039457600080fd5b506103af60048036038101906103aa9190612d4e565b610cfc565b005b3480156103bd57600080fd5b506103c6610dbc565b005b3480156103d457600080fd5b506103ef60048036038101906103ea9190612dbb565b610eb8565b005b3480156103fd57600080fd5b5061041860048036038101906104139190612d4e565b610ed8565b60405161042591906135db565b60405180910390f35b34801561043a57600080fd5b5061045560048036038101906104509190612f98565b610fe3565b005b34801561046357600080fd5b5061046c611079565b60405161047991906135fd565b60405180910390f35b34801561048e57600080fd5b5061049761108c565b6040516104a49190613618565b60405180910390f35b3480156104b957600080fd5b506104c261111a565b6040516104cf91906135fd565b60405180910390f35b3480156104e457600080fd5b506104ed61112d565b6040516104fa9190613618565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190612fe1565b6111bb565b6040516105379190613574565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190612d4e565b61126d565b60405161057491906138ba565b60405180910390f35b34801561058957600080fd5b50610592611325565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190612f98565b6113ad565b005b3480156105c957600080fd5b506105d2611443565b6040516105df9190613574565b60405180910390f35b3480156105f457600080fd5b506105fd61146d565b60405161060a91906138ba565b60405180910390f35b34801561061f57600080fd5b50610628611473565b6040516106359190613618565b60405180910390f35b61065860048036038101906106539190612fe1565b611505565b005b34801561066657600080fd5b50610681600480360381019061067c9190612e91565b611708565b005b34801561068f57600080fd5b5061069861171e565b6040516106a59190613618565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190612fe1565b6117ac565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190612e0e565b611832565b005b34801561070c57600080fd5b5061072760048036038101906107229190612fe1565b611894565b6040516107349190613618565b60405180910390f35b34801561074957600080fd5b506107526119ed565b60405161075f9190613574565b60405180910390f35b34801561077457600080fd5b5061077d611a13565b60405161078a91906138ba565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190612f11565b611a19565b005b3480156107c857600080fd5b506107e360048036038101906107de9190612d7b565b611ab2565b6040516107f091906135fd565b60405180910390f35b34801561080557600080fd5b50610820600480360381019061081b919061303b565b611b46565b005b34801561082e57600080fd5b5061084960048036038101906108449190612d4e565b611c7c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610926575061092582611d74565b5b9050919050565b60606000805461093c90613b69565b80601f016020809104026020016040519081016040528092919081815260200182805461096890613b69565b80156109b55780601f1061098a576101008083540402835291602001916109b5565b820191906000526020600020905b81548152906001019060200180831161099857829003601f168201915b5050505050905090565b60006109ca82611dde565b610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a00906137ba565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4f826111bb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab79061383a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610adf611e4a565b73ffffffffffffffffffffffffffffffffffffffff161480610b0e5750610b0d81610b08611e4a565b611ab2565b5b610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b449061373a565b60405180910390fd5b610b578383611e52565b505050565b610b64611e4a565b73ffffffffffffffffffffffffffffffffffffffff16610b82611443565b73ffffffffffffffffffffffffffffffffffffffff1614610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf906137da565b60405180910390fd5b8060099080519060200190610bee929190612b4d565b5050565b610bfa611e4a565b73ffffffffffffffffffffffffffffffffffffffff16610c18611443565b73ffffffffffffffffffffffffffffffffffffffff1614610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c65906137da565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000610c976007611f0b565b905090565b610cad610ca7611e4a565b82611f19565b610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce39061387a565b60405180910390fd5b610cf7838383611ff7565b505050565b610d04611e4a565b73ffffffffffffffffffffffffffffffffffffffff16610d22611443565b73ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f906137da565b60405180910390fd5b80600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610dc4611e4a565b73ffffffffffffffffffffffffffffffffffffffff16610de2611443565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f906137da565b60405180910390fd5b6000610e42611443565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e659061355f565b60006040518083038185875af1925050503d8060008114610ea2576040519150601f19603f3d011682016040523d82523d6000602084013e610ea7565b606091505b5050905080610eb557600080fd5b50565b610ed383838360405180602001604052806000815250611832565b505050565b60606000610ee58361126d565b905060008167ffffffffffffffff811115610f0357610f02613d02565b5b604051908082528060200260200182016040528015610f315781602001602082028036833780820191505090505b50905060006001905060005b8381108015610f4e5750600b548211155b15610fd7576000610f5e836111bb565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fc35782848381518110610fa857610fa7613cd3565b5b6020026020010181815250508180610fbf90613bcc565b9250505b8280610fce90613bcc565b93505050610f3d565b82945050505050919050565b610feb611e4a565b73ffffffffffffffffffffffffffffffffffffffff16611009611443565b73ffffffffffffffffffffffffffffffffffffffff161461105f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611056906137da565b60405180910390fd5b80600a9080519060200190611075929190612b4d565b5050565b600d60019054906101000a900460ff1681565b6009805461109990613b69565b80601f01602080910402602001604051908101604052809291908181526020018280546110c590613b69565b80156111125780601f106110e757610100808354040283529160200191611112565b820191906000526020600020905b8154815290600101906020018083116110f557829003601f168201915b505050505081565b600d60009054906101000a900460ff1681565b6008805461113a90613b69565b80601f016020809104026020016040519081016040528092919081815260200182805461116690613b69565b80156111b35780601f10611188576101008083540402835291602001916111b3565b820191906000526020600020905b81548152906001019060200180831161119657829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b9061377a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d59061375a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61132d611e4a565b73ffffffffffffffffffffffffffffffffffffffff1661134b611443565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611398906137da565b60405180910390fd5b6113ab600061225e565b565b6113b5611e4a565b73ffffffffffffffffffffffffffffffffffffffff166113d3611443565b73ffffffffffffffffffffffffffffffffffffffff1614611429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611420906137da565b60405180910390fd5b806008908051906020019061143f929190612b4d565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b60606001805461148290613b69565b80601f01602080910402602001604051908101604052809291908181526020018280546114ae90613b69565b80156114fb5780601f106114d0576101008083540402835291602001916114fb565b820191906000526020600020905b8154815290600101906020018083116114de57829003601f168201915b5050505050905090565b806000811180156115185750600c548111155b611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e906136ba565b60405180910390fd5b600b54816115656007611f0b565b61156f91906139f8565b11156115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a79061385a565b60405180910390fd5b600d60009054906101000a900460ff1615611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f7906137fa565b60405180910390fd5b6000600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016116629190613574565b60206040518083038186803b15801561167a57600080fd5b505afa15801561168e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b2919061300e565b905060018110156116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef9061389a565b60405180910390fd5b6117023385612324565b50505050565b61171a611713611e4a565b8383612364565b5050565b600a805461172b90613b69565b80601f016020809104026020016040519081016040528092919081815260200182805461175790613b69565b80156117a45780601f10611779576101008083540402835291602001916117a4565b820191906000526020600020905b81548152906001019060200180831161178757829003601f168201915b505050505081565b6117b4611e4a565b73ffffffffffffffffffffffffffffffffffffffff166117d2611443565b73ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906137da565b60405180910390fd5b80600c8190555050565b61184361183d611e4a565b83611f19565b611882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118799061387a565b60405180910390fd5b61188e848484846124d1565b50505050565b606061189f82611dde565b6118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d59061381a565b60405180910390fd5b60001515600d60019054906101000a900460ff161515141561198c57600a805461190790613b69565b80601f016020809104026020016040519081016040528092919081815260200182805461193390613b69565b80156119805780601f1061195557610100808354040283529160200191611980565b820191906000526020600020905b81548152906001019060200180831161196357829003601f168201915b505050505090506119e8565b600061199661252d565b905060008151116119b657604051806020016040528060008152506119e4565b806119c0846125bf565b60096040516020016119d49392919061352e565b6040516020818303038152906040525b9150505b919050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b611a21611e4a565b73ffffffffffffffffffffffffffffffffffffffff16611a3f611443565b73ffffffffffffffffffffffffffffffffffffffff1614611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c906137da565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611b595750600c548111155b611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f906136ba565b60405180910390fd5b600b5481611ba66007611f0b565b611bb091906139f8565b1115611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be89061385a565b60405180910390fd5b611bf9611e4a565b73ffffffffffffffffffffffffffffffffffffffff16611c17611443565b73ffffffffffffffffffffffffffffffffffffffff1614611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c64906137da565b60405180910390fd5b611c778284612324565b505050565b611c84611e4a565b73ffffffffffffffffffffffffffffffffffffffff16611ca2611443565b73ffffffffffffffffffffffffffffffffffffffff1614611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef906137da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f9061365a565b60405180910390fd5b611d718161225e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ec5836111bb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611f2482611dde565b611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a9061371a565b60405180910390fd5b6000611f6e836111bb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fdd57508373ffffffffffffffffffffffffffffffffffffffff16611fc5846109bf565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fee5750611fed8185611ab2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612017826111bb565b73ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120649061367a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d4906136da565b60405180910390fd5b6120e8838383612720565b6120f3600082611e52565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121439190613a7f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219a91906139f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612259838383612725565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561235f57612339600761272a565b61234c836123476007611f0b565b612740565b808061235790613bcc565b915050612327565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca906136fa565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124c491906135fd565b60405180910390a3505050565b6124dc848484611ff7565b6124e88484848461275e565b612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e9061363a565b60405180910390fd5b50505050565b60606008805461253c90613b69565b80601f016020809104026020016040519081016040528092919081815260200182805461256890613b69565b80156125b55780601f1061258a576101008083540402835291602001916125b5565b820191906000526020600020905b81548152906001019060200180831161259857829003601f168201915b5050505050905090565b60606000821415612607576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061271b565b600082905060005b6000821461263957808061262290613bcc565b915050600a826126329190613a4e565b915061260f565b60008167ffffffffffffffff81111561265557612654613d02565b5b6040519080825280601f01601f1916602001820160405280156126875781602001600182028036833780820191505090505b5090505b60008514612714576001826126a09190613a7f565b9150600a856126af9190613c15565b60306126bb91906139f8565b60f81b8183815181106126d1576126d0613cd3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561270d9190613a4e565b945061268b565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b61275a8282604051806020016040528060008152506128f5565b5050565b600061277f8473ffffffffffffffffffffffffffffffffffffffff16612950565b156128e8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127a8611e4a565b8786866040518563ffffffff1660e01b81526004016127ca949392919061358f565b602060405180830381600087803b1580156127e457600080fd5b505af192505050801561281557506040513d601f19601f820116820180604052508101906128129190612f6b565b60015b612898573d8060008114612845576040519150601f19603f3d011682016040523d82523d6000602084013e61284a565b606091505b50600081511415612890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128879061363a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128ed565b600190505b949350505050565b6128ff8383612973565b61290c600084848461275e565b61294b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129429061363a565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da9061379a565b60405180910390fd5b6129ec81611dde565b15612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a239061369a565b60405180910390fd5b612a3860008383612720565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a8891906139f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b4960008383612725565b5050565b828054612b5990613b69565b90600052602060002090601f016020900481019282612b7b5760008555612bc2565b82601f10612b9457805160ff1916838001178555612bc2565b82800160010185558215612bc2579182015b82811115612bc1578251825591602001919060010190612ba6565b5b509050612bcf9190612bd3565b5090565b5b80821115612bec576000816000905550600101612bd4565b5090565b6000612c03612bfe846138fa565b6138d5565b905082815260208101848484011115612c1f57612c1e613d36565b5b612c2a848285613b27565b509392505050565b6000612c45612c408461392b565b6138d5565b905082815260208101848484011115612c6157612c60613d36565b5b612c6c848285613b27565b509392505050565b600081359050612c8381614255565b92915050565b600081359050612c988161426c565b92915050565b600081359050612cad81614283565b92915050565b600081519050612cc281614283565b92915050565b600082601f830112612cdd57612cdc613d31565b5b8135612ced848260208601612bf0565b91505092915050565b600082601f830112612d0b57612d0a613d31565b5b8135612d1b848260208601612c32565b91505092915050565b600081359050612d338161429a565b92915050565b600081519050612d488161429a565b92915050565b600060208284031215612d6457612d63613d40565b5b6000612d7284828501612c74565b91505092915050565b60008060408385031215612d9257612d91613d40565b5b6000612da085828601612c74565b9250506020612db185828601612c74565b9150509250929050565b600080600060608486031215612dd457612dd3613d40565b5b6000612de286828701612c74565b9350506020612df386828701612c74565b9250506040612e0486828701612d24565b9150509250925092565b60008060008060808587031215612e2857612e27613d40565b5b6000612e3687828801612c74565b9450506020612e4787828801612c74565b9350506040612e5887828801612d24565b925050606085013567ffffffffffffffff811115612e7957612e78613d3b565b5b612e8587828801612cc8565b91505092959194509250565b60008060408385031215612ea857612ea7613d40565b5b6000612eb685828601612c74565b9250506020612ec785828601612c89565b9150509250929050565b60008060408385031215612ee857612ee7613d40565b5b6000612ef685828601612c74565b9250506020612f0785828601612d24565b9150509250929050565b600060208284031215612f2757612f26613d40565b5b6000612f3584828501612c89565b91505092915050565b600060208284031215612f5457612f53613d40565b5b6000612f6284828501612c9e565b91505092915050565b600060208284031215612f8157612f80613d40565b5b6000612f8f84828501612cb3565b91505092915050565b600060208284031215612fae57612fad613d40565b5b600082013567ffffffffffffffff811115612fcc57612fcb613d3b565b5b612fd884828501612cf6565b91505092915050565b600060208284031215612ff757612ff6613d40565b5b600061300584828501612d24565b91505092915050565b60006020828403121561302457613023613d40565b5b600061303284828501612d39565b91505092915050565b6000806040838503121561305257613051613d40565b5b600061306085828601612d24565b925050602061307185828601612c74565b9150509250929050565b60006130878383613510565b60208301905092915050565b61309c81613ab3565b82525050565b60006130ad82613981565b6130b781856139af565b93506130c28361395c565b8060005b838110156130f35781516130da888261307b565b97506130e5836139a2565b9250506001810190506130c6565b5085935050505092915050565b61310981613ac5565b82525050565b600061311a8261398c565b61312481856139c0565b9350613134818560208601613b36565b61313d81613d45565b840191505092915050565b600061315382613997565b61315d81856139dc565b935061316d818560208601613b36565b61317681613d45565b840191505092915050565b600061318c82613997565b61319681856139ed565b93506131a6818560208601613b36565b80840191505092915050565b600081546131bf81613b69565b6131c981866139ed565b945060018216600081146131e457600181146131f557613228565b60ff19831686528186019350613228565b6131fe8561396c565b60005b8381101561322057815481890152600182019150602081019050613201565b838801955050505b50505092915050565b600061323e6032836139dc565b915061324982613d56565b604082019050919050565b60006132616026836139dc565b915061326c82613da5565b604082019050919050565b60006132846025836139dc565b915061328f82613df4565b604082019050919050565b60006132a7601c836139dc565b91506132b282613e43565b602082019050919050565b60006132ca6014836139dc565b91506132d582613e6c565b602082019050919050565b60006132ed6024836139dc565b91506132f882613e95565b604082019050919050565b60006133106019836139dc565b915061331b82613ee4565b602082019050919050565b6000613333602c836139dc565b915061333e82613f0d565b604082019050919050565b60006133566038836139dc565b915061336182613f5c565b604082019050919050565b6000613379602a836139dc565b915061338482613fab565b604082019050919050565b600061339c6029836139dc565b91506133a782613ffa565b604082019050919050565b60006133bf6020836139dc565b91506133ca82614049565b602082019050919050565b60006133e2602c836139dc565b91506133ed82614072565b604082019050919050565b60006134056020836139dc565b9150613410826140c1565b602082019050919050565b60006134286017836139dc565b9150613433826140ea565b602082019050919050565b600061344b602f836139dc565b915061345682614113565b604082019050919050565b600061346e6021836139dc565b915061347982614162565b604082019050919050565b60006134916000836139d1565b915061349c826141b1565b600082019050919050565b60006134b46014836139dc565b91506134bf826141b4565b602082019050919050565b60006134d76031836139dc565b91506134e2826141dd565b604082019050919050565b60006134fa601e836139dc565b91506135058261422c565b602082019050919050565b61351981613b1d565b82525050565b61352881613b1d565b82525050565b600061353a8286613181565b91506135468285613181565b915061355282846131b2565b9150819050949350505050565b600061356a82613484565b9150819050919050565b60006020820190506135896000830184613093565b92915050565b60006080820190506135a46000830187613093565b6135b16020830186613093565b6135be604083018561351f565b81810360608301526135d0818461310f565b905095945050505050565b600060208201905081810360008301526135f581846130a2565b905092915050565b60006020820190506136126000830184613100565b92915050565b600060208201905081810360008301526136328184613148565b905092915050565b6000602082019050818103600083015261365381613231565b9050919050565b6000602082019050818103600083015261367381613254565b9050919050565b6000602082019050818103600083015261369381613277565b9050919050565b600060208201905081810360008301526136b38161329a565b9050919050565b600060208201905081810360008301526136d3816132bd565b9050919050565b600060208201905081810360008301526136f3816132e0565b9050919050565b6000602082019050818103600083015261371381613303565b9050919050565b6000602082019050818103600083015261373381613326565b9050919050565b6000602082019050818103600083015261375381613349565b9050919050565b600060208201905081810360008301526137738161336c565b9050919050565b600060208201905081810360008301526137938161338f565b9050919050565b600060208201905081810360008301526137b3816133b2565b9050919050565b600060208201905081810360008301526137d3816133d5565b9050919050565b600060208201905081810360008301526137f3816133f8565b9050919050565b600060208201905081810360008301526138138161341b565b9050919050565b600060208201905081810360008301526138338161343e565b9050919050565b6000602082019050818103600083015261385381613461565b9050919050565b60006020820190508181036000830152613873816134a7565b9050919050565b60006020820190508181036000830152613893816134ca565b9050919050565b600060208201905081810360008301526138b3816134ed565b9050919050565b60006020820190506138cf600083018461351f565b92915050565b60006138df6138f0565b90506138eb8282613b9b565b919050565b6000604051905090565b600067ffffffffffffffff82111561391557613914613d02565b5b61391e82613d45565b9050602081019050919050565b600067ffffffffffffffff82111561394657613945613d02565b5b61394f82613d45565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a0382613b1d565b9150613a0e83613b1d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a4357613a42613c46565b5b828201905092915050565b6000613a5982613b1d565b9150613a6483613b1d565b925082613a7457613a73613c75565b5b828204905092915050565b6000613a8a82613b1d565b9150613a9583613b1d565b925082821015613aa857613aa7613c46565b5b828203905092915050565b6000613abe82613afd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b54578082015181840152602081019050613b39565b83811115613b63576000848401525b50505050565b60006002820490506001821680613b8157607f821691505b60208210811415613b9557613b94613ca4565b5b50919050565b613ba482613d45565b810181811067ffffffffffffffff82111715613bc357613bc2613d02565b5b80604052505050565b6000613bd782613b1d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c0a57613c09613c46565b5b600182019050919050565b6000613c2082613b1d565b9150613c2b83613b1d565b925082613c3b57613c3a613c75565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f7520646f6e2774206861766520616e792044726f706963616c6c732e0000600082015250565b61425e81613ab3565b811461426957600080fd5b50565b61427581613ac5565b811461428057600080fd5b50565b61428c81613ad1565b811461429757600080fd5b50565b6142a381613b1d565b81146142ae57600080fd5b5056fea2646970667358221220982bf4b7cf8868d47d567a72f854fc12b2526567fe078e2a224d4c664e75a7f764736f6c63430008070033

Deployed Bytecode Sourcemap

39963:3985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26767:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27712:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29271:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28794:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43207:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43313:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40870:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30021:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42620:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43396:229;;;;;;;;;;;;;:::i;:::-;;30431:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41481:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42963:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40337:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40148:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40307:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40115:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27406:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27136:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7388:103;;;;;;;;;;;;;:::i;:::-;;43101:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6737:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40261:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27881:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40965:347;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29564:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40186:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42825:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30687:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42122:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40372:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40226:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42736:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29790:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41320:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7646:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26767:305;26869:4;26921:25;26906:40;;;:11;:40;;;;:105;;;;26978:33;26963:48;;;:11;:48;;;;26906:105;:158;;;;27028:36;27052:11;27028:23;:36::i;:::-;26906:158;26886:178;;26767:305;;;:::o;27712:100::-;27766:13;27799:5;27792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27712:100;:::o;29271:221::-;29347:7;29375:16;29383:7;29375;:16::i;:::-;29367:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29460:15;:24;29476:7;29460:24;;;;;;;;;;;;;;;;;;;;;29453:31;;29271:221;;;:::o;28794:411::-;28875:13;28891:23;28906:7;28891:14;:23::i;:::-;28875:39;;28939:5;28933:11;;:2;:11;;;;28925:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29033:5;29017:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29042:37;29059:5;29066:12;:10;:12::i;:::-;29042:16;:37::i;:::-;29017:62;28995:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29176:21;29185:2;29189:7;29176:8;:21::i;:::-;28864:341;28794:411;;:::o;43207:100::-;6968:12;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43291:10:::1;43279:9;:22;;;;;;;;;;;;:::i;:::-;;43207:100:::0;:::o;43313:77::-;6968:12;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43378:6:::1;43369;;:15;;;;;;;;;;;;;;;;;;43313:77:::0;:::o;40870:89::-;40914:7;40937:16;:6;:14;:16::i;:::-;40930:23;;40870:89;:::o;30021:339::-;30216:41;30235:12;:10;:12::i;:::-;30249:7;30216:18;:41::i;:::-;30208:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30324:28;30334:4;30340:2;30344:7;30324:9;:28::i;:::-;30021:339;;;:::o;42620:110::-;6968:12;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42713:11:::1;42694:16;;:30;;;;;;;;;;;;;;;;;;42620:110:::0;:::o;43396:229::-;6968:12;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43447:7:::1;43468;:5;:7::i;:::-;43460:21;;43489;43460:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43446:69;;;43530:2;43522:11;;;::::0;::::1;;43433:192;43396:229::o:0;30431:185::-;30569:39;30586:4;30592:2;30596:7;30569:39;;;;;;;;;;;;:16;:39::i;:::-;30431:185;;;:::o;41481:635::-;41556:16;41584:23;41610:17;41620:6;41610:9;:17::i;:::-;41584:43;;41634:30;41681:15;41667:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41634:63;;41704:22;41729:1;41704:26;;41737:23;41773:309;41798:15;41780;:33;:64;;;;;41835:9;;41817:14;:27;;41780:64;41773:309;;;41855:25;41883:23;41891:14;41883:7;:23::i;:::-;41855:51;;41942:6;41921:27;;:17;:27;;;41917:131;;;41994:14;41961:13;41975:15;41961:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;42021:17;;;;;:::i;:::-;;;;41917:131;42058:16;;;;;:::i;:::-;;;;41846:236;41773:309;;;42097:13;42090:20;;;;;;41481:635;;;:::o;42963:132::-;6968:12;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43071:18:::1;43051:17;:38;;;;;;;;;;;;:::i;:::-;;42963:132:::0;:::o;40337:28::-;;;;;;;;;;;;;:::o;40148:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40307:25::-;;;;;;;;;;;;;:::o;40115:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27406:239::-;27478:7;27498:13;27514:7;:16;27522:7;27514:16;;;;;;;;;;;;;;;;;;;;;27498:32;;27566:1;27549:19;;:5;:19;;;;27541:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27632:5;27625:12;;;27406:239;;;:::o;27136:208::-;27208:7;27253:1;27236:19;;:5;:19;;;;27228:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27320:9;:16;27330:5;27320:16;;;;;;;;;;;;;;;;27313:23;;27136:208;;;:::o;7388:103::-;6968:12;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7453:30:::1;7480:1;7453:18;:30::i;:::-;7388:103::o:0;43101:100::-;6968:12;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43185:10:::1;43173:9;:22;;;;;;;;;;;;:::i;:::-;;43101:100:::0;:::o;6737:87::-;6783:7;6810:6;;;;;;;;;;;6803:13;;6737:87;:::o;40261:37::-;;;;:::o;27881:104::-;27937:13;27970:7;27963:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27881:104;:::o;40965:347::-;41030:11;40704:1;40690:11;:15;:52;;;;;40724:18;;40709:11;:33;;40690:52;40682:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40816:9;;40801:11;40782:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;40774:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41059:6:::1;;;;;;;;;;;41058:7;41050:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41100:13;41124:16;;;;;;;;;;;41100:41;;41148:19;41170:5;:15;;;41186:10;41170:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41148:49;;41227:1;41212:11;:16;;41204:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;41272:34;41282:10;41294:11;41272:9;:34::i;:::-;41043:269;;40965:347:::0;;:::o;29564:155::-;29659:52;29678:12;:10;:12::i;:::-;29692:8;29702;29659:18;:52::i;:::-;29564:155;;:::o;40186:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42825:130::-;6968:12;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42930:19:::1;42909:18;:40;;;;42825:130:::0;:::o;30687:328::-;30862:41;30881:12;:10;:12::i;:::-;30895:7;30862:18;:41::i;:::-;30854:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30968:39;30982:4;30988:2;30992:7;31001:5;30968:13;:39::i;:::-;30687:328;;;;:::o;42122:494::-;42221:13;42262:17;42270:8;42262:7;:17::i;:::-;42246:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;42369:5;42357:17;;:8;;;;;;;;;;;:17;;;42353:64;;;42392:17;42385:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42353:64;42425:28;42456:10;:8;:10::i;:::-;42425:41;;42511:1;42486:14;42480:28;:32;:130;;;;;;;;;;;;;;;;;42548:14;42564:19;:8;:17;:19::i;:::-;42585:9;42531:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42480:130;42473:137;;;42122:494;;;;:::o;40372:31::-;;;;;;;;;;;;;:::o;40226:30::-;;;;:::o;42736:81::-;6968:12;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42805:6:::1;42794:8;;:17;;;;;;;;;;;;;;;;;;42736:81:::0;:::o;29790:164::-;29887:4;29911:18;:25;29930:5;29911:25;;;;;;;;;;;;;;;:35;29937:8;29911:35;;;;;;;;;;;;;;;;;;;;;;;;;29904:42;;29790:164;;;;:::o;41320:155::-;41406:11;40704:1;40690:11;:15;:52;;;;;40724:18;;40709:11;:33;;40690:52;40682:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40816:9;;40801:11;40782:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;40774:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6968:12:::1;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41436:33:::2;41446:9;41457:11;41436:9;:33::i;:::-;41320:155:::0;;;:::o;7646:201::-;6968:12;:10;:12::i;:::-;6957:23;;:7;:5;:7::i;:::-;:23;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7755:1:::1;7735:22;;:8;:22;;;;7727:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7811:28;7830:8;7811:18;:28::i;:::-;7646:201:::0;:::o;19521:157::-;19606:4;19645:25;19630:40;;;:11;:40;;;;19623:47;;19521:157;;;:::o;32525:127::-;32590:4;32642:1;32614:30;;:7;:16;32622:7;32614:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32607:37;;32525:127;;;:::o;5461:98::-;5514:7;5541:10;5534:17;;5461:98;:::o;36671:174::-;36773:2;36746:15;:24;36762:7;36746:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36829:7;36825:2;36791:46;;36800:23;36815:7;36800:14;:23::i;:::-;36791:46;;;;;;;;;;;;36671:174;;:::o;2065:114::-;2130:7;2157;:14;;;2150:21;;2065:114;;;:::o;32819:348::-;32912:4;32937:16;32945:7;32937;:16::i;:::-;32929:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33013:13;33029:23;33044:7;33029:14;:23::i;:::-;33013:39;;33082:5;33071:16;;:7;:16;;;:51;;;;33115:7;33091:31;;:20;33103:7;33091:11;:20::i;:::-;:31;;;33071:51;:87;;;;33126:32;33143:5;33150:7;33126:16;:32::i;:::-;33071:87;33063:96;;;32819:348;;;;:::o;35928:625::-;36087:4;36060:31;;:23;36075:7;36060:14;:23::i;:::-;:31;;;36052:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36166:1;36152:16;;:2;:16;;;;36144:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36222:39;36243:4;36249:2;36253:7;36222:20;:39::i;:::-;36326:29;36343:1;36347:7;36326:8;:29::i;:::-;36387:1;36368:9;:15;36378:4;36368:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36416:1;36399:9;:13;36409:2;36399:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36447:2;36428:7;:16;36436:7;36428:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36486:7;36482:2;36467:27;;36476:4;36467:27;;;;;;;;;;;;36507:38;36527:4;36533:2;36537:7;36507:19;:38::i;:::-;35928:625;;;:::o;8007:191::-;8081:16;8100:6;;;;;;;;;;;8081:25;;8126:8;8117:6;;:17;;;;;;;;;;;;;;;;;;8181:8;8150:40;;8171:8;8150:40;;;;;;;;;;;;8070:128;8007:191;:::o;43631:204::-;43711:9;43706:124;43730:11;43726:1;:15;43706:124;;;43757:18;:6;:16;:18::i;:::-;43784:38;43794:9;43805:16;:6;:14;:16::i;:::-;43784:9;:38::i;:::-;43743:3;;;;;:::i;:::-;;;;43706:124;;;;43631:204;;:::o;36987:315::-;37142:8;37133:17;;:5;:17;;;;37125:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37229:8;37191:18;:25;37210:5;37191:25;;;;;;;;;;;;;;;:35;37217:8;37191:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37275:8;37253:41;;37268:5;37253:41;;;37285:8;37253:41;;;;;;:::i;:::-;;;;;;;;36987:315;;;:::o;31897:::-;32054:28;32064:4;32070:2;32074:7;32054:9;:28::i;:::-;32101:48;32124:4;32130:2;32134:7;32143:5;32101:22;:48::i;:::-;32093:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31897:315;;;;:::o;43841:104::-;43901:13;43930:9;43923:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43841:104;:::o;3023:723::-;3079:13;3309:1;3300:5;:10;3296:53;;;3327:10;;;;;;;;;;;;;;;;;;;;;3296:53;3359:12;3374:5;3359:20;;3390:14;3415:78;3430:1;3422:4;:9;3415:78;;3448:8;;;;;:::i;:::-;;;;3479:2;3471:10;;;;;:::i;:::-;;;3415:78;;;3503:19;3535:6;3525:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3503:39;;3553:154;3569:1;3560:5;:10;3553:154;;3597:1;3587:11;;;;;:::i;:::-;;;3664:2;3656:5;:10;;;;:::i;:::-;3643:2;:24;;;;:::i;:::-;3630:39;;3613:6;3620;3613:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3693:2;3684:11;;;;;:::i;:::-;;;3553:154;;;3731:6;3717:21;;;;;3023:723;;;;:::o;39238:126::-;;;;:::o;39749:125::-;;;;:::o;2187:127::-;2294:1;2276:7;:14;;;:19;;;;;;;;;;;2187:127;:::o;33509:110::-;33585:26;33595:2;33599:7;33585:26;;;;;;;;;;;;:9;:26::i;:::-;33509:110;;:::o;37867:799::-;38022:4;38043:15;:2;:13;;;:15::i;:::-;38039:620;;;38095:2;38079:36;;;38116:12;:10;:12::i;:::-;38130:4;38136:7;38145:5;38079:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38075:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38338:1;38321:6;:13;:18;38317:272;;;38364:60;;;;;;;;;;:::i;:::-;;;;;;;;38317:272;38539:6;38533:13;38524:6;38520:2;38516:15;38509:38;38075:529;38212:41;;;38202:51;;;:6;:51;;;;38195:58;;;;;38039:620;38643:4;38636:11;;37867:799;;;;;;;:::o;33846:321::-;33976:18;33982:2;33986:7;33976:5;:18::i;:::-;34027:54;34058:1;34062:2;34066:7;34075:5;34027:22;:54::i;:::-;34005:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33846:321;;;:::o;9438:326::-;9498:4;9755:1;9733:7;:19;;;:23;9726:30;;9438:326;;;:::o;34503:439::-;34597:1;34583:16;;:2;:16;;;;34575:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34656:16;34664:7;34656;:16::i;:::-;34655:17;34647:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34718:45;34747:1;34751:2;34755:7;34718:20;:45::i;:::-;34793:1;34776:9;:13;34786:2;34776:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34824:2;34805:7;:16;34813:7;34805:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34869:7;34865:2;34844:33;;34861:1;34844:33;;;;;;;;;;;;34890:44;34918:1;34922:2;34926:7;34890:19;:44::i;:::-;34503:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2277:143;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:119;;;2892:79;;:::i;:::-;2854:119;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;2761:474;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:119;;;3389:79;;:::i;:::-;3351:119;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;3241:619;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:120;;;4041:79;;:::i;:::-;4002:120;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:117;;;4625:79;;:::i;:::-;4589:117;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3866:943;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:119;;;4943:79;;:::i;:::-;4905:119;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;4815:468;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:119;;;5420:79;;:::i;:::-;5382:119;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;5289:474;;;;;:::o;5769:323::-;5825:6;5874:2;5862:9;5853:7;5849:23;5845:32;5842:119;;;5880:79;;:::i;:::-;5842:119;6000:1;6025:50;6067:7;6058:6;6047:9;6043:22;6025:50;:::i;:::-;6015:60;;5971:114;5769:323;;;;:::o;6098:327::-;6156:6;6205:2;6193:9;6184:7;6180:23;6176:32;6173:119;;;6211:79;;:::i;:::-;6173:119;6331:1;6356:52;6400:7;6391:6;6380:9;6376:22;6356:52;:::i;:::-;6346:62;;6302:116;6098:327;;;;:::o;6431:349::-;6500:6;6549:2;6537:9;6528:7;6524:23;6520:32;6517:119;;;6555:79;;:::i;:::-;6517:119;6675:1;6700:63;6755:7;6746:6;6735:9;6731:22;6700:63;:::i;:::-;6690:73;;6646:127;6431:349;;;;:::o;6786:509::-;6855:6;6904:2;6892:9;6883:7;6879:23;6875:32;6872:119;;;6910:79;;:::i;:::-;6872:119;7058:1;7047:9;7043:17;7030:31;7088:18;7080:6;7077:30;7074:117;;;7110:79;;:::i;:::-;7074:117;7215:63;7270:7;7261:6;7250:9;7246:22;7215:63;:::i;:::-;7205:73;;7001:287;6786:509;;;;:::o;7301:329::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:119;;;7415:79;;:::i;:::-;7377:119;7535:1;7560:53;7605:7;7596:6;7585:9;7581:22;7560:53;:::i;:::-;7550:63;;7506:117;7301:329;;;;:::o;7636:351::-;7706:6;7755:2;7743:9;7734:7;7730:23;7726:32;7723:119;;;7761:79;;:::i;:::-;7723:119;7881:1;7906:64;7962:7;7953:6;7942:9;7938:22;7906:64;:::i;:::-;7896:74;;7852:128;7636:351;;;;:::o;7993:474::-;8061:6;8069;8118:2;8106:9;8097:7;8093:23;8089:32;8086:119;;;8124:79;;:::i;:::-;8086:119;8244:1;8269:53;8314:7;8305:6;8294:9;8290:22;8269:53;:::i;:::-;8259:63;;8215:117;8371:2;8397:53;8442:7;8433:6;8422:9;8418:22;8397:53;:::i;:::-;8387:63;;8342:118;7993:474;;;;;:::o;8473:179::-;8542:10;8563:46;8605:3;8597:6;8563:46;:::i;:::-;8641:4;8636:3;8632:14;8618:28;;8473:179;;;;:::o;8658:118::-;8745:24;8763:5;8745:24;:::i;:::-;8740:3;8733:37;8658:118;;:::o;8812:732::-;8931:3;8960:54;9008:5;8960:54;:::i;:::-;9030:86;9109:6;9104:3;9030:86;:::i;:::-;9023:93;;9140:56;9190:5;9140:56;:::i;:::-;9219:7;9250:1;9235:284;9260:6;9257:1;9254:13;9235:284;;;9336:6;9330:13;9363:63;9422:3;9407:13;9363:63;:::i;:::-;9356:70;;9449:60;9502:6;9449:60;:::i;:::-;9439:70;;9295:224;9282:1;9279;9275:9;9270:14;;9235:284;;;9239:14;9535:3;9528:10;;8936:608;;;8812:732;;;;:::o;9550:109::-;9631:21;9646:5;9631:21;:::i;:::-;9626:3;9619:34;9550:109;;:::o;9665:360::-;9751:3;9779:38;9811:5;9779:38;:::i;:::-;9833:70;9896:6;9891:3;9833:70;:::i;:::-;9826:77;;9912:52;9957:6;9952:3;9945:4;9938:5;9934:16;9912:52;:::i;:::-;9989:29;10011:6;9989:29;:::i;:::-;9984:3;9980:39;9973:46;;9755:270;9665:360;;;;:::o;10031:364::-;10119:3;10147:39;10180:5;10147:39;:::i;:::-;10202:71;10266:6;10261:3;10202:71;:::i;:::-;10195:78;;10282:52;10327:6;10322:3;10315:4;10308:5;10304:16;10282:52;:::i;:::-;10359:29;10381:6;10359:29;:::i;:::-;10354:3;10350:39;10343:46;;10123:272;10031:364;;;;:::o;10401:377::-;10507:3;10535:39;10568:5;10535:39;:::i;:::-;10590:89;10672:6;10667:3;10590:89;:::i;:::-;10583:96;;10688:52;10733:6;10728:3;10721:4;10714:5;10710:16;10688:52;:::i;:::-;10765:6;10760:3;10756:16;10749:23;;10511:267;10401:377;;;;:::o;10808:845::-;10911:3;10948:5;10942:12;10977:36;11003:9;10977:36;:::i;:::-;11029:89;11111:6;11106:3;11029:89;:::i;:::-;11022:96;;11149:1;11138:9;11134:17;11165:1;11160:137;;;;11311:1;11306:341;;;;11127:520;;11160:137;11244:4;11240:9;11229;11225:25;11220:3;11213:38;11280:6;11275:3;11271:16;11264:23;;11160:137;;11306:341;11373:38;11405:5;11373:38;:::i;:::-;11433:1;11447:154;11461:6;11458:1;11455:13;11447:154;;;11535:7;11529:14;11525:1;11520:3;11516:11;11509:35;11585:1;11576:7;11572:15;11561:26;;11483:4;11480:1;11476:12;11471:17;;11447:154;;;11630:6;11625:3;11621:16;11614:23;;11313:334;;11127:520;;10915:738;;10808:845;;;;:::o;11659:366::-;11801:3;11822:67;11886:2;11881:3;11822:67;:::i;:::-;11815:74;;11898:93;11987:3;11898:93;:::i;:::-;12016:2;12011:3;12007:12;12000:19;;11659:366;;;:::o;12031:::-;12173:3;12194:67;12258:2;12253:3;12194:67;:::i;:::-;12187:74;;12270:93;12359:3;12270:93;:::i;:::-;12388:2;12383:3;12379:12;12372:19;;12031:366;;;:::o;12403:::-;12545:3;12566:67;12630:2;12625:3;12566:67;:::i;:::-;12559:74;;12642:93;12731:3;12642:93;:::i;:::-;12760:2;12755:3;12751:12;12744:19;;12403:366;;;:::o;12775:::-;12917:3;12938:67;13002:2;12997:3;12938:67;:::i;:::-;12931:74;;13014:93;13103:3;13014:93;:::i;:::-;13132:2;13127:3;13123:12;13116:19;;12775:366;;;:::o;13147:::-;13289:3;13310:67;13374:2;13369:3;13310:67;:::i;:::-;13303:74;;13386:93;13475:3;13386:93;:::i;:::-;13504:2;13499:3;13495:12;13488:19;;13147:366;;;:::o;13519:::-;13661:3;13682:67;13746:2;13741:3;13682:67;:::i;:::-;13675:74;;13758:93;13847:3;13758:93;:::i;:::-;13876:2;13871:3;13867:12;13860:19;;13519:366;;;:::o;13891:::-;14033:3;14054:67;14118:2;14113:3;14054:67;:::i;:::-;14047:74;;14130:93;14219:3;14130:93;:::i;:::-;14248:2;14243:3;14239:12;14232:19;;13891:366;;;:::o;14263:::-;14405:3;14426:67;14490:2;14485:3;14426:67;:::i;:::-;14419:74;;14502:93;14591:3;14502:93;:::i;:::-;14620:2;14615:3;14611:12;14604:19;;14263:366;;;:::o;14635:::-;14777:3;14798:67;14862:2;14857:3;14798:67;:::i;:::-;14791:74;;14874:93;14963:3;14874:93;:::i;:::-;14992:2;14987:3;14983:12;14976:19;;14635:366;;;:::o;15007:::-;15149:3;15170:67;15234:2;15229:3;15170:67;:::i;:::-;15163:74;;15246:93;15335:3;15246:93;:::i;:::-;15364:2;15359:3;15355:12;15348:19;;15007:366;;;:::o;15379:::-;15521:3;15542:67;15606:2;15601:3;15542:67;:::i;:::-;15535:74;;15618:93;15707:3;15618:93;:::i;:::-;15736:2;15731:3;15727:12;15720:19;;15379:366;;;:::o;15751:::-;15893:3;15914:67;15978:2;15973:3;15914:67;:::i;:::-;15907:74;;15990:93;16079:3;15990:93;:::i;:::-;16108:2;16103:3;16099:12;16092:19;;15751:366;;;:::o;16123:::-;16265:3;16286:67;16350:2;16345:3;16286:67;:::i;:::-;16279:74;;16362:93;16451:3;16362:93;:::i;:::-;16480:2;16475:3;16471:12;16464:19;;16123:366;;;:::o;16495:::-;16637:3;16658:67;16722:2;16717:3;16658:67;:::i;:::-;16651:74;;16734:93;16823:3;16734:93;:::i;:::-;16852:2;16847:3;16843:12;16836:19;;16495:366;;;:::o;16867:::-;17009:3;17030:67;17094:2;17089:3;17030:67;:::i;:::-;17023:74;;17106:93;17195:3;17106:93;:::i;:::-;17224:2;17219:3;17215:12;17208:19;;16867:366;;;:::o;17239:::-;17381:3;17402:67;17466:2;17461:3;17402:67;:::i;:::-;17395:74;;17478:93;17567:3;17478:93;:::i;:::-;17596:2;17591:3;17587:12;17580:19;;17239:366;;;:::o;17611:::-;17753:3;17774:67;17838:2;17833:3;17774:67;:::i;:::-;17767:74;;17850:93;17939:3;17850:93;:::i;:::-;17968:2;17963:3;17959:12;17952:19;;17611:366;;;:::o;17983:398::-;18142:3;18163:83;18244:1;18239:3;18163:83;:::i;:::-;18156:90;;18255:93;18344:3;18255:93;:::i;:::-;18373:1;18368:3;18364:11;18357:18;;17983:398;;;:::o;18387:366::-;18529:3;18550:67;18614:2;18609:3;18550:67;:::i;:::-;18543:74;;18626:93;18715:3;18626:93;:::i;:::-;18744:2;18739:3;18735:12;18728:19;;18387:366;;;:::o;18759:::-;18901:3;18922:67;18986:2;18981:3;18922:67;:::i;:::-;18915:74;;18998:93;19087:3;18998:93;:::i;:::-;19116:2;19111:3;19107:12;19100:19;;18759:366;;;:::o;19131:::-;19273:3;19294:67;19358:2;19353:3;19294:67;:::i;:::-;19287:74;;19370:93;19459:3;19370:93;:::i;:::-;19488:2;19483:3;19479:12;19472:19;;19131:366;;;:::o;19503:108::-;19580:24;19598:5;19580:24;:::i;:::-;19575:3;19568:37;19503:108;;:::o;19617:118::-;19704:24;19722:5;19704:24;:::i;:::-;19699:3;19692:37;19617:118;;:::o;19741:589::-;19966:3;19988:95;20079:3;20070:6;19988:95;:::i;:::-;19981:102;;20100:95;20191:3;20182:6;20100:95;:::i;:::-;20093:102;;20212:92;20300:3;20291:6;20212:92;:::i;:::-;20205:99;;20321:3;20314:10;;19741:589;;;;;;:::o;20336:379::-;20520:3;20542:147;20685:3;20542:147;:::i;:::-;20535:154;;20706:3;20699:10;;20336:379;;;:::o;20721:222::-;20814:4;20852:2;20841:9;20837:18;20829:26;;20865:71;20933:1;20922:9;20918:17;20909:6;20865:71;:::i;:::-;20721:222;;;;:::o;20949:640::-;21144:4;21182:3;21171:9;21167:19;21159:27;;21196:71;21264:1;21253:9;21249:17;21240:6;21196:71;:::i;:::-;21277:72;21345:2;21334:9;21330:18;21321:6;21277:72;:::i;:::-;21359;21427:2;21416:9;21412:18;21403:6;21359:72;:::i;:::-;21478:9;21472:4;21468:20;21463:2;21452:9;21448:18;21441:48;21506:76;21577:4;21568:6;21506:76;:::i;:::-;21498:84;;20949:640;;;;;;;:::o;21595:373::-;21738:4;21776:2;21765:9;21761:18;21753:26;;21825:9;21819:4;21815:20;21811:1;21800:9;21796:17;21789:47;21853:108;21956:4;21947:6;21853:108;:::i;:::-;21845:116;;21595:373;;;;:::o;21974:210::-;22061:4;22099:2;22088:9;22084:18;22076:26;;22112:65;22174:1;22163:9;22159:17;22150:6;22112:65;:::i;:::-;21974:210;;;;:::o;22190:313::-;22303:4;22341:2;22330:9;22326:18;22318:26;;22390:9;22384:4;22380:20;22376:1;22365:9;22361:17;22354:47;22418:78;22491:4;22482:6;22418:78;:::i;:::-;22410:86;;22190:313;;;;:::o;22509:419::-;22675:4;22713:2;22702:9;22698:18;22690:26;;22762:9;22756:4;22752:20;22748:1;22737:9;22733:17;22726:47;22790:131;22916:4;22790:131;:::i;:::-;22782:139;;22509:419;;;:::o;22934:::-;23100:4;23138:2;23127:9;23123:18;23115:26;;23187:9;23181:4;23177:20;23173:1;23162:9;23158:17;23151:47;23215:131;23341:4;23215:131;:::i;:::-;23207:139;;22934:419;;;:::o;23359:::-;23525:4;23563:2;23552:9;23548:18;23540:26;;23612:9;23606:4;23602:20;23598:1;23587:9;23583:17;23576:47;23640:131;23766:4;23640:131;:::i;:::-;23632:139;;23359:419;;;:::o;23784:::-;23950:4;23988:2;23977:9;23973:18;23965:26;;24037:9;24031:4;24027:20;24023:1;24012:9;24008:17;24001:47;24065:131;24191:4;24065:131;:::i;:::-;24057:139;;23784:419;;;:::o;24209:::-;24375:4;24413:2;24402:9;24398:18;24390:26;;24462:9;24456:4;24452:20;24448:1;24437:9;24433:17;24426:47;24490:131;24616:4;24490:131;:::i;:::-;24482:139;;24209:419;;;:::o;24634:::-;24800:4;24838:2;24827:9;24823:18;24815:26;;24887:9;24881:4;24877:20;24873:1;24862:9;24858:17;24851:47;24915:131;25041:4;24915:131;:::i;:::-;24907:139;;24634:419;;;:::o;25059:::-;25225:4;25263:2;25252:9;25248:18;25240:26;;25312:9;25306:4;25302:20;25298:1;25287:9;25283:17;25276:47;25340:131;25466:4;25340:131;:::i;:::-;25332:139;;25059:419;;;:::o;25484:::-;25650:4;25688:2;25677:9;25673:18;25665:26;;25737:9;25731:4;25727:20;25723:1;25712:9;25708:17;25701:47;25765:131;25891:4;25765:131;:::i;:::-;25757:139;;25484:419;;;:::o;25909:::-;26075:4;26113:2;26102:9;26098:18;26090:26;;26162:9;26156:4;26152:20;26148:1;26137:9;26133:17;26126:47;26190:131;26316:4;26190:131;:::i;:::-;26182:139;;25909:419;;;:::o;26334:::-;26500:4;26538:2;26527:9;26523:18;26515:26;;26587:9;26581:4;26577:20;26573:1;26562:9;26558:17;26551:47;26615:131;26741:4;26615:131;:::i;:::-;26607:139;;26334:419;;;:::o;26759:::-;26925:4;26963:2;26952:9;26948:18;26940:26;;27012:9;27006:4;27002:20;26998:1;26987:9;26983:17;26976:47;27040:131;27166:4;27040:131;:::i;:::-;27032:139;;26759:419;;;:::o;27184:::-;27350:4;27388:2;27377:9;27373:18;27365:26;;27437:9;27431:4;27427:20;27423:1;27412:9;27408:17;27401:47;27465:131;27591:4;27465:131;:::i;:::-;27457:139;;27184:419;;;:::o;27609:::-;27775:4;27813:2;27802:9;27798:18;27790:26;;27862:9;27856:4;27852:20;27848:1;27837:9;27833:17;27826:47;27890:131;28016:4;27890:131;:::i;:::-;27882:139;;27609:419;;;:::o;28034:::-;28200:4;28238:2;28227:9;28223:18;28215:26;;28287:9;28281:4;28277:20;28273:1;28262:9;28258:17;28251:47;28315:131;28441:4;28315:131;:::i;:::-;28307:139;;28034:419;;;:::o;28459:::-;28625:4;28663:2;28652:9;28648:18;28640:26;;28712:9;28706:4;28702:20;28698:1;28687:9;28683:17;28676:47;28740:131;28866:4;28740:131;:::i;:::-;28732:139;;28459:419;;;:::o;28884:::-;29050:4;29088:2;29077:9;29073:18;29065:26;;29137:9;29131:4;29127:20;29123:1;29112:9;29108:17;29101:47;29165:131;29291:4;29165:131;:::i;:::-;29157:139;;28884:419;;;:::o;29309:::-;29475:4;29513:2;29502:9;29498:18;29490:26;;29562:9;29556:4;29552:20;29548:1;29537:9;29533:17;29526:47;29590:131;29716:4;29590:131;:::i;:::-;29582:139;;29309:419;;;:::o;29734:::-;29900:4;29938:2;29927:9;29923:18;29915:26;;29987:9;29981:4;29977:20;29973:1;29962:9;29958:17;29951:47;30015:131;30141:4;30015:131;:::i;:::-;30007:139;;29734:419;;;:::o;30159:::-;30325:4;30363:2;30352:9;30348:18;30340:26;;30412:9;30406:4;30402:20;30398:1;30387:9;30383:17;30376:47;30440:131;30566:4;30440:131;:::i;:::-;30432:139;;30159:419;;;:::o;30584:::-;30750:4;30788:2;30777:9;30773:18;30765:26;;30837:9;30831:4;30827:20;30823:1;30812:9;30808:17;30801:47;30865:131;30991:4;30865:131;:::i;:::-;30857:139;;30584:419;;;:::o;31009:222::-;31102:4;31140:2;31129:9;31125:18;31117:26;;31153:71;31221:1;31210:9;31206:17;31197:6;31153:71;:::i;:::-;31009:222;;;;:::o;31237:129::-;31271:6;31298:20;;:::i;:::-;31288:30;;31327:33;31355:4;31347:6;31327:33;:::i;:::-;31237:129;;;:::o;31372:75::-;31405:6;31438:2;31432:9;31422:19;;31372:75;:::o;31453:307::-;31514:4;31604:18;31596:6;31593:30;31590:56;;;31626:18;;:::i;:::-;31590:56;31664:29;31686:6;31664:29;:::i;:::-;31656:37;;31748:4;31742;31738:15;31730:23;;31453:307;;;:::o;31766:308::-;31828:4;31918:18;31910:6;31907:30;31904:56;;;31940:18;;:::i;:::-;31904:56;31978:29;32000:6;31978:29;:::i;:::-;31970:37;;32062:4;32056;32052:15;32044:23;;31766:308;;;:::o;32080:132::-;32147:4;32170:3;32162:11;;32200:4;32195:3;32191:14;32183:22;;32080:132;;;:::o;32218:141::-;32267:4;32290:3;32282:11;;32313:3;32310:1;32303:14;32347:4;32344:1;32334:18;32326:26;;32218:141;;;:::o;32365:114::-;32432:6;32466:5;32460:12;32450:22;;32365:114;;;:::o;32485:98::-;32536:6;32570:5;32564:12;32554:22;;32485:98;;;:::o;32589:99::-;32641:6;32675:5;32669:12;32659:22;;32589:99;;;:::o;32694:113::-;32764:4;32796;32791:3;32787:14;32779:22;;32694:113;;;:::o;32813:184::-;32912:11;32946:6;32941:3;32934:19;32986:4;32981:3;32977:14;32962:29;;32813:184;;;;:::o;33003:168::-;33086:11;33120:6;33115:3;33108:19;33160:4;33155:3;33151:14;33136:29;;33003:168;;;;:::o;33177:147::-;33278:11;33315:3;33300:18;;33177:147;;;;:::o;33330:169::-;33414:11;33448:6;33443:3;33436:19;33488:4;33483:3;33479:14;33464:29;;33330:169;;;;:::o;33505:148::-;33607:11;33644:3;33629:18;;33505:148;;;;:::o;33659:305::-;33699:3;33718:20;33736:1;33718:20;:::i;:::-;33713:25;;33752:20;33770:1;33752:20;:::i;:::-;33747:25;;33906:1;33838:66;33834:74;33831:1;33828:81;33825:107;;;33912:18;;:::i;:::-;33825:107;33956:1;33953;33949:9;33942:16;;33659:305;;;;:::o;33970:185::-;34010:1;34027:20;34045:1;34027:20;:::i;:::-;34022:25;;34061:20;34079:1;34061:20;:::i;:::-;34056:25;;34100:1;34090:35;;34105:18;;:::i;:::-;34090:35;34147:1;34144;34140:9;34135:14;;33970:185;;;;:::o;34161:191::-;34201:4;34221:20;34239:1;34221:20;:::i;:::-;34216:25;;34255:20;34273:1;34255:20;:::i;:::-;34250:25;;34294:1;34291;34288:8;34285:34;;;34299:18;;:::i;:::-;34285:34;34344:1;34341;34337:9;34329:17;;34161:191;;;;:::o;34358:96::-;34395:7;34424:24;34442:5;34424:24;:::i;:::-;34413:35;;34358:96;;;:::o;34460:90::-;34494:7;34537:5;34530:13;34523:21;34512:32;;34460:90;;;:::o;34556:149::-;34592:7;34632:66;34625:5;34621:78;34610:89;;34556:149;;;:::o;34711:126::-;34748:7;34788:42;34781:5;34777:54;34766:65;;34711:126;;;:::o;34843:77::-;34880:7;34909:5;34898:16;;34843:77;;;:::o;34926:154::-;35010:6;35005:3;35000;34987:30;35072:1;35063:6;35058:3;35054:16;35047:27;34926:154;;;:::o;35086:307::-;35154:1;35164:113;35178:6;35175:1;35172:13;35164:113;;;35263:1;35258:3;35254:11;35248:18;35244:1;35239:3;35235:11;35228:39;35200:2;35197:1;35193:10;35188:15;;35164:113;;;35295:6;35292:1;35289:13;35286:101;;;35375:1;35366:6;35361:3;35357:16;35350:27;35286:101;35135:258;35086:307;;;:::o;35399:320::-;35443:6;35480:1;35474:4;35470:12;35460:22;;35527:1;35521:4;35517:12;35548:18;35538:81;;35604:4;35596:6;35592:17;35582:27;;35538:81;35666:2;35658:6;35655:14;35635:18;35632:38;35629:84;;;35685:18;;:::i;:::-;35629:84;35450:269;35399:320;;;:::o;35725:281::-;35808:27;35830:4;35808:27;:::i;:::-;35800:6;35796:40;35938:6;35926:10;35923:22;35902:18;35890:10;35887:34;35884:62;35881:88;;;35949:18;;:::i;:::-;35881:88;35989:10;35985:2;35978:22;35768:238;35725:281;;:::o;36012:233::-;36051:3;36074:24;36092:5;36074:24;:::i;:::-;36065:33;;36120:66;36113:5;36110:77;36107:103;;;36190:18;;:::i;:::-;36107:103;36237:1;36230:5;36226:13;36219:20;;36012:233;;;:::o;36251:176::-;36283:1;36300:20;36318:1;36300:20;:::i;:::-;36295:25;;36334:20;36352:1;36334:20;:::i;:::-;36329:25;;36373:1;36363:35;;36378:18;;:::i;:::-;36363:35;36419:1;36416;36412:9;36407:14;;36251:176;;;;:::o;36433:180::-;36481:77;36478:1;36471:88;36578:4;36575:1;36568:15;36602:4;36599:1;36592:15;36619:180;36667:77;36664:1;36657:88;36764:4;36761:1;36754:15;36788:4;36785:1;36778:15;36805:180;36853:77;36850:1;36843:88;36950:4;36947:1;36940:15;36974:4;36971:1;36964:15;36991:180;37039:77;37036:1;37029:88;37136:4;37133:1;37126:15;37160:4;37157:1;37150:15;37177:180;37225:77;37222:1;37215:88;37322:4;37319:1;37312:15;37346:4;37343:1;37336:15;37363:117;37472:1;37469;37462:12;37486:117;37595:1;37592;37585:12;37609:117;37718:1;37715;37708:12;37732:117;37841:1;37838;37831:12;37855:102;37896:6;37947:2;37943:7;37938:2;37931:5;37927:14;37923:28;37913:38;;37855:102;;;:::o;37963:237::-;38103:34;38099:1;38091:6;38087:14;38080:58;38172:20;38167:2;38159:6;38155:15;38148:45;37963:237;:::o;38206:225::-;38346:34;38342:1;38334:6;38330:14;38323:58;38415:8;38410:2;38402:6;38398:15;38391:33;38206:225;:::o;38437:224::-;38577:34;38573:1;38565:6;38561:14;38554:58;38646:7;38641:2;38633:6;38629:15;38622:32;38437:224;:::o;38667:178::-;38807:30;38803:1;38795:6;38791:14;38784:54;38667:178;:::o;38851:170::-;38991:22;38987:1;38979:6;38975:14;38968:46;38851:170;:::o;39027:223::-;39167:34;39163:1;39155:6;39151:14;39144:58;39236:6;39231:2;39223:6;39219:15;39212:31;39027:223;:::o;39256:175::-;39396:27;39392:1;39384:6;39380:14;39373:51;39256:175;:::o;39437:231::-;39577:34;39573:1;39565:6;39561:14;39554:58;39646:14;39641:2;39633:6;39629:15;39622:39;39437:231;:::o;39674:243::-;39814:34;39810:1;39802:6;39798:14;39791:58;39883:26;39878:2;39870:6;39866:15;39859:51;39674:243;:::o;39923:229::-;40063:34;40059:1;40051:6;40047:14;40040:58;40132:12;40127:2;40119:6;40115:15;40108:37;39923:229;:::o;40158:228::-;40298:34;40294:1;40286:6;40282:14;40275:58;40367:11;40362:2;40354:6;40350:15;40343:36;40158:228;:::o;40392:182::-;40532:34;40528:1;40520:6;40516:14;40509:58;40392:182;:::o;40580:231::-;40720:34;40716:1;40708:6;40704:14;40697:58;40789:14;40784:2;40776:6;40772:15;40765:39;40580:231;:::o;40817:182::-;40957:34;40953:1;40945:6;40941:14;40934:58;40817:182;:::o;41005:173::-;41145:25;41141:1;41133:6;41129:14;41122:49;41005:173;:::o;41184:234::-;41324:34;41320:1;41312:6;41308:14;41301:58;41393:17;41388:2;41380:6;41376:15;41369:42;41184:234;:::o;41424:220::-;41564:34;41560:1;41552:6;41548:14;41541:58;41633:3;41628:2;41620:6;41616:15;41609:28;41424:220;:::o;41650:114::-;;:::o;41770:170::-;41910:22;41906:1;41898:6;41894:14;41887:46;41770:170;:::o;41946:236::-;42086:34;42082:1;42074:6;42070:14;42063:58;42155:19;42150:2;42142:6;42138:15;42131:44;41946:236;:::o;42188:180::-;42328:32;42324:1;42316:6;42312:14;42305:56;42188:180;:::o;42374:122::-;42447:24;42465:5;42447:24;:::i;:::-;42440:5;42437:35;42427:63;;42486:1;42483;42476:12;42427:63;42374:122;:::o;42502:116::-;42572:21;42587:5;42572:21;:::i;:::-;42565:5;42562:32;42552:60;;42608:1;42605;42598:12;42552:60;42502:116;:::o;42624:120::-;42696:23;42713:5;42696:23;:::i;:::-;42689:5;42686:34;42676:62;;42734:1;42731;42724:12;42676:62;42624:120;:::o;42750:122::-;42823:24;42841:5;42823:24;:::i;:::-;42816:5;42813:35;42803:63;;42862:1;42859;42852:12;42803:63;42750:122;:::o

Swarm Source

ipfs://982bf4b7cf8868d47d567a72f854fc12b2526567fe078e2a224d4c664e75a7f7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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