ETH Price: $3,381.89 (+0.43%)

Cityroots (ROOTS)
 

Overview

TokenID

685

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Cityroots

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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.
     *dsadasdasdassa
     * 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);
}

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



pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/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


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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/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/IERC721Receiver.sol



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





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





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



pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

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

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

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

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

pragma solidity ^0.8.0;

contract Cityroots is ERC721Enumerable, Ownable {
    using Strings for uint256;
    uint256 public PRICE = 0.08 ether;
    
    uint256 public MAX_SOULS;
    uint256 public MAX_PER_MINT;
    uint256 public MAX_SOULS_MINT;
    uint256 public PHASE_OF_SALE;
    address public constant walletA = 0xC5c0A131303dfAB5fB8bcE3052BaB9326629da3d;
    address public constant walletB = 0x2bB1f381A026a7E96b62C47c5C9c5894c4427F97;
    address public constant walletC = 0xfa80c1a8F2968D6526607D780B06ACB68d61Beb8;
    address public constant walletD = 0xeaE7CfDD31b8604533cE196EcbC42947b182fAf2;
    address public constant walletE = 0x1D49C546222fBfb547D914aF70b9EA4271dB770c;
    address public constant walletF = 0x0FC7c5F7d02b654e7F70CBFDfFCAA8a7d1BFfD7e;
    address public constant walletG = 0x76Df64Fc4D2985959e0b4F2d516873aB3a1DCD8a;
    address public constant walletH = 0x57d191742ed608EB4FB3E6A861011A369D82a212;
    address public constant walletI = 0xa18BD9955496AF4e65bFE0324247e5Fbe68Ef41E;
    address public constant walletJ = 0xC129D8D3112D4fFC2C823c560689d4A609786162;
    address public constant walletK = 0xC149E4b47E5b5E9825F8c3710C34B54A7Bced14d;
    address public constant walletL = 0x1c329dEB5fDf43Dd7EeCA157e23B9BA56D1F4AbD;
    address public constant walletM = 0x740Db8f9cC574B70140b6E387D12D2D31c43381F;
    address public constant devAddress = 0x9662d1174E01ecDF9420DC4E93Fc92d4BEF3Bb27;
    address public constant commAddress = 0xBae0BA6629ce37159966372b61C137633D05673B;
    uint256 public numSoulsMinted;
    uint256 public publicPay;
    
    string public baseTokenURI = "http://cityroots.s3-website.us-east-2.amazonaws.com/eldertreesouls/meta/";

    bool public publicSaleStarted;
    bool public presaleStarted;
    
    mapping(address => bool) private _presaleEligible;
    mapping(address => uint256) private _totalClaimed;


    event PresaleMint(address minter, uint256 amountOfSouls);
    event PublicSaleMint(address minter, uint256 amountOfSouls);

    function changePhase(uint256 phase_of_sale) external onlyOwner {
        PHASE_OF_SALE = phase_of_sale;
        if (PHASE_OF_SALE == 1) {
            MAX_SOULS = 4000;
            MAX_PER_MINT = 2;
            MAX_SOULS_MINT = 2;
        } else if (PHASE_OF_SALE == 2) {
            MAX_SOULS = 4875;
            MAX_PER_MINT = 5;
            MAX_SOULS_MINT = 25;
        } else if (PHASE_OF_SALE == 3 || PHASE_OF_SALE == 4) {
           MAX_SOULS = 8000;
           MAX_PER_MINT = 5;
           MAX_SOULS_MINT = 100;
        } else if (PHASE_OF_SALE >= 5){
           MAX_SOULS = 0;
           MAX_PER_MINT = 0;
           MAX_SOULS_MINT = 0;
        }
        if (PHASE_OF_SALE <= 2) {
            publicSaleStarted = false;
            presaleStarted = true;
        } else if (PHASE_OF_SALE > 2) {
            publicSaleStarted = true;
            presaleStarted = false;
        }
        if (PHASE_OF_SALE == 3){
            uint256 presaleBal = address(this).balance;
            _widthdraw(walletA, ((presaleBal * 1500) / 10000));
            _widthdraw(walletB, ((presaleBal * 125) / 10000));
            _widthdraw(walletC, ((presaleBal * 125) / 10000));
            _widthdraw(walletD, ((presaleBal * 250) / 10000));
            _widthdraw(walletE, ((presaleBal * 1500) / 10000));
            _widthdraw(walletF, ((presaleBal * 500) / 10000));
            _widthdraw(walletG, ((presaleBal * 300) / 10000));
            _widthdraw(walletH, ((presaleBal * 500) / 10000));
            _widthdraw(walletI, ((presaleBal * 1290) / 10000));
            _widthdraw(walletJ, ((presaleBal * 625) / 10000));
            _widthdraw(walletK, ((presaleBal * 750) / 10000));
            _widthdraw(walletL, ((presaleBal * 750) / 10000));
            _widthdraw(walletM, ((presaleBal * 500) / 10000));
            _widthdraw(devAddress, ((presaleBal * 1285) / 10000));
        }
    }
    
    constructor() ERC721("Cityroots", "ROOTS") {}
    
    function setbaseTokenURI(string memory baseURI) public onlyOwner returns (string memory) {
        baseTokenURI = baseURI;
        return baseTokenURI;
    }
    
    function checkPhase() external view returns (uint256) {
        return PHASE_OF_SALE;
    }
    function checkBal(address owner) external view returns (uint256) {
        uint256 currentBal = address(this).balance;
        return currentBal;
    }
    
    function addToPresale(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            _presaleEligible[addresses[i]] = true;

            _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0;
        }
    }

    function checkPresaleEligiblity(address addr) external view returns (bool) {
        return _presaleEligible[addr];
    }

    function amountClaimedBy(address owner) external view returns (uint256) {
        require(owner != address(0), "Cannot add null address");

        return _totalClaimed[owner];
    }
    function mint(uint256 amountOfSouls) external payable {
        if (PHASE_OF_SALE <= 2) {
            require(_presaleEligible[msg.sender], "You are not eligible for the presale!");
        } else if (PHASE_OF_SALE == 3) {
           require(!_presaleEligible[msg.sender], "You are not eligible for the for public sale at this time");
        }
        require(totalSupply() < MAX_SOULS, "All tokens have been minted");
        require(amountOfSouls <= MAX_PER_MINT, "Cannot purchase this many tokens in a transaction");
        require(totalSupply() + amountOfSouls <= MAX_SOULS, "Minting would exceed max supply");
        require(_totalClaimed[msg.sender] + amountOfSouls <= MAX_SOULS_MINT, "Purchase exceeds max allowed per address");
        require(amountOfSouls > 0, "Must mint at least one soul");
        require(PRICE * amountOfSouls == msg.value, "ETH amount is incorrect");
        
        for (uint256 i = 0; i < amountOfSouls; i++) {
            uint256 tokenId = numSoulsMinted + 1;

            numSoulsMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PublicSaleMint(msg.sender, amountOfSouls);
    }
    function payout() public onlyOwner {
        uint256 bal = address(this).balance;
        uint256 devBal;
        uint256 commBal;
        require(bal > 0, "Insufficient balance");
        if (bal > 0){
            if (publicPay == 0){
                devBal = ((bal * 80) / 100);
                commBal = ((bal * 20) / 100);
            }else {
                devBal = ((bal * 20) / 100);
                commBal = ((bal * 80) / 100);
            }
            _widthdraw(walletA, ((devBal * 1500) / 10000));
            _widthdraw(walletB, ((devBal * 125) / 10000));
            _widthdraw(walletC, ((devBal * 125) / 10000));
            _widthdraw(walletD, ((devBal * 250) / 10000));
            _widthdraw(walletE, ((devBal * 1500) / 10000));
            _widthdraw(walletF, ((devBal * 500) / 10000));
            _widthdraw(walletG, ((devBal * 300) / 10000));
            _widthdraw(walletH, ((devBal * 500) / 10000));
            _widthdraw(walletI, ((devBal * 1290) / 10000));
            _widthdraw(walletJ, ((devBal * 625) / 10000));
            _widthdraw(walletK, ((devBal * 750) / 10000));
            _widthdraw(walletL, ((devBal * 750) / 10000));
            _widthdraw(walletM, ((devBal * 500) / 10000));
            _widthdraw(devAddress, ((devBal * 1285) / 10000));
            _widthdraw(commAddress, commBal);
            publicPay = 1;
        }
    }

    function _widthdraw(address _address, uint256 _amount) private {
        (bool success, ) = _address.call{ value: _amount }("");
        require(success, "Failed to widthdraw Ether");
    }
    
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return bytes(baseTokenURI).length > 0 ? string(abi.encodePacked(baseTokenURI, tokenId.toString(), ".json")) : "";
    }
}

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":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfSouls","type":"uint256"}],"name":"PresaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfSouls","type":"uint256"}],"name":"PublicSaleMint","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":"MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SOULS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SOULS_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PHASE_OF_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"amountClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"phase_of_sale","type":"uint256"}],"name":"changePhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"checkBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkPresaleEligiblity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"commAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfSouls","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numSoulsMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"payout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setbaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletF","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletJ","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletK","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405267011c37937e080000600b5560405180608001604052806048815260200162005cbe604891396012908051906020019062000041929190620001e4565b503480156200004f57600080fd5b506040518060400160405280600981526020017f43697479726f6f747300000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f524f4f54530000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d4929190620001e4565b508060019080519060200190620000ed929190620001e4565b50505062000110620001046200011660201b60201c565b6200011e60201b60201c565b620002f9565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f29062000294565b90600052602060002090601f01602090048101928262000216576000855562000262565b82601f106200023157805160ff191683800117855562000262565b8280016001018555821562000262579182015b828111156200026157825182559160200191906001019062000244565b5b50905062000271919062000275565b5090565b5b808211156200029057600081600090555060010162000276565b5090565b60006002820490506001821680620002ad57607f821691505b60208210811415620002c457620002c3620002ca565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6159b580620003096000396000f3fe60806040526004361061031a5760003560e01c806370a08231116101ab578063a22cb465116100f7578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610bdb578063efe79bc414610c18578063f2fde38b14610c43578063f3db57a814610c6c5761031a565b8063c87b56dd14610b48578063d547cfb714610b85578063e3f0b76114610bb05761031a565b8063b2649b01116100d1578063b2649b0114610a9e578063b77e7da014610ac9578063b88d4fde14610af4578063c5c9f61714610b1d5761031a565b8063a22cb46514610a21578063a2e9147714610a4a578063aef6ee1f14610a755761031a565b80638d859f3e1161016457806395d89b411161013e57806395d89b411461098457806395e1026e146109af578063a0712d68146109da578063a20f1a48146109f65761031a565b80638d859f3e146109035780638da5cb5b1461092e5780638e8e3ad3146109595761031a565b806370a0823114610803578063715018a61461084057806387cf7768146108575780638b5cd03b146108825780638bfb9671146108ad5780638d1cf105146108d85761031a565b80633ad10ef61161026a5780634f6ccce711610223578063584a0927116101fd578063584a09271461074957806362557de3146107865780636352211e146107af57806363bd1d4a146107ec5761031a565b80634f6ccce7146106b65780635336eca0146106f357806357a756d31461071e5761031a565b80633ad10ef6146105b65780633e8f8647146105e15780633f59aef01461060c57806342842e0e146106375780634311f743146106605780634ac0770b1461068b5761031a565b806315f28c5f116102d75780631978f469116102b15780631978f469146104d657806323b872dd146105135780632f745c591461053c57806337c0df0c146105795761031a565b806315f28c5f1461044357806318160ddd1461046e578063191f65ac146104995761031a565b806301ffc9a71461031f57806304549d6f1461035c57806306fdde0314610387578063081812fc146103b2578063095ea7b3146103ef57806309d42b3014610418575b600080fd5b34801561032b57600080fd5b50610346600480360381019061034191906141a3565b610c97565b60405161035391906148d3565b60405180910390f35b34801561036857600080fd5b50610371610d11565b60405161037e91906148d3565b60405180910390f35b34801561039357600080fd5b5061039c610d24565b6040516103a991906148ee565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190614246565b610db6565b6040516103e69190614843565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190614116565b610e3b565b005b34801561042457600080fd5b5061042d610f53565b60405161043a9190614cb0565b60405180910390f35b34801561044f57600080fd5b50610458610f59565b6040516104659190614843565b60405180910390f35b34801561047a57600080fd5b50610483610f71565b6040516104909190614cb0565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613f93565b610f7e565b6040516104cd91906148d3565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613f93565b610fd4565b60405161050a9190614cb0565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614000565b61108c565b005b34801561054857600080fd5b50610563600480360381019061055e9190614116565b6110ec565b6040516105709190614cb0565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b91906141fd565b611191565b6040516105ad91906148ee565b60405180910390f35b3480156105c257600080fd5b506105cb6112b8565b6040516105d89190614843565b60405180910390f35b3480156105ed57600080fd5b506105f66112d0565b6040516106039190614843565b60405180910390f35b34801561061857600080fd5b506106216112e8565b60405161062e9190614843565b60405180910390f35b34801561064357600080fd5b5061065e60048036038101906106599190614000565b611300565b005b34801561066c57600080fd5b50610675611320565b6040516106829190614cb0565b60405180910390f35b34801561069757600080fd5b506106a0611326565b6040516106ad9190614843565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190614246565b61133e565b6040516106ea9190614cb0565b60405180910390f35b3480156106ff57600080fd5b506107086113af565b6040516107159190614cb0565b60405180910390f35b34801561072a57600080fd5b506107336113b5565b6040516107409190614843565b60405180910390f35b34801561075557600080fd5b50610770600480360381019061076b9190613f93565b6113cd565b60405161077d9190614cb0565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190614246565b6113dc565b005b3480156107bb57600080fd5b506107d660048036038101906107d19190614246565b6118b7565b6040516107e39190614843565b60405180910390f35b3480156107f857600080fd5b50610801611969565b005b34801561080f57600080fd5b5061082a60048036038101906108259190613f93565b611def565b6040516108379190614cb0565b60405180910390f35b34801561084c57600080fd5b50610855611ea7565b005b34801561086357600080fd5b5061086c611f2f565b6040516108799190614843565b60405180910390f35b34801561088e57600080fd5b50610897611f47565b6040516108a49190614843565b60405180910390f35b3480156108b957600080fd5b506108c2611f5f565b6040516108cf9190614cb0565b60405180910390f35b3480156108e457600080fd5b506108ed611f65565b6040516108fa9190614cb0565b60405180910390f35b34801561090f57600080fd5b50610918611f6b565b6040516109259190614cb0565b60405180910390f35b34801561093a57600080fd5b50610943611f71565b6040516109509190614843565b60405180910390f35b34801561096557600080fd5b5061096e611f9b565b60405161097b9190614cb0565b60405180910390f35b34801561099057600080fd5b50610999611fa5565b6040516109a691906148ee565b60405180910390f35b3480156109bb57600080fd5b506109c4612037565b6040516109d19190614843565b60405180910390f35b6109f460048036038101906109ef9190614246565b61204f565b005b348015610a0257600080fd5b50610a0b612476565b604051610a189190614843565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a4391906140d6565b61248e565b005b348015610a5657600080fd5b50610a5f61260f565b604051610a6c91906148d3565b60405180910390f35b348015610a8157600080fd5b50610a9c6004803603810190610a979190614156565b612622565b005b348015610aaa57600080fd5b50610ab36128b8565b604051610ac09190614843565b60405180910390f35b348015610ad557600080fd5b50610ade6128d0565b604051610aeb9190614843565b60405180910390f35b348015610b0057600080fd5b50610b1b6004803603810190610b169190614053565b6128e8565b005b348015610b2957600080fd5b50610b3261294a565b604051610b3f9190614843565b60405180910390f35b348015610b5457600080fd5b50610b6f6004803603810190610b6a9190614246565b612962565b604051610b7c91906148ee565b60405180910390f35b348015610b9157600080fd5b50610b9a612a0a565b604051610ba791906148ee565b60405180910390f35b348015610bbc57600080fd5b50610bc5612a98565b604051610bd29190614843565b60405180910390f35b348015610be757600080fd5b50610c026004803603810190610bfd9190613fc0565b612ab0565b604051610c0f91906148d3565b60405180910390f35b348015610c2457600080fd5b50610c2d612b44565b604051610c3a9190614cb0565b60405180910390f35b348015610c4f57600080fd5b50610c6a6004803603810190610c659190613f93565b612b4a565b005b348015610c7857600080fd5b50610c81612c42565b604051610c8e9190614843565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d0a5750610d0982612c5a565b5b9050919050565b601360019054906101000a900460ff1681565b606060008054610d3390614f80565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5f90614f80565b8015610dac5780601f10610d8157610100808354040283529160200191610dac565b820191906000526020600020905b815481529060010190602001808311610d8f57829003601f168201915b5050505050905090565b6000610dc182612d3c565b610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790614b30565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e46826118b7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae90614bf0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ed6612da8565b73ffffffffffffffffffffffffffffffffffffffff161480610f055750610f0481610eff612da8565b612ab0565b5b610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b90614a50565b60405180910390fd5b610f4e8383612db0565b505050565b600d5481565b732bb1f381a026a7e96b62c47c5c9c5894c4427f9781565b6000600880549050905090565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90614c10565b60405180910390fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109d611097612da8565b82612e69565b6110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390614c30565b60405180910390fd5b6110e7838383612f47565b505050565b60006110f783611def565b8210611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90614910565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b606061119b612da8565b73ffffffffffffffffffffffffffffffffffffffff166111b9611f71565b73ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120690614b50565b60405180910390fd5b8160129080519060200190611225929190613d51565b506012805461123390614f80565b80601f016020809104026020016040519081016040528092919081815260200182805461125f90614f80565b80156112ac5780601f10611281576101008083540402835291602001916112ac565b820191906000526020600020905b81548152906001019060200180831161128f57829003601f168201915b50505050509050919050565b739662d1174e01ecdf9420dc4e93fc92d4bef3bb2781565b73eae7cfdd31b8604533ce196ecbc42947b182faf281565b73bae0ba6629ce37159966372b61c137633d05673b81565b61131b838383604051806020016040528060008152506128e8565b505050565b60105481565b7357d191742ed608eb4fb3e6a861011a369d82a21281565b6000611348610f71565b8210611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138090614c50565b60405180910390fd5b6008828154811061139d5761139c615119565b5b90600052602060002001549050919050565b600e5481565b73fa80c1a8f2968d6526607d780b06acb68d61beb881565b60008047905080915050919050565b6113e4612da8565b73ffffffffffffffffffffffffffffffffffffffff16611402611f71565b73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f90614b50565b60405180910390fd5b80600f819055506001600f54141561148857610fa0600c819055506002600d819055506002600e8190555061150d565b6002600f5414156114b15761130b600c819055506005600d819055506019600e8190555061150c565b6003600f5414806114c457506004600f54145b156114e757611f40600c819055506005600d819055506064600e8190555061150b565b6005600f541061150a576000600c819055506000600d819055506000600e819055505b5b5b5b6002600f5411611552576000601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff021916908315150217905550611595565b6002600f541115611594576001601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff0219169083151502179055505b5b6003600f5414156118b45760004790506115dd73c5c0a131303dfab5fb8bce3052bab9326629da3d6127106105dc846115ce9190614e3c565b6115d89190614e0b565b6131a3565b611614732bb1f381a026a7e96b62c47c5c9c5894c4427f97612710607d846116059190614e3c565b61160f9190614e0b565b6131a3565b61164b73fa80c1a8f2968d6526607d780b06acb68d61beb8612710607d8461163c9190614e3c565b6116469190614e0b565b6131a3565b61168273eae7cfdd31b8604533ce196ecbc42947b182faf261271060fa846116739190614e3c565b61167d9190614e0b565b6131a3565b6116ba731d49c546222fbfb547d914af70b9ea4271db770c6127106105dc846116ab9190614e3c565b6116b59190614e0b565b6131a3565b6116f2730fc7c5f7d02b654e7f70cbfdffcaa8a7d1bffd7e6127106101f4846116e39190614e3c565b6116ed9190614e0b565b6131a3565b61172a7376df64fc4d2985959e0b4f2d516873ab3a1dcd8a61271061012c8461171b9190614e3c565b6117259190614e0b565b6131a3565b6117627357d191742ed608eb4fb3e6a861011a369d82a2126127106101f4846117539190614e3c565b61175d9190614e0b565b6131a3565b61179a73a18bd9955496af4e65bfe0324247e5fbe68ef41e61271061050a8461178b9190614e3c565b6117959190614e0b565b6131a3565b6117d273c129d8d3112d4ffc2c823c560689d4a609786162612710610271846117c39190614e3c565b6117cd9190614e0b565b6131a3565b61180a73c149e4b47e5b5e9825f8c3710c34b54a7bced14d6127106102ee846117fb9190614e3c565b6118059190614e0b565b6131a3565b611842731c329deb5fdf43dd7eeca157e23b9ba56d1f4abd6127106102ee846118339190614e3c565b61183d9190614e0b565b6131a3565b61187a73740db8f9cc574b70140b6e387d12d2d31c43381f6127106101f48461186b9190614e3c565b6118759190614e0b565b6131a3565b6118b2739662d1174e01ecdf9420dc4e93fc92d4bef3bb27612710610505846118a39190614e3c565b6118ad9190614e0b565b6131a3565b505b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790614a90565b60405180910390fd5b80915050919050565b611971612da8565b73ffffffffffffffffffffffffffffffffffffffff1661198f611f71565b73ffffffffffffffffffffffffffffffffffffffff16146119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc90614b50565b60405180910390fd5b600047905060008060008311611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790614a10565b60405180910390fd5b6000831115611dea5760006011541415611a7f576064605084611a539190614e3c565b611a5d9190614e0b565b91506064601484611a6e9190614e3c565b611a789190614e0b565b9050611ab6565b6064601484611a8e9190614e3c565b611a989190614e0b565b91506064605084611aa99190614e3c565b611ab39190614e0b565b90505b611aee73c5c0a131303dfab5fb8bce3052bab9326629da3d6127106105dc85611adf9190614e3c565b611ae99190614e0b565b6131a3565b611b25732bb1f381a026a7e96b62c47c5c9c5894c4427f97612710607d85611b169190614e3c565b611b209190614e0b565b6131a3565b611b5c73fa80c1a8f2968d6526607d780b06acb68d61beb8612710607d85611b4d9190614e3c565b611b579190614e0b565b6131a3565b611b9373eae7cfdd31b8604533ce196ecbc42947b182faf261271060fa85611b849190614e3c565b611b8e9190614e0b565b6131a3565b611bcb731d49c546222fbfb547d914af70b9ea4271db770c6127106105dc85611bbc9190614e3c565b611bc69190614e0b565b6131a3565b611c03730fc7c5f7d02b654e7f70cbfdffcaa8a7d1bffd7e6127106101f485611bf49190614e3c565b611bfe9190614e0b565b6131a3565b611c3b7376df64fc4d2985959e0b4f2d516873ab3a1dcd8a61271061012c85611c2c9190614e3c565b611c369190614e0b565b6131a3565b611c737357d191742ed608eb4fb3e6a861011a369d82a2126127106101f485611c649190614e3c565b611c6e9190614e0b565b6131a3565b611cab73a18bd9955496af4e65bfe0324247e5fbe68ef41e61271061050a85611c9c9190614e3c565b611ca69190614e0b565b6131a3565b611ce373c129d8d3112d4ffc2c823c560689d4a60978616261271061027185611cd49190614e3c565b611cde9190614e0b565b6131a3565b611d1b73c149e4b47e5b5e9825f8c3710c34b54a7bced14d6127106102ee85611d0c9190614e3c565b611d169190614e0b565b6131a3565b611d53731c329deb5fdf43dd7eeca157e23b9ba56d1f4abd6127106102ee85611d449190614e3c565b611d4e9190614e0b565b6131a3565b611d8b73740db8f9cc574b70140b6e387d12d2d31c43381f6127106101f485611d7c9190614e3c565b611d869190614e0b565b6131a3565b611dc3739662d1174e01ecdf9420dc4e93fc92d4bef3bb2761271061050585611db49190614e3c565b611dbe9190614e0b565b6131a3565b611de173bae0ba6629ce37159966372b61c137633d05673b826131a3565b60016011819055505b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5790614a70565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611eaf612da8565b73ffffffffffffffffffffffffffffffffffffffff16611ecd611f71565b73ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90614b50565b60405180910390fd5b611f2d6000613254565b565b7376df64fc4d2985959e0b4f2d516873ab3a1dcd8a81565b73740db8f9cc574b70140b6e387d12d2d31c43381f81565b600c5481565b600f5481565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600f54905090565b606060018054611fb490614f80565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe090614f80565b801561202d5780601f106120025761010080835404028352916020019161202d565b820191906000526020600020905b81548152906001019060200180831161201057829003601f168201915b5050505050905090565b731c329deb5fdf43dd7eeca157e23b9ba56d1f4abd81565b6002600f54116120ea57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc90614c70565b60405180910390fd5b612184565b6003600f54141561218357601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990614990565b60405180910390fd5b5b5b600c5461218f610f71565b106121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c690614c90565b60405180910390fd5b600d54811115612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90614ad0565b60405180910390fd5b600c5481612220610f71565b61222a9190614db5565b111561226b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226290614ab0565b60405180910390fd5b600e5481601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122b99190614db5565b11156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f190614bd0565b60405180910390fd5b6000811161233d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612334906149f0565b60405180910390fd5b3481600b5461234c9190614e3c565b1461238c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238390614b10565b60405180910390fd5b60005b8181101561243957600060016010546123a89190614db5565b90506001601060008282546123bd9190614db5565b925050819055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124149190614db5565b92505081905550612425338261331a565b50808061243190614fe3565b91505061238f565b507f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b5338260405161246b9291906148aa565b60405180910390a150565b73a18bd9955496af4e65bfe0324247e5fbe68ef41e81565b612496612da8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb906149d0565b60405180910390fd5b8060056000612511612da8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166125be612da8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161260391906148d3565b60405180910390a35050565b601360009054906101000a900460ff1681565b61262a612da8565b73ffffffffffffffffffffffffffffffffffffffff16612648611f71565b73ffffffffffffffffffffffffffffffffffffffff161461269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269590614b50565b60405180910390fd5b60005b828290508110156128b357600073ffffffffffffffffffffffffffffffffffffffff168383838181106126d7576126d6615119565b5b90506020020160208101906126ec9190613f93565b73ffffffffffffffffffffffffffffffffffffffff161415612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273a90614c10565b60405180910390fd5b60016014600085858581811061275c5761275b615119565b5b90506020020160208101906127719190613f93565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601560008585858181106127db576127da615119565b5b90506020020160208101906127f09190613f93565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161283757600061289f565b6015600084848481811061284e5761284d615119565b5b90506020020160208101906128639190613f93565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b5080806128ab90614fe3565b9150506126a1565b505050565b73c149e4b47e5b5e9825f8c3710c34b54a7bced14d81565b73c5c0a131303dfab5fb8bce3052bab9326629da3d81565b6128f96128f3612da8565b83612e69565b612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292f90614c30565b60405180910390fd5b61294484848484613338565b50505050565b731d49c546222fbfb547d914af70b9ea4271db770c81565b606061296d82612d3c565b6129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a390614b90565b60405180910390fd5b6000601280546129bb90614f80565b9050116129d75760405180602001604052806000815250612a03565b60126129e283613394565b6040516020016129f39291906147ff565b6040516020818303038152906040525b9050919050565b60128054612a1790614f80565b80601f0160208091040260200160405190810160405280929190818152602001828054612a4390614f80565b8015612a905780601f10612a6557610100808354040283529160200191612a90565b820191906000526020600020905b815481529060010190602001808311612a7357829003601f168201915b505050505081565b730fc7c5f7d02b654e7f70cbfdffcaa8a7d1bffd7e81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60115481565b612b52612da8565b73ffffffffffffffffffffffffffffffffffffffff16612b70611f71565b73ffffffffffffffffffffffffffffffffffffffff1614612bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbd90614b50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2d90614950565b60405180910390fd5b612c3f81613254565b50565b73c129d8d3112d4ffc2c823c560689d4a60978616281565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d2557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d355750612d34826134f5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612e23836118b7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612e7482612d3c565b612eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaa90614a30565b60405180910390fd5b6000612ebe836118b7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f2d57508373ffffffffffffffffffffffffffffffffffffffff16612f1584610db6565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f3e5750612f3d8185612ab0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f67826118b7565b73ffffffffffffffffffffffffffffffffffffffff1614612fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb490614b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561302d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613024906149b0565b60405180910390fd5b61303883838361355f565b613043600082612db0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130939190614e96565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130ea9190614db5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516131c99061482e565b60006040518083038185875af1925050503d8060008114613206576040519150601f19603f3d011682016040523d82523d6000602084013e61320b565b606091505b505090508061324f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324690614bb0565b60405180910390fd5b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613334828260405180602001604052806000815250613673565b5050565b613343848484612f47565b61334f848484846136ce565b61338e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338590614930565b60405180910390fd5b50505050565b606060008214156133dc576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134f0565b600082905060005b6000821461340e5780806133f790614fe3565b915050600a826134079190614e0b565b91506133e4565b60008167ffffffffffffffff81111561342a57613429615148565b5b6040519080825280601f01601f19166020018201604052801561345c5781602001600182028036833780820191505090505b5090505b600085146134e9576001826134759190614e96565b9150600a85613484919061502c565b60306134909190614db5565b60f81b8183815181106134a6576134a5615119565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134e29190614e0b565b9450613460565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61356a838383613865565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135ad576135a88161386a565b6135ec565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146135eb576135ea83826138b3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561362f5761362a81613a20565b61366e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461366d5761366c8282613af1565b5b5b505050565b61367d8383613b70565b61368a60008484846136ce565b6136c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c090614930565b60405180910390fd5b505050565b60006136ef8473ffffffffffffffffffffffffffffffffffffffff16613d3e565b15613858578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613718612da8565b8786866040518563ffffffff1660e01b815260040161373a949392919061485e565b602060405180830381600087803b15801561375457600080fd5b505af192505050801561378557506040513d601f19601f8201168201806040525081019061378291906141d0565b60015b613808573d80600081146137b5576040519150601f19603f3d011682016040523d82523d6000602084013e6137ba565b606091505b50600081511415613800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f790614930565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061385d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016138c084611def565b6138ca9190614e96565b90506000600760008481526020019081526020016000205490508181146139af576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613a349190614e96565b9050600060096000848152602001908152602001600020549050600060088381548110613a6457613a63615119565b5b906000526020600020015490508060088381548110613a8657613a85615119565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613ad557613ad46150ea565b5b6001900381819060005260206000200160009055905550505050565b6000613afc83611def565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd790614af0565b60405180910390fd5b613be981612d3c565b15613c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2090614970565b60405180910390fd5b613c356000838361355f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c859190614db5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613d5d90614f80565b90600052602060002090601f016020900481019282613d7f5760008555613dc6565b82601f10613d9857805160ff1916838001178555613dc6565b82800160010185558215613dc6579182015b82811115613dc5578251825591602001919060010190613daa565b5b509050613dd39190613dd7565b5090565b5b80821115613df0576000816000905550600101613dd8565b5090565b6000613e07613e0284614cf0565b614ccb565b905082815260208101848484011115613e2357613e22615186565b5b613e2e848285614f3e565b509392505050565b6000613e49613e4484614d21565b614ccb565b905082815260208101848484011115613e6557613e64615186565b5b613e70848285614f3e565b509392505050565b600081359050613e8781615923565b92915050565b60008083601f840112613ea357613ea261517c565b5b8235905067ffffffffffffffff811115613ec057613ebf615177565b5b602083019150836020820283011115613edc57613edb615181565b5b9250929050565b600081359050613ef28161593a565b92915050565b600081359050613f0781615951565b92915050565b600081519050613f1c81615951565b92915050565b600082601f830112613f3757613f3661517c565b5b8135613f47848260208601613df4565b91505092915050565b600082601f830112613f6557613f6461517c565b5b8135613f75848260208601613e36565b91505092915050565b600081359050613f8d81615968565b92915050565b600060208284031215613fa957613fa8615190565b5b6000613fb784828501613e78565b91505092915050565b60008060408385031215613fd757613fd6615190565b5b6000613fe585828601613e78565b9250506020613ff685828601613e78565b9150509250929050565b60008060006060848603121561401957614018615190565b5b600061402786828701613e78565b935050602061403886828701613e78565b925050604061404986828701613f7e565b9150509250925092565b6000806000806080858703121561406d5761406c615190565b5b600061407b87828801613e78565b945050602061408c87828801613e78565b935050604061409d87828801613f7e565b925050606085013567ffffffffffffffff8111156140be576140bd61518b565b5b6140ca87828801613f22565b91505092959194509250565b600080604083850312156140ed576140ec615190565b5b60006140fb85828601613e78565b925050602061410c85828601613ee3565b9150509250929050565b6000806040838503121561412d5761412c615190565b5b600061413b85828601613e78565b925050602061414c85828601613f7e565b9150509250929050565b6000806020838503121561416d5761416c615190565b5b600083013567ffffffffffffffff81111561418b5761418a61518b565b5b61419785828601613e8d565b92509250509250929050565b6000602082840312156141b9576141b8615190565b5b60006141c784828501613ef8565b91505092915050565b6000602082840312156141e6576141e5615190565b5b60006141f484828501613f0d565b91505092915050565b60006020828403121561421357614212615190565b5b600082013567ffffffffffffffff8111156142315761423061518b565b5b61423d84828501613f50565b91505092915050565b60006020828403121561425c5761425b615190565b5b600061426a84828501613f7e565b91505092915050565b61427c81614eca565b82525050565b61428b81614edc565b82525050565b600061429c82614d67565b6142a68185614d7d565b93506142b6818560208601614f4d565b6142bf81615195565b840191505092915050565b60006142d582614d72565b6142df8185614d99565b93506142ef818560208601614f4d565b6142f881615195565b840191505092915050565b600061430e82614d72565b6143188185614daa565b9350614328818560208601614f4d565b80840191505092915050565b6000815461434181614f80565b61434b8186614daa565b945060018216600081146143665760018114614377576143aa565b60ff198316865281860193506143aa565b61438085614d52565b60005b838110156143a257815481890152600182019150602081019050614383565b838801955050505b50505092915050565b60006143c0602b83614d99565b91506143cb826151a6565b604082019050919050565b60006143e3603283614d99565b91506143ee826151f5565b604082019050919050565b6000614406602683614d99565b915061441182615244565b604082019050919050565b6000614429601c83614d99565b915061443482615293565b602082019050919050565b600061444c603983614d99565b9150614457826152bc565b604082019050919050565b600061446f602483614d99565b915061447a8261530b565b604082019050919050565b6000614492601983614d99565b915061449d8261535a565b602082019050919050565b60006144b5601b83614d99565b91506144c082615383565b602082019050919050565b60006144d8601483614d99565b91506144e3826153ac565b602082019050919050565b60006144fb602c83614d99565b9150614506826153d5565b604082019050919050565b600061451e603883614d99565b915061452982615424565b604082019050919050565b6000614541602a83614d99565b915061454c82615473565b604082019050919050565b6000614564602983614d99565b915061456f826154c2565b604082019050919050565b6000614587601f83614d99565b915061459282615511565b602082019050919050565b60006145aa603183614d99565b91506145b58261553a565b604082019050919050565b60006145cd602083614d99565b91506145d882615589565b602082019050919050565b60006145f0601783614d99565b91506145fb826155b2565b602082019050919050565b6000614613602c83614d99565b915061461e826155db565b604082019050919050565b6000614636600583614daa565b91506146418261562a565b600582019050919050565b6000614659602083614d99565b915061466482615653565b602082019050919050565b600061467c602983614d99565b91506146878261567c565b604082019050919050565b600061469f602f83614d99565b91506146aa826156cb565b604082019050919050565b60006146c2601983614d99565b91506146cd8261571a565b602082019050919050565b60006146e5602883614d99565b91506146f082615743565b604082019050919050565b6000614708602183614d99565b915061471382615792565b604082019050919050565b600061472b600083614d8e565b9150614736826157e1565b600082019050919050565b600061474e601783614d99565b9150614759826157e4565b602082019050919050565b6000614771603183614d99565b915061477c8261580d565b604082019050919050565b6000614794602c83614d99565b915061479f8261585c565b604082019050919050565b60006147b7602583614d99565b91506147c2826158ab565b604082019050919050565b60006147da601b83614d99565b91506147e5826158fa565b602082019050919050565b6147f981614f34565b82525050565b600061480b8285614334565b91506148178284614303565b915061482282614629565b91508190509392505050565b60006148398261471e565b9150819050919050565b60006020820190506148586000830184614273565b92915050565b60006080820190506148736000830187614273565b6148806020830186614273565b61488d60408301856147f0565b818103606083015261489f8184614291565b905095945050505050565b60006040820190506148bf6000830185614273565b6148cc60208301846147f0565b9392505050565b60006020820190506148e86000830184614282565b92915050565b6000602082019050818103600083015261490881846142ca565b905092915050565b60006020820190508181036000830152614929816143b3565b9050919050565b60006020820190508181036000830152614949816143d6565b9050919050565b60006020820190508181036000830152614969816143f9565b9050919050565b600060208201905081810360008301526149898161441c565b9050919050565b600060208201905081810360008301526149a98161443f565b9050919050565b600060208201905081810360008301526149c981614462565b9050919050565b600060208201905081810360008301526149e981614485565b9050919050565b60006020820190508181036000830152614a09816144a8565b9050919050565b60006020820190508181036000830152614a29816144cb565b9050919050565b60006020820190508181036000830152614a49816144ee565b9050919050565b60006020820190508181036000830152614a6981614511565b9050919050565b60006020820190508181036000830152614a8981614534565b9050919050565b60006020820190508181036000830152614aa981614557565b9050919050565b60006020820190508181036000830152614ac98161457a565b9050919050565b60006020820190508181036000830152614ae98161459d565b9050919050565b60006020820190508181036000830152614b09816145c0565b9050919050565b60006020820190508181036000830152614b29816145e3565b9050919050565b60006020820190508181036000830152614b4981614606565b9050919050565b60006020820190508181036000830152614b698161464c565b9050919050565b60006020820190508181036000830152614b898161466f565b9050919050565b60006020820190508181036000830152614ba981614692565b9050919050565b60006020820190508181036000830152614bc9816146b5565b9050919050565b60006020820190508181036000830152614be9816146d8565b9050919050565b60006020820190508181036000830152614c09816146fb565b9050919050565b60006020820190508181036000830152614c2981614741565b9050919050565b60006020820190508181036000830152614c4981614764565b9050919050565b60006020820190508181036000830152614c6981614787565b9050919050565b60006020820190508181036000830152614c89816147aa565b9050919050565b60006020820190508181036000830152614ca9816147cd565b9050919050565b6000602082019050614cc560008301846147f0565b92915050565b6000614cd5614ce6565b9050614ce18282614fb2565b919050565b6000604051905090565b600067ffffffffffffffff821115614d0b57614d0a615148565b5b614d1482615195565b9050602081019050919050565b600067ffffffffffffffff821115614d3c57614d3b615148565b5b614d4582615195565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614dc082614f34565b9150614dcb83614f34565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e0057614dff61505d565b5b828201905092915050565b6000614e1682614f34565b9150614e2183614f34565b925082614e3157614e3061508c565b5b828204905092915050565b6000614e4782614f34565b9150614e5283614f34565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e8b57614e8a61505d565b5b828202905092915050565b6000614ea182614f34565b9150614eac83614f34565b925082821015614ebf57614ebe61505d565b5b828203905092915050565b6000614ed582614f14565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f6b578082015181840152602081019050614f50565b83811115614f7a576000848401525b50505050565b60006002820490506001821680614f9857607f821691505b60208210811415614fac57614fab6150bb565b5b50919050565b614fbb82615195565b810181811067ffffffffffffffff82111715614fda57614fd9615148565b5b80604052505050565b6000614fee82614f34565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150215761502061505d565b5b600182019050919050565b600061503782614f34565b915061504283614f34565b9250826150525761505161508c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f7520617265206e6f7420656c696769626c6520666f722074686520666f7260008201527f207075626c69632073616c6520617420746869732074696d6500000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d757374206d696e74206174206c65617374206f6e6520736f756c0000000000600082015250565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20696e2061207472616e73616374696f6e000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45544820616d6f756e7420697320696e636f7272656374000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077696474686472617720457468657200000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f7765642070657260008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6521000000000000000000000000000000000000000000000000000000602082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b61592c81614eca565b811461593757600080fd5b50565b61594381614edc565b811461594e57600080fd5b50565b61595a81614ee8565b811461596557600080fd5b50565b61597181614f34565b811461597c57600080fd5b5056fea2646970667358221220e773b72799f3e34507dc05a465d52bcec40cde14afad3d86a3dc92ebb31e18b164736f6c63430008070033687474703a2f2f63697479726f6f74732e73332d776562736974652e75732d656173742d322e616d617a6f6e6177732e636f6d2f656c64657274726565736f756c732f6d6574612f

