Token MiniChillas
Overview ERC-721
Total Supply:
1,369 MC
Holders:
190 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MiniChillas
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-21 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/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/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 pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // 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); } } pragma solidity >=0.7.0 <0.9.0; contract MiniChillas is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 15 ether; uint256 public maxSupply = 1369; uint256 public maxMintAmount = 10; bool public paused = false; bool public onlyWhitelisted = true; mapping(address => uint256) public whitelistedAddresses; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { if(onlyWhitelisted == true) { require(whitelistedAddresses[msg.sender] > 0, "No More Free Mints"); require(whitelistedAddresses[msg.sender] >= _mintAmount, "To many mints"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { if (whitelistedAddresses[msg.sender] > 0){ whitelistedAddresses[msg.sender]--; } _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users, uint256[] calldata _amount) public onlyOwner { for (uint256 i = 0; i < _users.length; i++){ whitelistedAddresses[_users[i]] = _amount[i]; } } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620002e5565b5067d02ab486cedc0000600d55610559600e55600a600f556000601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000ac57600080fd5b506040516200526b3803806200526b8339818101604052810190620000d2919062000413565b82828160009080519060200190620000ec929190620002e5565b50806001908051906020019062000105929190620002e5565b505050620001286200011c6200014260201b60201c565b6200014a60201b60201c565b62000139816200021060201b60201c565b505050620006d3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002206200014260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000246620002bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200029f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029690620004f3565b60405180910390fd5b80600b9080519060200190620002b7929190620002e5565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002f390620005bb565b90600052602060002090601f01602090048101928262000317576000855562000363565b82601f106200033257805160ff191683800117855562000363565b8280016001018555821562000363579182015b828111156200036257825182559160200191906001019062000345565b5b50905062000372919062000376565b5090565b5b808211156200039157600081600090555060010162000377565b5090565b6000620003ac620003a6846200053e565b62000515565b905082815260208101848484011115620003cb57620003ca6200068a565b5b620003d884828562000585565b509392505050565b600082601f830112620003f857620003f762000685565b5b81516200040a84826020860162000395565b91505092915050565b6000806000606084860312156200042f576200042e62000694565b5b600084015167ffffffffffffffff81111562000450576200044f6200068f565b5b6200045e86828701620003e0565b935050602084015167ffffffffffffffff8111156200048257620004816200068f565b5b6200049086828701620003e0565b925050604084015167ffffffffffffffff811115620004b457620004b36200068f565b5b620004c286828701620003e0565b9150509250925092565b6000620004db60208362000574565b9150620004e882620006aa565b602082019050919050565b600060208201905081810360008301526200050e81620004cc565b9050919050565b60006200052162000534565b90506200052f8282620005f1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200055c576200055b62000656565b5b620005678262000699565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005a557808201518184015260208101905062000588565b83811115620005b5576000848401525b50505050565b60006002820490506001821680620005d457607f821691505b60208210811415620005eb57620005ea62000627565b5b50919050565b620005fc8262000699565b810181811067ffffffffffffffff821117156200061e576200061d62000656565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614b8880620006e36000396000f3fe60806040526004361061021a5760003560e01c806355f804b3116101235780639c70b512116100ab578063c87b56dd1161006f578063c87b56dd146107b5578063d5abeb01146107f2578063da3ef23f1461081d578063e985e9c514610846578063f2fde38b146108835761021a565b80639c70b512146106f1578063a0712d681461071c578063a22cb46514610738578063b88d4fde14610761578063c66828621461078a5761021a565b806370a08231116100f257806370a082311461061e578063715018a61461065b5780637f00c7a6146106725780638da5cb5b1461069b57806395d89b41146106c65761021a565b806355f804b3146105625780635c975abb1461058b5780636352211e146105b65780636c0360eb146105f35761021a565b8063239c70ae116101a65780633ccfd60b116101755780633ccfd60b1461048c57806342842e0e14610496578063438b6300146104bf57806344a0d68a146104fc5780634f6ccce7146105255761021a565b8063239c70ae146103d257806323b872dd146103fd5780632f745c59146104265780633c952764146104635761021a565b8063081812fc116101ed578063081812fc146102ed578063095ea7b31461032a57806313faede61461035357806318160ddd1461037e5780631973ea06146103a95761021a565b806301ffc9a71461021f57806302329a291461025c57806306c933d81461028557806306fdde03146102c2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613501565b6108ac565b6040516102539190613c02565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906134d4565b610926565b005b34801561029157600080fd5b506102ac60048036038101906102a79190613290565b6109bf565b6040516102b99190613f5f565b60405180910390f35b3480156102ce57600080fd5b506102d76109d7565b6040516102e49190613c1d565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f91906135a4565b610a69565b6040516103219190613b79565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190613413565b610aee565b005b34801561035f57600080fd5b50610368610c06565b6040516103759190613f5f565b60405180910390f35b34801561038a57600080fd5b50610393610c0c565b6040516103a09190613f5f565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190613453565b610c19565b005b3480156103de57600080fd5b506103e7610d41565b6040516103f49190613f5f565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906132fd565b610d47565b005b34801561043257600080fd5b5061044d60048036038101906104489190613413565b610da7565b60405161045a9190613f5f565b60405180910390f35b34801561046f57600080fd5b5061048a600480360381019061048591906134d4565b610e4c565b005b610494610ee5565b005b3480156104a257600080fd5b506104bd60048036038101906104b891906132fd565b610fe1565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190613290565b611001565b6040516104f39190613be0565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e91906135a4565b6110af565b005b34801561053157600080fd5b5061054c600480360381019061054791906135a4565b611135565b6040516105599190613f5f565b60405180910390f35b34801561056e57600080fd5b506105896004803603810190610584919061355b565b6111a6565b005b34801561059757600080fd5b506105a061123c565b6040516105ad9190613c02565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d891906135a4565b61124f565b6040516105ea9190613b79565b60405180910390f35b3480156105ff57600080fd5b50610608611301565b6040516106159190613c1d565b60405180910390f35b34801561062a57600080fd5b5061064560048036038101906106409190613290565b61138f565b6040516106529190613f5f565b60405180910390f35b34801561066757600080fd5b50610670611447565b005b34801561067e57600080fd5b50610699600480360381019061069491906135a4565b6114cf565b005b3480156106a757600080fd5b506106b0611555565b6040516106bd9190613b79565b60405180910390f35b3480156106d257600080fd5b506106db61157f565b6040516106e89190613c1d565b60405180910390f35b3480156106fd57600080fd5b50610706611611565b6040516107139190613c02565b60405180910390f35b610736600480360381019061073191906135a4565b611624565b005b34801561074457600080fd5b5061075f600480360381019061075a91906133d3565b6119dd565b005b34801561076d57600080fd5b5061078860048036038101906107839190613350565b611b5e565b005b34801561079657600080fd5b5061079f611bc0565b6040516107ac9190613c1d565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d791906135a4565b611c4e565b6040516107e99190613c1d565b60405180910390f35b3480156107fe57600080fd5b50610807611cf8565b6040516108149190613f5f565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f919061355b565b611cfe565b005b34801561085257600080fd5b5061086d600480360381019061086891906132bd565b611d94565b60405161087a9190613c02565b60405180910390f35b34801561088f57600080fd5b506108aa60048036038101906108a59190613290565b611e28565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091f575061091e82611f20565b5b9050919050565b61092e612002565b73ffffffffffffffffffffffffffffffffffffffff1661094c611555565b73ffffffffffffffffffffffffffffffffffffffff16146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613dff565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60116020528060005260406000206000915090505481565b6060600080546109e690614292565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1290614292565b8015610a5f5780601f10610a3457610100808354040283529160200191610a5f565b820191906000526020600020905b815481529060010190602001808311610a4257829003601f168201915b5050505050905090565b6000610a748261200a565b610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90613ddf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af98261124f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190613e7f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b89612002565b73ffffffffffffffffffffffffffffffffffffffff161480610bb85750610bb781610bb2612002565b611d94565b5b610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90613d1f565b60405180910390fd5b610c018383612076565b505050565b600d5481565b6000600880549050905090565b610c21612002565b73ffffffffffffffffffffffffffffffffffffffff16610c3f611555565b73ffffffffffffffffffffffffffffffffffffffff1614610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90613dff565b60405180910390fd5b60005b84849050811015610d3a57828282818110610cb657610cb561442b565b5b9050602002013560116000878785818110610cd457610cd361442b565b5b9050602002016020810190610ce99190613290565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d32906142f5565b915050610c98565b5050505050565b600f5481565b610d58610d52612002565b8261212f565b610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90613ebf565b60405180910390fd5b610da283838361220d565b505050565b6000610db28361138f565b8210610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90613c3f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e54612002565b73ffffffffffffffffffffffffffffffffffffffff16610e72611555565b73ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613dff565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b610eed612002565b73ffffffffffffffffffffffffffffffffffffffff16610f0b611555565b73ffffffffffffffffffffffffffffffffffffffff1614610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5890613dff565b60405180910390fd5b6000610f6b611555565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f8e90613b64565b60006040518083038185875af1925050503d8060008114610fcb576040519150601f19603f3d011682016040523d82523d6000602084013e610fd0565b606091505b5050905080610fde57600080fd5b50565b610ffc83838360405180602001604052806000815250611b5e565b505050565b6060600061100e8361138f565b905060008167ffffffffffffffff81111561102c5761102b61445a565b5b60405190808252806020026020018201604052801561105a5781602001602082028036833780820191505090505b50905060005b828110156110a4576110728582610da7565b8282815181106110855761108461442b565b5b602002602001018181525050808061109c906142f5565b915050611060565b508092505050919050565b6110b7612002565b73ffffffffffffffffffffffffffffffffffffffff166110d5611555565b73ffffffffffffffffffffffffffffffffffffffff161461112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112290613dff565b60405180910390fd5b80600d8190555050565b600061113f610c0c565b8210611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117790613eff565b60405180910390fd5b600882815481106111945761119361442b565b5b90600052602060002001549050919050565b6111ae612002565b73ffffffffffffffffffffffffffffffffffffffff166111cc611555565b73ffffffffffffffffffffffffffffffffffffffff1614611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121990613dff565b60405180910390fd5b80600b9080519060200190611238929190612ff8565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90613d5f565b60405180910390fd5b80915050919050565b600b805461130e90614292565b80601f016020809104026020016040519081016040528092919081815260200182805461133a90614292565b80156113875780601f1061135c57610100808354040283529160200191611387565b820191906000526020600020905b81548152906001019060200180831161136a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613d3f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61144f612002565b73ffffffffffffffffffffffffffffffffffffffff1661146d611555565b73ffffffffffffffffffffffffffffffffffffffff16146114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90613dff565b60405180910390fd5b6114cd6000612469565b565b6114d7612002565b73ffffffffffffffffffffffffffffffffffffffff166114f5611555565b73ffffffffffffffffffffffffffffffffffffffff161461154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290613dff565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461158e90614292565b80601f01602080910402602001604051908101604052809291908181526020018280546115ba90614292565b80156116075780601f106115dc57610100808354040283529160200191611607565b820191906000526020600020905b8154815290600101906020018083116115ea57829003601f168201915b5050505050905090565b601060019054906101000a900460ff1681565b601060009054906101000a900460ff1615611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b90613e1f565b60405180910390fd5b600061167e610c0c565b9050600082116116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba90613f3f565b60405180910390fd5b600f54821115611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90613d9f565b60405180910390fd5b600e548282611717919061409d565b1115611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613d7f565b60405180910390fd5b611760611555565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119045760011515601060019054906101000a900460ff16151514156118b3576000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790613edf565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a990613f1f565b60405180910390fd5b5b81600d546118c19190614124565b341015611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90613e9f565b60405180910390fd5b5b6000600190505b8281116119d8576000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156119b057601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906119aa90614268565b91905055505b6119c53382846119c0919061409d565b61252f565b80806119d0906142f5565b91505061190b565b505050565b6119e5612002565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90613cdf565b60405180910390fd5b8060056000611a60612002565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b0d612002565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b529190613c02565b60405180910390a35050565b611b6f611b69612002565b8361212f565b611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba590613ebf565b60405180910390fd5b611bba8484848461254d565b50505050565b600c8054611bcd90614292565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf990614292565b8015611c465780601f10611c1b57610100808354040283529160200191611c46565b820191906000526020600020905b815481529060010190602001808311611c2957829003601f168201915b505050505081565b6060611c598261200a565b611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613e5f565b60405180910390fd5b6000611ca26125a9565b90506000815111611cc25760405180602001604052806000815250611cf0565b80611ccc8461263b565b600c604051602001611ce093929190613b33565b6040516020818303038152906040525b915050919050565b600e5481565b611d06612002565b73ffffffffffffffffffffffffffffffffffffffff16611d24611555565b73ffffffffffffffffffffffffffffffffffffffff1614611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190613dff565b60405180910390fd5b80600c9080519060200190611d90929190612ff8565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e30612002565b73ffffffffffffffffffffffffffffffffffffffff16611e4e611555565b73ffffffffffffffffffffffffffffffffffffffff1614611ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9b90613dff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90613c7f565b60405180910390fd5b611f1d81612469565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611feb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ffb5750611ffa8261279c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120e98361124f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061213a8261200a565b612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090613cff565b60405180910390fd5b60006121848361124f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121f357508373ffffffffffffffffffffffffffffffffffffffff166121db84610a69565b73ffffffffffffffffffffffffffffffffffffffff16145b8061220457506122038185611d94565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661222d8261124f565b73ffffffffffffffffffffffffffffffffffffffff1614612283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227a90613e3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90613cbf565b60405180910390fd5b6122fe838383612806565b612309600082612076565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612359919061417e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b0919061409d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61254982826040518060200160405280600081525061291a565b5050565b61255884848461220d565b61256484848484612975565b6125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90613c5f565b60405180910390fd5b50505050565b6060600b80546125b890614292565b80601f01602080910402602001604051908101604052809291908181526020018280546125e490614292565b80156126315780601f1061260657610100808354040283529160200191612631565b820191906000526020600020905b81548152906001019060200180831161261457829003601f168201915b5050505050905090565b60606000821415612683576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612797565b600082905060005b600082146126b557808061269e906142f5565b915050600a826126ae91906140f3565b915061268b565b60008167ffffffffffffffff8111156126d1576126d061445a565b5b6040519080825280601f01601f1916602001820160405280156127035781602001600182028036833780820191505090505b5090505b600085146127905760018261271c919061417e565b9150600a8561272b919061433e565b6030612737919061409d565b60f81b81838151811061274d5761274c61442b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561278991906140f3565b9450612707565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612811838383612b0c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128545761284f81612b11565b612893565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612892576128918382612b5a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128d6576128d181612cc7565b612915565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612914576129138282612d98565b5b5b505050565b6129248383612e17565b6129316000848484612975565b612970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296790613c5f565b60405180910390fd5b505050565b60006129968473ffffffffffffffffffffffffffffffffffffffff16612fe5565b15612aff578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129bf612002565b8786866040518563ffffffff1660e01b81526004016129e19493929190613b94565b602060405180830381600087803b1580156129fb57600080fd5b505af1925050508015612a2c57506040513d601f19601f82011682018060405250810190612a29919061352e565b60015b612aaf573d8060008114612a5c576040519150601f19603f3d011682016040523d82523d6000602084013e612a61565b606091505b50600081511415612aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9e90613c5f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b04565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b678461138f565b612b71919061417e565b9050600060076000848152602001908152602001600020549050818114612c56576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612cdb919061417e565b9050600060096000848152602001908152602001600020549050600060088381548110612d0b57612d0a61442b565b5b906000526020600020015490508060088381548110612d2d57612d2c61442b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d7c57612d7b6143fc565b5b6001900381819060005260206000200160009055905550505050565b6000612da38361138f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7e90613dbf565b60405180910390fd5b612e908161200a565b15612ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec790613c9f565b60405180910390fd5b612edc60008383612806565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f2c919061409d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461300490614292565b90600052602060002090601f016020900481019282613026576000855561306d565b82601f1061303f57805160ff191683800117855561306d565b8280016001018555821561306d579182015b8281111561306c578251825591602001919060010190613051565b5b50905061307a919061307e565b5090565b5b8082111561309757600081600090555060010161307f565b5090565b60006130ae6130a984613f9f565b613f7a565b9050828152602081018484840111156130ca576130c9614498565b5b6130d5848285614226565b509392505050565b60006130f06130eb84613fd0565b613f7a565b90508281526020810184848401111561310c5761310b614498565b5b613117848285614226565b509392505050565b60008135905061312e81614af6565b92915050565b60008083601f84011261314a5761314961448e565b5b8235905067ffffffffffffffff81111561316757613166614489565b5b60208301915083602082028301111561318357613182614493565b5b9250929050565b60008083601f8401126131a05761319f61448e565b5b8235905067ffffffffffffffff8111156131bd576131bc614489565b5b6020830191508360208202830111156131d9576131d8614493565b5b9250929050565b6000813590506131ef81614b0d565b92915050565b60008135905061320481614b24565b92915050565b60008151905061321981614b24565b92915050565b600082601f8301126132345761323361448e565b5b813561324484826020860161309b565b91505092915050565b600082601f8301126132625761326161448e565b5b81356132728482602086016130dd565b91505092915050565b60008135905061328a81614b3b565b92915050565b6000602082840312156132a6576132a56144a2565b5b60006132b48482850161311f565b91505092915050565b600080604083850312156132d4576132d36144a2565b5b60006132e28582860161311f565b92505060206132f38582860161311f565b9150509250929050565b600080600060608486031215613316576133156144a2565b5b60006133248682870161311f565b93505060206133358682870161311f565b92505060406133468682870161327b565b9150509250925092565b6000806000806080858703121561336a576133696144a2565b5b60006133788782880161311f565b94505060206133898782880161311f565b935050604061339a8782880161327b565b925050606085013567ffffffffffffffff8111156133bb576133ba61449d565b5b6133c78782880161321f565b91505092959194509250565b600080604083850312156133ea576133e96144a2565b5b60006133f88582860161311f565b9250506020613409858286016131e0565b9150509250929050565b6000806040838503121561342a576134296144a2565b5b60006134388582860161311f565b92505060206134498582860161327b565b9150509250929050565b6000806000806040858703121561346d5761346c6144a2565b5b600085013567ffffffffffffffff81111561348b5761348a61449d565b5b61349787828801613134565b9450945050602085013567ffffffffffffffff8111156134ba576134b961449d565b5b6134c68782880161318a565b925092505092959194509250565b6000602082840312156134ea576134e96144a2565b5b60006134f8848285016131e0565b91505092915050565b600060208284031215613517576135166144a2565b5b6000613525848285016131f5565b91505092915050565b600060208284031215613544576135436144a2565b5b60006135528482850161320a565b91505092915050565b600060208284031215613571576135706144a2565b5b600082013567ffffffffffffffff81111561358f5761358e61449d565b5b61359b8482850161324d565b91505092915050565b6000602082840312156135ba576135b96144a2565b5b60006135c88482850161327b565b91505092915050565b60006135dd8383613b15565b60208301905092915050565b6135f2816141b2565b82525050565b600061360382614026565b61360d8185614054565b935061361883614001565b8060005b8381101561364957815161363088826135d1565b975061363b83614047565b92505060018101905061361c565b5085935050505092915050565b61365f816141c4565b82525050565b600061367082614031565b61367a8185614065565b935061368a818560208601614235565b613693816144a7565b840191505092915050565b60006136a98261403c565b6136b38185614081565b93506136c3818560208601614235565b6136cc816144a7565b840191505092915050565b60006136e28261403c565b6136ec8185614092565b93506136fc818560208601614235565b80840191505092915050565b6000815461371581614292565b61371f8186614092565b9450600182166000811461373a576001811461374b5761377e565b60ff1983168652818601935061377e565b61375485614011565b60005b8381101561377657815481890152600182019150602081019050613757565b838801955050505b50505092915050565b6000613794602b83614081565b915061379f826144b8565b604082019050919050565b60006137b7603283614081565b91506137c282614507565b604082019050919050565b60006137da602683614081565b91506137e582614556565b604082019050919050565b60006137fd601c83614081565b9150613808826145a5565b602082019050919050565b6000613820602483614081565b915061382b826145ce565b604082019050919050565b6000613843601983614081565b915061384e8261461d565b602082019050919050565b6000613866602c83614081565b915061387182614646565b604082019050919050565b6000613889603883614081565b915061389482614695565b604082019050919050565b60006138ac602a83614081565b91506138b7826146e4565b604082019050919050565b60006138cf602983614081565b91506138da82614733565b604082019050919050565b60006138f2601683614081565b91506138fd82614782565b602082019050919050565b6000613915602483614081565b9150613920826147ab565b604082019050919050565b6000613938602083614081565b9150613943826147fa565b602082019050919050565b600061395b602c83614081565b915061396682614823565b604082019050919050565b600061397e602083614081565b915061398982614872565b602082019050919050565b60006139a1601683614081565b91506139ac8261489b565b602082019050919050565b60006139c4602983614081565b91506139cf826148c4565b604082019050919050565b60006139e7602f83614081565b91506139f282614913565b604082019050919050565b6000613a0a602183614081565b9150613a1582614962565b604082019050919050565b6000613a2d600083614076565b9150613a38826149b1565b600082019050919050565b6000613a50601283614081565b9150613a5b826149b4565b602082019050919050565b6000613a73603183614081565b9150613a7e826149dd565b604082019050919050565b6000613a96601283614081565b9150613aa182614a2c565b602082019050919050565b6000613ab9602c83614081565b9150613ac482614a55565b604082019050919050565b6000613adc600d83614081565b9150613ae782614aa4565b602082019050919050565b6000613aff601b83614081565b9150613b0a82614acd565b602082019050919050565b613b1e8161421c565b82525050565b613b2d8161421c565b82525050565b6000613b3f82866136d7565b9150613b4b82856136d7565b9150613b578284613708565b9150819050949350505050565b6000613b6f82613a20565b9150819050919050565b6000602082019050613b8e60008301846135e9565b92915050565b6000608082019050613ba960008301876135e9565b613bb660208301866135e9565b613bc36040830185613b24565b8181036060830152613bd58184613665565b905095945050505050565b60006020820190508181036000830152613bfa81846135f8565b905092915050565b6000602082019050613c176000830184613656565b92915050565b60006020820190508181036000830152613c37818461369e565b905092915050565b60006020820190508181036000830152613c5881613787565b9050919050565b60006020820190508181036000830152613c78816137aa565b9050919050565b60006020820190508181036000830152613c98816137cd565b9050919050565b60006020820190508181036000830152613cb8816137f0565b9050919050565b60006020820190508181036000830152613cd881613813565b9050919050565b60006020820190508181036000830152613cf881613836565b9050919050565b60006020820190508181036000830152613d1881613859565b9050919050565b60006020820190508181036000830152613d388161387c565b9050919050565b60006020820190508181036000830152613d588161389f565b9050919050565b60006020820190508181036000830152613d78816138c2565b9050919050565b60006020820190508181036000830152613d98816138e5565b9050919050565b60006020820190508181036000830152613db881613908565b9050919050565b60006020820190508181036000830152613dd88161392b565b9050919050565b60006020820190508181036000830152613df88161394e565b9050919050565b60006020820190508181036000830152613e1881613971565b9050919050565b60006020820190508181036000830152613e3881613994565b9050919050565b60006020820190508181036000830152613e58816139b7565b9050919050565b60006020820190508181036000830152613e78816139da565b9050919050565b60006020820190508181036000830152613e98816139fd565b9050919050565b60006020820190508181036000830152613eb881613a43565b9050919050565b60006020820190508181036000830152613ed881613a66565b9050919050565b60006020820190508181036000830152613ef881613a89565b9050919050565b60006020820190508181036000830152613f1881613aac565b9050919050565b60006020820190508181036000830152613f3881613acf565b9050919050565b60006020820190508181036000830152613f5881613af2565b9050919050565b6000602082019050613f746000830184613b24565b92915050565b6000613f84613f95565b9050613f9082826142c4565b919050565b6000604051905090565b600067ffffffffffffffff821115613fba57613fb961445a565b5b613fc3826144a7565b9050602081019050919050565b600067ffffffffffffffff821115613feb57613fea61445a565b5b613ff4826144a7565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140a88261421c565b91506140b38361421c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140e8576140e761436f565b5b828201905092915050565b60006140fe8261421c565b91506141098361421c565b9250826141195761411861439e565b5b828204905092915050565b600061412f8261421c565b915061413a8361421c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141735761417261436f565b5b828202905092915050565b60006141898261421c565b91506141948361421c565b9250828210156141a7576141a661436f565b5b828203905092915050565b60006141bd826141fc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614253578082015181840152602081019050614238565b83811115614262576000848401525b50505050565b60006142738261421c565b915060008214156142875761428661436f565b5b600182039050919050565b600060028204905060018216806142aa57607f821691505b602082108114156142be576142bd6143cd565b5b50919050565b6142cd826144a7565b810181811067ffffffffffffffff821117156142ec576142eb61445a565b5b80604052505050565b60006143008261421c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143335761433261436f565b5b600182019050919050565b60006143498261421c565b91506143548361421c565b9250826143645761436361439e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f204d6f72652046726565204d696e74730000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f546f206d616e79206d696e747300000000000000000000000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614aff816141b2565b8114614b0a57600080fd5b50565b614b16816141c4565b8114614b2157600080fd5b50565b614b2d816141d0565b8114614b3857600080fd5b50565b614b448161421c565b8114614b4f57600080fd5b5056fea2646970667358221220b8c594d8aef4ae1d648737467b9a8b71ec4d4bfecca1d6099c555f2ff6f3442364736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b4d696e694368696c6c617300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d51797351426865664a676132566d46733878624459676345714431684c75744e6f3367617957346347654c6f2f00000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b4d696e694368696c6c617300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d51797351426865664a676132566d46733878624459676345714431684c75744e6f3367617957346347654c6f2f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): MiniChillas
Arg [1] : _symbol (string): MC
Arg [2] : _initBaseURI (string): ipfs://QmQysQBhefJga2VmFs8xbDYgcEqD1hLutNo3gayW4cGeLo/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [4] : 4d696e694368696c6c6173000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4d43000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d51797351426865664a676132566d467338786244596763
Arg [9] : 45714431684c75744e6f3367617957346347654c6f2f00000000000000000000
Deployed ByteCode Sourcemap
43279:3427:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34792:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46144:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43614:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22635:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24202:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23722:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43435:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35434:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46328:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43506:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25097:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35101:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46225:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46549:154;;;:::i;:::-;;25509:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44916:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45699:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35625:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45909:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43544:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22328:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43367:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22057:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42605:94;;;;;;;;;;;;;:::i;:::-;;45786:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41952:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22805:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43575:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43995:914;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24497:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25766:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43393:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45271:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43470:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46014:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24865:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42855:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34792:224;34894:4;34933:35;34918:50;;;:11;:50;;;;:90;;;;34972:36;34996:11;34972:23;:36::i;:::-;34918:90;34911:97;;34792:224;;;:::o;46144:73::-;42184:12;:10;:12::i;:::-;42173:23;;:7;:5;:7::i;:::-;:23;;;42165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46205:6:::1;46196;;:15;;;;;;;;;;;;;;;;;;46144:73:::0;:::o;43614:55::-;;;;;;;;;;;;;;;;;:::o;22635:100::-;22689:13;22722:5;22715:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22635:100;:::o;24202:222::-;24278:7;24306:16;24314:7;24306;:16::i;:::-;24298:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24392:15;:24;24408:7;24392:24;;;;;;;;;;;;;;;;;;;;;24385:31;;24202:222;;;:::o;23722:413::-;23803:13;23819:23;23834:7;23819:14;:23::i;:::-;23803:39;;23867:5;23861:11;;:2;:11;;;;23853:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23962:5;23946:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23971:37;23988:5;23995:12;:10;:12::i;:::-;23971:16;:37::i;:::-;23946:62;23924:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24106:21;24115:2;24119:7;24106:8;:21::i;:::-;23792:343;23722:413;;:::o;43435:30::-;;;;:::o;35434:113::-;35495:7;35522:10;:17;;;;35515:24;;35434:113;:::o;46328:214::-;42184:12;:10;:12::i;:::-;42173:23;;:7;:5;:7::i;:::-;:23;;;42165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46436:9:::1;46431:106;46455:6;;:13;;46451:1;:17;46431:106;;;46519:7;;46527:1;46519:10;;;;;;;:::i;:::-;;;;;;;;46485:20;:31;46506:6;;46513:1;46506:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46485:31;;;;;;;;;;;;;;;:44;;;;46470:3;;;;;:::i;:::-;;;;46431:106;;;;46328:214:::0;;;;:::o;43506:33::-;;;;:::o;25097:340::-;25292:41;25311:12;:10;:12::i;:::-;25325:7;25292:18;:41::i;:::-;25284:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25401:28;25411:4;25417:2;25421:7;25401:9;:28::i;:::-;25097:340;;;:::o;35101:256::-;35198:7;35234:23;35251:5;35234:16;:23::i;:::-;35226:5;:31;35218:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35323:12;:19;35336:5;35323:19;;;;;;;;;;;;;;;:26;35343:5;35323:26;;;;;;;;;;;;35316:33;;35101:256;;;;:::o;46225:95::-;42184:12;:10;:12::i;:::-;42173:23;;:7;:5;:7::i;:::-;:23;;;42165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46308:6:::1;46290:15;;:24;;;;;;;;;;;;;;;;;;46225:95:::0;:::o;46549:154::-;42184:12;:10;:12::i;:::-;42173:23;;:7;:5;:7::i;:::-;:23;;;42165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46605:7:::1;46626;:5;:7::i;:::-;46618:21;;46647;46618:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46604:69;;;46688:2;46680:11;;;::::0;::::1;;46594:109;46549:154::o:0;25509:185::-;25647:39;25664:4;25670:2;25674:7;25647:39;;;;;;;;;;;;:16;:39::i;:::-;25509:185;;;:::o;44916:348::-;44991:16;45019:23;45045:17;45055:6;45045:9;:17::i;:::-;45019:43;;45069:25;45111:15;45097:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45069:58;;45139:9;45134:103;45154:15;45150:1;:19;45134:103;;;45199:30;45219:6;45227:1;45199:19;:30::i;:::-;45185:8;45194:1;45185:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45171:3;;;;;:::i;:::-;;;;45134:103;;;;45250:8;45243:15;;;;44916:348;;;:::o;45699:80::-;42184:12;:10;:12::i;:::-;42173:23;;:7;:5;:7::i;:::-;:23;;;42165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45765:8:::1;45758:4;:15;;;;45699:80:::0;:::o;35625:233::-;35700:7;35736:30;:28;:30::i;:::-;35728:5;:38;35720:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35833:10;35844:5;35833:17;;;;;;;;:::i;:::-;;;;;;;;;;35826:24;;35625:233;;;:::o;45909:98::-;42184:12;:10;:12::i;:::-;42173:23;;:7;:5;:7::i;:::-;:23;;;42165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45990:11:::1;45980:7;:21;;;;;;;;;;;;:::i;:::-;;45909:98:::0;:::o;43544:26::-;;;;;;;;;;;;;:::o;22328:239::-;22400:7;22420:13;22436:7;:16;22444:7;22436:16;;;;;;;;;;;;;;;;;;;;;22420:32;;22488:1;22471:19;;:5;:19;;;;22463:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22554:5;22547:12;;;22328:239;;;:::o;43367:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22057:208::-;22129:7;22174:1;22157:19;;:5;:19;;;;22149:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22241:9;:16;22251:5;22241:16;;;;;;;;;;;;;;;;22234:23;;22057:208;;;:::o;42605:94::-;42184:12;:10;:12::i;:::-;42173:23;;:7;:5;:7::i;:::-;:23;;;42165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42670:21:::1;42688:1;42670:9;:21::i;:::-;42605:94::o:0;45786:116::-;42184:12;:10;:12::i;:::-;42173:23;;:7;:5;:7::i;:::-;:23;;;42165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45879:17:::1;45863:13;:33;;;;45786:116:::0;:::o;41952:87::-;41998:7;42025:6;;;;;;;;;;;42018:13;;41952:87;:::o;22805:104::-;22861:13;22894:7;22887:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22805:104;:::o;43575:34::-;;;;;;;;;;;;;:::o;43995:914::-;44061:6;;;;;;;;;;;44060:7;44052:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;44101:14;44118:13;:11;:13::i;:::-;44101:30;;44160:1;44146:11;:15;44138:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44223:13;;44208:11;:28;;44200:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44316:9;;44301:11;44292:6;:20;;;;:::i;:::-;:33;;44284:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44380:7;:5;:7::i;:::-;44366:21;;:10;:21;;;44362:332;;44422:4;44403:23;;:15;;;;;;;;;;;:23;;;44400:210;;;44486:1;44451:20;:32;44472:10;44451:32;;;;;;;;;;;;;;;;:36;44443:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44569:11;44533:20;:32;44554:10;44533:32;;;;;;;;;;;;;;;;:47;;44525:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44400:210;44652:11;44645:4;;:18;;;;:::i;:::-;44632:9;:31;;44624:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44362:332;44711:9;44723:1;44711:13;;44706:198;44731:11;44726:1;:16;44706:198;;44798:1;44763:20;:32;44784:10;44763:32;;;;;;;;;;;;;;;;:36;44759:96;;;44810:20;:32;44831:10;44810:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;44759:96;44863:33;44873:10;44894:1;44885:6;:10;;;;:::i;:::-;44863:9;:33::i;:::-;44744:3;;;;;:::i;:::-;;;;44706:198;;;;44045:864;43995:914;:::o;24497:296::-;24612:12;:10;:12::i;:::-;24600:24;;:8;:24;;;;24592:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24713:8;24668:18;:32;24687:12;:10;:12::i;:::-;24668:32;;;;;;;;;;;;;;;:42;24701:8;24668:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24766:8;24737:48;;24752:12;:10;:12::i;:::-;24737:48;;;24776:8;24737:48;;;;;;:::i;:::-;;;;;;;;24497:296;;:::o;25766:328::-;25941:41;25960:12;:10;:12::i;:::-;25974:7;25941:18;:41::i;:::-;25933:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26047:39;26061:4;26067:2;26071:7;26080:5;26047:13;:39::i;:::-;25766:328;;;;:::o;43393:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45271:402::-;45344:13;45385:16;45393:7;45385;:16::i;:::-;45369:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45479:28;45510:10;:8;:10::i;:::-;45479:41;;45565:1;45540:14;45534:28;:32;:133;;;;;;;;;;;;;;;;;45602:14;45618:18;:7;:16;:18::i;:::-;45638:13;45585:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45534:133;45527:140;;;45271:402;;;:::o;43470:31::-;;;;:::o;46014:122::-;42184:12;:10;:12::i;:::-;42173:23;;:7;:5;:7::i;:::-;:23;;;42165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46113:17:::1;46097:13;:33;;;;;;;;;;;;:::i;:::-;;46014:122:::0;:::o;24865:164::-;24962:4;24986:18;:25;25005:5;24986:25;;;;;;;;;;;;;;;:35;25012:8;24986:35;;;;;;;;;;;;;;;;;;;;;;;;;24979:42;;24865:164;;;;:::o;42855:192::-;42184:12;:10;:12::i;:::-;42173:23;;:7;:5;:7::i;:::-;:23;;;42165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42964:1:::1;42944:22;;:8;:22;;;;42936:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43020:19;43030:8;43020:9;:19::i;:::-;42855:192:::0;:::o;21687:305::-;21789:4;21841:25;21826:40;;;:11;:40;;;;:105;;;;21898:33;21883:48;;;:11;:48;;;;21826:105;:158;;;;21948:36;21972:11;21948:23;:36::i;:::-;21826:158;21806:178;;21687:305;;;:::o;20150:98::-;20203:7;20230:10;20223:17;;20150:98;:::o;27606:127::-;27671:4;27723:1;27695:30;;:7;:16;27703:7;27695:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27688:37;;27606:127;;;:::o;31606:174::-;31708:2;31681:15;:24;31697:7;31681:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31764:7;31760:2;31726:46;;31735:23;31750:7;31735:14;:23::i;:::-;31726:46;;;;;;;;;;;;31606:174;;:::o;27901:348::-;27994:4;28019:16;28027:7;28019;:16::i;:::-;28011:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28095:13;28111:23;28126:7;28111:14;:23::i;:::-;28095:39;;28164:5;28153:16;;:7;:16;;;:51;;;;28197:7;28173:31;;:20;28185:7;28173:11;:20::i;:::-;:31;;;28153:51;:87;;;;28208:32;28225:5;28232:7;28208:16;:32::i;:::-;28153:87;28145:96;;;27901:348;;;;:::o;30905:582::-;31064:4;31037:31;;:23;31052:7;31037:14;:23::i;:::-;:31;;;31029:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31147:1;31133:16;;:2;:16;;;;31125:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31204:39;31225:4;31231:2;31235:7;31204:20;:39::i;:::-;31309:29;31326:1;31330:7;31309:8;:29::i;:::-;31371:1;31352:9;:15;31362:4;31352:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31400:1;31383:9;:13;31393:2;31383:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31431:2;31412:7;:16;31420:7;31412:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31471:7;31467:2;31452:27;;31461:4;31452:27;;;;;;;;;;;;30905:582;;;:::o;43056:173::-;43112:16;43131:6;;;;;;;;;;;43112:25;;43157:8;43148:6;;:17;;;;;;;;;;;;;;;;;;43212:8;43181:40;;43202:8;43181:40;;;;;;;;;;;;43101:128;43056:173;:::o;28592:110::-;28668:26;28678:2;28682:7;28668:26;;;;;;;;;;;;:9;:26::i;:::-;28592:110;;:::o;26977:315::-;27134:28;27144:4;27150:2;27154:7;27134:9;:28::i;:::-;27181:48;27204:4;27210:2;27214:7;27223:5;27181:22;:48::i;:::-;27173:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26977:315;;;;:::o;43873:102::-;43933:13;43962:7;43955:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43873:102;:::o;7944:724::-;8000:13;8231:1;8222:5;:10;8218:53;;;8249:10;;;;;;;;;;;;;;;;;;;;;8218:53;8281:12;8296:5;8281:20;;8312:14;8337:78;8352:1;8344:4;:9;8337:78;;8370:8;;;;;:::i;:::-;;;;8401:2;8393:10;;;;;:::i;:::-;;;8337:78;;;8425:19;8457:6;8447:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8425:39;;8475:154;8491:1;8482:5;:10;8475:154;;8519:1;8509:11;;;;;:::i;:::-;;;8586:2;8578:5;:10;;;;:::i;:::-;8565:2;:24;;;;:::i;:::-;8552:39;;8535:6;8542;8535:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8615:2;8606:11;;;;;:::i;:::-;;;8475:154;;;8653:6;8639:21;;;;;7944:724;;;;:::o;7463:157::-;7548:4;7587:25;7572:40;;;:11;:40;;;;7565:47;;7463:157;;;:::o;36472:590::-;36616:45;36643:4;36649:2;36653:7;36616:26;:45::i;:::-;36695:1;36679:18;;:4;:18;;;36675:187;;;36714:40;36746:7;36714:31;:40::i;:::-;36675:187;;;36784:2;36776:10;;:4;:10;;;36772:90;;36803:47;36836:4;36842:7;36803:32;:47::i;:::-;36772:90;36675:187;36890:1;36876:16;;:2;:16;;;36872:183;;;36909:45;36946:7;36909:36;:45::i;:::-;36872:183;;;36982:4;36976:10;;:2;:10;;;36972:83;;37003:40;37031:2;37035:7;37003:27;:40::i;:::-;36972:83;36872:183;36472:590;;;:::o;28930:321::-;29060:18;29066:2;29070:7;29060:5;:18::i;:::-;29111:54;29142:1;29146:2;29150:7;29159:5;29111:22;:54::i;:::-;29089:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28930:321;;;:::o;32346:799::-;32501:4;32522:15;:2;:13;;;:15::i;:::-;32518:620;;;32574:2;32558:36;;;32595:12;:10;:12::i;:::-;32609:4;32615:7;32624:5;32558:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32554:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32817:1;32800:6;:13;:18;32796:272;;;32843:60;;;;;;;;;;:::i;:::-;;;;;;;;32796:272;33018:6;33012:13;33003:6;32999:2;32995:15;32988:38;32554:529;32691:41;;;32681:51;;;:6;:51;;;;32674:58;;;;;32518:620;33122:4;33115:11;;32346:799;;;;;;;:::o;33718:126::-;;;;:::o;37787:164::-;37891:10;:17;;;;37864:15;:24;37880:7;37864:24;;;;;;;;;;;:44;;;;37919:10;37935:7;37919:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37787:164;:::o;38579:992::-;38846:22;38896:1;38871:22;38888:4;38871:16;:22::i;:::-;:26;;;;:::i;:::-;38846:51;;38908:18;38929:17;:26;38947:7;38929:26;;;;;;;;;;;;38908:47;;39077:14;39063:10;:28;39059:329;;39108:19;39130:12;:18;39143:4;39130:18;;;;;;;;;;;;;;;:34;39149:14;39130:34;;;;;;;;;;;;39108:56;;39215:11;39182:12;:18;39195:4;39182:18;;;;;;;;;;;;;;;:30;39201:10;39182:30;;;;;;;;;;;:44;;;;39332:10;39299:17;:30;39317:11;39299:30;;;;;;;;;;;:43;;;;39093:295;39059:329;39485:17;:26;39503:7;39485:26;;;;;;;;;;;39478:33;;;39529:12;:18;39542:4;39529:18;;;;;;;;;;;;;;;:34;39548:14;39529:34;;;;;;;;;;;39522:41;;;38660:911;;38579:992;;:::o;39867:1083::-;40121:22;40166:1;40146:10;:17;;;;:21;;;;:::i;:::-;40121:46;;40178:18;40199:15;:24;40215:7;40199:24;;;;;;;;;;;;40178:45;;40551:19;40573:10;40584:14;40573:26;;;;;;;;:::i;:::-;;;;;;;;;;40551:48;;40638:11;40613:10;40624;40613:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40749:10;40718:15;:28;40734:11;40718:28;;;;;;;;;;;:41;;;;40891:15;:24;40907:7;40891:24;;;;;;;;;;;40884:31;;;40926:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39938:1012;;;39867:1083;:::o;37364:221::-;37449:14;37466:20;37483:2;37466:16;:20::i;:::-;37449:37;;37524:7;37497:12;:16;37510:2;37497:16;;;;;;;;;;;;;;;:24;37514:6;37497:24;;;;;;;;;;;:34;;;;37571:6;37542:17;:26;37560:7;37542:26;;;;;;;;;;;:35;;;;37438:147;37364:221;;:::o;29588:385::-;29682:1;29668:16;;:2;:16;;;;29660:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29741:16;29749:7;29741;:16::i;:::-;29740:17;29732:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29804:45;29833:1;29837:2;29841:7;29804:20;:45::i;:::-;29880:1;29863:9;:13;29873:2;29863:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29911:2;29892:7;:16;29900:7;29892:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29957:7;29953:2;29932:33;;29949:1;29932:33;;;;;;;;;;;;29588:385;;:::o;10477:388::-;10537:4;10746:12;10813:7;10801:20;10793:28;;10856:1;10849:4;:8;10842:15;;;10477:388;;;:::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;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:137::-;2352:5;2390:6;2377:20;2368:29;;2406:32;2432:5;2406:32;:::i;:::-;2307:137;;;;:::o;2450:141::-;2506:5;2537:6;2531:13;2522:22;;2553:32;2579:5;2553:32;:::i;:::-;2450:141;;;;:::o;2610:338::-;2665:5;2714:3;2707:4;2699:6;2695:17;2691:27;2681:122;;2722:79;;:::i;:::-;2681:122;2839:6;2826:20;2864:78;2938:3;2930:6;2923:4;2915:6;2911:17;2864:78;:::i;:::-;2855:87;;2671:277;2610:338;;;;:::o;2968:340::-;3024:5;3073:3;3066:4;3058:6;3054:17;3050:27;3040:122;;3081:79;;:::i;:::-;3040:122;3198:6;3185:20;3223:79;3298:3;3290:6;3283:4;3275:6;3271:17;3223:79;:::i;:::-;3214:88;;3030:278;2968:340;;;;:::o;3314:139::-;3360:5;3398:6;3385:20;3376:29;;3414:33;3441:5;3414:33;:::i;:::-;3314:139;;;;:::o;3459:329::-;3518:6;3567:2;3555:9;3546:7;3542:23;3538:32;3535:119;;;3573:79;;:::i;:::-;3535:119;3693:1;3718:53;3763:7;3754:6;3743:9;3739:22;3718:53;:::i;:::-;3708:63;;3664:117;3459:329;;;;:::o;3794:474::-;3862:6;3870;3919:2;3907:9;3898:7;3894:23;3890:32;3887:119;;;3925:79;;:::i;:::-;3887:119;4045:1;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4016:117;4172:2;4198:53;4243:7;4234:6;4223:9;4219:22;4198:53;:::i;:::-;4188:63;;4143:118;3794:474;;;;;:::o;4274:619::-;4351:6;4359;4367;4416:2;4404:9;4395:7;4391:23;4387:32;4384:119;;;4422:79;;:::i;:::-;4384:119;4542:1;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4513:117;4669:2;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4640:118;4797:2;4823:53;4868:7;4859:6;4848:9;4844:22;4823:53;:::i;:::-;4813:63;;4768:118;4274:619;;;;;:::o;4899:943::-;4994:6;5002;5010;5018;5067:3;5055:9;5046:7;5042:23;5038:33;5035:120;;;5074:79;;:::i;:::-;5035:120;5194:1;5219:53;5264:7;5255:6;5244:9;5240:22;5219:53;:::i;:::-;5209:63;;5165:117;5321:2;5347:53;5392:7;5383:6;5372:9;5368:22;5347:53;:::i;:::-;5337:63;;5292:118;5449:2;5475:53;5520:7;5511:6;5500:9;5496:22;5475:53;:::i;:::-;5465:63;;5420:118;5605:2;5594:9;5590:18;5577:32;5636:18;5628:6;5625:30;5622:117;;;5658:79;;:::i;:::-;5622:117;5763:62;5817:7;5808:6;5797:9;5793:22;5763:62;:::i;:::-;5753:72;;5548:287;4899:943;;;;;;;:::o;5848:468::-;5913:6;5921;5970:2;5958:9;5949:7;5945:23;5941:32;5938:119;;;5976:79;;:::i;:::-;5938:119;6096:1;6121:53;6166:7;6157:6;6146:9;6142:22;6121:53;:::i;:::-;6111:63;;6067:117;6223:2;6249:50;6291:7;6282:6;6271:9;6267:22;6249:50;:::i;:::-;6239:60;;6194:115;5848:468;;;;;:::o;6322:474::-;6390:6;6398;6447:2;6435:9;6426:7;6422:23;6418:32;6415:119;;;6453:79;;:::i;:::-;6415:119;6573:1;6598:53;6643:7;6634:6;6623:9;6619:22;6598:53;:::i;:::-;6588:63;;6544:117;6700:2;6726:53;6771:7;6762:6;6751:9;6747:22;6726:53;:::i;:::-;6716:63;;6671:118;6322:474;;;;;:::o;6802:934::-;6924:6;6932;6940;6948;6997:2;6985:9;6976:7;6972:23;6968:32;6965:119;;;7003:79;;:::i;:::-;6965:119;7151:1;7140:9;7136:17;7123:31;7181:18;7173:6;7170:30;7167:117;;;7203:79;;:::i;:::-;7167:117;7316:80;7388:7;7379:6;7368:9;7364:22;7316:80;:::i;:::-;7298:98;;;;7094:312;7473:2;7462:9;7458:18;7445:32;7504:18;7496:6;7493:30;7490:117;;;7526:79;;:::i;:::-;7490:117;7639:80;7711:7;7702:6;7691:9;7687:22;7639:80;:::i;:::-;7621:98;;;;7416:313;6802:934;;;;;;;:::o;7742:323::-;7798:6;7847:2;7835:9;7826:7;7822:23;7818:32;7815:119;;;7853:79;;:::i;:::-;7815:119;7973:1;7998:50;8040:7;8031:6;8020:9;8016:22;7998:50;:::i;:::-;7988:60;;7944:114;7742:323;;;;:::o;8071:327::-;8129:6;8178:2;8166:9;8157:7;8153:23;8149:32;8146:119;;;8184:79;;:::i;:::-;8146:119;8304:1;8329:52;8373:7;8364:6;8353:9;8349:22;8329:52;:::i;:::-;8319:62;;8275:116;8071:327;;;;:::o;8404:349::-;8473:6;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:63;8728:7;8719:6;8708:9;8704:22;8673:63;:::i;:::-;8663:73;;8619:127;8404:349;;;;:::o;8759:509::-;8828:6;8877:2;8865:9;8856:7;8852:23;8848:32;8845:119;;;8883:79;;:::i;:::-;8845:119;9031:1;9020:9;9016:17;9003:31;9061:18;9053:6;9050:30;9047:117;;;9083:79;;:::i;:::-;9047:117;9188:63;9243:7;9234:6;9223:9;9219:22;9188:63;:::i;:::-;9178:73;;8974:287;8759:509;;;;:::o;9274:329::-;9333:6;9382:2;9370:9;9361:7;9357:23;9353:32;9350:119;;;9388:79;;:::i;:::-;9350:119;9508:1;9533:53;9578:7;9569:6;9558:9;9554:22;9533:53;:::i;:::-;9523:63;;9479:117;9274:329;;;;:::o;9609:179::-;9678:10;9699:46;9741:3;9733:6;9699:46;:::i;:::-;9777:4;9772:3;9768:14;9754:28;;9609:179;;;;:::o;9794:118::-;9881:24;9899:5;9881:24;:::i;:::-;9876:3;9869:37;9794:118;;:::o;9948:732::-;10067:3;10096:54;10144:5;10096:54;:::i;:::-;10166:86;10245:6;10240:3;10166:86;:::i;:::-;10159:93;;10276:56;10326:5;10276:56;:::i;:::-;10355:7;10386:1;10371:284;10396:6;10393:1;10390:13;10371:284;;;10472:6;10466:13;10499:63;10558:3;10543:13;10499:63;:::i;:::-;10492:70;;10585:60;10638:6;10585:60;:::i;:::-;10575:70;;10431:224;10418:1;10415;10411:9;10406:14;;10371:284;;;10375:14;10671:3;10664:10;;10072:608;;;9948:732;;;;:::o;10686:109::-;10767:21;10782:5;10767:21;:::i;:::-;10762:3;10755:34;10686:109;;:::o;10801:360::-;10887:3;10915:38;10947:5;10915:38;:::i;:::-;10969:70;11032:6;11027:3;10969:70;:::i;:::-;10962:77;;11048:52;11093:6;11088:3;11081:4;11074:5;11070:16;11048:52;:::i;:::-;11125:29;11147:6;11125:29;:::i;:::-;11120:3;11116:39;11109:46;;10891:270;10801:360;;;;:::o;11167:364::-;11255:3;11283:39;11316:5;11283:39;:::i;:::-;11338:71;11402:6;11397:3;11338:71;:::i;:::-;11331:78;;11418:52;11463:6;11458:3;11451:4;11444:5;11440:16;11418:52;:::i;:::-;11495:29;11517:6;11495:29;:::i;:::-;11490:3;11486:39;11479:46;;11259:272;11167:364;;;;:::o;11537:377::-;11643:3;11671:39;11704:5;11671:39;:::i;:::-;11726:89;11808:6;11803:3;11726:89;:::i;:::-;11719:96;;11824:52;11869:6;11864:3;11857:4;11850:5;11846:16;11824:52;:::i;:::-;11901:6;11896:3;11892:16;11885:23;;11647:267;11537:377;;;;:::o;11944:845::-;12047:3;12084:5;12078:12;12113:36;12139:9;12113:36;:::i;:::-;12165:89;12247:6;12242:3;12165:89;:::i;:::-;12158:96;;12285:1;12274:9;12270:17;12301:1;12296:137;;;;12447:1;12442:341;;;;12263:520;;12296:137;12380:4;12376:9;12365;12361:25;12356:3;12349:38;12416:6;12411:3;12407:16;12400:23;;12296:137;;12442:341;12509:38;12541:5;12509:38;:::i;:::-;12569:1;12583:154;12597:6;12594:1;12591:13;12583:154;;;12671:7;12665:14;12661:1;12656:3;12652:11;12645:35;12721:1;12712:7;12708:15;12697:26;;12619:4;12616:1;12612:12;12607:17;;12583:154;;;12766:6;12761:3;12757:16;12750:23;;12449:334;;12263:520;;12051:738;;11944:845;;;;:::o;12795:366::-;12937:3;12958:67;13022:2;13017:3;12958:67;:::i;:::-;12951:74;;13034:93;13123:3;13034:93;:::i;:::-;13152:2;13147:3;13143:12;13136:19;;12795:366;;;:::o;13167:::-;13309:3;13330:67;13394:2;13389:3;13330:67;:::i;:::-;13323:74;;13406:93;13495:3;13406:93;:::i;:::-;13524:2;13519:3;13515:12;13508:19;;13167:366;;;:::o;13539:::-;13681:3;13702:67;13766:2;13761:3;13702:67;:::i;:::-;13695:74;;13778:93;13867:3;13778:93;:::i;:::-;13896:2;13891:3;13887:12;13880:19;;13539:366;;;:::o;13911:::-;14053:3;14074:67;14138:2;14133:3;14074:67;:::i;:::-;14067:74;;14150:93;14239:3;14150:93;:::i;:::-;14268:2;14263:3;14259:12;14252:19;;13911:366;;;:::o;14283:::-;14425:3;14446:67;14510:2;14505:3;14446:67;:::i;:::-;14439:74;;14522:93;14611:3;14522:93;:::i;:::-;14640:2;14635:3;14631:12;14624:19;;14283:366;;;:::o;14655:::-;14797:3;14818:67;14882:2;14877:3;14818:67;:::i;:::-;14811:74;;14894:93;14983:3;14894:93;:::i;:::-;15012:2;15007:3;15003:12;14996:19;;14655:366;;;:::o;15027:::-;15169:3;15190:67;15254:2;15249:3;15190:67;:::i;:::-;15183:74;;15266:93;15355:3;15266:93;:::i;:::-;15384:2;15379:3;15375:12;15368:19;;15027:366;;;:::o;15399:::-;15541:3;15562:67;15626:2;15621:3;15562:67;:::i;:::-;15555:74;;15638:93;15727:3;15638:93;:::i;:::-;15756:2;15751:3;15747:12;15740:19;;15399:366;;;:::o;15771:::-;15913:3;15934:67;15998:2;15993:3;15934:67;:::i;:::-;15927:74;;16010:93;16099:3;16010:93;:::i;:::-;16128:2;16123:3;16119:12;16112:19;;15771:366;;;:::o;16143:::-;16285:3;16306:67;16370:2;16365:3;16306:67;:::i;:::-;16299:74;;16382:93;16471:3;16382:93;:::i;:::-;16500:2;16495:3;16491:12;16484:19;;16143:366;;;:::o;16515:::-;16657:3;16678:67;16742:2;16737:3;16678:67;:::i;:::-;16671:74;;16754:93;16843:3;16754:93;:::i;:::-;16872:2;16867:3;16863:12;16856:19;;16515:366;;;:::o;16887:::-;17029:3;17050:67;17114:2;17109:3;17050:67;:::i;:::-;17043:74;;17126:93;17215:3;17126:93;:::i;:::-;17244:2;17239:3;17235:12;17228:19;;16887:366;;;:::o;17259:::-;17401:3;17422:67;17486:2;17481:3;17422:67;:::i;:::-;17415:74;;17498:93;17587:3;17498:93;:::i;:::-;17616:2;17611:3;17607:12;17600:19;;17259:366;;;:::o;17631:::-;17773:3;17794:67;17858:2;17853:3;17794:67;:::i;:::-;17787:74;;17870:93;17959:3;17870:93;:::i;:::-;17988:2;17983:3;17979:12;17972:19;;17631:366;;;:::o;18003:::-;18145:3;18166:67;18230:2;18225:3;18166:67;:::i;:::-;18159:74;;18242:93;18331:3;18242:93;:::i;:::-;18360:2;18355:3;18351:12;18344:19;;18003:366;;;:::o;18375:::-;18517:3;18538:67;18602:2;18597:3;18538:67;:::i;:::-;18531:74;;18614:93;18703:3;18614:93;:::i;:::-;18732:2;18727:3;18723:12;18716:19;;18375:366;;;:::o;18747:::-;18889:3;18910:67;18974:2;18969:3;18910:67;:::i;:::-;18903:74;;18986:93;19075:3;18986:93;:::i;:::-;19104:2;19099:3;19095:12;19088:19;;18747:366;;;:::o;19119:::-;19261:3;19282:67;19346:2;19341:3;19282:67;:::i;:::-;19275:74;;19358:93;19447:3;19358:93;:::i;:::-;19476:2;19471:3;19467:12;19460:19;;19119:366;;;:::o;19491:::-;19633:3;19654:67;19718:2;19713:3;19654:67;:::i;:::-;19647:74;;19730:93;19819:3;19730:93;:::i;:::-;19848:2;19843:3;19839:12;19832:19;;19491:366;;;:::o;19863:398::-;20022:3;20043:83;20124:1;20119:3;20043:83;:::i;:::-;20036:90;;20135:93;20224:3;20135:93;:::i;:::-;20253:1;20248:3;20244:11;20237:18;;19863:398;;;:::o;20267:366::-;20409:3;20430:67;20494:2;20489:3;20430:67;:::i;:::-;20423:74;;20506:93;20595:3;20506:93;:::i;:::-;20624:2;20619:3;20615:12;20608:19;;20267:366;;;:::o;20639:::-;20781:3;20802:67;20866:2;20861:3;20802:67;:::i;:::-;20795:74;;20878:93;20967:3;20878:93;:::i;:::-;20996:2;20991:3;20987:12;20980:19;;20639:366;;;:::o;21011:::-;21153:3;21174:67;21238:2;21233:3;21174:67;:::i;:::-;21167:74;;21250:93;21339:3;21250:93;:::i;:::-;21368:2;21363:3;21359:12;21352:19;;21011:366;;;:::o;21383:::-;21525:3;21546:67;21610:2;21605:3;21546:67;:::i;:::-;21539:74;;21622:93;21711:3;21622:93;:::i;:::-;21740:2;21735:3;21731:12;21724:19;;21383:366;;;:::o;21755:::-;21897:3;21918:67;21982:2;21977:3;21918:67;:::i;:::-;21911:74;;21994:93;22083:3;21994:93;:::i;:::-;22112:2;22107:3;22103:12;22096:19;;21755:366;;;:::o;22127:::-;22269:3;22290:67;22354:2;22349:3;22290:67;:::i;:::-;22283:74;;22366:93;22455:3;22366:93;:::i;:::-;22484:2;22479:3;22475:12;22468:19;;22127:366;;;:::o;22499:108::-;22576:24;22594:5;22576:24;:::i;:::-;22571:3;22564:37;22499:108;;:::o;22613:118::-;22700:24;22718:5;22700:24;:::i;:::-;22695:3;22688:37;22613:118;;:::o;22737:589::-;22962:3;22984:95;23075:3;23066:6;22984:95;:::i;:::-;22977:102;;23096:95;23187:3;23178:6;23096:95;:::i;:::-;23089:102;;23208:92;23296:3;23287:6;23208:92;:::i;:::-;23201:99;;23317:3;23310:10;;22737:589;;;;;;:::o;23332:379::-;23516:3;23538:147;23681:3;23538:147;:::i;:::-;23531:154;;23702:3;23695:10;;23332:379;;;:::o;23717:222::-;23810:4;23848:2;23837:9;23833:18;23825:26;;23861:71;23929:1;23918:9;23914:17;23905:6;23861:71;:::i;:::-;23717:222;;;;:::o;23945:640::-;24140:4;24178:3;24167:9;24163:19;24155:27;;24192:71;24260:1;24249:9;24245:17;24236:6;24192:71;:::i;:::-;24273:72;24341:2;24330:9;24326:18;24317:6;24273:72;:::i;:::-;24355;24423:2;24412:9;24408:18;24399:6;24355:72;:::i;:::-;24474:9;24468:4;24464:20;24459:2;24448:9;24444:18;24437:48;24502:76;24573:4;24564:6;24502:76;:::i;:::-;24494:84;;23945:640;;;;;;;:::o;24591:373::-;24734:4;24772:2;24761:9;24757:18;24749:26;;24821:9;24815:4;24811:20;24807:1;24796:9;24792:17;24785:47;24849:108;24952:4;24943:6;24849:108;:::i;:::-;24841:116;;24591:373;;;;:::o;24970:210::-;25057:4;25095:2;25084:9;25080:18;25072:26;;25108:65;25170:1;25159:9;25155:17;25146:6;25108:65;:::i;:::-;24970:210;;;;:::o;25186:313::-;25299:4;25337:2;25326:9;25322:18;25314:26;;25386:9;25380:4;25376:20;25372:1;25361:9;25357:17;25350:47;25414:78;25487:4;25478:6;25414:78;:::i;:::-;25406:86;;25186:313;;;;:::o;25505:419::-;25671:4;25709:2;25698:9;25694:18;25686:26;;25758:9;25752:4;25748:20;25744:1;25733:9;25729:17;25722:47;25786:131;25912:4;25786:131;:::i;:::-;25778:139;;25505:419;;;:::o;25930:::-;26096:4;26134:2;26123:9;26119:18;26111:26;;26183:9;26177:4;26173:20;26169:1;26158:9;26154:17;26147:47;26211:131;26337:4;26211:131;:::i;:::-;26203:139;;25930:419;;;:::o;26355:::-;26521:4;26559:2;26548:9;26544:18;26536:26;;26608:9;26602:4;26598:20;26594:1;26583:9;26579:17;26572:47;26636:131;26762:4;26636:131;:::i;:::-;26628:139;;26355:419;;;:::o;26780:::-;26946:4;26984:2;26973:9;26969:18;26961:26;;27033:9;27027:4;27023:20;27019:1;27008:9;27004:17;26997:47;27061:131;27187:4;27061:131;:::i;:::-;27053:139;;26780:419;;;:::o;27205:::-;27371:4;27409:2;27398:9;27394:18;27386:26;;27458:9;27452:4;27448:20;27444:1;27433:9;27429:17;27422:47;27486:131;27612:4;27486:131;:::i;:::-;27478:139;;27205:419;;;:::o;27630:::-;27796:4;27834:2;27823:9;27819:18;27811:26;;27883:9;27877:4;27873:20;27869:1;27858:9;27854:17;27847:47;27911:131;28037:4;27911:131;:::i;:::-;27903:139;;27630:419;;;:::o;28055:::-;28221:4;28259:2;28248:9;28244:18;28236:26;;28308:9;28302:4;28298:20;28294:1;28283:9;28279:17;28272:47;28336:131;28462:4;28336:131;:::i;:::-;28328:139;;28055:419;;;:::o;28480:::-;28646:4;28684:2;28673:9;28669:18;28661:26;;28733:9;28727:4;28723:20;28719:1;28708:9;28704:17;28697:47;28761:131;28887:4;28761:131;:::i;:::-;28753:139;;28480:419;;;:::o;28905:::-;29071:4;29109:2;29098:9;29094:18;29086:26;;29158:9;29152:4;29148:20;29144:1;29133:9;29129:17;29122:47;29186:131;29312:4;29186:131;:::i;:::-;29178:139;;28905:419;;;:::o;29330:::-;29496:4;29534:2;29523:9;29519:18;29511:26;;29583:9;29577:4;29573:20;29569:1;29558:9;29554:17;29547:47;29611:131;29737:4;29611:131;:::i;:::-;29603:139;;29330:419;;;:::o;29755:::-;29921:4;29959:2;29948:9;29944:18;29936:26;;30008:9;30002:4;29998:20;29994:1;29983:9;29979:17;29972:47;30036:131;30162:4;30036:131;:::i;:::-;30028:139;;29755:419;;;:::o;30180:::-;30346:4;30384:2;30373:9;30369:18;30361:26;;30433:9;30427:4;30423:20;30419:1;30408:9;30404:17;30397:47;30461:131;30587:4;30461:131;:::i;:::-;30453:139;;30180:419;;;:::o;30605:::-;30771:4;30809:2;30798:9;30794:18;30786:26;;30858:9;30852:4;30848:20;30844:1;30833:9;30829:17;30822:47;30886:131;31012:4;30886:131;:::i;:::-;30878:139;;30605:419;;;:::o;31030:::-;31196:4;31234:2;31223:9;31219:18;31211:26;;31283:9;31277:4;31273:20;31269:1;31258:9;31254:17;31247:47;31311:131;31437:4;31311:131;:::i;:::-;31303:139;;31030:419;;;:::o;31455:::-;31621:4;31659:2;31648:9;31644:18;31636:26;;31708:9;31702:4;31698:20;31694:1;31683:9;31679:17;31672:47;31736:131;31862:4;31736:131;:::i;:::-;31728:139;;31455:419;;;:::o;31880:::-;32046:4;32084:2;32073:9;32069:18;32061:26;;32133:9;32127:4;32123:20;32119:1;32108:9;32104:17;32097:47;32161:131;32287:4;32161:131;:::i;:::-;32153:139;;31880:419;;;:::o;32305:::-;32471:4;32509:2;32498:9;32494:18;32486:26;;32558:9;32552:4;32548:20;32544:1;32533:9;32529:17;32522:47;32586:131;32712:4;32586:131;:::i;:::-;32578:139;;32305:419;;;:::o;32730:::-;32896:4;32934:2;32923:9;32919:18;32911:26;;32983:9;32977:4;32973:20;32969:1;32958:9;32954:17;32947:47;33011:131;33137:4;33011:131;:::i;:::-;33003:139;;32730:419;;;:::o;33155:::-;33321:4;33359:2;33348:9;33344:18;33336:26;;33408:9;33402:4;33398:20;33394:1;33383:9;33379:17;33372:47;33436:131;33562:4;33436:131;:::i;:::-;33428:139;;33155:419;;;:::o;33580:::-;33746:4;33784:2;33773:9;33769:18;33761:26;;33833:9;33827:4;33823:20;33819:1;33808:9;33804:17;33797:47;33861:131;33987:4;33861:131;:::i;:::-;33853:139;;33580:419;;;:::o;34005:::-;34171:4;34209:2;34198:9;34194:18;34186:26;;34258:9;34252:4;34248:20;34244:1;34233:9;34229:17;34222:47;34286:131;34412:4;34286:131;:::i;:::-;34278:139;;34005:419;;;:::o;34430:::-;34596:4;34634:2;34623:9;34619:18;34611:26;;34683:9;34677:4;34673:20;34669:1;34658:9;34654:17;34647:47;34711:131;34837:4;34711:131;:::i;:::-;34703:139;;34430:419;;;:::o;34855:::-;35021:4;35059:2;35048:9;35044:18;35036:26;;35108:9;35102:4;35098:20;35094:1;35083:9;35079:17;35072:47;35136:131;35262:4;35136:131;:::i;:::-;35128:139;;34855:419;;;:::o;35280:::-;35446:4;35484:2;35473:9;35469:18;35461:26;;35533:9;35527:4;35523:20;35519:1;35508:9;35504:17;35497:47;35561:131;35687:4;35561:131;:::i;:::-;35553:139;;35280:419;;;:::o;35705:::-;35871:4;35909:2;35898:9;35894:18;35886:26;;35958:9;35952:4;35948:20;35944:1;35933:9;35929:17;35922:47;35986:131;36112:4;35986:131;:::i;:::-;35978:139;;35705:419;;;:::o;36130:222::-;36223:4;36261:2;36250:9;36246:18;36238:26;;36274:71;36342:1;36331:9;36327:17;36318:6;36274:71;:::i;:::-;36130:222;;;;:::o;36358:129::-;36392:6;36419:20;;:::i;:::-;36409:30;;36448:33;36476:4;36468:6;36448:33;:::i;:::-;36358:129;;;:::o;36493:75::-;36526:6;36559:2;36553:9;36543:19;;36493:75;:::o;36574:307::-;36635:4;36725:18;36717:6;36714:30;36711:56;;;36747:18;;:::i;:::-;36711:56;36785:29;36807:6;36785:29;:::i;:::-;36777:37;;36869:4;36863;36859:15;36851:23;;36574:307;;;:::o;36887:308::-;36949:4;37039:18;37031:6;37028:30;37025:56;;;37061:18;;:::i;:::-;37025:56;37099:29;37121:6;37099:29;:::i;:::-;37091:37;;37183:4;37177;37173:15;37165:23;;36887:308;;;:::o;37201:132::-;37268:4;37291:3;37283:11;;37321:4;37316:3;37312:14;37304:22;;37201:132;;;:::o;37339:141::-;37388:4;37411:3;37403:11;;37434:3;37431:1;37424:14;37468:4;37465:1;37455:18;37447:26;;37339:141;;;:::o;37486:114::-;37553:6;37587:5;37581:12;37571:22;;37486:114;;;:::o;37606:98::-;37657:6;37691:5;37685:12;37675:22;;37606:98;;;:::o;37710:99::-;37762:6;37796:5;37790:12;37780:22;;37710:99;;;:::o;37815:113::-;37885:4;37917;37912:3;37908:14;37900:22;;37815:113;;;:::o;37934:184::-;38033:11;38067:6;38062:3;38055:19;38107:4;38102:3;38098:14;38083:29;;37934:184;;;;:::o;38124:168::-;38207:11;38241:6;38236:3;38229:19;38281:4;38276:3;38272:14;38257:29;;38124:168;;;;:::o;38298:147::-;38399:11;38436:3;38421:18;;38298:147;;;;:::o;38451:169::-;38535:11;38569:6;38564:3;38557:19;38609:4;38604:3;38600:14;38585:29;;38451:169;;;;:::o;38626:148::-;38728:11;38765:3;38750:18;;38626:148;;;;:::o;38780:305::-;38820:3;38839:20;38857:1;38839:20;:::i;:::-;38834:25;;38873:20;38891:1;38873:20;:::i;:::-;38868:25;;39027:1;38959:66;38955:74;38952:1;38949:81;38946:107;;;39033:18;;:::i;:::-;38946:107;39077:1;39074;39070:9;39063:16;;38780:305;;;;:::o;39091:185::-;39131:1;39148:20;39166:1;39148:20;:::i;:::-;39143:25;;39182:20;39200:1;39182:20;:::i;:::-;39177:25;;39221:1;39211:35;;39226:18;;:::i;:::-;39211:35;39268:1;39265;39261:9;39256:14;;39091:185;;;;:::o;39282:348::-;39322:7;39345:20;39363:1;39345:20;:::i;:::-;39340:25;;39379:20;39397:1;39379:20;:::i;:::-;39374:25;;39567:1;39499:66;39495:74;39492:1;39489:81;39484:1;39477:9;39470:17;39466:105;39463:131;;;39574:18;;:::i;:::-;39463:131;39622:1;39619;39615:9;39604:20;;39282:348;;;;:::o;39636:191::-;39676:4;39696:20;39714:1;39696:20;:::i;:::-;39691:25;;39730:20;39748:1;39730:20;:::i;:::-;39725:25;;39769:1;39766;39763:8;39760:34;;;39774:18;;:::i;:::-;39760:34;39819:1;39816;39812:9;39804:17;;39636:191;;;;:::o;39833:96::-;39870:7;39899:24;39917:5;39899:24;:::i;:::-;39888:35;;39833:96;;;:::o;39935:90::-;39969:7;40012:5;40005:13;39998:21;39987:32;;39935:90;;;:::o;40031:149::-;40067:7;40107:66;40100:5;40096:78;40085:89;;40031:149;;;:::o;40186:126::-;40223:7;40263:42;40256:5;40252:54;40241:65;;40186:126;;;:::o;40318:77::-;40355:7;40384:5;40373:16;;40318:77;;;:::o;40401:154::-;40485:6;40480:3;40475;40462:30;40547:1;40538:6;40533:3;40529:16;40522:27;40401:154;;;:::o;40561:307::-;40629:1;40639:113;40653:6;40650:1;40647:13;40639:113;;;40738:1;40733:3;40729:11;40723:18;40719:1;40714:3;40710:11;40703:39;40675:2;40672:1;40668:10;40663:15;;40639:113;;;40770:6;40767:1;40764:13;40761:101;;;40850:1;40841:6;40836:3;40832:16;40825:27;40761:101;40610:258;40561:307;;;:::o;40874:171::-;40913:3;40936:24;40954:5;40936:24;:::i;:::-;40927:33;;40982:4;40975:5;40972:15;40969:41;;;40990:18;;:::i;:::-;40969:41;41037:1;41030:5;41026:13;41019:20;;40874:171;;;:::o;41051:320::-;41095:6;41132:1;41126:4;41122:12;41112:22;;41179:1;41173:4;41169:12;41200:18;41190:81;;41256:4;41248:6;41244:17;41234:27;;41190:81;41318:2;41310:6;41307:14;41287:18;41284:38;41281:84;;;41337:18;;:::i;:::-;41281:84;41102:269;41051:320;;;:::o;41377:281::-;41460:27;41482:4;41460:27;:::i;:::-;41452:6;41448:40;41590:6;41578:10;41575:22;41554:18;41542:10;41539:34;41536:62;41533:88;;;41601:18;;:::i;:::-;41533:88;41641:10;41637:2;41630:22;41420:238;41377:281;;:::o;41664:233::-;41703:3;41726:24;41744:5;41726:24;:::i;:::-;41717:33;;41772:66;41765:5;41762:77;41759:103;;;41842:18;;:::i;:::-;41759:103;41889:1;41882:5;41878:13;41871:20;;41664:233;;;:::o;41903:176::-;41935:1;41952:20;41970:1;41952:20;:::i;:::-;41947:25;;41986:20;42004:1;41986:20;:::i;:::-;41981:25;;42025:1;42015:35;;42030:18;;:::i;:::-;42015:35;42071:1;42068;42064:9;42059:14;;41903:176;;;;:::o;42085:180::-;42133:77;42130:1;42123:88;42230:4;42227:1;42220:15;42254:4;42251:1;42244:15;42271:180;42319:77;42316:1;42309:88;42416:4;42413:1;42406:15;42440:4;42437:1;42430:15;42457:180;42505:77;42502:1;42495:88;42602:4;42599:1;42592:15;42626:4;42623:1;42616:15;42643:180;42691:77;42688:1;42681:88;42788:4;42785:1;42778:15;42812:4;42809:1;42802:15;42829:180;42877:77;42874:1;42867:88;42974:4;42971:1;42964:15;42998:4;42995:1;42988:15;43015:180;43063:77;43060:1;43053:88;43160:4;43157:1;43150:15;43184:4;43181:1;43174:15;43201:117;43310:1;43307;43300:12;43324:117;43433:1;43430;43423:12;43447:117;43556:1;43553;43546:12;43570:117;43679:1;43676;43669:12;43693:117;43802:1;43799;43792:12;43816:117;43925:1;43922;43915:12;43939:102;43980:6;44031:2;44027:7;44022:2;44015:5;44011:14;44007:28;43997:38;;43939:102;;;:::o;44047:230::-;44187:34;44183:1;44175:6;44171:14;44164:58;44256:13;44251:2;44243:6;44239:15;44232:38;44047:230;:::o;44283:237::-;44423:34;44419:1;44411:6;44407:14;44400:58;44492:20;44487:2;44479:6;44475:15;44468:45;44283:237;:::o;44526:225::-;44666:34;44662:1;44654:6;44650:14;44643:58;44735:8;44730:2;44722:6;44718:15;44711:33;44526:225;:::o;44757:178::-;44897:30;44893:1;44885:6;44881:14;44874:54;44757:178;:::o;44941:223::-;45081:34;45077:1;45069:6;45065:14;45058:58;45150:6;45145:2;45137:6;45133:15;45126:31;44941:223;:::o;45170:175::-;45310:27;45306:1;45298:6;45294:14;45287:51;45170:175;:::o;45351:231::-;45491:34;45487:1;45479:6;45475:14;45468:58;45560:14;45555:2;45547:6;45543:15;45536:39;45351:231;:::o;45588:243::-;45728:34;45724:1;45716:6;45712:14;45705:58;45797:26;45792:2;45784:6;45780:15;45773:51;45588:243;:::o;45837:229::-;45977:34;45973:1;45965:6;45961:14;45954:58;46046:12;46041:2;46033:6;46029:15;46022:37;45837:229;:::o;46072:228::-;46212:34;46208:1;46200:6;46196:14;46189:58;46281:11;46276:2;46268:6;46264:15;46257:36;46072:228;:::o;46306:172::-;46446:24;46442:1;46434:6;46430:14;46423:48;46306:172;:::o;46484:223::-;46624:34;46620:1;46612:6;46608:14;46601:58;46693:6;46688:2;46680:6;46676:15;46669:31;46484:223;:::o;46713:182::-;46853:34;46849:1;46841:6;46837:14;46830:58;46713:182;:::o;46901:231::-;47041:34;47037:1;47029:6;47025:14;47018:58;47110:14;47105:2;47097:6;47093:15;47086:39;46901:231;:::o;47138:182::-;47278:34;47274:1;47266:6;47262:14;47255:58;47138:182;:::o;47326:172::-;47466:24;47462:1;47454:6;47450:14;47443:48;47326:172;:::o;47504:228::-;47644:34;47640:1;47632:6;47628:14;47621:58;47713:11;47708:2;47700:6;47696:15;47689:36;47504:228;:::o;47738:234::-;47878:34;47874:1;47866:6;47862:14;47855:58;47947:17;47942:2;47934:6;47930:15;47923:42;47738:234;:::o;47978:220::-;48118:34;48114:1;48106:6;48102:14;48095:58;48187:3;48182:2;48174:6;48170:15;48163:28;47978:220;:::o;48204:114::-;;:::o;48324:168::-;48464:20;48460:1;48452:6;48448:14;48441:44;48324:168;:::o;48498:236::-;48638:34;48634:1;48626:6;48622:14;48615:58;48707:19;48702:2;48694:6;48690:15;48683:44;48498:236;:::o;48740:168::-;48880:20;48876:1;48868:6;48864:14;48857:44;48740:168;:::o;48914:231::-;49054:34;49050:1;49042:6;49038:14;49031:58;49123:14;49118:2;49110:6;49106:15;49099:39;48914:231;:::o;49151:163::-;49291:15;49287:1;49279:6;49275:14;49268:39;49151:163;:::o;49320:177::-;49460:29;49456:1;49448:6;49444:14;49437:53;49320:177;:::o;49503:122::-;49576:24;49594:5;49576:24;:::i;:::-;49569:5;49566:35;49556:63;;49615:1;49612;49605:12;49556:63;49503:122;:::o;49631:116::-;49701:21;49716:5;49701:21;:::i;:::-;49694:5;49691:32;49681:60;;49737:1;49734;49727:12;49681:60;49631:116;:::o;49753:120::-;49825:23;49842:5;49825:23;:::i;:::-;49818:5;49815:34;49805:62;;49863:1;49860;49853:12;49805:62;49753:120;:::o;49879:122::-;49952:24;49970:5;49952:24;:::i;:::-;49945:5;49942:35;49932:63;;49991:1;49988;49981:12;49932:63;49879:122;:::o
Swarm Source
ipfs://b8c594d8aef4ae1d648737467b9a8b71ec4d4bfecca1d6099c555f2ff6f34423