Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
0
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LoveMore
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /* __ / / _____ _____ /\/\ ___ _ __ ___ / / / _ \ \ / / _ \/ \ / _ \| '__/ _ \ / /__| (_) \ V / __/ /\/\ \ (_) | | | __/ \____/\___/ \_/ \___\/ \/\___/|_| \___| Copyright © Tiago Magro 2021 */ pragma solidity ^0.8.10; import "./ERC721Enum.sol"; import "./Ownable.sol"; import "./Strings.sol"; import "./ReentrancyGuard.sol"; contract LoveMore is ERC721Enum, Ownable, ReentrancyGuard { using Strings for uint256; string public baseURI; uint256 public _price = 0.07 ether; uint256 public maxSupply = 7000; uint256 public _reserved = 50; bool public _paused = false; // --0xTeam-- // 0xlark address t1 = 0x63d229229adeECCF4A0cDCF067CC416E1D21042d; // 0xcharity address t2 = 0xb0E0F69A80afbcc5D5f5716a5e8edEbbF47CDd67; // 0xart address t3 = 0x92722f73F4B30412D149a41918aFA1858eDB991c; // 0xto address t4 = 0x7576bA2d85fB8188B412A59F2F2317408f28317D; // 0xr address t5 = 0xD84be7ddaa034a096381cA9D7e401074C250688A; // 0xw address t6 = 0xC6642dc3Bc7f693561AdB38A3f841ED8B7B88565; // 0xc address t7 = 0xd70C752Cb4f015485D96e5632641a94428f7628F; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721P(_name, _symbol) { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual returns (string memory) { return baseURI; } function SpreadLove(uint256 _mintAmount) public payable nonReentrant{ uint256 s = totalSupply(); require( !_paused, "Sale paused" ); require(_mintAmount > 0, "1 Minimum" ); require(s + _mintAmount <= maxSupply - _reserved, "Exceeds Max supply" ); require(msg.value >= _price * _mintAmount); for (uint256 i = 0; i < _mintAmount; ++i) { _safeMint(msg.sender, s + i, ""); } delete s; } function LoveGiveaway(address _to, uint256 _amount) external onlyOwner() { require( _amount <= _reserved, "Exceeds reserved supply" ); uint256 supply = totalSupply(); for(uint256 i; i < _amount; i++){ _safeMint( _to, supply + i ); } _reserved -= _amount; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: Nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : ""; } function setPrice(uint256 _newPrice) public onlyOwner { _price = _newPrice; } function setmaxSupply(uint256 _newMaxSupply) public onlyOwner { maxSupply = _newMaxSupply; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setReserved(uint256 _newReserved) public onlyOwner { _reserved = _newReserved; } function pause(bool val) public onlyOwner { _paused = val; } function HarvestLove() external onlyOwner { uint256 _each = address(this).balance / 20 ; require(payable(t1).send(_each * 4)); require(payable(t2).send(_each * 2)); require(payable(t3).send(_each * 4)); require(payable(t4).send(_each * 4)); require(payable(t5).send(_each * 4)); require(payable(t6).send(_each * 1)); require(payable(t7).send(_each * 1)); } }
// SPDX-License-Identifier: MIT 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); } } } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.10; import "./ERC721P.sol"; import "./IERC721Enumerable.sol"; abstract contract ERC721Enum is ERC721P, IERC721Enumerable { function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) { require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint count; for( uint i; i < _owners.length; ++i ){ if( owner == _owners[i] ){ if( count == index ) return i; else ++count; } } require(false, "ERC721Enum: owner ioob"); } function tokensOfOwner(address owner) public view returns (uint256[] memory) { require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint256 tokenCount = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(owner, i); } return tokenIds; } function totalSupply() public view virtual override returns (uint256) { return _owners.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob"); return index; } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.10; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./ERC165.sol"; abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata { using Address for address; string private _name; string private _symbol; address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count = 0; uint length = _owners.length; for( uint i = 0; i < length; ++i ){ if( owner == _owners[i] ){ ++count; } } delete length; return count; } 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; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721P.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); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } 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); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } 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); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } 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); } 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"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721P.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } 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" ); } 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); _owners.push(to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721P.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721P.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); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721P.ownerOf(tokenId), to, tokenId); } 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; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @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); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT 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); } }
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":[],"name":"HarvestLove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"LoveGiveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"SpreadLove","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReserved","type":"uint256"}],"name":"setReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setmaxSupply","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":"tokenId","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266f8b0a10e470000600855611b586009556032600a556000600b60006101000a81548160ff0219169083151502179055507363d229229adeeccf4a0cdcf067cc416e1d21042d600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b0e0f69a80afbcc5d5f5716a5e8edebbf47cdd67600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507392722f73f4b30412d149a41918afa1858edb991c600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737576ba2d85fb8188b412a59f2f2317408f28317d600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d84be7ddaa034a096381ca9d7e401074c250688a600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c6642dc3bc7f693561adb38a3f841ed8b7b88565601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d70c752cb4f015485d96e5632641a94428f7628f601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200029557600080fd5b5060405162004b2b38038062004b2b8339818101604052810190620002bb919062000723565b82828160009080519060200190620002d5929190620004d6565b508060019080519060200190620002ee929190620004d6565b50505062000311620003056200033360201b60201c565b6200033b60201b60201c565b60016006819055506200032a816200040160201b60201c565b505050620008c4565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004116200033360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000437620004ac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000487906200083d565b60405180910390fd5b8060079080519060200190620004a8929190620004d6565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004e4906200088e565b90600052602060002090601f01602090048101928262000508576000855562000554565b82601f106200052357805160ff191683800117855562000554565b8280016001018555821562000554579182015b828111156200055357825182559160200191906001019062000536565b5b50905062000563919062000567565b5090565b5b808211156200058257600081600090555060010162000568565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005ef82620005a4565b810181811067ffffffffffffffff82111715620006115762000610620005b5565b5b80604052505050565b60006200062662000586565b9050620006348282620005e4565b919050565b600067ffffffffffffffff821115620006575762000656620005b5565b5b6200066282620005a4565b9050602081019050919050565b60005b838110156200068f57808201518184015260208101905062000672565b838111156200069f576000848401525b50505050565b6000620006bc620006b68462000639565b6200061a565b905082815260208101848484011115620006db57620006da6200059f565b5b620006e88482856200066f565b509392505050565b600082601f8301126200070857620007076200059a565b5b81516200071a848260208601620006a5565b91505092915050565b6000806000606084860312156200073f576200073e62000590565b5b600084015167ffffffffffffffff81111562000760576200075f62000595565b5b6200076e86828701620006f0565b935050602084015167ffffffffffffffff81111562000792576200079162000595565b5b620007a086828701620006f0565b925050604084015167ffffffffffffffff811115620007c457620007c362000595565b5b620007d286828701620006f0565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000825602083620007dc565b91506200083282620007ed565b602082019050919050565b60006020820190508181036000830152620008588162000816565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008a757607f821691505b60208210811415620008be57620008bd6200085f565b5b50919050565b61425780620008d46000396000f3fe6080604052600436106101ee5760003560e01c806355f804b31161010d5780638da5cb5b116100a0578063b88d4fde1161006f578063b88d4fde146106da578063c87b56dd14610703578063d5abeb0114610740578063e985e9c51461076b578063f2fde38b146107a8576101ee565b80638da5cb5b1461063257806391b7f5ed1461065d57806395d89b4114610686578063a22cb465146106b1576101ee565b80636c0360eb116100dc5780636c0360eb1461057657806370a08231146105a1578063715018a6146105de5780638462151c146105f5576101ee565b806355f804b3146104c95780636352211e146104f257806367fced631461052f5780636aaa571d1461054b576101ee565b8063228025e8116101855780632f745c59116101545780632f745c591461040f57806333bc7ce11461044c57806342842e0e146104635780634f6ccce71461048c576101ee565b8063228025e814610369578063235b6ea11461039257806323b872dd146103bd5780632d6e71b6146103e6576101ee565b8063095ea7b3116101c1578063095ea7b3146102c15780630a634270146102ea57806316c61ccc1461031357806318160ddd1461033e576101ee565b806301ffc9a7146101f357806302329a291461023057806306fdde0314610259578063081812fc14610284575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612b97565b6107d1565b6040516102279190612bdf565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612c26565b61084b565b005b34801561026557600080fd5b5061026e6108e4565b60405161027b9190612cec565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190612d44565b610976565b6040516102b89190612db2565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612df9565b6109fb565b005b3480156102f657600080fd5b50610311600480360381019061030c9190612df9565b610b13565b005b34801561031f57600080fd5b50610328610c32565b6040516103359190612bdf565b60405180910390f35b34801561034a57600080fd5b50610353610c45565b6040516103609190612e48565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b9190612d44565b610c52565b005b34801561039e57600080fd5b506103a7610cd8565b6040516103b49190612e48565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df9190612e63565b610cde565b005b3480156103f257600080fd5b5061040d60048036038101906104089190612d44565b610d3e565b005b34801561041b57600080fd5b5061043660048036038101906104319190612df9565b610dc4565b6040516104439190612e48565b60405180910390f35b34801561045857600080fd5b50610461610f0d565b005b34801561046f57600080fd5b5061048a60048036038101906104859190612e63565b611291565b005b34801561049857600080fd5b506104b360048036038101906104ae9190612d44565b6112b1565b6040516104c09190612e48565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190612feb565b611304565b005b3480156104fe57600080fd5b5061051960048036038101906105149190612d44565b61139a565b6040516105269190612db2565b60405180910390f35b61054960048036038101906105449190612d44565b611457565b005b34801561055757600080fd5b5061056061160d565b60405161056d9190612e48565b60405180910390f35b34801561058257600080fd5b5061058b611613565b6040516105989190612cec565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190613034565b6116a1565b6040516105d59190612e48565b60405180910390f35b3480156105ea57600080fd5b506105f36117c7565b005b34801561060157600080fd5b5061061c60048036038101906106179190613034565b61184f565b604051610629919061311f565b60405180910390f35b34801561063e57600080fd5b50610647611948565b6040516106549190612db2565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190612d44565b611972565b005b34801561069257600080fd5b5061069b6119f8565b6040516106a89190612cec565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190613141565b611a8a565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190613222565b611c0b565b005b34801561070f57600080fd5b5061072a60048036038101906107259190612d44565b611c6d565b6040516107379190612cec565b60405180910390f35b34801561074c57600080fd5b50610755611d14565b6040516107629190612e48565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d91906132a5565b611d1a565b60405161079f9190612bdf565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190613034565b611dae565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610844575061084382611ea6565b5b9050919050565b610853611f88565b73ffffffffffffffffffffffffffffffffffffffff16610871611948565b73ffffffffffffffffffffffffffffffffffffffff16146108c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108be90613331565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6060600080546108f390613380565b80601f016020809104026020016040519081016040528092919081815260200182805461091f90613380565b801561096c5780601f106109415761010080835404028352916020019161096c565b820191906000526020600020905b81548152906001019060200180831161094f57829003601f168201915b5050505050905090565b600061098182611f90565b6109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b790613424565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a068261139a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e906134b6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a96611f88565b73ffffffffffffffffffffffffffffffffffffffff161480610ac55750610ac481610abf611f88565b611d1a565b5b610b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afb90613548565b60405180910390fd5b610b0e8383612018565b505050565b610b1b611f88565b73ffffffffffffffffffffffffffffffffffffffff16610b39611948565b73ffffffffffffffffffffffffffffffffffffffff1614610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690613331565b60405180910390fd5b600a54811115610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb906135b4565b60405180910390fd5b6000610bde610c45565b905060005b82811015610c1357610c00848284610bfb9190613603565b6120d1565b8080610c0b90613659565b915050610be3565b5081600a6000828254610c2691906136a2565b92505081905550505050565b600b60009054906101000a900460ff1681565b6000600280549050905090565b610c5a611f88565b73ffffffffffffffffffffffffffffffffffffffff16610c78611948565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613331565b60405180910390fd5b8060098190555050565b60085481565b610cef610ce9611f88565b826120ef565b610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613748565b60405180910390fd5b610d398383836121cd565b505050565b610d46611f88565b73ffffffffffffffffffffffffffffffffffffffff16610d64611948565b73ffffffffffffffffffffffffffffffffffffffff1614610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613331565b60405180910390fd5b80600a8190555050565b6000610dcf836116a1565b8210610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e07906137b4565b60405180910390fd5b6000805b600280549050811015610ec35760028181548110610e3557610e346137d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610eb25783821415610ea5578092505050610f07565b81610eaf90613659565b91505b80610ebc90613659565b9050610e14565b506000610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc906137b4565b60405180910390fd5b505b92915050565b610f15611f88565b73ffffffffffffffffffffffffffffffffffffffff16610f33611948565b73ffffffffffffffffffffffffffffffffffffffff1614610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090613331565b60405180910390fd5b6000601447610f989190613832565b9050600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600483610fe39190613863565b9081150290604051600060405180830381858888f1935050505061100657600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60028361104f9190613863565b9081150290604051600060405180830381858888f1935050505061107257600080fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6004836110bb9190613863565b9081150290604051600060405180830381858888f193505050506110de57600080fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6004836111279190613863565b9081150290604051600060405180830381858888f1935050505061114a57600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6004836111939190613863565b9081150290604051600060405180830381858888f193505050506111b657600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6001836111ff9190613863565b9081150290604051600060405180830381858888f1935050505061122257600080fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60018361126b9190613863565b9081150290604051600060405180830381858888f1935050505061128e57600080fd5b50565b6112ac83838360405180602001604052806000815250611c0b565b505050565b60006112bb610c45565b82106112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f390613909565b60405180910390fd5b819050919050565b61130c611f88565b73ffffffffffffffffffffffffffffffffffffffff1661132a611948565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790613331565b60405180910390fd5b8060079080519060200190611396929190612a88565b5050565b600080600283815481106113b1576113b06137d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561144e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114459061399b565b60405180910390fd5b80915050919050565b6002600654141561149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490613a07565b60405180910390fd5b600260068190555060006114af610c45565b9050600b60009054906101000a900460ff1615611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890613a73565b60405180910390fd5b60008211611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613adf565b60405180910390fd5b600a5460095461155491906136a2565b82826115609190613603565b11156115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890613b4b565b60405180910390fd5b816008546115af9190613863565b3410156115bb57600080fd5b60005b828110156115fc576115eb3382846115d69190613603565b60405180602001604052806000815250612386565b806115f590613659565b90506115be565b506000905050600160068190555050565b600a5481565b6007805461162090613380565b80601f016020809104026020016040519081016040528092919081815260200182805461164c90613380565b80156116995780601f1061166e57610100808354040283529160200191611699565b820191906000526020600020905b81548152906001019060200180831161167c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990613bdd565b60405180910390fd5b600080600280549050905060005b818110156117b8576002818154811061173c5761173b6137d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156117a757826117a490613659565b92505b806117b190613659565b9050611720565b50600090508192505050919050565b6117cf611f88565b73ffffffffffffffffffffffffffffffffffffffff166117ed611948565b73ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90613331565b60405180910390fd5b61184d60006123e1565b565b606061185a826116a1565b60001061189c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611893906137b4565b60405180910390fd5b60006118a7836116a1565b905060008167ffffffffffffffff8111156118c5576118c4612ec0565b5b6040519080825280602002602001820160405280156118f35781602001602082028036833780820191505090505b50905060005b8281101561193d5761190b8582610dc4565b82828151811061191e5761191d6137d4565b5b602002602001018181525050808061193590613659565b9150506118f9565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61197a611f88565b73ffffffffffffffffffffffffffffffffffffffff16611998611948565b73ffffffffffffffffffffffffffffffffffffffff16146119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590613331565b60405180910390fd5b8060088190555050565b606060018054611a0790613380565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3390613380565b8015611a805780601f10611a5557610100808354040283529160200191611a80565b820191906000526020600020905b815481529060010190602001808311611a6357829003601f168201915b5050505050905090565b611a92611f88565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af790613c49565b60405180910390fd5b8060046000611b0d611f88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bba611f88565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bff9190612bdf565b60405180910390a35050565b611c1c611c16611f88565b836120ef565b611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290613748565b60405180910390fd5b611c67848484846124a7565b50505050565b6060611c7882611f90565b611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90613cdb565b60405180910390fd5b6000611cc1612503565b90506000815111611ce15760405180602001604052806000815250611d0c565b80611ceb84612595565b604051602001611cfc929190613d37565b6040516020818303038152906040525b915050919050565b60095481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611db6611f88565b73ffffffffffffffffffffffffffffffffffffffff16611dd4611948565b73ffffffffffffffffffffffffffffffffffffffff1614611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2190613331565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190613dcd565b60405180910390fd5b611ea3816123e1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f7157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f815750611f80826126f6565b5b9050919050565b600033905090565b6000600280549050821080156120115750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110611fcd57611fcc6137d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661208b8361139a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6120eb828260405180602001604052806000815250612386565b5050565b60006120fa82611f90565b612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090613e5f565b60405180910390fd5b60006121448361139a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121b357508373ffffffffffffffffffffffffffffffffffffffff1661219b84610976565b73ffffffffffffffffffffffffffffffffffffffff16145b806121c457506121c38185611d1a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121ed8261139a565b73ffffffffffffffffffffffffffffffffffffffff1614612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90613ef1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90613f83565b60405180910390fd5b6122be838383612760565b6122c9600082612018565b81600282815481106122de576122dd6137d4565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6123908383612765565b61239d60008484846128ed565b6123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d390614015565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124b28484846121cd565b6124be848484846128ed565b6124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490614015565b60405180910390fd5b50505050565b60606007805461251290613380565b80601f016020809104026020016040519081016040528092919081815260200182805461253e90613380565b801561258b5780601f106125605761010080835404028352916020019161258b565b820191906000526020600020905b81548152906001019060200180831161256e57829003601f168201915b5050505050905090565b606060008214156125dd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126f1565b600082905060005b6000821461260f5780806125f890613659565b915050600a826126089190613832565b91506125e5565b60008167ffffffffffffffff81111561262b5761262a612ec0565b5b6040519080825280601f01601f19166020018201604052801561265d5781602001600182028036833780820191505090505b5090505b600085146126ea5760018261267691906136a2565b9150600a856126859190614035565b60306126919190613603565b60f81b8183815181106126a7576126a66137d4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126e39190613832565b9450612661565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cc906140b2565b60405180910390fd5b6127de81611f90565b1561281e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128159061411e565b60405180910390fd5b61282a60008383612760565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061290e8473ffffffffffffffffffffffffffffffffffffffff16612a75565b15612a68578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612937611f88565b8786866040518563ffffffff1660e01b81526004016129599493929190614193565b6020604051808303816000875af192505050801561299557506040513d601f19601f8201168201806040525081019061299291906141f4565b60015b612a18573d80600081146129c5576040519150601f19603f3d011682016040523d82523d6000602084013e6129ca565b606091505b50600081511415612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0790614015565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a6d565b600190505b949350505050565b600080823b905060008111915050919050565b828054612a9490613380565b90600052602060002090601f016020900481019282612ab65760008555612afd565b82601f10612acf57805160ff1916838001178555612afd565b82800160010185558215612afd579182015b82811115612afc578251825591602001919060010190612ae1565b5b509050612b0a9190612b0e565b5090565b5b80821115612b27576000816000905550600101612b0f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612b7481612b3f565b8114612b7f57600080fd5b50565b600081359050612b9181612b6b565b92915050565b600060208284031215612bad57612bac612b35565b5b6000612bbb84828501612b82565b91505092915050565b60008115159050919050565b612bd981612bc4565b82525050565b6000602082019050612bf46000830184612bd0565b92915050565b612c0381612bc4565b8114612c0e57600080fd5b50565b600081359050612c2081612bfa565b92915050565b600060208284031215612c3c57612c3b612b35565b5b6000612c4a84828501612c11565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c8d578082015181840152602081019050612c72565b83811115612c9c576000848401525b50505050565b6000601f19601f8301169050919050565b6000612cbe82612c53565b612cc88185612c5e565b9350612cd8818560208601612c6f565b612ce181612ca2565b840191505092915050565b60006020820190508181036000830152612d068184612cb3565b905092915050565b6000819050919050565b612d2181612d0e565b8114612d2c57600080fd5b50565b600081359050612d3e81612d18565b92915050565b600060208284031215612d5a57612d59612b35565b5b6000612d6884828501612d2f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d9c82612d71565b9050919050565b612dac81612d91565b82525050565b6000602082019050612dc76000830184612da3565b92915050565b612dd681612d91565b8114612de157600080fd5b50565b600081359050612df381612dcd565b92915050565b60008060408385031215612e1057612e0f612b35565b5b6000612e1e85828601612de4565b9250506020612e2f85828601612d2f565b9150509250929050565b612e4281612d0e565b82525050565b6000602082019050612e5d6000830184612e39565b92915050565b600080600060608486031215612e7c57612e7b612b35565b5b6000612e8a86828701612de4565b9350506020612e9b86828701612de4565b9250506040612eac86828701612d2f565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ef882612ca2565b810181811067ffffffffffffffff82111715612f1757612f16612ec0565b5b80604052505050565b6000612f2a612b2b565b9050612f368282612eef565b919050565b600067ffffffffffffffff821115612f5657612f55612ec0565b5b612f5f82612ca2565b9050602081019050919050565b82818337600083830152505050565b6000612f8e612f8984612f3b565b612f20565b905082815260208101848484011115612faa57612fa9612ebb565b5b612fb5848285612f6c565b509392505050565b600082601f830112612fd257612fd1612eb6565b5b8135612fe2848260208601612f7b565b91505092915050565b60006020828403121561300157613000612b35565b5b600082013567ffffffffffffffff81111561301f5761301e612b3a565b5b61302b84828501612fbd565b91505092915050565b60006020828403121561304a57613049612b35565b5b600061305884828501612de4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61309681612d0e565b82525050565b60006130a8838361308d565b60208301905092915050565b6000602082019050919050565b60006130cc82613061565b6130d6818561306c565b93506130e18361307d565b8060005b838110156131125781516130f9888261309c565b9750613104836130b4565b9250506001810190506130e5565b5085935050505092915050565b6000602082019050818103600083015261313981846130c1565b905092915050565b6000806040838503121561315857613157612b35565b5b600061316685828601612de4565b925050602061317785828601612c11565b9150509250929050565b600067ffffffffffffffff82111561319c5761319b612ec0565b5b6131a582612ca2565b9050602081019050919050565b60006131c56131c084613181565b612f20565b9050828152602081018484840111156131e1576131e0612ebb565b5b6131ec848285612f6c565b509392505050565b600082601f83011261320957613208612eb6565b5b81356132198482602086016131b2565b91505092915050565b6000806000806080858703121561323c5761323b612b35565b5b600061324a87828801612de4565b945050602061325b87828801612de4565b935050604061326c87828801612d2f565b925050606085013567ffffffffffffffff81111561328d5761328c612b3a565b5b613299878288016131f4565b91505092959194509250565b600080604083850312156132bc576132bb612b35565b5b60006132ca85828601612de4565b92505060206132db85828601612de4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061331b602083612c5e565b9150613326826132e5565b602082019050919050565b6000602082019050818103600083015261334a8161330e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061339857607f821691505b602082108114156133ac576133ab613351565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061340e602c83612c5e565b9150613419826133b2565b604082019050919050565b6000602082019050818103600083015261343d81613401565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006134a0602183612c5e565b91506134ab82613444565b604082019050919050565b600060208201905081810360008301526134cf81613493565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613532603883612c5e565b915061353d826134d6565b604082019050919050565b6000602082019050818103600083015261356181613525565b9050919050565b7f4578636565647320726573657276656420737570706c79000000000000000000600082015250565b600061359e601783612c5e565b91506135a982613568565b602082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061360e82612d0e565b915061361983612d0e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561364e5761364d6135d4565b5b828201905092915050565b600061366482612d0e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613697576136966135d4565b5b600182019050919050565b60006136ad82612d0e565b91506136b883612d0e565b9250828210156136cb576136ca6135d4565b5b828203905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613732603183612c5e565b915061373d826136d6565b604082019050919050565b6000602082019050818103600083015261376181613725565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b600061379e601683612c5e565b91506137a982613768565b602082019050919050565b600060208201905081810360008301526137cd81613791565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061383d82612d0e565b915061384883612d0e565b92508261385857613857613803565b5b828204905092915050565b600061386e82612d0e565b915061387983612d0e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138b2576138b16135d4565b5b828202905092915050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b60006138f3601783612c5e565b91506138fe826138bd565b602082019050919050565b60006020820190508181036000830152613922816138e6565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613985602983612c5e565b915061399082613929565b604082019050919050565b600060208201905081810360008301526139b481613978565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006139f1601f83612c5e565b91506139fc826139bb565b602082019050919050565b60006020820190508181036000830152613a20816139e4565b9050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b6000613a5d600b83612c5e565b9150613a6882613a27565b602082019050919050565b60006020820190508181036000830152613a8c81613a50565b9050919050565b7f31204d696e696d756d0000000000000000000000000000000000000000000000600082015250565b6000613ac9600983612c5e565b9150613ad482613a93565b602082019050919050565b60006020820190508181036000830152613af881613abc565b9050919050565b7f45786365656473204d617820737570706c790000000000000000000000000000600082015250565b6000613b35601283612c5e565b9150613b4082613aff565b602082019050919050565b60006020820190508181036000830152613b6481613b28565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613bc7602a83612c5e565b9150613bd282613b6b565b604082019050919050565b60006020820190508181036000830152613bf681613bba565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613c33601983612c5e565b9150613c3e82613bfd565b602082019050919050565b60006020820190508181036000830152613c6281613c26565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc5602183612c5e565b9150613cd082613c69565b604082019050919050565b60006020820190508181036000830152613cf481613cb8565b9050919050565b600081905092915050565b6000613d1182612c53565b613d1b8185613cfb565b9350613d2b818560208601612c6f565b80840191505092915050565b6000613d438285613d06565b9150613d4f8284613d06565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613db7602683612c5e565b9150613dc282613d5b565b604082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613e49602c83612c5e565b9150613e5482613ded565b604082019050919050565b60006020820190508181036000830152613e7881613e3c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613edb602983612c5e565b9150613ee682613e7f565b604082019050919050565b60006020820190508181036000830152613f0a81613ece565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f6d602483612c5e565b9150613f7882613f11565b604082019050919050565b60006020820190508181036000830152613f9c81613f60565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613fff603283612c5e565b915061400a82613fa3565b604082019050919050565b6000602082019050818103600083015261402e81613ff2565b9050919050565b600061404082612d0e565b915061404b83612d0e565b92508261405b5761405a613803565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061409c602083612c5e565b91506140a782614066565b602082019050919050565b600060208201905081810360008301526140cb8161408f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614108601c83612c5e565b9150614113826140d2565b602082019050919050565b60006020820190508181036000830152614137816140fb565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006141658261413e565b61416f8185614149565b935061417f818560208601612c6f565b61418881612ca2565b840191505092915050565b60006080820190506141a86000830187612da3565b6141b56020830186612da3565b6141c26040830185612e39565b81810360608301526141d4818461415a565b905095945050505050565b6000815190506141ee81612b6b565b92915050565b60006020828403121561420a57614209612b35565b5b6000614218848285016141df565b9150509291505056fea264697066735822122066054ba35283779a6d771e758df04d802b99398e9073cdf18db3b1a22c74199a64736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000084c4f56454d4f524500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c4f560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5465694d62356b58687078527443735a6a57524775384a6e5346567763526f557a74757876627968433731552f000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c806355f804b31161010d5780638da5cb5b116100a0578063b88d4fde1161006f578063b88d4fde146106da578063c87b56dd14610703578063d5abeb0114610740578063e985e9c51461076b578063f2fde38b146107a8576101ee565b80638da5cb5b1461063257806391b7f5ed1461065d57806395d89b4114610686578063a22cb465146106b1576101ee565b80636c0360eb116100dc5780636c0360eb1461057657806370a08231146105a1578063715018a6146105de5780638462151c146105f5576101ee565b806355f804b3146104c95780636352211e146104f257806367fced631461052f5780636aaa571d1461054b576101ee565b8063228025e8116101855780632f745c59116101545780632f745c591461040f57806333bc7ce11461044c57806342842e0e146104635780634f6ccce71461048c576101ee565b8063228025e814610369578063235b6ea11461039257806323b872dd146103bd5780632d6e71b6146103e6576101ee565b8063095ea7b3116101c1578063095ea7b3146102c15780630a634270146102ea57806316c61ccc1461031357806318160ddd1461033e576101ee565b806301ffc9a7146101f357806302329a291461023057806306fdde0314610259578063081812fc14610284575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612b97565b6107d1565b6040516102279190612bdf565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612c26565b61084b565b005b34801561026557600080fd5b5061026e6108e4565b60405161027b9190612cec565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190612d44565b610976565b6040516102b89190612db2565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612df9565b6109fb565b005b3480156102f657600080fd5b50610311600480360381019061030c9190612df9565b610b13565b005b34801561031f57600080fd5b50610328610c32565b6040516103359190612bdf565b60405180910390f35b34801561034a57600080fd5b50610353610c45565b6040516103609190612e48565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b9190612d44565b610c52565b005b34801561039e57600080fd5b506103a7610cd8565b6040516103b49190612e48565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df9190612e63565b610cde565b005b3480156103f257600080fd5b5061040d60048036038101906104089190612d44565b610d3e565b005b34801561041b57600080fd5b5061043660048036038101906104319190612df9565b610dc4565b6040516104439190612e48565b60405180910390f35b34801561045857600080fd5b50610461610f0d565b005b34801561046f57600080fd5b5061048a60048036038101906104859190612e63565b611291565b005b34801561049857600080fd5b506104b360048036038101906104ae9190612d44565b6112b1565b6040516104c09190612e48565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190612feb565b611304565b005b3480156104fe57600080fd5b5061051960048036038101906105149190612d44565b61139a565b6040516105269190612db2565b60405180910390f35b61054960048036038101906105449190612d44565b611457565b005b34801561055757600080fd5b5061056061160d565b60405161056d9190612e48565b60405180910390f35b34801561058257600080fd5b5061058b611613565b6040516105989190612cec565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190613034565b6116a1565b6040516105d59190612e48565b60405180910390f35b3480156105ea57600080fd5b506105f36117c7565b005b34801561060157600080fd5b5061061c60048036038101906106179190613034565b61184f565b604051610629919061311f565b60405180910390f35b34801561063e57600080fd5b50610647611948565b6040516106549190612db2565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190612d44565b611972565b005b34801561069257600080fd5b5061069b6119f8565b6040516106a89190612cec565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190613141565b611a8a565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190613222565b611c0b565b005b34801561070f57600080fd5b5061072a60048036038101906107259190612d44565b611c6d565b6040516107379190612cec565b60405180910390f35b34801561074c57600080fd5b50610755611d14565b6040516107629190612e48565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d91906132a5565b611d1a565b60405161079f9190612bdf565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190613034565b611dae565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610844575061084382611ea6565b5b9050919050565b610853611f88565b73ffffffffffffffffffffffffffffffffffffffff16610871611948565b73ffffffffffffffffffffffffffffffffffffffff16146108c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108be90613331565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6060600080546108f390613380565b80601f016020809104026020016040519081016040528092919081815260200182805461091f90613380565b801561096c5780601f106109415761010080835404028352916020019161096c565b820191906000526020600020905b81548152906001019060200180831161094f57829003601f168201915b5050505050905090565b600061098182611f90565b6109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b790613424565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a068261139a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e906134b6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a96611f88565b73ffffffffffffffffffffffffffffffffffffffff161480610ac55750610ac481610abf611f88565b611d1a565b5b610b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afb90613548565b60405180910390fd5b610b0e8383612018565b505050565b610b1b611f88565b73ffffffffffffffffffffffffffffffffffffffff16610b39611948565b73ffffffffffffffffffffffffffffffffffffffff1614610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690613331565b60405180910390fd5b600a54811115610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb906135b4565b60405180910390fd5b6000610bde610c45565b905060005b82811015610c1357610c00848284610bfb9190613603565b6120d1565b8080610c0b90613659565b915050610be3565b5081600a6000828254610c2691906136a2565b92505081905550505050565b600b60009054906101000a900460ff1681565b6000600280549050905090565b610c5a611f88565b73ffffffffffffffffffffffffffffffffffffffff16610c78611948565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613331565b60405180910390fd5b8060098190555050565b60085481565b610cef610ce9611f88565b826120ef565b610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613748565b60405180910390fd5b610d398383836121cd565b505050565b610d46611f88565b73ffffffffffffffffffffffffffffffffffffffff16610d64611948565b73ffffffffffffffffffffffffffffffffffffffff1614610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613331565b60405180910390fd5b80600a8190555050565b6000610dcf836116a1565b8210610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e07906137b4565b60405180910390fd5b6000805b600280549050811015610ec35760028181548110610e3557610e346137d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610eb25783821415610ea5578092505050610f07565b81610eaf90613659565b91505b80610ebc90613659565b9050610e14565b506000610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc906137b4565b60405180910390fd5b505b92915050565b610f15611f88565b73ffffffffffffffffffffffffffffffffffffffff16610f33611948565b73ffffffffffffffffffffffffffffffffffffffff1614610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090613331565b60405180910390fd5b6000601447610f989190613832565b9050600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600483610fe39190613863565b9081150290604051600060405180830381858888f1935050505061100657600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60028361104f9190613863565b9081150290604051600060405180830381858888f1935050505061107257600080fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6004836110bb9190613863565b9081150290604051600060405180830381858888f193505050506110de57600080fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6004836111279190613863565b9081150290604051600060405180830381858888f1935050505061114a57600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6004836111939190613863565b9081150290604051600060405180830381858888f193505050506111b657600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6001836111ff9190613863565b9081150290604051600060405180830381858888f1935050505061122257600080fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60018361126b9190613863565b9081150290604051600060405180830381858888f1935050505061128e57600080fd5b50565b6112ac83838360405180602001604052806000815250611c0b565b505050565b60006112bb610c45565b82106112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f390613909565b60405180910390fd5b819050919050565b61130c611f88565b73ffffffffffffffffffffffffffffffffffffffff1661132a611948565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790613331565b60405180910390fd5b8060079080519060200190611396929190612a88565b5050565b600080600283815481106113b1576113b06137d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561144e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114459061399b565b60405180910390fd5b80915050919050565b6002600654141561149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490613a07565b60405180910390fd5b600260068190555060006114af610c45565b9050600b60009054906101000a900460ff1615611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890613a73565b60405180910390fd5b60008211611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613adf565b60405180910390fd5b600a5460095461155491906136a2565b82826115609190613603565b11156115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890613b4b565b60405180910390fd5b816008546115af9190613863565b3410156115bb57600080fd5b60005b828110156115fc576115eb3382846115d69190613603565b60405180602001604052806000815250612386565b806115f590613659565b90506115be565b506000905050600160068190555050565b600a5481565b6007805461162090613380565b80601f016020809104026020016040519081016040528092919081815260200182805461164c90613380565b80156116995780601f1061166e57610100808354040283529160200191611699565b820191906000526020600020905b81548152906001019060200180831161167c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990613bdd565b60405180910390fd5b600080600280549050905060005b818110156117b8576002818154811061173c5761173b6137d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156117a757826117a490613659565b92505b806117b190613659565b9050611720565b50600090508192505050919050565b6117cf611f88565b73ffffffffffffffffffffffffffffffffffffffff166117ed611948565b73ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90613331565b60405180910390fd5b61184d60006123e1565b565b606061185a826116a1565b60001061189c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611893906137b4565b60405180910390fd5b60006118a7836116a1565b905060008167ffffffffffffffff8111156118c5576118c4612ec0565b5b6040519080825280602002602001820160405280156118f35781602001602082028036833780820191505090505b50905060005b8281101561193d5761190b8582610dc4565b82828151811061191e5761191d6137d4565b5b602002602001018181525050808061193590613659565b9150506118f9565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61197a611f88565b73ffffffffffffffffffffffffffffffffffffffff16611998611948565b73ffffffffffffffffffffffffffffffffffffffff16146119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590613331565b60405180910390fd5b8060088190555050565b606060018054611a0790613380565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3390613380565b8015611a805780601f10611a5557610100808354040283529160200191611a80565b820191906000526020600020905b815481529060010190602001808311611a6357829003601f168201915b5050505050905090565b611a92611f88565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af790613c49565b60405180910390fd5b8060046000611b0d611f88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bba611f88565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bff9190612bdf565b60405180910390a35050565b611c1c611c16611f88565b836120ef565b611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290613748565b60405180910390fd5b611c67848484846124a7565b50505050565b6060611c7882611f90565b611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90613cdb565b60405180910390fd5b6000611cc1612503565b90506000815111611ce15760405180602001604052806000815250611d0c565b80611ceb84612595565b604051602001611cfc929190613d37565b6040516020818303038152906040525b915050919050565b60095481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611db6611f88565b73ffffffffffffffffffffffffffffffffffffffff16611dd4611948565b73ffffffffffffffffffffffffffffffffffffffff1614611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2190613331565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190613dcd565b60405180910390fd5b611ea3816123e1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f7157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f815750611f80826126f6565b5b9050919050565b600033905090565b6000600280549050821080156120115750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110611fcd57611fcc6137d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661208b8361139a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6120eb828260405180602001604052806000815250612386565b5050565b60006120fa82611f90565b612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090613e5f565b60405180910390fd5b60006121448361139a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121b357508373ffffffffffffffffffffffffffffffffffffffff1661219b84610976565b73ffffffffffffffffffffffffffffffffffffffff16145b806121c457506121c38185611d1a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121ed8261139a565b73ffffffffffffffffffffffffffffffffffffffff1614612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90613ef1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90613f83565b60405180910390fd5b6122be838383612760565b6122c9600082612018565b81600282815481106122de576122dd6137d4565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6123908383612765565b61239d60008484846128ed565b6123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d390614015565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124b28484846121cd565b6124be848484846128ed565b6124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490614015565b60405180910390fd5b50505050565b60606007805461251290613380565b80601f016020809104026020016040519081016040528092919081815260200182805461253e90613380565b801561258b5780601f106125605761010080835404028352916020019161258b565b820191906000526020600020905b81548152906001019060200180831161256e57829003601f168201915b5050505050905090565b606060008214156125dd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126f1565b600082905060005b6000821461260f5780806125f890613659565b915050600a826126089190613832565b91506125e5565b60008167ffffffffffffffff81111561262b5761262a612ec0565b5b6040519080825280601f01601f19166020018201604052801561265d5781602001600182028036833780820191505090505b5090505b600085146126ea5760018261267691906136a2565b9150600a856126859190614035565b60306126919190613603565b60f81b8183815181106126a7576126a66137d4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126e39190613832565b9450612661565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cc906140b2565b60405180910390fd5b6127de81611f90565b1561281e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128159061411e565b60405180910390fd5b61282a60008383612760565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061290e8473ffffffffffffffffffffffffffffffffffffffff16612a75565b15612a68578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612937611f88565b8786866040518563ffffffff1660e01b81526004016129599493929190614193565b6020604051808303816000875af192505050801561299557506040513d601f19601f8201168201806040525081019061299291906141f4565b60015b612a18573d80600081146129c5576040519150601f19603f3d011682016040523d82523d6000602084013e6129ca565b606091505b50600081511415612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0790614015565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a6d565b600190505b949350505050565b600080823b905060008111915050919050565b828054612a9490613380565b90600052602060002090601f016020900481019282612ab65760008555612afd565b82601f10612acf57805160ff1916838001178555612afd565b82800160010185558215612afd579182015b82811115612afc578251825591602001919060010190612ae1565b5b509050612b0a9190612b0e565b5090565b5b80821115612b27576000816000905550600101612b0f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612b7481612b3f565b8114612b7f57600080fd5b50565b600081359050612b9181612b6b565b92915050565b600060208284031215612bad57612bac612b35565b5b6000612bbb84828501612b82565b91505092915050565b60008115159050919050565b612bd981612bc4565b82525050565b6000602082019050612bf46000830184612bd0565b92915050565b612c0381612bc4565b8114612c0e57600080fd5b50565b600081359050612c2081612bfa565b92915050565b600060208284031215612c3c57612c3b612b35565b5b6000612c4a84828501612c11565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c8d578082015181840152602081019050612c72565b83811115612c9c576000848401525b50505050565b6000601f19601f8301169050919050565b6000612cbe82612c53565b612cc88185612c5e565b9350612cd8818560208601612c6f565b612ce181612ca2565b840191505092915050565b60006020820190508181036000830152612d068184612cb3565b905092915050565b6000819050919050565b612d2181612d0e565b8114612d2c57600080fd5b50565b600081359050612d3e81612d18565b92915050565b600060208284031215612d5a57612d59612b35565b5b6000612d6884828501612d2f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d9c82612d71565b9050919050565b612dac81612d91565b82525050565b6000602082019050612dc76000830184612da3565b92915050565b612dd681612d91565b8114612de157600080fd5b50565b600081359050612df381612dcd565b92915050565b60008060408385031215612e1057612e0f612b35565b5b6000612e1e85828601612de4565b9250506020612e2f85828601612d2f565b9150509250929050565b612e4281612d0e565b82525050565b6000602082019050612e5d6000830184612e39565b92915050565b600080600060608486031215612e7c57612e7b612b35565b5b6000612e8a86828701612de4565b9350506020612e9b86828701612de4565b9250506040612eac86828701612d2f565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ef882612ca2565b810181811067ffffffffffffffff82111715612f1757612f16612ec0565b5b80604052505050565b6000612f2a612b2b565b9050612f368282612eef565b919050565b600067ffffffffffffffff821115612f5657612f55612ec0565b5b612f5f82612ca2565b9050602081019050919050565b82818337600083830152505050565b6000612f8e612f8984612f3b565b612f20565b905082815260208101848484011115612faa57612fa9612ebb565b5b612fb5848285612f6c565b509392505050565b600082601f830112612fd257612fd1612eb6565b5b8135612fe2848260208601612f7b565b91505092915050565b60006020828403121561300157613000612b35565b5b600082013567ffffffffffffffff81111561301f5761301e612b3a565b5b61302b84828501612fbd565b91505092915050565b60006020828403121561304a57613049612b35565b5b600061305884828501612de4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61309681612d0e565b82525050565b60006130a8838361308d565b60208301905092915050565b6000602082019050919050565b60006130cc82613061565b6130d6818561306c565b93506130e18361307d565b8060005b838110156131125781516130f9888261309c565b9750613104836130b4565b9250506001810190506130e5565b5085935050505092915050565b6000602082019050818103600083015261313981846130c1565b905092915050565b6000806040838503121561315857613157612b35565b5b600061316685828601612de4565b925050602061317785828601612c11565b9150509250929050565b600067ffffffffffffffff82111561319c5761319b612ec0565b5b6131a582612ca2565b9050602081019050919050565b60006131c56131c084613181565b612f20565b9050828152602081018484840111156131e1576131e0612ebb565b5b6131ec848285612f6c565b509392505050565b600082601f83011261320957613208612eb6565b5b81356132198482602086016131b2565b91505092915050565b6000806000806080858703121561323c5761323b612b35565b5b600061324a87828801612de4565b945050602061325b87828801612de4565b935050604061326c87828801612d2f565b925050606085013567ffffffffffffffff81111561328d5761328c612b3a565b5b613299878288016131f4565b91505092959194509250565b600080604083850312156132bc576132bb612b35565b5b60006132ca85828601612de4565b92505060206132db85828601612de4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061331b602083612c5e565b9150613326826132e5565b602082019050919050565b6000602082019050818103600083015261334a8161330e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061339857607f821691505b602082108114156133ac576133ab613351565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061340e602c83612c5e565b9150613419826133b2565b604082019050919050565b6000602082019050818103600083015261343d81613401565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006134a0602183612c5e565b91506134ab82613444565b604082019050919050565b600060208201905081810360008301526134cf81613493565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613532603883612c5e565b915061353d826134d6565b604082019050919050565b6000602082019050818103600083015261356181613525565b9050919050565b7f4578636565647320726573657276656420737570706c79000000000000000000600082015250565b600061359e601783612c5e565b91506135a982613568565b602082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061360e82612d0e565b915061361983612d0e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561364e5761364d6135d4565b5b828201905092915050565b600061366482612d0e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613697576136966135d4565b5b600182019050919050565b60006136ad82612d0e565b91506136b883612d0e565b9250828210156136cb576136ca6135d4565b5b828203905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613732603183612c5e565b915061373d826136d6565b604082019050919050565b6000602082019050818103600083015261376181613725565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b600061379e601683612c5e565b91506137a982613768565b602082019050919050565b600060208201905081810360008301526137cd81613791565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061383d82612d0e565b915061384883612d0e565b92508261385857613857613803565b5b828204905092915050565b600061386e82612d0e565b915061387983612d0e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138b2576138b16135d4565b5b828202905092915050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b60006138f3601783612c5e565b91506138fe826138bd565b602082019050919050565b60006020820190508181036000830152613922816138e6565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613985602983612c5e565b915061399082613929565b604082019050919050565b600060208201905081810360008301526139b481613978565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006139f1601f83612c5e565b91506139fc826139bb565b602082019050919050565b60006020820190508181036000830152613a20816139e4565b9050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b6000613a5d600b83612c5e565b9150613a6882613a27565b602082019050919050565b60006020820190508181036000830152613a8c81613a50565b9050919050565b7f31204d696e696d756d0000000000000000000000000000000000000000000000600082015250565b6000613ac9600983612c5e565b9150613ad482613a93565b602082019050919050565b60006020820190508181036000830152613af881613abc565b9050919050565b7f45786365656473204d617820737570706c790000000000000000000000000000600082015250565b6000613b35601283612c5e565b9150613b4082613aff565b602082019050919050565b60006020820190508181036000830152613b6481613b28565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613bc7602a83612c5e565b9150613bd282613b6b565b604082019050919050565b60006020820190508181036000830152613bf681613bba565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613c33601983612c5e565b9150613c3e82613bfd565b602082019050919050565b60006020820190508181036000830152613c6281613c26565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc5602183612c5e565b9150613cd082613c69565b604082019050919050565b60006020820190508181036000830152613cf481613cb8565b9050919050565b600081905092915050565b6000613d1182612c53565b613d1b8185613cfb565b9350613d2b818560208601612c6f565b80840191505092915050565b6000613d438285613d06565b9150613d4f8284613d06565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613db7602683612c5e565b9150613dc282613d5b565b604082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613e49602c83612c5e565b9150613e5482613ded565b604082019050919050565b60006020820190508181036000830152613e7881613e3c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613edb602983612c5e565b9150613ee682613e7f565b604082019050919050565b60006020820190508181036000830152613f0a81613ece565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f6d602483612c5e565b9150613f7882613f11565b604082019050919050565b60006020820190508181036000830152613f9c81613f60565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613fff603283612c5e565b915061400a82613fa3565b604082019050919050565b6000602082019050818103600083015261402e81613ff2565b9050919050565b600061404082612d0e565b915061404b83612d0e565b92508261405b5761405a613803565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061409c602083612c5e565b91506140a782614066565b602082019050919050565b600060208201905081810360008301526140cb8161408f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614108601c83612c5e565b9150614113826140d2565b602082019050919050565b60006020820190508181036000830152614137816140fb565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006141658261413e565b61416f8185614149565b935061417f818560208601612c6f565b61418881612ca2565b840191505092915050565b60006080820190506141a86000830187612da3565b6141b56020830186612da3565b6141c26040830185612e39565b81810360608301526141d4818461415a565b905095945050505050565b6000815190506141ee81612b6b565b92915050565b60006020828403121561420a57614209612b35565b5b6000614218848285016141df565b9150509291505056fea264697066735822122066054ba35283779a6d771e758df04d802b99398e9073cdf18db3b1a22c74199a64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000084c4f56454d4f524500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c4f560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5465694d62356b58687078527443735a6a57524775384a6e5346567763526f557a74757876627968433731552f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): LOVEMORE
Arg [1] : _symbol (string): LOV
Arg [2] : _initBaseURI (string): https://gateway.pinata.cloud/ipfs/QmTeiMb5kXhpxRtCsZjWRGu8JnSFVwcRoUztuxvbyhC71U/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 4c4f56454d4f5245000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4c4f560000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f516d5465694d62356b58687078527443735a6a57524775384a6e53465677
Arg [10] : 63526f557a74757876627968433731552f000000000000000000000000000000
Deployed Bytecode Sourcemap
438:2983:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;189:225:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2921:74:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1673:100:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2307:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1889:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:319:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;660:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1350:110:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2617:97:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;554:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3005:339:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2815:103:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;420:500:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2999:419:10;;;;;;;;;;;;;:::i;:::-;;3350:185:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1466:194:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2717:95:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1428:239:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1469:417:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;627:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;529:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1008:414:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1650:94:11;;;;;;;;;;;;;:::i;:::-;;926:418:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;999:87:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2532:82:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1779:104:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2534:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3541:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2211:318:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;592:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2835:164:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1899:192:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;189:225:3;292:4;331:35;316:50;;;:11;:50;;;;:90;;;;370:36;394:11;370:23;:36::i;:::-;316:90;309:97;;189:225;;;:::o;2921:74:10:-;1230:12:11;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2984:3:10::1;2974:7;;:13;;;;;;;;;;;;;;;;;;2921:74:::0;:::o;1673:100:4:-;1727:13;1760:5;1753:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1673:100;:::o;2307:221::-;2383:7;2411:16;2419:7;2411;:16::i;:::-;2403:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2496:15;:24;2512:7;2496:24;;;;;;;;;;;;;;;;;;;;;2489:31;;2307:221;;;:::o;1889:412::-;1970:13;1986:24;2002:7;1986:15;:24::i;:::-;1970:40;;2035:5;2029:11;;:2;:11;;;;2021:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;2129:5;2113:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;2138:37;2155:5;2162:12;:10;:12::i;:::-;2138:16;:37::i;:::-;2113:62;2091:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;2272:21;2281:2;2285:7;2272:8;:21::i;:::-;1959:342;1889:412;;:::o;:319:10:-;1230:12:11;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1993:9:10::1;;1982:7;:20;;1973:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;2042:14;2059:13;:11;:13::i;:::-;2042:30;;2087:9;2083:87;2102:7;2098:1;:11;2083:87;;;2130:28;2141:3;2155:1;2146:6;:10;;;;:::i;:::-;2130:9;:28::i;:::-;2111:3;;;;;:::i;:::-;;;;2083:87;;;;2193:7;2180:9;;:20;;;;;;;:::i;:::-;;;;;;;;1962:246;1889:319:::0;;:::o;660:27::-;;;;;;;;;;;;;:::o;1350:110:3:-;1411:7;1438;:14;;;;1431:21;;1350:110;:::o;2617:97:10:-;1230:12:11;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2696:13:10::1;2684:9;:25;;;;2617:97:::0;:::o;554:34::-;;;;:::o;3005:339:4:-;3200:41;3219:12;:10;:12::i;:::-;3233:7;3200:18;:41::i;:::-;3192:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;3308:28;3318:4;3324:2;3328:7;3308:9;:28::i;:::-;3005:339;;;:::o;2815:103:10:-;1230:12:11;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2898:12:10::1;2886:9;:24;;;;2815:103:::0;:::o;420:500:3:-;509:15;553:24;571:5;553:17;:24::i;:::-;545:5;:32;537:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;615:10;641:6;636:226;653:7;:14;;;;649:1;:18;636:226;;;702:7;710:1;702:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;693:19;;:5;:19;;;689:162;;;746:5;737;:14;733:102;;;782:1;775:8;;;;;;733:102;828:7;;;;:::i;:::-;;;689:162;669:3;;;;:::i;:::-;;;636:226;;;;880:5;872:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;526:394;420:500;;;;;:::o;2999:419:10:-;1230:12:11;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3062:13:10::1;3102:2;3078:21;:26;;;;:::i;:::-;3062:42;;3132:2;;;;;;;;;;;3124:16;;:27;3149:1;3141:5;:9;;;;:::i;:::-;3124:27;;;;;;;;;;;;;;;;;;;;;;;3116:36;;;::::0;::::1;;3179:2;;;;;;;;;;;3171:16;;:27;3196:1;3188:5;:9;;;;:::i;:::-;3171:27;;;;;;;;;;;;;;;;;;;;;;;3163:36;;;::::0;::::1;;3226:2;;;;;;;;;;;3218:16;;:27;3243:1;3235:5;:9;;;;:::i;:::-;3218:27;;;;;;;;;;;;;;;;;;;;;;;3210:36;;;::::0;::::1;;3267:2;;;;;;;;;;;3259:16;;:27;3284:1;3276:5;:9;;;;:::i;:::-;3259:27;;;;;;;;;;;;;;;;;;;;;;;3251:36;;;::::0;::::1;;3308:2;;;;;;;;;;;3300:16;;:27;3325:1;3317:5;:9;;;;:::i;:::-;3300:27;;;;;;;;;;;;;;;;;;;;;;;3292:36;;;::::0;::::1;;3349:2;;;;;;;;;;;3341:16;;:27;3366:1;3358:5;:9;;;;:::i;:::-;3341:27;;;;;;;;;;;;;;;;;;;;;;;3333:36;;;::::0;::::1;;3390:2;;;;;;;;;;;3382:16;;:27;3407:1;3399:5;:9;;;;:::i;:::-;3382:27;;;;;;;;;;;;;;;;;;;;;;;3374:36;;;::::0;::::1;;3051:367;2999:419::o:0;3350:185:4:-;3488:39;3505:4;3511:2;3515:7;3488:39;;;;;;;;;;;;:16;:39::i;:::-;3350:185;;;:::o;1466:194:3:-;1541:7;1577:24;:22;:24::i;:::-;1569:5;:32;1561:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1647:5;1640:12;;1466:194;;;:::o;2717:95:10:-;1230:12:11;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2796:11:10::1;2786:7;:21;;;;;;;;;;;;:::i;:::-;;2717:95:::0;:::o;1428:239:4:-;1500:7;1520:13;1536:7;1544;1536:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1520:32;;1588:1;1571:19;;:5;:19;;;;1563:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1654:5;1647:12;;;1428:239;;;:::o;1469:417:10:-;1713:1:12;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;1542:9:10::1;1554:13;:11;:13::i;:::-;1542:25;;1582:7;;;;;;;;;;;1581:8;1572:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;1634:1;1620:11;:15;1612:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1696:9;;1684;;:21;;;;:::i;:::-;1669:11;1665:1;:15;;;;:::i;:::-;:40;;1657:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;1766:11;1757:6;;:20;;;;:::i;:::-;1744:9;:33;;1736:42;;;::::0;::::1;;1788:9;1783:86;1807:11;1803:1;:15;1783:86;;;1831:32;1841:10;1857:1;1853;:5;;;;:::i;:::-;1831:32;;;;;;;;;;;::::0;:9:::1;:32::i;:::-;1820:3;;;;:::i;:::-;;;1783:86;;;;1873:8;;;1537:349;1669:1:12::0;2621:7;:22;;;;1469:417:10;:::o;627:29::-;;;;:::o;529:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1008:414:4:-;1080:7;1125:1;1108:19;;:5;:19;;;;1100:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1185:10;1210:11;1224:7;:14;;;;1210:28;;1254:6;1249:119;1270:6;1266:1;:10;1249:119;;;1309:7;1317:1;1309:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1300:19;;:5;:19;;;1296:61;;;1336:7;;;;:::i;:::-;;;1296:61;1278:3;;;;:::i;:::-;;;1249:119;;;;1378:13;;;1409:5;1402:12;;;;1008:414;;;:::o;1650:94:11:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;926:418:3:-;985:16;1026:24;1044:5;1026:17;:24::i;:::-;1022:1;:28;1014:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1088:18;1109:16;1119:5;1109:9;:16::i;:::-;1088:37;;1136:25;1178:10;1164:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1136:53;;1205:9;1200:111;1224:10;1220:1;:14;1200:111;;;1270:29;1290:5;1297:1;1270:19;:29::i;:::-;1256:8;1265:1;1256:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;1236:3;;;;;:::i;:::-;;;;1200:111;;;;1328:8;1321:15;;;;926:418;;;:::o;999:87:11:-;1045:7;1072:6;;;;;;;;;;;1065:13;;999:87;:::o;2532:82:10:-;1230:12:11;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2600:9:10::1;2591:6;:18;;;;2532:82:::0;:::o;1779:104:4:-;1835:13;1868:7;1861:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:104;:::o;2534:295::-;2649:12;:10;:12::i;:::-;2637:24;;:8;:24;;;;2629:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2749:8;2704:18;:32;2723:12;:10;:12::i;:::-;2704:32;;;;;;;;;;;;;;;:42;2737:8;2704:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;2802:8;2773:48;;2788:12;:10;:12::i;:::-;2773:48;;;2812:8;2773:48;;;;;;:::i;:::-;;;;;;;;2534:295;;:::o;3541:328::-;3716:41;3735:12;:10;:12::i;:::-;3749:7;3716:18;:41::i;:::-;3708:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;3822:39;3836:4;3842:2;3846:7;3855:5;3822:13;:39::i;:::-;3541:328;;;;:::o;2211:318:10:-;2284:13;2312:16;2320:7;2312;:16::i;:::-;2304:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2371:28;2402:10;:8;:10::i;:::-;2371:41;;2455:1;2430:14;2424:28;:32;:100;;;;;;;;;;;;;;;;;2483:14;2499:18;:7;:16;:18::i;:::-;2466:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2424:100;2417:107;;;2211:318;;;:::o;592:31::-;;;;:::o;2835:164:4:-;2932:4;2956:18;:25;2975:5;2956:25;;;;;;;;;;;;;;;:35;2982:8;2956:35;;;;;;;;;;;;;;;;;;;;;;;;;2949:42;;2835:164;;;;:::o;1899:192:11:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1988:22;;:8;:22;;;;1980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;697:305:4:-;799:4;851:25;836:40;;;:11;:40;;;;:105;;;;908:33;893:48;;;:11;:48;;;;836:105;:158;;;;958:36;982:11;958:23;:36::i;:::-;836:158;816:178;;697:305;;;:::o;602:98:1:-;655:7;682:10;675:17;;602:98;:::o;4198:155:4:-;4263:4;4297:7;:14;;;;4287:7;:24;:58;;;;;4343:1;4315:30;;:7;4323;4315:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;4287:58;4280:65;;4198:155;;;:::o;6350:175::-;6452:2;6425:15;:24;6441:7;6425:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;6509:7;6505:2;6470:47;;6479:24;6495:7;6479:15;:24::i;:::-;6470:47;;;;;;;;;;;;6350:175;;:::o;4708:110::-;4784:26;4794:2;4798:7;4784:26;;;;;;;;;;;;:9;:26::i;:::-;4708:110;;:::o;4356:349::-;4449:4;4474:16;4482:7;4474;:16::i;:::-;4466:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4550:13;4566:24;4582:7;4566:15;:24::i;:::-;4550:40;;4620:5;4609:16;;:7;:16;;;:51;;;;4653:7;4629:31;;:20;4641:7;4629:11;:20::i;:::-;:31;;;4609:51;:87;;;;4664:32;4681:5;4688:7;4664:16;:32::i;:::-;4609:87;4601:96;;;4356:349;;;;:::o;5830:517::-;5990:4;5962:32;;:24;5978:7;5962:15;:24::i;:::-;:32;;;5954:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;6073:1;6059:16;;:2;:16;;;;6051:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;6129:39;6150:4;6156:2;6160:7;6129:20;:39::i;:::-;6233:29;6250:1;6254:7;6233:8;:29::i;:::-;6292:2;6273:7;6281;6273:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;6331:7;6327:2;6312:27;;6321:4;6312:27;;;;;;;;;;;;5830:517;;;:::o;4821:321::-;4951:18;4957:2;4961:7;4951:5;:18::i;:::-;5002:54;5033:1;5037:2;5041:7;5050:5;5002:22;:54::i;:::-;4980:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;4821:321;;;:::o;2099:173:11:-;2155:16;2174:6;;;;;;;;;;;2155:25;;2200:8;2191:6;;:17;;;;;;;;;;;;;;;;;;2255:8;2224:40;;2245:8;2224:40;;;;;;;;;;;;2144:128;2099:173;:::o;3880:315:4:-;4037:28;4047:4;4053:2;4057:7;4037:9;:28::i;:::-;4084:48;4107:4;4113:2;4117:7;4126:5;4084:22;:48::i;:::-;4076:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;3880:315;;;;:::o;1377:89:10:-;1428:13;1454:7;1447:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1377:89;:::o;288:723:14:-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;787:157:2:-;872:4;911:25;896:40;;;:11;:40;;;;889:47;;787:157;;;:::o;7330:126:4:-;;;;:::o;5145:346::-;5239:1;5225:16;;:2;:16;;;;5217:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;5298:16;5306:7;5298;:16::i;:::-;5297:17;5289:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;5360:45;5389:1;5393:2;5397:7;5360:20;:45::i;:::-;5416:7;5429:2;5416:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5475:7;5471:2;5450:33;;5467:1;5450:33;;;;;;;;;;;;5145:346;;:::o;6528:799::-;6683:4;6704:15;:2;:13;;;:15::i;:::-;6700:620;;;6756:2;6740:36;;;6777:12;:10;:12::i;:::-;6791:4;6797:7;6806:5;6740:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6736:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6999:1;6982:6;:13;:18;6978:272;;;7025:60;;;;;;;;;;:::i;:::-;;;;;;;;6978:272;7200:6;7194:13;7185:6;7181:2;7177:15;7170:38;6736:529;6873:41;;;6863:51;;;:6;:51;;;;6856:58;;;;;6700:620;7304:4;7297:11;;6528:799;;;;;;;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:15:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:117::-;6614:1;6611;6604:12;6628:117;6737:1;6734;6727:12;6751:180;6799:77;6796:1;6789:88;6896:4;6893:1;6886:15;6920:4;6917:1;6910:15;6937:281;7020:27;7042:4;7020:27;:::i;:::-;7012:6;7008:40;7150:6;7138:10;7135:22;7114:18;7102:10;7099:34;7096:62;7093:88;;;7161:18;;:::i;:::-;7093:88;7201:10;7197:2;7190:22;6980:238;6937:281;;:::o;7224:129::-;7258:6;7285:20;;:::i;:::-;7275:30;;7314:33;7342:4;7334:6;7314:33;:::i;:::-;7224:129;;;:::o;7359:308::-;7421:4;7511:18;7503:6;7500:30;7497:56;;;7533:18;;:::i;:::-;7497:56;7571:29;7593:6;7571:29;:::i;:::-;7563:37;;7655:4;7649;7645:15;7637:23;;7359:308;;;:::o;7673:154::-;7757:6;7752:3;7747;7734:30;7819:1;7810:6;7805:3;7801:16;7794:27;7673:154;;;:::o;7833:412::-;7911:5;7936:66;7952:49;7994:6;7952:49;:::i;:::-;7936:66;:::i;:::-;7927:75;;8025:6;8018:5;8011:21;8063:4;8056:5;8052:16;8101:3;8092:6;8087:3;8083:16;8080:25;8077:112;;;8108:79;;:::i;:::-;8077:112;8198:41;8232:6;8227:3;8222;8198:41;:::i;:::-;7917:328;7833:412;;;;;:::o;8265:340::-;8321:5;8370:3;8363:4;8355:6;8351:17;8347:27;8337:122;;8378:79;;:::i;:::-;8337:122;8495:6;8482:20;8520:79;8595:3;8587:6;8580:4;8572:6;8568:17;8520:79;:::i;:::-;8511:88;;8327:278;8265:340;;;;:::o;8611:509::-;8680:6;8729:2;8717:9;8708:7;8704:23;8700:32;8697:119;;;8735:79;;:::i;:::-;8697:119;8883:1;8872:9;8868:17;8855:31;8913:18;8905:6;8902:30;8899:117;;;8935:79;;:::i;:::-;8899:117;9040:63;9095:7;9086:6;9075:9;9071:22;9040:63;:::i;:::-;9030:73;;8826:287;8611:509;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:114::-;9528:6;9562:5;9556:12;9546:22;;9461:114;;;:::o;9581:184::-;9680:11;9714:6;9709:3;9702:19;9754:4;9749:3;9745:14;9730:29;;9581:184;;;;:::o;9771:132::-;9838:4;9861:3;9853:11;;9891:4;9886:3;9882:14;9874:22;;9771:132;;;:::o;9909:108::-;9986:24;10004:5;9986:24;:::i;:::-;9981:3;9974:37;9909:108;;:::o;10023:179::-;10092:10;10113:46;10155:3;10147:6;10113:46;:::i;:::-;10191:4;10186:3;10182:14;10168:28;;10023:179;;;;:::o;10208:113::-;10278:4;10310;10305:3;10301:14;10293:22;;10208:113;;;:::o;10357:732::-;10476:3;10505:54;10553:5;10505:54;:::i;:::-;10575:86;10654:6;10649:3;10575:86;:::i;:::-;10568:93;;10685:56;10735:5;10685:56;:::i;:::-;10764:7;10795:1;10780:284;10805:6;10802:1;10799:13;10780:284;;;10881:6;10875:13;10908:63;10967:3;10952:13;10908:63;:::i;:::-;10901:70;;10994:60;11047:6;10994:60;:::i;:::-;10984:70;;10840:224;10827:1;10824;10820:9;10815:14;;10780:284;;;10784:14;11080:3;11073:10;;10481:608;;;10357:732;;;;:::o;11095:373::-;11238:4;11276:2;11265:9;11261:18;11253:26;;11325:9;11319:4;11315:20;11311:1;11300:9;11296:17;11289:47;11353:108;11456:4;11447:6;11353:108;:::i;:::-;11345:116;;11095:373;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:182::-;14603:34;14599:1;14591:6;14587:14;14580:58;14463:182;:::o;14651:366::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:419::-;15189:4;15227:2;15216:9;15212:18;15204:26;;15276:9;15270:4;15266:20;15262:1;15251:9;15247:17;15240:47;15304:131;15430:4;15304:131;:::i;:::-;15296:139;;15023:419;;;:::o;15448:180::-;15496:77;15493:1;15486:88;15593:4;15590:1;15583:15;15617:4;15614:1;15607:15;15634:320;15678:6;15715:1;15709:4;15705:12;15695:22;;15762:1;15756:4;15752:12;15783:18;15773:81;;15839:4;15831:6;15827:17;15817:27;;15773:81;15901:2;15893:6;15890:14;15870:18;15867:38;15864:84;;;15920:18;;:::i;:::-;15864:84;15685:269;15634:320;;;:::o;15960:231::-;16100:34;16096:1;16088:6;16084:14;16077:58;16169:14;16164:2;16156:6;16152:15;16145:39;15960:231;:::o;16197:366::-;16339:3;16360:67;16424:2;16419:3;16360:67;:::i;:::-;16353:74;;16436:93;16525:3;16436:93;:::i;:::-;16554:2;16549:3;16545:12;16538:19;;16197:366;;;:::o;16569:419::-;16735:4;16773:2;16762:9;16758:18;16750:26;;16822:9;16816:4;16812:20;16808:1;16797:9;16793:17;16786:47;16850:131;16976:4;16850:131;:::i;:::-;16842:139;;16569:419;;;:::o;16994:220::-;17134:34;17130:1;17122:6;17118:14;17111:58;17203:3;17198:2;17190:6;17186:15;17179:28;16994:220;:::o;17220:366::-;17362:3;17383:67;17447:2;17442:3;17383:67;:::i;:::-;17376:74;;17459:93;17548:3;17459:93;:::i;:::-;17577:2;17572:3;17568:12;17561:19;;17220:366;;;:::o;17592:419::-;17758:4;17796:2;17785:9;17781:18;17773:26;;17845:9;17839:4;17835:20;17831:1;17820:9;17816:17;17809:47;17873:131;17999:4;17873:131;:::i;:::-;17865:139;;17592:419;;;:::o;18017:243::-;18157:34;18153:1;18145:6;18141:14;18134:58;18226:26;18221:2;18213:6;18209:15;18202:51;18017:243;:::o;18266:366::-;18408:3;18429:67;18493:2;18488:3;18429:67;:::i;:::-;18422:74;;18505:93;18594:3;18505:93;:::i;:::-;18623:2;18618:3;18614:12;18607:19;;18266:366;;;:::o;18638:419::-;18804:4;18842:2;18831:9;18827:18;18819:26;;18891:9;18885:4;18881:20;18877:1;18866:9;18862:17;18855:47;18919:131;19045:4;18919:131;:::i;:::-;18911:139;;18638:419;;;:::o;19063:173::-;19203:25;19199:1;19191:6;19187:14;19180:49;19063:173;:::o;19242:366::-;19384:3;19405:67;19469:2;19464:3;19405:67;:::i;:::-;19398:74;;19481:93;19570:3;19481:93;:::i;:::-;19599:2;19594:3;19590:12;19583:19;;19242:366;;;:::o;19614:419::-;19780:4;19818:2;19807:9;19803:18;19795:26;;19867:9;19861:4;19857:20;19853:1;19842:9;19838:17;19831:47;19895:131;20021:4;19895:131;:::i;:::-;19887:139;;19614:419;;;:::o;20039:180::-;20087:77;20084:1;20077:88;20184:4;20181:1;20174:15;20208:4;20205:1;20198:15;20225:305;20265:3;20284:20;20302:1;20284:20;:::i;:::-;20279:25;;20318:20;20336:1;20318:20;:::i;:::-;20313:25;;20472:1;20404:66;20400:74;20397:1;20394:81;20391:107;;;20478:18;;:::i;:::-;20391:107;20522:1;20519;20515:9;20508:16;;20225:305;;;;:::o;20536:233::-;20575:3;20598:24;20616:5;20598:24;:::i;:::-;20589:33;;20644:66;20637:5;20634:77;20631:103;;;20714:18;;:::i;:::-;20631:103;20761:1;20754:5;20750:13;20743:20;;20536:233;;;:::o;20775:191::-;20815:4;20835:20;20853:1;20835:20;:::i;:::-;20830:25;;20869:20;20887:1;20869:20;:::i;:::-;20864:25;;20908:1;20905;20902:8;20899:34;;;20913:18;;:::i;:::-;20899:34;20958:1;20955;20951:9;20943:17;;20775:191;;;;:::o;20972:236::-;21112:34;21108:1;21100:6;21096:14;21089:58;21181:19;21176:2;21168:6;21164:15;21157:44;20972:236;:::o;21214:366::-;21356:3;21377:67;21441:2;21436:3;21377:67;:::i;:::-;21370:74;;21453:93;21542:3;21453:93;:::i;:::-;21571:2;21566:3;21562:12;21555:19;;21214:366;;;:::o;21586:419::-;21752:4;21790:2;21779:9;21775:18;21767:26;;21839:9;21833:4;21829:20;21825:1;21814:9;21810:17;21803:47;21867:131;21993:4;21867:131;:::i;:::-;21859:139;;21586:419;;;:::o;22011:172::-;22151:24;22147:1;22139:6;22135:14;22128:48;22011:172;:::o;22189:366::-;22331:3;22352:67;22416:2;22411:3;22352:67;:::i;:::-;22345:74;;22428:93;22517:3;22428:93;:::i;:::-;22546:2;22541:3;22537:12;22530:19;;22189:366;;;:::o;22561:419::-;22727:4;22765:2;22754:9;22750:18;22742:26;;22814:9;22808:4;22804:20;22800:1;22789:9;22785:17;22778:47;22842:131;22968:4;22842:131;:::i;:::-;22834:139;;22561:419;;;:::o;22986:180::-;23034:77;23031:1;23024:88;23131:4;23128:1;23121:15;23155:4;23152:1;23145:15;23172:180;23220:77;23217:1;23210:88;23317:4;23314:1;23307:15;23341:4;23338:1;23331:15;23358:185;23398:1;23415:20;23433:1;23415:20;:::i;:::-;23410:25;;23449:20;23467:1;23449:20;:::i;:::-;23444:25;;23488:1;23478:35;;23493:18;;:::i;:::-;23478:35;23535:1;23532;23528:9;23523:14;;23358:185;;;;:::o;23549:348::-;23589:7;23612:20;23630:1;23612:20;:::i;:::-;23607:25;;23646:20;23664:1;23646:20;:::i;:::-;23641:25;;23834:1;23766:66;23762:74;23759:1;23756:81;23751:1;23744:9;23737:17;23733:105;23730:131;;;23841:18;;:::i;:::-;23730:131;23889:1;23886;23882:9;23871:20;;23549:348;;;;:::o;23903:173::-;24043:25;24039:1;24031:6;24027:14;24020:49;23903:173;:::o;24082:366::-;24224:3;24245:67;24309:2;24304:3;24245:67;:::i;:::-;24238:74;;24321:93;24410:3;24321:93;:::i;:::-;24439:2;24434:3;24430:12;24423:19;;24082:366;;;:::o;24454:419::-;24620:4;24658:2;24647:9;24643:18;24635:26;;24707:9;24701:4;24697:20;24693:1;24682:9;24678:17;24671:47;24735:131;24861:4;24735:131;:::i;:::-;24727:139;;24454:419;;;:::o;24879:228::-;25019:34;25015:1;25007:6;25003:14;24996:58;25088:11;25083:2;25075:6;25071:15;25064:36;24879:228;:::o;25113:366::-;25255:3;25276:67;25340:2;25335:3;25276:67;:::i;:::-;25269:74;;25352:93;25441:3;25352:93;:::i;:::-;25470:2;25465:3;25461:12;25454:19;;25113:366;;;:::o;25485:419::-;25651:4;25689:2;25678:9;25674:18;25666:26;;25738:9;25732:4;25728:20;25724:1;25713:9;25709:17;25702:47;25766:131;25892:4;25766:131;:::i;:::-;25758:139;;25485:419;;;:::o;25910:181::-;26050:33;26046:1;26038:6;26034:14;26027:57;25910:181;:::o;26097:366::-;26239:3;26260:67;26324:2;26319:3;26260:67;:::i;:::-;26253:74;;26336:93;26425:3;26336:93;:::i;:::-;26454:2;26449:3;26445:12;26438:19;;26097:366;;;:::o;26469:419::-;26635:4;26673:2;26662:9;26658:18;26650:26;;26722:9;26716:4;26712:20;26708:1;26697:9;26693:17;26686:47;26750:131;26876:4;26750:131;:::i;:::-;26742:139;;26469:419;;;:::o;26894:161::-;27034:13;27030:1;27022:6;27018:14;27011:37;26894:161;:::o;27061:366::-;27203:3;27224:67;27288:2;27283:3;27224:67;:::i;:::-;27217:74;;27300:93;27389:3;27300:93;:::i;:::-;27418:2;27413:3;27409:12;27402:19;;27061:366;;;:::o;27433:419::-;27599:4;27637:2;27626:9;27622:18;27614:26;;27686:9;27680:4;27676:20;27672:1;27661:9;27657:17;27650:47;27714:131;27840:4;27714:131;:::i;:::-;27706:139;;27433:419;;;:::o;27858:159::-;27998:11;27994:1;27986:6;27982:14;27975:35;27858:159;:::o;28023:365::-;28165:3;28186:66;28250:1;28245:3;28186:66;:::i;:::-;28179:73;;28261:93;28350:3;28261:93;:::i;:::-;28379:2;28374:3;28370:12;28363:19;;28023:365;;;:::o;28394:419::-;28560:4;28598:2;28587:9;28583:18;28575:26;;28647:9;28641:4;28637:20;28633:1;28622:9;28618:17;28611:47;28675:131;28801:4;28675:131;:::i;:::-;28667:139;;28394:419;;;:::o;28819:168::-;28959:20;28955:1;28947:6;28943:14;28936:44;28819:168;:::o;28993:366::-;29135:3;29156:67;29220:2;29215:3;29156:67;:::i;:::-;29149:74;;29232:93;29321:3;29232:93;:::i;:::-;29350:2;29345:3;29341:12;29334:19;;28993:366;;;:::o;29365:419::-;29531:4;29569:2;29558:9;29554:18;29546:26;;29618:9;29612:4;29608:20;29604:1;29593:9;29589:17;29582:47;29646:131;29772:4;29646:131;:::i;:::-;29638:139;;29365:419;;;:::o;29790:229::-;29930:34;29926:1;29918:6;29914:14;29907:58;29999:12;29994:2;29986:6;29982:15;29975:37;29790:229;:::o;30025:366::-;30167:3;30188:67;30252:2;30247:3;30188:67;:::i;:::-;30181:74;;30264:93;30353:3;30264:93;:::i;:::-;30382:2;30377:3;30373:12;30366:19;;30025:366;;;:::o;30397:419::-;30563:4;30601:2;30590:9;30586:18;30578:26;;30650:9;30644:4;30640:20;30636:1;30625:9;30621:17;30614:47;30678:131;30804:4;30678:131;:::i;:::-;30670:139;;30397:419;;;:::o;30822:175::-;30962:27;30958:1;30950:6;30946:14;30939:51;30822:175;:::o;31003:366::-;31145:3;31166:67;31230:2;31225:3;31166:67;:::i;:::-;31159:74;;31242:93;31331:3;31242:93;:::i;:::-;31360:2;31355:3;31351:12;31344:19;;31003:366;;;:::o;31375:419::-;31541:4;31579:2;31568:9;31564:18;31556:26;;31628:9;31622:4;31618:20;31614:1;31603:9;31599:17;31592:47;31656:131;31782:4;31656:131;:::i;:::-;31648:139;;31375:419;;;:::o;31800:220::-;31940:34;31936:1;31928:6;31924:14;31917:58;32009:3;32004:2;31996:6;31992:15;31985:28;31800:220;:::o;32026:366::-;32168:3;32189:67;32253:2;32248:3;32189:67;:::i;:::-;32182:74;;32265:93;32354:3;32265:93;:::i;:::-;32383:2;32378:3;32374:12;32367:19;;32026:366;;;:::o;32398:419::-;32564:4;32602:2;32591:9;32587:18;32579:26;;32651:9;32645:4;32641:20;32637:1;32626:9;32622:17;32615:47;32679:131;32805:4;32679:131;:::i;:::-;32671:139;;32398:419;;;:::o;32823:148::-;32925:11;32962:3;32947:18;;32823:148;;;;:::o;32977:377::-;33083:3;33111:39;33144:5;33111:39;:::i;:::-;33166:89;33248:6;33243:3;33166:89;:::i;:::-;33159:96;;33264:52;33309:6;33304:3;33297:4;33290:5;33286:16;33264:52;:::i;:::-;33341:6;33336:3;33332:16;33325:23;;33087:267;32977:377;;;;:::o;33360:435::-;33540:3;33562:95;33653:3;33644:6;33562:95;:::i;:::-;33555:102;;33674:95;33765:3;33756:6;33674:95;:::i;:::-;33667:102;;33786:3;33779:10;;33360:435;;;;;:::o;33801:225::-;33941:34;33937:1;33929:6;33925:14;33918:58;34010:8;34005:2;33997:6;33993:15;33986:33;33801:225;:::o;34032:366::-;34174:3;34195:67;34259:2;34254:3;34195:67;:::i;:::-;34188:74;;34271:93;34360:3;34271:93;:::i;:::-;34389:2;34384:3;34380:12;34373:19;;34032:366;;;:::o;34404:419::-;34570:4;34608:2;34597:9;34593:18;34585:26;;34657:9;34651:4;34647:20;34643:1;34632:9;34628:17;34621:47;34685:131;34811:4;34685:131;:::i;:::-;34677:139;;34404:419;;;:::o;34829:231::-;34969:34;34965:1;34957:6;34953:14;34946:58;35038:14;35033:2;35025:6;35021:15;35014:39;34829:231;:::o;35066:366::-;35208:3;35229:67;35293:2;35288:3;35229:67;:::i;:::-;35222:74;;35305:93;35394:3;35305:93;:::i;:::-;35423:2;35418:3;35414:12;35407:19;;35066:366;;;:::o;35438:419::-;35604:4;35642:2;35631:9;35627:18;35619:26;;35691:9;35685:4;35681:20;35677:1;35666:9;35662:17;35655:47;35719:131;35845:4;35719:131;:::i;:::-;35711:139;;35438:419;;;:::o;35863:228::-;36003:34;35999:1;35991:6;35987:14;35980:58;36072:11;36067:2;36059:6;36055:15;36048:36;35863:228;:::o;36097:366::-;36239:3;36260:67;36324:2;36319:3;36260:67;:::i;:::-;36253:74;;36336:93;36425:3;36336:93;:::i;:::-;36454:2;36449:3;36445:12;36438:19;;36097:366;;;:::o;36469:419::-;36635:4;36673:2;36662:9;36658:18;36650:26;;36722:9;36716:4;36712:20;36708:1;36697:9;36693:17;36686:47;36750:131;36876:4;36750:131;:::i;:::-;36742:139;;36469:419;;;:::o;36894:223::-;37034:34;37030:1;37022:6;37018:14;37011:58;37103:6;37098:2;37090:6;37086:15;37079:31;36894:223;:::o;37123:366::-;37265:3;37286:67;37350:2;37345:3;37286:67;:::i;:::-;37279:74;;37362:93;37451:3;37362:93;:::i;:::-;37480:2;37475:3;37471:12;37464:19;;37123:366;;;:::o;37495:419::-;37661:4;37699:2;37688:9;37684:18;37676:26;;37748:9;37742:4;37738:20;37734:1;37723:9;37719:17;37712:47;37776:131;37902:4;37776:131;:::i;:::-;37768:139;;37495:419;;;:::o;37920:237::-;38060:34;38056:1;38048:6;38044:14;38037:58;38129:20;38124:2;38116:6;38112:15;38105:45;37920:237;:::o;38163:366::-;38305:3;38326:67;38390:2;38385:3;38326:67;:::i;:::-;38319:74;;38402:93;38491:3;38402:93;:::i;:::-;38520:2;38515:3;38511:12;38504:19;;38163:366;;;:::o;38535:419::-;38701:4;38739:2;38728:9;38724:18;38716:26;;38788:9;38782:4;38778:20;38774:1;38763:9;38759:17;38752:47;38816:131;38942:4;38816:131;:::i;:::-;38808:139;;38535:419;;;:::o;38960:176::-;38992:1;39009:20;39027:1;39009:20;:::i;:::-;39004:25;;39043:20;39061:1;39043:20;:::i;:::-;39038:25;;39082:1;39072:35;;39087:18;;:::i;:::-;39072:35;39128:1;39125;39121:9;39116:14;;38960:176;;;;:::o;39142:182::-;39282:34;39278:1;39270:6;39266:14;39259:58;39142:182;:::o;39330:366::-;39472:3;39493:67;39557:2;39552:3;39493:67;:::i;:::-;39486:74;;39569:93;39658:3;39569:93;:::i;:::-;39687:2;39682:3;39678:12;39671:19;;39330:366;;;:::o;39702:419::-;39868:4;39906:2;39895:9;39891:18;39883:26;;39955:9;39949:4;39945:20;39941:1;39930:9;39926:17;39919:47;39983:131;40109:4;39983:131;:::i;:::-;39975:139;;39702:419;;;:::o;40127:178::-;40267:30;40263:1;40255:6;40251:14;40244:54;40127:178;:::o;40311:366::-;40453:3;40474:67;40538:2;40533:3;40474:67;:::i;:::-;40467:74;;40550:93;40639:3;40550:93;:::i;:::-;40668:2;40663:3;40659:12;40652:19;;40311:366;;;:::o;40683:419::-;40849:4;40887:2;40876:9;40872:18;40864:26;;40936:9;40930:4;40926:20;40922:1;40911:9;40907:17;40900:47;40964:131;41090:4;40964:131;:::i;:::-;40956:139;;40683:419;;;:::o;41108:98::-;41159:6;41193:5;41187:12;41177:22;;41108:98;;;:::o;41212:168::-;41295:11;41329:6;41324:3;41317:19;41369:4;41364:3;41360:14;41345:29;;41212:168;;;;:::o;41386:360::-;41472:3;41500:38;41532:5;41500:38;:::i;:::-;41554:70;41617:6;41612:3;41554:70;:::i;:::-;41547:77;;41633:52;41678:6;41673:3;41666:4;41659:5;41655:16;41633:52;:::i;:::-;41710:29;41732:6;41710:29;:::i;:::-;41705:3;41701:39;41694:46;;41476:270;41386:360;;;;:::o;41752:640::-;41947:4;41985:3;41974:9;41970:19;41962:27;;41999:71;42067:1;42056:9;42052:17;42043:6;41999:71;:::i;:::-;42080:72;42148:2;42137:9;42133:18;42124:6;42080:72;:::i;:::-;42162;42230:2;42219:9;42215:18;42206:6;42162:72;:::i;:::-;42281:9;42275:4;42271:20;42266:2;42255:9;42251:18;42244:48;42309:76;42380:4;42371:6;42309:76;:::i;:::-;42301:84;;41752:640;;;;;;;:::o;42398:141::-;42454:5;42485:6;42479:13;42470:22;;42501:32;42527:5;42501:32;:::i;:::-;42398:141;;;;:::o;42545:349::-;42614:6;42663:2;42651:9;42642:7;42638:23;42634:32;42631:119;;;42669:79;;:::i;:::-;42631:119;42789:1;42814:63;42869:7;42860:6;42849:9;42845:22;42814:63;:::i;:::-;42804:73;;42760:127;42545:349;;;;:::o
Swarm Source
ipfs://66054ba35283779a6d771e758df04d802b99398e9073cdf18db3b1a22c74199a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.