Deployed Bytecode

0x60806040526004361061031a5760003560e01c806370a08231116101ab578063a22cb465116100f7578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610bdb578063efe79bc414610c18578063f2fde38b14610c43578063f3db57a814610c6c5761031a565b8063c87b56dd14610b48578063d547cfb714610b85578063e3f0b76114610bb05761031a565b8063b2649b01116100d1578063b2649b0114610a9e578063b77e7da014610ac9578063b88d4fde14610af4578063c5c9f61714610b1d5761031a565b8063a22cb46514610a21578063a2e9147714610a4a578063aef6ee1f14610a755761031a565b80638d859f3e1161016457806395d89b411161013e57806395d89b411461098457806395e1026e146109af578063a0712d68146109da578063a20f1a48146109f65761031a565b80638d859f3e146109035780638da5cb5b1461092e5780638e8e3ad3146109595761031a565b806370a0823114610803578063715018a61461084057806387cf7768146108575780638b5cd03b146108825780638bfb9671146108ad5780638d1cf105146108d85761031a565b80633ad10ef61161026a5780634f6ccce711610223578063584a0927116101fd578063584a09271461074957806362557de3146107865780636352211e146107af57806363bd1d4a146107ec5761031a565b80634f6ccce7146106b65780635336eca0146106f357806357a756d31461071e5761031a565b80633ad10ef6146105b65780633e8f8647146105e15780633f59aef01461060c57806342842e0e146106375780634311f743146106605780634ac0770b1461068b5761031a565b806315f28c5f116102d75780631978f469116102b15780631978f469146104d657806323b872dd146105135780632f745c591461053c57806337c0df0c146105795761031a565b806315f28c5f1461044357806318160ddd1461046e578063191f65ac146104995761031a565b806301ffc9a71461031f57806304549d6f1461035c57806306fdde0314610387578063081812fc146103b2578063095ea7b3146103ef57806309d42b3014610418575b600080fd5b34801561032b57600080fd5b50610346600480360381019061034191906141a3565b610c97565b60405161035391906148d3565b60405180910390f35b34801561036857600080fd5b50610371610d11565b60405161037e91906148d3565b60405180910390f35b34801561039357600080fd5b5061039c610d24565b6040516103a991906148ee565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190614246565b610db6565b6040516103e69190614843565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190614116565b610e3b565b005b34801561042457600080fd5b5061042d610f53565b60405161043a9190614cb0565b60405180910390f35b34801561044f57600080fd5b50610458610f59565b6040516104659190614843565b60405180910390f35b34801561047a57600080fd5b50610483610f71565b6040516104909190614cb0565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613f93565b610f7e565b6040516104cd91906148d3565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613f93565b610fd4565b60405161050a9190614cb0565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614000565b61108c565b005b34801561054857600080fd5b50610563600480360381019061055e9190614116565b6110ec565b6040516105709190614cb0565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b91906141fd565b611191565b6040516105ad91906148ee565b60405180910390f35b3480156105c257600080fd5b506105cb6112b8565b6040516105d89190614843565b60405180910390f35b3480156105ed57600080fd5b506105f66112d0565b6040516106039190614843565b60405180910390f35b34801561061857600080fd5b506106216112e8565b60405161062e9190614843565b60405180910390f35b34801561064357600080fd5b5061065e60048036038101906106599190614000565b611300565b005b34801561066c57600080fd5b50610675611320565b6040516106829190614cb0565b60405180910390f35b34801561069757600080fd5b506106a0611326565b6040516106ad9190614843565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190614246565b61133e565b6040516106ea9190614cb0565b60405180910390f35b3480156106ff57600080fd5b506107086113af565b6040516107159190614cb0565b60405180910390f35b34801561072a57600080fd5b506107336113b5565b6040516107409190614843565b60405180910390f35b34801561075557600080fd5b50610770600480360381019061076b9190613f93565b6113cd565b60405161077d9190614cb0565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190614246565b6113dc565b005b3480156107bb57600080fd5b506107d660048036038101906107d19190614246565b6118b7565b6040516107e39190614843565b60405180910390f35b3480156107f857600080fd5b50610801611969565b005b34801561080f57600080fd5b5061082a60048036038101906108259190613f93565b611def565b6040516108379190614cb0565b60405180910390f35b34801561084c57600080fd5b50610855611ea7565b005b34801561086357600080fd5b5061086c611f2f565b6040516108799190614843565b60405180910390f35b34801561088e57600080fd5b50610897611f47565b6040516108a49190614843565b60405180910390f35b3480156108b957600080fd5b506108c2611f5f565b6040516108cf9190614cb0565b60405180910390f35b3480156108e457600080fd5b506108ed611f65565b6040516108fa9190614cb0565b60405180910390f35b34801561090f57600080fd5b50610918611f6b565b6040516109259190614cb0565b60405180910390f35b34801561093a57600080fd5b50610943611f71565b6040516109509190614843565b60405180910390f35b34801561096557600080fd5b5061096e611f9b565b60405161097b9190614cb0565b60405180910390f35b34801561099057600080fd5b50610999611fa5565b6040516109a691906148ee565b60405180910390f35b3480156109bb57600080fd5b506109c4612037565b6040516109d19190614843565b60405180910390f35b6109f460048036038101906109ef9190614246565b61204f565b005b348015610a0257600080fd5b50610a0b612476565b604051610a189190614843565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a4391906140d6565b61248e565b005b348015610a5657600080fd5b50610a5f61260f565b604051610a6c91906148d3565b60405180910390f35b348015610a8157600080fd5b50610a9c6004803603810190610a979190614156565b612622565b005b348015610aaa57600080fd5b50610ab36128b8565b604051610ac09190614843565b60405180910390f35b348015610ad557600080fd5b50610ade6128d0565b604051610aeb9190614843565b60405180910390f35b348015610b0057600080fd5b50610b1b6004803603810190610b169190614053565b6128e8565b005b348015610b2957600080fd5b50610b3261294a565b604051610b3f9190614843565b60405180910390f35b348015610b5457600080fd5b50610b6f6004803603810190610b6a9190614246565b612962565b604051610b7c91906148ee565b60405180910390f35b348015610b9157600080fd5b50610b9a612a0a565b604051610ba791906148ee565b60405180910390f35b348015610bbc57600080fd5b50610bc5612a98565b604051610bd29190614843565b60405180910390f35b348015610be757600080fd5b50610c026004803603810190610bfd9190613fc0565b612ab0565b604051610c0f91906148d3565b60405180910390f35b348015610c2457600080fd5b50610c2d612b44565b604051610c3a9190614cb0565b60405180910390f35b348015610c4f57600080fd5b50610c6a6004803603810190610c659190613f93565b612b4a565b005b348015610c7857600080fd5b50610c81612c42565b604051610c8e9190614843565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d0a5750610d0982612c5a565b5b9050919050565b601360019054906101000a900460ff1681565b606060008054610d3390614f80565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5f90614f80565b8015610dac5780601f10610d8157610100808354040283529160200191610dac565b820191906000526020600020905b815481529060010190602001808311610d8f57829003601f168201915b5050505050905090565b6000610dc182612d3c565b610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790614b30565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e46826118b7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae90614bf0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ed6612da8565b73ffffffffffffffffffffffffffffffffffffffff161480610f055750610f0481610eff612da8565b612ab0565b5b610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b90614a50565b60405180910390fd5b610f4e8383612db0565b505050565b600d5481565b732bb1f381a026a7e96b62c47c5c9c5894c4427f9781565b6000600880549050905090565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90614c10565b60405180910390fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109d611097612da8565b82612e69565b6110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390614c30565b60405180910390fd5b6110e7838383612f47565b505050565b60006110f783611def565b8210611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90614910565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b606061119b612da8565b73ffffffffffffffffffffffffffffffffffffffff166111b9611f71565b73ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120690614b50565b60405180910390fd5b8160129080519060200190611225929190613d51565b506012805461123390614f80565b80601f016020809104026020016040519081016040528092919081815260200182805461125f90614f80565b80156112ac5780601f10611281576101008083540402835291602001916112ac565b820191906000526020600020905b81548152906001019060200180831161128f57829003601f168201915b50505050509050919050565b739662d1174e01ecdf9420dc4e93fc92d4bef3bb2781565b73eae7cfdd31b8604533ce196ecbc42947b182faf281565b73bae0ba6629ce37159966372b61c137633d05673b81565b61131b838383604051806020016040528060008152506128e8565b505050565b60105481565b7357d191742ed608eb4fb3e6a861011a369d82a21281565b6000611348610f71565b8210611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138090614c50565b60405180910390fd5b6008828154811061139d5761139c615119565b5b90600052602060002001549050919050565b600e5481565b73fa80c1a8f2968d6526607d780b06acb68d61beb881565b60008047905080915050919050565b6113e4612da8565b73ffffffffffffffffffffffffffffffffffffffff16611402611f71565b73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f90614b50565b60405180910390fd5b80600f819055506001600f54141561148857610fa0600c819055506002600d819055506002600e8190555061150d565b6002600f5414156114b15761130b600c819055506005600d819055506019600e8190555061150c565b6003600f5414806114c457506004600f54145b156114e757611f40600c819055506005600d819055506064600e8190555061150b565b6005600f541061150a576000600c819055506000600d819055506000600e819055505b5b5b5b6002600f5411611552576000601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff021916908315150217905550611595565b6002600f541115611594576001601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff0219169083151502179055505b5b6003600f5414156118b45760004790506115dd73c5c0a131303dfab5fb8bce3052bab9326629da3d6127106105dc846115ce9190614e3c565b6115d89190614e0b565b6131a3565b611614732bb1f381a026a7e96b62c47c5c9c5894c4427f97612710607d846116059190614e3c565b61160f9190614e0b565b6131a3565b61164b73fa80c1a8f2968d6526607d780b06acb68d61beb8612710607d8461163c9190614e3c565b6116469190614e0b565b6131a3565b61168273eae7cfdd31b8604533ce196ecbc42947b182faf261271060fa846116739190614e3c565b61167d9190614e0b565b6131a3565b6116ba731d49c546222fbfb547d914af70b9ea4271db770c6127106105dc846116ab9190614e3c565b6116b59190614e0b565b6131a3565b6116f2730fc7c5f7d02b654e7f70cbfdffcaa8a7d1bffd7e6127106101f4846116e39190614e3c565b6116ed9190614e0b565b6131a3565b61172a7376df64fc4d2985959e0b4f2d516873ab3a1dcd8a61271061012c8461171b9190614e3c565b6117259190614e0b565b6131a3565b6117627357d191742ed608eb4fb3e6a861011a369d82a2126127106101f4846117539190614e3c565b61175d9190614e0b565b6131a3565b61179a73a18bd9955496af4e65bfe0324247e5fbe68ef41e61271061050a8461178b9190614e3c565b6117959190614e0b565b6131a3565b6117d273c129d8d3112d4ffc2c823c560689d4a609786162612710610271846117c39190614e3c565b6117cd9190614e0b565b6131a3565b61180a73c149e4b47e5b5e9825f8c3710c34b54a7bced14d6127106102ee846117fb9190614e3c565b6118059190614e0b565b6131a3565b611842731c329deb5fdf43dd7eeca157e23b9ba56d1f4abd6127106102ee846118339190614e3c565b61183d9190614e0b565b6131a3565b61187a73740db8f9cc574b70140b6e387d12d2d31c43381f6127106101f48461186b9190614e3c565b6118759190614e0b565b6131a3565b6118b2739662d1174e01ecdf9420dc4e93fc92d4bef3bb27612710610505846118a39190614e3c565b6118ad9190614e0b565b6131a3565b505b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790614a90565b60405180910390fd5b80915050919050565b611971612da8565b73ffffffffffffffffffffffffffffffffffffffff1661198f611f71565b73ffffffffffffffffffffffffffffffffffffffff16146119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc90614b50565b60405180910390fd5b600047905060008060008311611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790614a10565b60405180910390fd5b6000831115611dea5760006011541415611a7f576064605084611a539190614e3c565b611a5d9190614e0b565b91506064601484611a6e9190614e3c565b611a789190614e0b565b9050611ab6565b6064601484611a8e9190614e3c565b611a989190614e0b565b91506064605084611aa99190614e3c565b611ab39190614e0b565b90505b611aee73c5c0a131303dfab5fb8bce3052bab9326629da3d6127106105dc85611adf9190614e3c565b611ae99190614e0b565b6131a3565b611b25732bb1f381a026a7e96b62c47c5c9c5894c4427f97612710607d85611b169190614e3c565b611b209190614e0b565b6131a3565b611b5c73fa80c1a8f2968d6526607d780b06acb68d61beb8612710607d85611b4d9190614e3c565b611b579190614e0b565b6131a3565b611b9373eae7cfdd31b8604533ce196ecbc42947b182faf261271060fa85611b849190614e3c565b611b8e9190614e0b565b6131a3565b611bcb731d49c546222fbfb547d914af70b9ea4271db770c6127106105dc85611bbc9190614e3c565b611bc69190614e0b565b6131a3565b611c03730fc7c5f7d02b654e7f70cbfdffcaa8a7d1bffd7e6127106101f485611bf49190614e3c565b611bfe9190614e0b565b6131a3565b611c3b7376df64fc4d2985959e0b4f2d516873ab3a1dcd8a61271061012c85611c2c9190614e3c565b611c369190614e0b565b6131a3565b611c737357d191742ed608eb4fb3e6a861011a369d82a2126127106101f485611c649190614e3c565b611c6e9190614e0b565b6131a3565b611cab73a18bd9955496af4e65bfe0324247e5fbe68ef41e61271061050a85611c9c9190614e3c565b611ca69190614e0b565b6131a3565b611ce373c129d8d3112d4ffc2c823c560689d4a60978616261271061027185611cd49190614e3c565b611cde9190614e0b565b6131a3565b611d1b73c149e4b47e5b5e9825f8c3710c34b54a7bced14d6127106102ee85611d0c9190614e3c565b611d169190614e0b565b6131a3565b611d53731c329deb5fdf43dd7eeca157e23b9ba56d1f4abd6127106102ee85611d449190614e3c565b611d4e9190614e0b565b6131a3565b611d8b73740db8f9cc574b70140b6e387d12d2d31c43381f6127106101f485611d7c9190614e3c565b611d869190614e0b565b6131a3565b611dc3739662d1174e01ecdf9420dc4e93fc92d4bef3bb2761271061050585611db49190614e3c565b611dbe9190614e0b565b6131a3565b611de173bae0ba6629ce37159966372b61c137633d05673b826131a3565b60016011819055505b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5790614a70565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611eaf612da8565b73ffffffffffffffffffffffffffffffffffffffff16611ecd611f71565b73ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90614b50565b60405180910390fd5b611f2d6000613254565b565b7376df64fc4d2985959e0b4f2d516873ab3a1dcd8a81565b73740db8f9cc574b70140b6e387d12d2d31c43381f81565b600c5481565b600f5481565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600f54905090565b606060018054611fb490614f80565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe090614f80565b801561202d5780601f106120025761010080835404028352916020019161202d565b820191906000526020600020905b81548152906001019060200180831161201057829003601f168201915b5050505050905090565b731c329deb5fdf43dd7eeca157e23b9ba56d1f4abd81565b6002600f54116120ea57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc90614c70565b60405180910390fd5b612184565b6003600f54141561218357601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990614990565b60405180910390fd5b5b5b600c5461218f610f71565b106121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c690614c90565b60405180910390fd5b600d54811115612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90614ad0565b60405180910390fd5b600c5481612220610f71565b61222a9190614db5565b111561226b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226290614ab0565b60405180910390fd5b600e5481601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122b99190614db5565b11156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f190614bd0565b60405180910390fd5b6000811161233d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612334906149f0565b60405180910390fd5b3481600b5461234c9190614e3c565b1461238c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238390614b10565b60405180910390fd5b60005b8181101561243957600060016010546123a89190614db5565b90506001601060008282546123bd9190614db5565b925050819055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124149190614db5565b92505081905550612425338261331a565b50808061243190614fe3565b91505061238f565b507f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b5338260405161246b9291906148aa565b60405180910390a150565b73a18bd9955496af4e65bfe0324247e5fbe68ef41e81565b612496612da8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb906149d0565b60405180910390fd5b8060056000612511612da8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166125be612da8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161260391906148d3565b60405180910390a35050565b601360009054906101000a900460ff1681565b61262a612da8565b73ffffffffffffffffffffffffffffffffffffffff16612648611f71565b73ffffffffffffffffffffffffffffffffffffffff161461269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269590614b50565b60405180910390fd5b60005b828290508110156128b357600073ffffffffffffffffffffffffffffffffffffffff168383838181106126d7576126d6615119565b5b90506020020160208101906126ec9190613f93565b73ffffffffffffffffffffffffffffffffffffffff161415612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273a90614c10565b60405180910390fd5b60016014600085858581811061275c5761275b615119565b5b90506020020160208101906127719190613f93565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601560008585858181106127db576127da615119565b5b90506020020160208101906127f09190613f93565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161283757600061289f565b6015600084848481811061284e5761284d615119565b5b90506020020160208101906128639190613f93565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b5080806128ab90614fe3565b9150506126a1565b505050565b73c149e4b47e5b5e9825f8c3710c34b54a7bced14d81565b73c5c0a131303dfab5fb8bce3052bab9326629da3d81565b6128f96128f3612da8565b83612e69565b612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292f90614c30565b60405180910390fd5b61294484848484613338565b50505050565b731d49c546222fbfb547d914af70b9ea4271db770c81565b606061296d82612d3c565b6129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a390614b90565b60405180910390fd5b6000601280546129bb90614f80565b9050116129d75760405180602001604052806000815250612a03565b60126129e283613394565b6040516020016129f39291906147ff565b6040516020818303038152906040525b9050919050565b60128054612a1790614f80565b80601f0160208091040260200160405190810160405280929190818152602001828054612a4390614f80565b8015612a905780601f10612a6557610100808354040283529160200191612a90565b820191906000526020600020905b815481529060010190602001808311612a7357829003601f168201915b505050505081565b730fc7c5f7d02b654e7f70cbfdffcaa8a7d1bffd7e81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60115481565b612b52612da8565b73ffffffffffffffffffffffffffffffffffffffff16612b70611f71565b73ffffffffffffffffffffffffffffffffffffffff1614612bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbd90614b50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2d90614950565b60405180910390fd5b612c3f81613254565b50565b73c129d8d3112d4ffc2c823c560689d4a60978616281565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d2557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d355750612d34826134f5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612e23836118b7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612e7482612d3c565b612eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaa90614a30565b60405180910390fd5b6000612ebe836118b7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f2d57508373ffffffffffffffffffffffffffffffffffffffff16612f1584610db6565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f3e5750612f3d8185612ab0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f67826118b7565b73ffffffffffffffffffffffffffffffffffffffff1614612fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb490614b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561302d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613024906149b0565b60405180910390fd5b61303883838361355f565b613043600082612db0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130939190614e96565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130ea9190614db5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516131c99061482e565b60006040518083038185875af1925050503d8060008114613206576040519150601f19603f3d011682016040523d82523d6000602084013e61320b565b606091505b505090508061324f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324690614bb0565b60405180910390fd5b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613334828260405180602001604052806000815250613673565b5050565b613343848484612f47565b61334f848484846136ce565b61338e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338590614930565b60405180910390fd5b50505050565b606060008214156133dc576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134f0565b600082905060005b6000821461340e5780806133f790614fe3565b915050600a826134079190614e0b565b91506133e4565b60008167ffffffffffffffff81111561342a57613429615148565b5b6040519080825280601f01601f19166020018201604052801561345c5781602001600182028036833780820191505090505b5090505b600085146134e9576001826134759190614e96565b9150600a85613484919061502c565b60306134909190614db5565b60f81b8183815181106134a6576134a5615119565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134e29190614e0b565b9450613460565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61356a838383613865565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135ad576135a88161386a565b6135ec565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146135eb576135ea83826138b3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561362f5761362a81613a20565b61366e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461366d5761366c8282613af1565b5b5b505050565b61367d8383613b70565b61368a60008484846136ce565b6136c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c090614930565b60405180910390fd5b505050565b60006136ef8473ffffffffffffffffffffffffffffffffffffffff16613d3e565b15613858578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613718612da8565b8786866040518563ffffffff1660e01b815260040161373a949392919061485e565b602060405180830381600087803b15801561375457600080fd5b505af192505050801561378557506040513d601f19601f8201168201806040525081019061378291906141d0565b60015b613808573d80600081146137b5576040519150601f19603f3d011682016040523d82523d6000602084013e6137ba565b606091505b50600081511415613800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f790614930565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061385d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016138c084611def565b6138ca9190614e96565b90506000600760008481526020019081526020016000205490508181146139af576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613a349190614e96565b9050600060096000848152602001908152602001600020549050600060088381548110613a6457613a63615119565b5b906000526020600020015490508060088381548110613a8657613a85615119565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613ad557613ad46150ea565b5b6001900381819060005260206000200160009055905550505050565b6000613afc83611def565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd790614af0565b60405180910390fd5b613be981612d3c565b15613c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2090614970565b60405180910390fd5b613c356000838361355f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c859190614db5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613d5d90614f80565b90600052602060002090601f016020900481019282613d7f5760008555613dc6565b82601f10613d9857805160ff1916838001178555613dc6565b82800160010185558215613dc6579182015b82811115613dc5578251825591602001919060010190613daa565b5b509050613dd39190613dd7565b5090565b5b80821115613df0576000816000905550600101613dd8565b5090565b6000613e07613e0284614cf0565b614ccb565b905082815260208101848484011115613e2357613e22615186565b5b613e2e848285614f3e565b509392505050565b6000613e49613e4484614d21565b614ccb565b905082815260208101848484011115613e6557613e64615186565b5b613e70848285614f3e565b509392505050565b600081359050613e8781615923565b92915050565b60008083601f840112613ea357613ea261517c565b5b8235905067ffffffffffffffff811115613ec057613ebf615177565b5b602083019150836020820283011115613edc57613edb615181565b5b9250929050565b600081359050613ef28161593a565b92915050565b600081359050613f0781615951565b92915050565b600081519050613f1c81615951565b92915050565b600082601f830112613f3757613f3661517c565b5b8135613f47848260208601613df4565b91505092915050565b600082601f830112613f6557613f6461517c565b5b8135613f75848260208601613e36565b91505092915050565b600081359050613f8d81615968565b92915050565b600060208284031215613fa957613fa8615190565b5b6000613fb784828501613e78565b91505092915050565b60008060408385031215613fd757613fd6615190565b5b6000613fe585828601613e78565b9250506020613ff685828601613e78565b9150509250929050565b60008060006060848603121561401957614018615190565b5b600061402786828701613e78565b935050602061403886828701613e78565b925050604061404986828701613f7e565b9150509250925092565b6000806000806080858703121561406d5761406c615190565b5b600061407b87828801613e78565b945050602061408c87828801613e78565b935050604061409d87828801613f7e565b925050606085013567ffffffffffffffff8111156140be576140bd61518b565b5b6140ca87828801613f22565b91505092959194509250565b600080604083850312156140ed576140ec615190565b5b60006140fb85828601613e78565b925050602061410c85828601613ee3565b9150509250929050565b6000806040838503121561412d5761412c615190565b5b600061413b85828601613e78565b925050602061414c85828601613f7e565b9150509250929050565b6000806020838503121561416d5761416c615190565b5b600083013567ffffffffffffffff81111561418b5761418a61518b565b5b61419785828601613e8d565b92509250509250929050565b6000602082840312156141b9576141b8615190565b5b60006141c784828501613ef8565b91505092915050565b6000602082840312156141e6576141e5615190565b5b60006141f484828501613f0d565b91505092915050565b60006020828403121561421357614212615190565b5b600082013567ffffffffffffffff8111156142315761423061518b565b5b61423d84828501613f50565b91505092915050565b60006020828403121561425c5761425b615190565b5b600061426a84828501613f7e565b91505092915050565b61427c81614eca565b82525050565b61428b81614edc565b82525050565b600061429c82614d67565b6142a68185614d7d565b93506142b6818560208601614f4d565b6142bf81615195565b840191505092915050565b60006142d582614d72565b6142df8185614d99565b93506142ef818560208601614f4d565b6142f881615195565b840191505092915050565b600061430e82614d72565b6143188185614daa565b9350614328818560208601614f4d565b80840191505092915050565b6000815461434181614f80565b61434b8186614daa565b945060018216600081146143665760018114614377576143aa565b60ff198316865281860193506143aa565b61438085614d52565b60005b838110156143a257815481890152600182019150602081019050614383565b838801955050505b50505092915050565b60006143c0602b83614d99565b91506143cb826151a6565b604082019050919050565b60006143e3603283614d99565b91506143ee826151f5565b604082019050919050565b6000614406602683614d99565b915061441182615244565b604082019050919050565b6000614429601c83614d99565b915061443482615293565b602082019050919050565b600061444c603983614d99565b9150614457826152bc565b604082019050919050565b600061446f602483614d99565b915061447a8261530b565b604082019050919050565b6000614492601983614d99565b915061449d8261535a565b602082019050919050565b60006144b5601b83614d99565b91506144c082615383565b602082019050919050565b60006144d8601483614d99565b91506144e3826153ac565b602082019050919050565b60006144fb602c83614d99565b9150614506826153d5565b604082019050919050565b600061451e603883614d99565b915061452982615424565b604082019050919050565b6000614541602a83614d99565b915061454c82615473565b604082019050919050565b6000614564602983614d99565b915061456f826154c2565b604082019050919050565b6000614587601f83614d99565b915061459282615511565b602082019050919050565b60006145aa603183614d99565b91506145b58261553a565b604082019050919050565b60006145cd602083614d99565b91506145d882615589565b602082019050919050565b60006145f0601783614d99565b91506145fb826155b2565b602082019050919050565b6000614613602c83614d99565b915061461e826155db565b604082019050919050565b6000614636600583614daa565b91506146418261562a565b600582019050919050565b6000614659602083614d99565b915061466482615653565b602082019050919050565b600061467c602983614d99565b91506146878261567c565b604082019050919050565b600061469f602f83614d99565b91506146aa826156cb565b604082019050919050565b60006146c2601983614d99565b91506146cd8261571a565b602082019050919050565b60006146e5602883614d99565b91506146f082615743565b604082019050919050565b6000614708602183614d99565b915061471382615792565b604082019050919050565b600061472b600083614d8e565b9150614736826157e1565b600082019050919050565b600061474e601783614d99565b9150614759826157e4565b602082019050919050565b6000614771603183614d99565b915061477c8261580d565b604082019050919050565b6000614794602c83614d99565b915061479f8261585c565b604082019050919050565b60006147b7602583614d99565b91506147c2826158ab565b604082019050919050565b60006147da601b83614d99565b91506147e5826158fa565b602082019050919050565b6147f981614f34565b82525050565b600061480b8285614334565b91506148178284614303565b915061482282614629565b91508190509392505050565b60006148398261471e565b9150819050919050565b60006020820190506148586000830184614273565b92915050565b60006080820190506148736000830187614273565b6148806020830186614273565b61488d60408301856147f0565b818103606083015261489f8184614291565b905095945050505050565b60006040820190506148bf6000830185614273565b6148cc60208301846147f0565b9392505050565b60006020820190506148e86000830184614282565b92915050565b6000602082019050818103600083015261490881846142ca565b905092915050565b60006020820190508181036000830152614929816143b3565b9050919050565b60006020820190508181036000830152614949816143d6565b9050919050565b60006020820190508181036000830152614969816143f9565b9050919050565b600060208201905081810360008301526149898161441c565b9050919050565b600060208201905081810360008301526149a98161443f565b9050919050565b600060208201905081810360008301526149c981614462565b9050919050565b600060208201905081810360008301526149e981614485565b9050919050565b60006020820190508181036000830152614a09816144a8565b9050919050565b60006020820190508181036000830152614a29816144cb565b9050919050565b60006020820190508181036000830152614a49816144ee565b9050919050565b60006020820190508181036000830152614a6981614511565b9050919050565b60006020820190508181036000830152614a8981614534565b9050919050565b60006020820190508181036000830152614aa981614557565b9050919050565b60006020820190508181036000830152614ac98161457a565b9050919050565b60006020820190508181036000830152614ae98161459d565b9050919050565b60006020820190508181036000830152614b09816145c0565b9050919050565b60006020820190508181036000830152614b29816145e3565b9050919050565b60006020820190508181036000830152614b4981614606565b9050919050565b60006020820190508181036000830152614b698161464c565b9050919050565b60006020820190508181036000830152614b898161466f565b9050919050565b60006020820190508181036000830152614ba981614692565b9050919050565b60006020820190508181036000830152614bc9816146b5565b9050919050565b60006020820190508181036000830152614be9816146d8565b9050919050565b60006020820190508181036000830152614c09816146fb565b9050919050565b60006020820190508181036000830152614c2981614741565b9050919050565b60006020820190508181036000830152614c4981614764565b9050919050565b60006020820190508181036000830152614c6981614787565b9050919050565b60006020820190508181036000830152614c89816147aa565b9050919050565b60006020820190508181036000830152614ca9816147cd565b9050919050565b6000602082019050614cc560008301846147f0565b92915050565b6000614cd5614ce6565b9050614ce18282614fb2565b919050565b6000604051905090565b600067ffffffffffffffff821115614d0b57614d0a615148565b5b614d1482615195565b9050602081019050919050565b600067ffffffffffffffff821115614d3c57614d3b615148565b5b614d4582615195565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614dc082614f34565b9150614dcb83614f34565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e0057614dff61505d565b5b828201905092915050565b6000614e1682614f34565b9150614e2183614f34565b925082614e3157614e3061508c565b5b828204905092915050565b6000614e4782614f34565b9150614e5283614f34565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e8b57614e8a61505d565b5b828202905092915050565b6000614ea182614f34565b9150614eac83614f34565b925082821015614ebf57614ebe61505d565b5b828203905092915050565b6000614ed582614f14565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f6b578082015181840152602081019050614f50565b83811115614f7a576000848401525b50505050565b60006002820490506001821680614f9857607f821691505b60208210811415614fac57614fab6150bb565b5b50919050565b614fbb82615195565b810181811067ffffffffffffffff82111715614fda57614fd9615148565b5b80604052505050565b6000614fee82614f34565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150215761502061505d565b5b600182019050919050565b600061503782614f34565b915061504283614f34565b9250826150525761505161508c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f7520617265206e6f7420656c696769626c6520666f722074686520666f7260008201527f207075626c69632073616c6520617420746869732074696d6500000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d757374206d696e74206174206c65617374206f6e6520736f756c0000000000600082015250565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20696e2061207472616e73616374696f6e000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45544820616d6f756e7420697320696e636f7272656374000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077696474686472617720457468657200000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f7765642070657260008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6521000000000000000000000000000000000000000000000000000000602082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b61592c81614eca565b811461593757600080fd5b50565b61594381614edc565b811461594e57600080fd5b50565b61595a81614ee8565b811461596557600080fd5b50565b61597181614f34565b811461597c57600080fd5b5056fea2646970667358221220e773b72799f3e34507dc05a465d52bcec40cde14afad3d86a3dc92ebb31e18b164736f6c63430008070033

Deployed Bytecode Sourcemap

45041:8293:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39153:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46783:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27036:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28604:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28127:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45205:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45393:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39793:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49866:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49997:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29494:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39461:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49060:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46389:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45559:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46475:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29904:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46562:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45891:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39983:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45239:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45476:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49331:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47069:1922;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26730:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51410:1403;;;;;;;;;;;;;:::i;:::-;;26460:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11017:94;;;;;;;;;;;;;:::i;:::-;;45808:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46306;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45174:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45275:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45128:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10366:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49232:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27205:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46223:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50189:1215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45974:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28897:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46747:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49497:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46140:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45310;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30160:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45642:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53025:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46635:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45725:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29263:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46598:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11266:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46057:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39153:224;39255:4;39294:35;39279:50;;;:11;:50;;;;:90;;;;39333:36;39357:11;39333:23;:36::i;:::-;39279:90;39272:97;;39153:224;;;:::o;46783:26::-;;;;;;;;;;;;;:::o;27036:100::-;27090:13;27123:5;27116:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27036:100;:::o;28604:221::-;28680:7;28708:16;28716:7;28708;:16::i;:::-;28700:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28793:15;:24;28809:7;28793:24;;;;;;;;;;;;;;;;;;;;;28786:31;;28604:221;;;:::o;28127:411::-;28208:13;28224:23;28239:7;28224:14;:23::i;:::-;28208:39;;28272:5;28266:11;;:2;:11;;;;28258:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28366:5;28350:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28375:37;28392:5;28399:12;:10;:12::i;:::-;28375:16;:37::i;:::-;28350:62;28328:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28509:21;28518:2;28522:7;28509:8;:21::i;:::-;28197:341;28127:411;;:::o;45205:27::-;;;;:::o;45393:76::-;45427:42;45393:76;:::o;39793:113::-;39854:7;39881:10;:17;;;;39874:24;;39793:113;:::o;49866:123::-;49935:4;49959:16;:22;49976:4;49959:22;;;;;;;;;;;;;;;;;;;;;;;;;49952:29;;49866:123;;;:::o;49997:186::-;50060:7;50105:1;50088:19;;:5;:19;;;;50080:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50155:13;:20;50169:5;50155:20;;;;;;;;;;;;;;;;50148:27;;49997:186;;;:::o;29494:339::-;29689:41;29708:12;:10;:12::i;:::-;29722:7;29689:18;:41::i;:::-;29681:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29797:28;29807:4;29813:2;29817:7;29797:9;:28::i;:::-;29494:339;;;:::o;39461:256::-;39558:7;39594:23;39611:5;39594:16;:23::i;:::-;39586:5;:31;39578:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39683:12;:19;39696:5;39683:19;;;;;;;;;;;;;;;:26;39703:5;39683:26;;;;;;;;;;;;39676:33;;39461:256;;;;:::o;49060:160::-;49134:13;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49175:7:::1;49160:12;:22;;;;;;;;;;;;:::i;:::-;;49200:12;49193:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49060:160:::0;;;:::o;46389:79::-;46426:42;46389:79;:::o;45559:76::-;45593:42;45559:76;:::o;46475:80::-;46513:42;46475:80;:::o;29904:185::-;30042:39;30059:4;30065:2;30069:7;30042:39;;;;;;;;;;;;:16;:39::i;:::-;29904:185;;;:::o;46562:29::-;;;;:::o;45891:76::-;45925:42;45891:76;:::o;39983:233::-;40058:7;40094:30;:28;:30::i;:::-;40086:5;:38;40078:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40191:10;40202:5;40191:17;;;;;;;;:::i;:::-;;;;;;;;;;40184:24;;39983:233;;;:::o;45239:29::-;;;;:::o;45476:76::-;45510:42;45476:76;:::o;49331:154::-;49387:7;49407:18;49428:21;49407:42;;49467:10;49460:17;;;49331:154;;;:::o;47069:1922::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47159:13:::1;47143;:29;;;;47204:1;47187:13;;:18;47183:557;;;47234:4;47222:9;:16;;;;47268:1;47253:12;:16;;;;47301:1;47284:14;:18;;;;47183:557;;;47341:1;47324:13;;:18;47320:420;;;47371:4;47359:9;:16;;;;47405:1;47390:12;:16;;;;47438:2;47421:14;:19;;;;47320:420;;;47479:1;47462:13;;:18;:40;;;;47501:1;47484:13;;:18;47462:40;47458:282;;;47530:4;47518:9;:16;;;;47563:1;47548:12;:16;;;;47595:3;47578:14;:20;;;;47458:282;;;47637:1;47620:13;;:18;47616:124;;47665:1;47653:9;:13;;;;47695:1;47680:12;:16;;;;47727:1;47710:14;:18;;;;47616:124;47458:282;47320:420;47183:557;47771:1;47754:13;;:18;47750:229;;47809:5;47789:17;;:25;;;;;;;;;;;;;;;;;;47846:4;47829:14;;:21;;;;;;;;;;;;;;;;;;47750:229;;;47888:1;47872:13;;:17;47868:111;;;47926:4;47906:17;;:24;;;;;;;;;;;;;;;;;;47962:5;47945:14;;:22;;;;;;;;;;;;;;;;;;47868:111;47750:229;48010:1;47993:13;;:18;47989:995;;;48027:18;48048:21;48027:42;;48084:50;45344:42;48127:5;48119:4;48106:10;:17;;;;:::i;:::-;48105:27;;;;:::i;:::-;48084:10;:50::i;:::-;48149:49;45427:42;48191:5;48184:3;48171:10;:16;;;;:::i;:::-;48170:26;;;;:::i;:::-;48149:10;:49::i;:::-;48213;45510:42;48255:5;48248:3;48235:10;:16;;;;:::i;:::-;48234:26;;;;:::i;:::-;48213:10;:49::i;:::-;48277;45593:42;48319:5;48312:3;48299:10;:16;;;;:::i;:::-;48298:26;;;;:::i;:::-;48277:10;:49::i;:::-;48341:50;45676:42;48384:5;48376:4;48363:10;:17;;;;:::i;:::-;48362:27;;;;:::i;:::-;48341:10;:50::i;:::-;48406:49;45759:42;48448:5;48441:3;48428:10;:16;;;;:::i;:::-;48427:26;;;;:::i;:::-;48406:10;:49::i;:::-;48470;45842:42;48512:5;48505:3;48492:10;:16;;;;:::i;:::-;48491:26;;;;:::i;:::-;48470:10;:49::i;:::-;48534;45925:42;48576:5;48569:3;48556:10;:16;;;;:::i;:::-;48555:26;;;;:::i;:::-;48534:10;:49::i;:::-;48598:50;46008:42;48641:5;48633:4;48620:10;:17;;;;:::i;:::-;48619:27;;;;:::i;:::-;48598:10;:50::i;:::-;48663:49;46091:42;48705:5;48698:3;48685:10;:16;;;;:::i;:::-;48684:26;;;;:::i;:::-;48663:10;:49::i;:::-;48727;46174:42;48769:5;48762:3;48749:10;:16;;;;:::i;:::-;48748:26;;;;:::i;:::-;48727:10;:49::i;:::-;48791;46257:42;48833:5;48826:3;48813:10;:16;;;;:::i;:::-;48812:26;;;;:::i;:::-;48791:10;:49::i;:::-;48855;46340:42;48897:5;48890:3;48877:10;:16;;;;:::i;:::-;48876:26;;;;:::i;:::-;48855:10;:49::i;:::-;48919:53;46426:42;48965:5;48957:4;48944:10;:17;;;;:::i;:::-;48943:27;;;;:::i;:::-;48919:10;:53::i;:::-;48012:972;47989:995;47069:1922:::0;:::o;26730:239::-;26802:7;26822:13;26838:7;:16;26846:7;26838:16;;;;;;;;;;;;;;;;;;;;;26822:32;;26890:1;26873:19;;:5;:19;;;;26865:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26956:5;26949:12;;;26730:239;;;:::o;51410:1403::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51456:11:::1;51470:21;51456:35;;51502:14;51527:15:::0;51567:1:::1;51561:3;:7;51553:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;51614:1;51608:3;:7;51604:1202;;;51648:1;51635:9;;:14;51631:242;;;51692:3;51686:2;51680:3;:8;;;;:::i;:::-;51679:16;;;;:::i;:::-;51669:27;;51739:3;51733:2;51727:3;:8;;;;:::i;:::-;51726:16;;;;:::i;:::-;51715:28;;51631:242;;;51806:3;51800:2;51794:3;:8;;;;:::i;:::-;51793:16;;;;:::i;:::-;51783:27;;51853:3;51847:2;51841:3;:8;;;;:::i;:::-;51840:16;;;;:::i;:::-;51829:28;;51631:242;51887:46;45344:42;51926:5;51918:4;51909:6;:13;;;;:::i;:::-;51908:23;;;;:::i;:::-;51887:10;:46::i;:::-;51948:45;45427:42;51986:5;51979:3;51970:6;:12;;;;:::i;:::-;51969:22;;;;:::i;:::-;51948:10;:45::i;:::-;52008;45510:42;52046:5;52039:3;52030:6;:12;;;;:::i;:::-;52029:22;;;;:::i;:::-;52008:10;:45::i;:::-;52068;45593:42;52106:5;52099:3;52090:6;:12;;;;:::i;:::-;52089:22;;;;:::i;:::-;52068:10;:45::i;:::-;52128:46;45676:42;52167:5;52159:4;52150:6;:13;;;;:::i;:::-;52149:23;;;;:::i;:::-;52128:10;:46::i;:::-;52189:45;45759:42;52227:5;52220:3;52211:6;:12;;;;:::i;:::-;52210:22;;;;:::i;:::-;52189:10;:45::i;:::-;52249;45842:42;52287:5;52280:3;52271:6;:12;;;;:::i;:::-;52270:22;;;;:::i;:::-;52249:10;:45::i;:::-;52309;45925:42;52347:5;52340:3;52331:6;:12;;;;:::i;:::-;52330:22;;;;:::i;:::-;52309:10;:45::i;:::-;52369:46;46008:42;52408:5;52400:4;52391:6;:13;;;;:::i;:::-;52390:23;;;;:::i;:::-;52369:10;:46::i;:::-;52430:45;46091:42;52468:5;52461:3;52452:6;:12;;;;:::i;:::-;52451:22;;;;:::i;:::-;52430:10;:45::i;:::-;52490;46174:42;52528:5;52521:3;52512:6;:12;;;;:::i;:::-;52511:22;;;;:::i;:::-;52490:10;:45::i;:::-;52550;46257:42;52588:5;52581:3;52572:6;:12;;;;:::i;:::-;52571:22;;;;:::i;:::-;52550:10;:45::i;:::-;52610;46340:42;52648:5;52641:3;52632:6;:12;;;;:::i;:::-;52631:22;;;;:::i;:::-;52610:10;:45::i;:::-;52670:49;46426:42;52712:5;52704:4;52695:6;:13;;;;:::i;:::-;52694:23;;;;:::i;:::-;52670:10;:49::i;:::-;52734:32;46513:42;52758:7;52734:10;:32::i;:::-;52793:1;52781:9;:13;;;;51604:1202;51445:1368;;;51410:1403::o:0;26460:208::-;26532:7;26577:1;26560:19;;:5;:19;;;;26552:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26644:9;:16;26654:5;26644:16;;;;;;;;;;;;;;;;26637:23;;26460:208;;;:::o;11017:94::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11082:21:::1;11100:1;11082:9;:21::i;:::-;11017:94::o:0;45808:76::-;45842:42;45808:76;:::o;46306:::-;46340:42;46306:76;:::o;45174:24::-;;;;:::o;45275:28::-;;;;:::o;45128:33::-;;;;:::o;10366:87::-;10412:7;10439:6;;;;;;;;;;;10432:13;;10366:87;:::o;49232:93::-;49277:7;49304:13;;49297:20;;49232:93;:::o;27205:104::-;27261:13;27294:7;27287:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27205:104;:::o;46223:76::-;46257:42;46223:76;:::o;50189:1215::-;50275:1;50258:13;;:18;50254:284;;50301:16;:28;50318:10;50301:28;;;;;;;;;;;;;;;;;;;;;;;;;50293:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;50254:284;;;50410:1;50393:13;;:18;50389:149;;;50436:16;:28;50453:10;50436:28;;;;;;;;;;;;;;;;;;;;;;;;;50435:29;50427:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;50389:149;50254:284;50572:9;;50556:13;:11;:13::i;:::-;:25;50548:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50649:12;;50632:13;:29;;50624:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;50767:9;;50750:13;50734;:11;:13::i;:::-;:29;;;;:::i;:::-;:42;;50726:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;50876:14;;50859:13;50831;:25;50845:10;50831:25;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:59;;50823:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;50970:1;50954:13;:17;50946:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;51047:9;51030:13;51022:5;;:21;;;;:::i;:::-;:34;51014:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51110:9;51105:233;51129:13;51125:1;:17;51105:233;;;51164:15;51199:1;51182:14;;:18;;;;:::i;:::-;51164:36;;51235:1;51217:14;;:19;;;;;;;:::i;:::-;;;;;;;;51280:1;51251:13;:25;51265:10;51251:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;51296;51306:10;51318:7;51296:9;:30::i;:::-;51149:189;51144:3;;;;;:::i;:::-;;;;51105:233;;;;51355:41;51370:10;51382:13;51355:41;;;;;;;:::i;:::-;;;;;;;;50189:1215;:::o;45974:76::-;46008:42;45974:76;:::o;28897:295::-;29012:12;:10;:12::i;:::-;29000:24;;:8;:24;;;;28992:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29112:8;29067:18;:32;29086:12;:10;:12::i;:::-;29067:32;;;;;;;;;;;;;;;:42;29100:8;29067:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29165:8;29136:48;;29151:12;:10;:12::i;:::-;29136:48;;;29175:8;29136:48;;;;;;:::i;:::-;;;;;;;;28897:295;;:::o;46747:29::-;;;;;;;;;;;;;:::o;49497:361::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49584:9:::1;49579:272;49603:9;;:16;;49599:1;:20;49579:272;;;49673:1;49649:26;;:9;;49659:1;49649:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;49641:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49753:4;49720:16;:30;49737:9;;49747:1;49737:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49720:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;49804:1;49774:13;:27;49788:9;;49798:1;49788:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49774:27;;;;;;;;;;;;;;;;:31;:65;;49838:1;49774:65;;;49808:13;:27;49822:9;;49832:1;49822:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49808:27;;;;;;;;;;;;;;;;49774:65;;49621:3;;;;;:::i;:::-;;;;49579:272;;;;49497:361:::0;;:::o;46140:76::-;46174:42;46140:76;:::o;45310:::-;45344:42;45310:76;:::o;30160:328::-;30335:41;30354:12;:10;:12::i;:::-;30368:7;30335:18;:41::i;:::-;30327:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30441:39;30455:4;30461:2;30465:7;30474:5;30441:13;:39::i;:::-;30160:328;;;;:::o;45642:76::-;45676:42;45642:76;:::o;53025:306::-;53098:13;53132:16;53140:7;53132;:16::i;:::-;53124:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;53247:1;53224:12;53218:26;;;;;:::i;:::-;;;:30;:105;;;;;;;;;;;;;;;;;53275:12;53289:18;:7;:16;:18::i;:::-;53258:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53218:105;53211:112;;53025:306;;;:::o;46635:103::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45725:76::-;45759:42;45725:76;:::o;29263:164::-;29360:4;29384:18;:25;29403:5;29384:25;;;;;;;;;;;;;;;:35;29410:8;29384:35;;;;;;;;;;;;;;;;;;;;;;;;;29377:42;;29263:164;;;;:::o;46598:24::-;;;;:::o;11266:192::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11375:1:::1;11355:22;;:8;:22;;;;11347:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11431:19;11441:8;11431:9;:19::i;:::-;11266:192:::0;:::o;46057:76::-;46091:42;46057:76;:::o;26091:305::-;26193:4;26245:25;26230:40;;;:11;:40;;;;:105;;;;26302:33;26287:48;;;:11;:48;;;;26230:105;:158;;;;26352:36;26376:11;26352:23;:36::i;:::-;26230:158;26210:178;;26091:305;;;:::o;31998:127::-;32063:4;32115:1;32087:30;;:7;:16;32095:7;32087:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32080:37;;31998:127;;;:::o;567:98::-;620:7;647:10;640:17;;567:98;:::o;35980:174::-;36082:2;36055:15;:24;36071:7;36055:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36138:7;36134:2;36100:46;;36109:23;36124:7;36109:14;:23::i;:::-;36100:46;;;;;;;;;;;;35980:174;;:::o;32292:348::-;32385:4;32410:16;32418:7;32410;:16::i;:::-;32402:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32486:13;32502:23;32517:7;32502:14;:23::i;:::-;32486:39;;32555:5;32544:16;;:7;:16;;;:51;;;;32588:7;32564:31;;:20;32576:7;32564:11;:20::i;:::-;:31;;;32544:51;:87;;;;32599:32;32616:5;32623:7;32599:16;:32::i;:::-;32544:87;32536:96;;;32292:348;;;;:::o;35284:578::-;35443:4;35416:31;;:23;35431:7;35416:14;:23::i;:::-;:31;;;35408:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35526:1;35512:16;;:2;:16;;;;35504:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35582:39;35603:4;35609:2;35613:7;35582:20;:39::i;:::-;35686:29;35703:1;35707:7;35686:8;:29::i;:::-;35747:1;35728:9;:15;35738:4;35728:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35776:1;35759:9;:13;35769:2;35759:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35807:2;35788:7;:16;35796:7;35788:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35846:7;35842:2;35827:27;;35836:4;35827:27;;;;;;;;;;;;35284:578;;;:::o;52821:192::-;52896:12;52914:8;:13;;52936:7;52914:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52895:54;;;52968:7;52960:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;52884:129;52821:192;;:::o;11466:173::-;11522:16;11541:6;;;;;;;;;;;11522:25;;11567:8;11558:6;;:17;;;;;;;;;;;;;;;;;;11622:8;11591:40;;11612:8;11591:40;;;;;;;;;;;;11511:128;11466:173;:::o;32982:110::-;33058:26;33068:2;33072:7;33058:26;;;;;;;;;;;;:9;:26::i;:::-;32982:110;;:::o;31370:315::-;31527:28;31537:4;31543:2;31547:7;31527:9;:28::i;:::-;31574:48;31597:4;31603:2;31607:7;31616:5;31574:22;:48::i;:::-;31566:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31370:315;;;;:::o;13910:723::-;13966:13;14196:1;14187:5;:10;14183:53;;;14214:10;;;;;;;;;;;;;;;;;;;;;14183:53;14246:12;14261:5;14246:20;;14277:14;14302:78;14317:1;14309:4;:9;14302:78;;14335:8;;;;;:::i;:::-;;;;14366:2;14358:10;;;;;:::i;:::-;;;14302:78;;;14390:19;14422:6;14412:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14390:39;;14440:154;14456:1;14447:5;:10;14440:154;;14484:1;14474:11;;;;;:::i;:::-;;;14551:2;14543:5;:10;;;;:::i;:::-;14530:2;:24;;;;:::i;:::-;14517:39;;14500:6;14507;14500:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;14580:2;14571:11;;;;;:::i;:::-;;;14440:154;;;14618:6;14604:21;;;;;13910:723;;;;:::o;13435:157::-;13520:4;13559:25;13544:40;;;:11;:40;;;;13537:47;;13435:157;;;:::o;40829:589::-;40973:45;41000:4;41006:2;41010:7;40973:26;:45::i;:::-;41051:1;41035:18;;:4;:18;;;41031:187;;;41070:40;41102:7;41070:31;:40::i;:::-;41031:187;;;41140:2;41132:10;;:4;:10;;;41128:90;;41159:47;41192:4;41198:7;41159:32;:47::i;:::-;41128:90;41031:187;41246:1;41232:16;;:2;:16;;;41228:183;;;41265:45;41302:7;41265:36;:45::i;:::-;41228:183;;;41338:4;41332:10;;:2;:10;;;41328:83;;41359:40;41387:2;41391:7;41359:27;:40::i;:::-;41328:83;41228:183;40829:589;;;:::o;33319:321::-;33449:18;33455:2;33459:7;33449:5;:18::i;:::-;33500:54;33531:1;33535:2;33539:7;33548:5;33500:22;:54::i;:::-;33478:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33319:321;;;:::o;36719:799::-;36874:4;36895:15;:2;:13;;;:15::i;:::-;36891:620;;;36947:2;36931:36;;;36968:12;:10;:12::i;:::-;36982:4;36988:7;36997:5;36931:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36927:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37190:1;37173:6;:13;:18;37169:272;;;37216:60;;;;;;;;;;:::i;:::-;;;;;;;;37169:272;37391:6;37385:13;37376:6;37372:2;37368:15;37361:38;36927:529;37064:41;;;37054:51;;;:6;:51;;;;37047:58;;;;;36891:620;37495:4;37488:11;;36719:799;;;;;;;:::o;38090:126::-;;;;:::o;42141:164::-;42245:10;:17;;;;42218:15;:24;42234:7;42218:24;;;;;;;;;;;:44;;;;42273:10;42289:7;42273:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42141:164;:::o;42932:988::-;43198:22;43248:1;43223:22;43240:4;43223:16;:22::i;:::-;:26;;;;:::i;:::-;43198:51;;43260:18;43281:17;:26;43299:7;43281:26;;;;;;;;;;;;43260:47;;43428:14;43414:10;:28;43410:328;;43459:19;43481:12;:18;43494:4;43481:18;;;;;;;;;;;;;;;:34;43500:14;43481:34;;;;;;;;;;;;43459:56;;43565:11;43532:12;:18;43545:4;43532:18;;;;;;;;;;;;;;;:30;43551:10;43532:30;;;;;;;;;;;:44;;;;43682:10;43649:17;:30;43667:11;43649:30;;;;;;;;;;;:43;;;;43444:294;43410:328;43834:17;:26;43852:7;43834:26;;;;;;;;;;;43827:33;;;43878:12;:18;43891:4;43878:18;;;;;;;;;;;;;;;:34;43897:14;43878:34;;;;;;;;;;;43871:41;;;43013:907;;42932:988;;:::o;43928:1079::-;44181:22;44226:1;44206:10;:17;;;;:21;;;;:::i;:::-;44181:46;;44238:18;44259:15;:24;44275:7;44259:24;;;;;;;;;;;;44238:45;;44610:19;44632:10;44643:14;44632:26;;;;;;;;:::i;:::-;;;;;;;;;;44610:48;;44696:11;44671:10;44682;44671:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44807:10;44776:15;:28;44792:11;44776:28;;;;;;;;;;;:41;;;;44948:15;:24;44964:7;44948:24;;;;;;;;;;;44941:31;;;44983:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43999:1008;;;43928:1079;:::o;41719:221::-;41804:14;41821:20;41838:2;41821:16;:20::i;:::-;41804:37;;41879:7;41852:12;:16;41865:2;41852:16;;;;;;;;;;;;;;;:24;41869:6;41852:24;;;;;;;;;;;:34;;;;41926:6;41897:17;:26;41915:7;41897:26;;;;;;;;;;;:35;;;;41793:147;41719:221;;:::o;33976:382::-;34070:1;34056:16;;:2;:16;;;;34048:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34129:16;34137:7;34129;:16::i;:::-;34128:17;34120:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34191:45;34220:1;34224:2;34228:7;34191:20;:45::i;:::-;34266:1;34249:9;:13;34259:2;34249:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34297:2;34278:7;:16;34286:7;34278:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34342:7;34338:2;34317:33;;34334:1;34317:33;;;;;;;;;;;;33976:382;;:::o;16491:387::-;16551:4;16759:12;16826:7;16814:20;16806:28;;16869:1;16862:4;:8;16855:15;;;16491:387;;;:::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;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9696:845::-;9799:3;9836:5;9830:12;9865:36;9891:9;9865:36;:::i;:::-;9917:89;9999:6;9994:3;9917:89;:::i;:::-;9910:96;;10037:1;10026:9;10022:17;10053:1;10048:137;;;;10199:1;10194:341;;;;10015:520;;10048:137;10132:4;10128:9;10117;10113:25;10108:3;10101:38;10168:6;10163:3;10159:16;10152:23;;10048:137;;10194:341;10261:38;10293:5;10261:38;:::i;:::-;10321:1;10335:154;10349:6;10346:1;10343:13;10335:154;;;10423:7;10417:14;10413:1;10408:3;10404:11;10397:35;10473:1;10464:7;10460:15;10449:26;;10371:4;10368:1;10364:12;10359:17;;10335:154;;;10518:6;10513:3;10509:16;10502:23;;10201:334;;10015:520;;9803:738;;9696:845;;;;:::o;10547:366::-;10689:3;10710:67;10774:2;10769:3;10710:67;:::i;:::-;10703:74;;10786:93;10875:3;10786:93;:::i;:::-;10904:2;10899:3;10895:12;10888:19;;10547:366;;;:::o;10919:::-;11061:3;11082:67;11146:2;11141:3;11082:67;:::i;:::-;11075:74;;11158:93;11247:3;11158:93;:::i;:::-;11276:2;11271:3;11267:12;11260:19;;10919:366;;;:::o;11291:::-;11433:3;11454:67;11518:2;11513:3;11454:67;:::i;:::-;11447:74;;11530:93;11619:3;11530:93;:::i;:::-;11648:2;11643:3;11639:12;11632:19;;11291:366;;;:::o;11663:::-;11805:3;11826:67;11890:2;11885:3;11826:67;:::i;:::-;11819:74;;11902:93;11991:3;11902:93;:::i;:::-;12020:2;12015:3;12011:12;12004:19;;11663:366;;;:::o;12035:::-;12177:3;12198:67;12262:2;12257:3;12198:67;:::i;:::-;12191:74;;12274:93;12363:3;12274:93;:::i;:::-;12392:2;12387:3;12383:12;12376:19;;12035:366;;;:::o;12407:::-;12549:3;12570:67;12634:2;12629:3;12570:67;:::i;:::-;12563:74;;12646:93;12735:3;12646:93;:::i;:::-;12764:2;12759:3;12755:12;12748:19;;12407:366;;;:::o;12779:::-;12921:3;12942:67;13006:2;13001:3;12942:67;:::i;:::-;12935:74;;13018:93;13107:3;13018:93;:::i;:::-;13136:2;13131:3;13127:12;13120:19;;12779:366;;;:::o;13151:::-;13293:3;13314:67;13378:2;13373:3;13314:67;:::i;:::-;13307:74;;13390:93;13479:3;13390:93;:::i;:::-;13508:2;13503:3;13499:12;13492:19;;13151:366;;;:::o;13523:::-;13665:3;13686:67;13750:2;13745:3;13686:67;:::i;:::-;13679:74;;13762:93;13851:3;13762:93;:::i;:::-;13880:2;13875:3;13871:12;13864:19;;13523:366;;;:::o;13895:::-;14037:3;14058:67;14122:2;14117:3;14058:67;:::i;:::-;14051:74;;14134:93;14223:3;14134:93;:::i;:::-;14252:2;14247:3;14243:12;14236:19;;13895:366;;;:::o;14267:::-;14409:3;14430:67;14494:2;14489:3;14430:67;:::i;:::-;14423:74;;14506:93;14595:3;14506:93;:::i;:::-;14624:2;14619:3;14615:12;14608:19;;14267:366;;;:::o;14639:::-;14781:3;14802:67;14866:2;14861:3;14802:67;:::i;:::-;14795:74;;14878:93;14967:3;14878:93;:::i;:::-;14996:2;14991:3;14987:12;14980:19;;14639:366;;;:::o;15011:::-;15153:3;15174:67;15238:2;15233:3;15174:67;:::i;:::-;15167:74;;15250:93;15339:3;15250:93;:::i;:::-;15368:2;15363:3;15359:12;15352:19;;15011:366;;;:::o;15383:::-;15525:3;15546:67;15610:2;15605:3;15546:67;:::i;:::-;15539:74;;15622:93;15711:3;15622:93;:::i;:::-;15740:2;15735:3;15731:12;15724:19;;15383:366;;;:::o;15755:::-;15897:3;15918:67;15982:2;15977:3;15918:67;:::i;:::-;15911:74;;15994:93;16083:3;15994:93;:::i;:::-;16112:2;16107:3;16103:12;16096:19;;15755:366;;;:::o;16127:::-;16269:3;16290:67;16354:2;16349:3;16290:67;:::i;:::-;16283:74;;16366:93;16455:3;16366:93;:::i;:::-;16484:2;16479:3;16475:12;16468:19;;16127:366;;;:::o;16499:::-;16641:3;16662:67;16726:2;16721:3;16662:67;:::i;:::-;16655:74;;16738:93;16827:3;16738:93;:::i;:::-;16856:2;16851:3;16847:12;16840:19;;16499:366;;;:::o;16871:::-;17013:3;17034:67;17098:2;17093:3;17034:67;:::i;:::-;17027:74;;17110:93;17199:3;17110:93;:::i;:::-;17228:2;17223:3;17219:12;17212:19;;16871:366;;;:::o;17243:400::-;17403:3;17424:84;17506:1;17501:3;17424:84;:::i;:::-;17417:91;;17517:93;17606:3;17517:93;:::i;:::-;17635:1;17630:3;17626:11;17619:18;;17243:400;;;:::o;17649:366::-;17791:3;17812:67;17876:2;17871:3;17812:67;:::i;:::-;17805:74;;17888:93;17977:3;17888:93;:::i;:::-;18006:2;18001:3;17997:12;17990:19;;17649:366;;;:::o;18021:::-;18163:3;18184:67;18248:2;18243:3;18184:67;:::i;:::-;18177:74;;18260:93;18349:3;18260:93;:::i;:::-;18378:2;18373:3;18369:12;18362:19;;18021:366;;;:::o;18393:::-;18535:3;18556:67;18620:2;18615:3;18556:67;:::i;:::-;18549:74;;18632:93;18721:3;18632:93;:::i;:::-;18750:2;18745:3;18741:12;18734:19;;18393:366;;;:::o;18765:::-;18907:3;18928:67;18992:2;18987:3;18928:67;:::i;:::-;18921:74;;19004:93;19093:3;19004:93;:::i;:::-;19122:2;19117:3;19113:12;19106:19;;18765:366;;;:::o;19137:::-;19279:3;19300:67;19364:2;19359:3;19300:67;:::i;:::-;19293:74;;19376:93;19465:3;19376:93;:::i;:::-;19494:2;19489:3;19485:12;19478:19;;19137:366;;;:::o;19509:::-;19651:3;19672:67;19736:2;19731:3;19672:67;:::i;:::-;19665:74;;19748:93;19837:3;19748:93;:::i;:::-;19866:2;19861:3;19857:12;19850:19;;19509:366;;;:::o;19881:398::-;20040:3;20061:83;20142:1;20137:3;20061:83;:::i;:::-;20054:90;;20153:93;20242:3;20153:93;:::i;:::-;20271:1;20266:3;20262:11;20255:18;;19881:398;;;:::o;20285:366::-;20427:3;20448:67;20512:2;20507:3;20448:67;:::i;:::-;20441:74;;20524:93;20613:3;20524:93;:::i;:::-;20642:2;20637:3;20633:12;20626:19;;20285:366;;;:::o;20657:::-;20799:3;20820:67;20884:2;20879:3;20820:67;:::i;:::-;20813:74;;20896:93;20985:3;20896:93;:::i;:::-;21014:2;21009:3;21005:12;20998:19;;20657:366;;;:::o;21029:::-;21171:3;21192:67;21256:2;21251:3;21192:67;:::i;:::-;21185:74;;21268:93;21357:3;21268:93;:::i;:::-;21386:2;21381:3;21377:12;21370:19;;21029:366;;;:::o;21401:::-;21543:3;21564:67;21628:2;21623:3;21564:67;:::i;:::-;21557:74;;21640:93;21729:3;21640:93;:::i;:::-;21758:2;21753:3;21749:12;21742:19;;21401:366;;;:::o;21773:::-;21915:3;21936:67;22000:2;21995:3;21936:67;:::i;:::-;21929:74;;22012:93;22101:3;22012:93;:::i;:::-;22130:2;22125:3;22121:12;22114:19;;21773:366;;;:::o;22145:118::-;22232:24;22250:5;22232:24;:::i;:::-;22227:3;22220:37;22145:118;;:::o;22269:695::-;22547:3;22569:92;22657:3;22648:6;22569:92;:::i;:::-;22562:99;;22678:95;22769:3;22760:6;22678:95;:::i;:::-;22671:102;;22790:148;22934:3;22790:148;:::i;:::-;22783:155;;22955:3;22948:10;;22269:695;;;;;:::o;22970:379::-;23154:3;23176:147;23319:3;23176:147;:::i;:::-;23169:154;;23340:3;23333:10;;22970:379;;;:::o;23355:222::-;23448:4;23486:2;23475:9;23471:18;23463:26;;23499:71;23567:1;23556:9;23552:17;23543:6;23499:71;:::i;:::-;23355:222;;;;:::o;23583:640::-;23778:4;23816:3;23805:9;23801:19;23793:27;;23830:71;23898:1;23887:9;23883:17;23874:6;23830:71;:::i;:::-;23911:72;23979:2;23968:9;23964:18;23955:6;23911:72;:::i;:::-;23993;24061:2;24050:9;24046:18;24037:6;23993:72;:::i;:::-;24112:9;24106:4;24102:20;24097:2;24086:9;24082:18;24075:48;24140:76;24211:4;24202:6;24140:76;:::i;:::-;24132:84;;23583:640;;;;;;;:::o;24229:332::-;24350:4;24388:2;24377:9;24373:18;24365:26;;24401:71;24469:1;24458:9;24454:17;24445:6;24401:71;:::i;:::-;24482:72;24550:2;24539:9;24535:18;24526:6;24482:72;:::i;:::-;24229:332;;;;;:::o;24567:210::-;24654:4;24692:2;24681:9;24677:18;24669:26;;24705:65;24767:1;24756:9;24752:17;24743:6;24705:65;:::i;:::-;24567:210;;;;:::o;24783:313::-;24896:4;24934:2;24923:9;24919:18;24911:26;;24983:9;24977:4;24973:20;24969:1;24958:9;24954:17;24947:47;25011:78;25084:4;25075:6;25011:78;:::i;:::-;25003:86;;24783:313;;;;:::o;25102:419::-;25268:4;25306:2;25295:9;25291:18;25283:26;;25355:9;25349:4;25345:20;25341:1;25330:9;25326:17;25319:47;25383:131;25509:4;25383:131;:::i;:::-;25375:139;;25102:419;;;:::o;25527:::-;25693:4;25731:2;25720:9;25716:18;25708:26;;25780:9;25774:4;25770:20;25766:1;25755:9;25751:17;25744:47;25808:131;25934:4;25808:131;:::i;:::-;25800:139;;25527:419;;;:::o;25952:::-;26118:4;26156:2;26145:9;26141:18;26133:26;;26205:9;26199:4;26195:20;26191:1;26180:9;26176:17;26169:47;26233:131;26359:4;26233:131;:::i;:::-;26225:139;;25952:419;;;:::o;26377:::-;26543:4;26581:2;26570:9;26566:18;26558:26;;26630:9;26624:4;26620:20;26616:1;26605:9;26601:17;26594:47;26658:131;26784:4;26658:131;:::i;:::-;26650:139;;26377:419;;;:::o;26802:::-;26968:4;27006:2;26995:9;26991:18;26983:26;;27055:9;27049:4;27045:20;27041:1;27030:9;27026:17;27019:47;27083:131;27209:4;27083:131;:::i;:::-;27075:139;;26802:419;;;:::o;27227:::-;27393:4;27431:2;27420:9;27416:18;27408:26;;27480:9;27474:4;27470:20;27466:1;27455:9;27451:17;27444:47;27508:131;27634:4;27508:131;:::i;:::-;27500:139;;27227:419;;;:::o;27652:::-;27818:4;27856:2;27845:9;27841:18;27833:26;;27905:9;27899:4;27895:20;27891:1;27880:9;27876:17;27869:47;27933:131;28059:4;27933:131;:::i;:::-;27925:139;;27652:419;;;:::o;28077:::-;28243:4;28281:2;28270:9;28266:18;28258:26;;28330:9;28324:4;28320:20;28316:1;28305:9;28301:17;28294:47;28358:131;28484:4;28358:131;:::i;:::-;28350:139;;28077:419;;;:::o;28502:::-;28668:4;28706:2;28695:9;28691:18;28683:26;;28755:9;28749:4;28745:20;28741:1;28730:9;28726:17;28719:47;28783:131;28909:4;28783:131;:::i;:::-;28775:139;;28502:419;;;:::o;28927:::-;29093:4;29131:2;29120:9;29116:18;29108:26;;29180:9;29174:4;29170:20;29166:1;29155:9;29151:17;29144:47;29208:131;29334:4;29208:131;:::i;:::-;29200:139;;28927:419;;;:::o;29352:::-;29518:4;29556:2;29545:9;29541:18;29533:26;;29605:9;29599:4;29595:20;29591:1;29580:9;29576:17;29569:47;29633:131;29759:4;29633:131;:::i;:::-;29625:139;;29352:419;;;:::o;29777:::-;29943:4;29981:2;29970:9;29966:18;29958:26;;30030:9;30024:4;30020:20;30016:1;30005:9;30001:17;29994:47;30058:131;30184:4;30058:131;:::i;:::-;30050:139;;29777:419;;;:::o;30202:::-;30368:4;30406:2;30395:9;30391:18;30383:26;;30455:9;30449:4;30445:20;30441:1;30430:9;30426:17;30419:47;30483:131;30609:4;30483:131;:::i;:::-;30475:139;;30202:419;;;:::o;30627:::-;30793:4;30831:2;30820:9;30816:18;30808:26;;30880:9;30874:4;30870:20;30866:1;30855:9;30851:17;30844:47;30908:131;31034:4;30908:131;:::i;:::-;30900:139;;30627:419;;;:::o;31052:::-;31218:4;31256:2;31245:9;31241:18;31233:26;;31305:9;31299:4;31295:20;31291:1;31280:9;31276:17;31269:47;31333:131;31459:4;31333:131;:::i;:::-;31325:139;;31052:419;;;:::o;31477:::-;31643:4;31681:2;31670:9;31666:18;31658:26;;31730:9;31724:4;31720:20;31716:1;31705:9;31701:17;31694:47;31758:131;31884:4;31758:131;:::i;:::-;31750:139;;31477:419;;;:::o;31902:::-;32068:4;32106:2;32095:9;32091:18;32083:26;;32155:9;32149:4;32145:20;32141:1;32130:9;32126:17;32119:47;32183:131;32309:4;32183:131;:::i;:::-;32175:139;;31902:419;;;:::o;32327:::-;32493:4;32531:2;32520:9;32516:18;32508:26;;32580:9;32574:4;32570:20;32566:1;32555:9;32551:17;32544:47;32608:131;32734:4;32608:131;:::i;:::-;32600:139;;32327:419;;;:::o;32752:::-;32918:4;32956:2;32945:9;32941:18;32933:26;;33005:9;32999:4;32995:20;32991:1;32980:9;32976:17;32969:47;33033:131;33159:4;33033:131;:::i;:::-;33025:139;;32752:419;;;:::o;33177:::-;33343:4;33381:2;33370:9;33366:18;33358:26;;33430:9;33424:4;33420:20;33416:1;33405:9;33401:17;33394:47;33458:131;33584:4;33458:131;:::i;:::-;33450:139;;33177:419;;;:::o;33602:::-;33768:4;33806:2;33795:9;33791:18;33783:26;;33855:9;33849:4;33845:20;33841:1;33830:9;33826:17;33819:47;33883:131;34009:4;33883:131;:::i;:::-;33875:139;;33602:419;;;:::o;34027:::-;34193:4;34231:2;34220:9;34216:18;34208:26;;34280:9;34274:4;34270:20;34266:1;34255:9;34251:17;34244:47;34308:131;34434:4;34308:131;:::i;:::-;34300:139;;34027:419;;;:::o;34452:::-;34618:4;34656:2;34645:9;34641:18;34633:26;;34705:9;34699:4;34695:20;34691:1;34680:9;34676:17;34669:47;34733:131;34859:4;34733:131;:::i;:::-;34725:139;;34452:419;;;:::o;34877:::-;35043:4;35081:2;35070:9;35066:18;35058:26;;35130:9;35124:4;35120:20;35116:1;35105:9;35101:17;35094:47;35158:131;35284:4;35158:131;:::i;:::-;35150:139;;34877:419;;;:::o;35302:::-;35468:4;35506:2;35495:9;35491:18;35483:26;;35555:9;35549:4;35545:20;35541:1;35530:9;35526:17;35519:47;35583:131;35709:4;35583:131;:::i;:::-;35575:139;;35302:419;;;:::o;35727:::-;35893:4;35931:2;35920:9;35916:18;35908:26;;35980:9;35974:4;35970:20;35966:1;35955:9;35951:17;35944:47;36008:131;36134:4;36008:131;:::i;:::-;36000:139;;35727:419;;;:::o;36152:::-;36318:4;36356:2;36345:9;36341:18;36333:26;;36405:9;36399:4;36395:20;36391:1;36380:9;36376:17;36369:47;36433:131;36559:4;36433:131;:::i;:::-;36425:139;;36152:419;;;:::o;36577:::-;36743:4;36781:2;36770:9;36766:18;36758:26;;36830:9;36824:4;36820:20;36816:1;36805:9;36801:17;36794:47;36858:131;36984:4;36858:131;:::i;:::-;36850:139;;36577:419;;;:::o;37002:::-;37168:4;37206:2;37195:9;37191:18;37183:26;;37255:9;37249:4;37245:20;37241:1;37230:9;37226:17;37219:47;37283:131;37409:4;37283:131;:::i;:::-;37275:139;;37002:419;;;:::o;37427:222::-;37520:4;37558:2;37547:9;37543:18;37535:26;;37571:71;37639:1;37628:9;37624:17;37615:6;37571:71;:::i;:::-;37427:222;;;;:::o;37655:129::-;37689:6;37716:20;;:::i;:::-;37706:30;;37745:33;37773:4;37765:6;37745:33;:::i;:::-;37655:129;;;:::o;37790:75::-;37823:6;37856:2;37850:9;37840:19;;37790:75;:::o;37871:307::-;37932:4;38022:18;38014:6;38011:30;38008:56;;;38044:18;;:::i;:::-;38008:56;38082:29;38104:6;38082:29;:::i;:::-;38074:37;;38166:4;38160;38156:15;38148:23;;37871:307;;;:::o;38184:308::-;38246:4;38336:18;38328:6;38325:30;38322:56;;;38358:18;;:::i;:::-;38322:56;38396:29;38418:6;38396:29;:::i;:::-;38388:37;;38480:4;38474;38470:15;38462:23;;38184:308;;;:::o;38498:141::-;38547:4;38570:3;38562:11;;38593:3;38590:1;38583:14;38627:4;38624:1;38614:18;38606:26;;38498:141;;;:::o;38645:98::-;38696:6;38730:5;38724:12;38714:22;;38645:98;;;:::o;38749:99::-;38801:6;38835:5;38829:12;38819:22;;38749:99;;;:::o;38854:168::-;38937:11;38971:6;38966:3;38959:19;39011:4;39006:3;39002:14;38987:29;;38854:168;;;;:::o;39028:147::-;39129:11;39166:3;39151:18;;39028:147;;;;:::o;39181:169::-;39265:11;39299:6;39294:3;39287:19;39339:4;39334:3;39330:14;39315:29;;39181:169;;;;:::o;39356:148::-;39458:11;39495:3;39480:18;;39356:148;;;;:::o;39510:305::-;39550:3;39569:20;39587:1;39569:20;:::i;:::-;39564:25;;39603:20;39621:1;39603:20;:::i;:::-;39598:25;;39757:1;39689:66;39685:74;39682:1;39679:81;39676:107;;;39763:18;;:::i;:::-;39676:107;39807:1;39804;39800:9;39793:16;;39510:305;;;;:::o;39821:185::-;39861:1;39878:20;39896:1;39878:20;:::i;:::-;39873:25;;39912:20;39930:1;39912:20;:::i;:::-;39907:25;;39951:1;39941:35;;39956:18;;:::i;:::-;39941:35;39998:1;39995;39991:9;39986:14;;39821:185;;;;:::o;40012:348::-;40052:7;40075:20;40093:1;40075:20;:::i;:::-;40070:25;;40109:20;40127:1;40109:20;:::i;:::-;40104:25;;40297:1;40229:66;40225:74;40222:1;40219:81;40214:1;40207:9;40200:17;40196:105;40193:131;;;40304:18;;:::i;:::-;40193:131;40352:1;40349;40345:9;40334:20;;40012:348;;;;:::o;40366:191::-;40406:4;40426:20;40444:1;40426:20;:::i;:::-;40421:25;;40460:20;40478:1;40460:20;:::i;:::-;40455:25;;40499:1;40496;40493:8;40490:34;;;40504:18;;:::i;:::-;40490:34;40549:1;40546;40542:9;40534:17;;40366:191;;;;:::o;40563:96::-;40600:7;40629:24;40647:5;40629:24;:::i;:::-;40618:35;;40563:96;;;:::o;40665:90::-;40699:7;40742:5;40735:13;40728:21;40717:32;;40665:90;;;:::o;40761:149::-;40797:7;40837:66;40830:5;40826:78;40815:89;;40761:149;;;:::o;40916:126::-;40953:7;40993:42;40986:5;40982:54;40971:65;;40916:126;;;:::o;41048:77::-;41085:7;41114:5;41103:16;;41048:77;;;:::o;41131:154::-;41215:6;41210:3;41205;41192:30;41277:1;41268:6;41263:3;41259:16;41252:27;41131:154;;;:::o;41291:307::-;41359:1;41369:113;41383:6;41380:1;41377:13;41369:113;;;41468:1;41463:3;41459:11;41453:18;41449:1;41444:3;41440:11;41433:39;41405:2;41402:1;41398:10;41393:15;;41369:113;;;41500:6;41497:1;41494:13;41491:101;;;41580:1;41571:6;41566:3;41562:16;41555:27;41491:101;41340:258;41291:307;;;:::o;41604:320::-;41648:6;41685:1;41679:4;41675:12;41665:22;;41732:1;41726:4;41722:12;41753:18;41743:81;;41809:4;41801:6;41797:17;41787:27;;41743:81;41871:2;41863:6;41860:14;41840:18;41837:38;41834:84;;;41890:18;;:::i;:::-;41834:84;41655:269;41604:320;;;:::o;41930:281::-;42013:27;42035:4;42013:27;:::i;:::-;42005:6;42001:40;42143:6;42131:10;42128:22;42107:18;42095:10;42092:34;42089:62;42086:88;;;42154:18;;:::i;:::-;42086:88;42194:10;42190:2;42183:22;41973:238;41930:281;;:::o;42217:233::-;42256:3;42279:24;42297:5;42279:24;:::i;:::-;42270:33;;42325:66;42318:5;42315:77;42312:103;;;42395:18;;:::i;:::-;42312:103;42442:1;42435:5;42431:13;42424:20;;42217:233;;;:::o;42456:176::-;42488:1;42505:20;42523:1;42505:20;:::i;:::-;42500:25;;42539:20;42557:1;42539:20;:::i;:::-;42534:25;;42578:1;42568:35;;42583:18;;:::i;:::-;42568:35;42624:1;42621;42617:9;42612:14;;42456:176;;;;:::o;42638:180::-;42686:77;42683:1;42676:88;42783:4;42780:1;42773:15;42807:4;42804:1;42797:15;42824:180;42872:77;42869:1;42862:88;42969:4;42966:1;42959:15;42993:4;42990:1;42983:15;43010:180;43058:77;43055:1;43048:88;43155:4;43152:1;43145:15;43179:4;43176:1;43169:15;43196:180;43244:77;43241:1;43234:88;43341:4;43338:1;43331:15;43365:4;43362:1;43355:15;43382:180;43430:77;43427:1;43420:88;43527:4;43524:1;43517:15;43551:4;43548:1;43541:15;43568:180;43616:77;43613:1;43606:88;43713:4;43710:1;43703:15;43737:4;43734:1;43727:15;43754:117;43863:1;43860;43853:12;43877:117;43986:1;43983;43976:12;44000:117;44109:1;44106;44099:12;44123:117;44232:1;44229;44222:12;44246:117;44355:1;44352;44345:12;44369:117;44478:1;44475;44468:12;44492:102;44533:6;44584:2;44580:7;44575:2;44568:5;44564:14;44560:28;44550:38;;44492:102;;;:::o;44600:230::-;44740:34;44736:1;44728:6;44724:14;44717:58;44809:13;44804:2;44796:6;44792:15;44785:38;44600:230;:::o;44836:237::-;44976:34;44972:1;44964:6;44960:14;44953:58;45045:20;45040:2;45032:6;45028:15;45021:45;44836:237;:::o;45079:225::-;45219:34;45215:1;45207:6;45203:14;45196:58;45288:8;45283:2;45275:6;45271:15;45264:33;45079:225;:::o;45310:178::-;45450:30;45446:1;45438:6;45434:14;45427:54;45310:178;:::o;45494:244::-;45634:34;45630:1;45622:6;45618:14;45611:58;45703:27;45698:2;45690:6;45686:15;45679:52;45494:244;:::o;45744:223::-;45884:34;45880:1;45872:6;45868:14;45861:58;45953:6;45948:2;45940:6;45936:15;45929:31;45744:223;:::o;45973:175::-;46113:27;46109:1;46101:6;46097:14;46090:51;45973:175;:::o;46154:177::-;46294:29;46290:1;46282:6;46278:14;46271:53;46154:177;:::o;46337:170::-;46477:22;46473:1;46465:6;46461:14;46454:46;46337:170;:::o;46513:231::-;46653:34;46649:1;46641:6;46637:14;46630:58;46722:14;46717:2;46709:6;46705:15;46698:39;46513:231;:::o;46750:243::-;46890:34;46886:1;46878:6;46874:14;46867:58;46959:26;46954:2;46946:6;46942:15;46935:51;46750:243;:::o;46999:229::-;47139:34;47135:1;47127:6;47123:14;47116:58;47208:12;47203:2;47195:6;47191:15;47184:37;46999:229;:::o;47234:228::-;47374:34;47370:1;47362:6;47358:14;47351:58;47443:11;47438:2;47430:6;47426:15;47419:36;47234:228;:::o;47468:181::-;47608:33;47604:1;47596:6;47592:14;47585:57;47468:181;:::o;47655:236::-;47795:34;47791:1;47783:6;47779:14;47772:58;47864:19;47859:2;47851:6;47847:15;47840:44;47655:236;:::o;47897:182::-;48037:34;48033:1;48025:6;48021:14;48014:58;47897:182;:::o;48085:173::-;48225:25;48221:1;48213:6;48209:14;48202:49;48085:173;:::o;48264:231::-;48404:34;48400:1;48392:6;48388:14;48381:58;48473:14;48468:2;48460:6;48456:15;48449:39;48264:231;:::o;48501:155::-;48641:7;48637:1;48629:6;48625:14;48618:31;48501:155;:::o;48662:182::-;48802:34;48798:1;48790:6;48786:14;48779:58;48662:182;:::o;48850:228::-;48990:34;48986:1;48978:6;48974:14;48967:58;49059:11;49054:2;49046:6;49042:15;49035:36;48850:228;:::o;49084:234::-;49224:34;49220:1;49212:6;49208:14;49201:58;49293:17;49288:2;49280:6;49276:15;49269:42;49084:234;:::o;49324:175::-;49464:27;49460:1;49452:6;49448:14;49441:51;49324:175;:::o;49505:227::-;49645:34;49641:1;49633:6;49629:14;49622:58;49714:10;49709:2;49701:6;49697:15;49690:35;49505:227;:::o;49738:220::-;49878:34;49874:1;49866:6;49862:14;49855:58;49947:3;49942:2;49934:6;49930:15;49923:28;49738:220;:::o;49964:114::-;;:::o;50084:173::-;50224:25;50220:1;50212:6;50208:14;50201:49;50084:173;:::o;50263:236::-;50403:34;50399:1;50391:6;50387:14;50380:58;50472:19;50467:2;50459:6;50455:15;50448:44;50263:236;:::o;50505:231::-;50645:34;50641:1;50633:6;50629:14;50622:58;50714:14;50709:2;50701:6;50697:15;50690:39;50505:231;:::o;50742:224::-;50882:34;50878:1;50870:6;50866:14;50859:58;50951:7;50946:2;50938:6;50934:15;50927:32;50742:224;:::o;50972:177::-;51112:29;51108:1;51100:6;51096:14;51089:53;50972:177;:::o;51155:122::-;51228:24;51246:5;51228:24;:::i;:::-;51221:5;51218:35;51208:63;;51267:1;51264;51257:12;51208:63;51155:122;:::o;51283:116::-;51353:21;51368:5;51353:21;:::i;:::-;51346:5;51343:32;51333:60;;51389:1;51386;51379:12;51333:60;51283:116;:::o;51405:120::-;51477:23;51494:5;51477:23;:::i;:::-;51470:5;51467:34;51457:62;;51515:1;51512;51505:12;51457:62;51405:120;:::o;51531:122::-;51604:24;51622:5;51604:24;:::i;:::-;51597:5;51594:35;51584:63;;51643:1;51640;51633:12;51584:63;51531:122;:::o

Swarm Source

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

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