ERC-721
Overview
Max Total Supply
2,713 MAP
Holders
104
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
7 MAPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheMetaNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-26 */ // File: contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: TheMetaNFT.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.7; contract TheMetaNFT is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.00001 ether; uint256 public presaleCost = 0.03 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 20; bool public paused = false; uint256 private STOP_MOD = 2000; mapping(address => bool) public whitelisted; mapping(address => bool) public presaleWallets; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); //mint(msg.sender, 20); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused, "Sale must be active to mint NFT"); require(_mintAmount > 0, "Can't mint this amount"); require(_mintAmount <= maxMintAmount, "Amount too big .. "); require(supply + _mintAmount <= maxSupply, "Going beyond supply ... "); if(supply + _mintAmount >= STOP_MOD){ flipSaleState(); } if (msg.sender != owner()) { if (whitelisted[msg.sender] != true) { if (presaleWallets[msg.sender] != true) { //general public require(msg.value >= cost * _mintAmount, "Not enough ETH sent: check price."); } else { //presale require(msg.value >= presaleCost * _mintAmount); } } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function flipSaleState() public onlyOwner { paused = !paused; } function setPresaleCost(uint256 _newCost) public onlyOwner { presaleCost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function setStopMod(uint256 stopMod) public onlyOwner { STOP_MOD = stopMod; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function addPresaleUser(address _user) public onlyOwner { presaleWallets[_user] = true; } function add100PresaleUsers(address[100] memory _users) public onlyOwner { for (uint256 i = 0; i < 2; i++) { presaleWallets[_users[i]] = true; } } function removePresaleUser(address _user) public onlyOwner { presaleWallets[_user] = false; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } function withdraw_mine() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function withdraw(address payable recipient) public onlyOwner { uint256 balance = address(this).balance; require(balance >= 0.1 ether, "Not enough ETH to withdraw."); recipient.transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[100]","name":"_users","type":"address[100]"}],"name":"add100PresaleUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addPresaleUser","outputs":[],"stateMutability":"nonpayable","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removePresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stopMod","type":"uint256"}],"name":"setStopMod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw_mine","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620002d9565b506509184e72a000600d55666a94d74f430000600e55612710600f5560146010556000601160006101000a81548160ff0219169083151502179055506107d0601255348015620000a057600080fd5b506040516200592f3803806200592f8339818101604052810190620000c6919062000407565b82828160009080519060200190620000e0929190620002d9565b508060019080519060200190620000f9929190620002d9565b5050506200011c620001106200013660201b60201c565b6200013e60201b60201c565b6200012d816200020460201b60201c565b505050620006c7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002146200013660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023a620002af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000293576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028a90620004e7565b60405180910390fd5b80600b9080519060200190620002ab929190620002d9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002e790620005af565b90600052602060002090601f0160209004810192826200030b576000855562000357565b82601f106200032657805160ff191683800117855562000357565b8280016001018555821562000357579182015b828111156200035657825182559160200191906001019062000339565b5b5090506200036691906200036a565b5090565b5b80821115620003855760008160009055506001016200036b565b5090565b6000620003a06200039a8462000532565b62000509565b905082815260208101848484011115620003bf57620003be6200067e565b5b620003cc84828562000579565b509392505050565b600082601f830112620003ec57620003eb62000679565b5b8151620003fe84826020860162000389565b91505092915050565b60008060006060848603121562000423576200042262000688565b5b600084015167ffffffffffffffff81111562000444576200044362000683565b5b6200045286828701620003d4565b935050602084015167ffffffffffffffff81111562000476576200047562000683565b5b6200048486828701620003d4565b925050604084015167ffffffffffffffff811115620004a857620004a762000683565b5b620004b686828701620003d4565b9150509250925092565b6000620004cf60208362000568565b9150620004dc826200069e565b602082019050919050565b600060208201905081810360008301526200050281620004c0565b9050919050565b60006200051562000528565b9050620005238282620005e5565b919050565b6000604051905090565b600067ffffffffffffffff82111562000550576200054f6200064a565b5b6200055b826200068d565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005995780820151818401526020810190506200057c565b83811115620005a9576000848401525b50505050565b60006002820490506001821680620005c857607f821691505b60208210811415620005df57620005de6200061b565b5b50919050565b620005f0826200068d565b810181811067ffffffffffffffff821117156200061257620006116200064a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61525880620006d76000396000f3fe60806040526004361061027d5760003560e01c806351cff8d91161014f57806395d89b41116100c1578063d5abeb011161007a578063d5abeb0114610950578063d936547e1461097b578063da3ef23f146109b8578063e985e9c5146109e1578063ed931e1714610a1e578063f2fde38b14610a475761027d565b806395d89b4114610842578063a22cb4651461086d578063b2f3e85e14610896578063b88d4fde146108bf578063c6682862146108e8578063c87b56dd146109135761027d565b80636c0360eb116101135780636c0360eb1461074657806370a0823114610771578063715018a6146107ae5780637f00c7a6146107c55780638da5cb5b146107ee5780638fdcf942146108195761027d565b806351cff8d914610663578063546857c71461068c57806355f804b3146106b55780635c975abb146106de5780636352211e146107095761027d565b80632a23d07d116101f357806340c10f19116101ac57806340c10f191461055257806342842e0e1461056e578063438b63001461059757806344a0d68a146105d45780634a4c560d146105fd5780634f6ccce7146106265761027d565b80632a23d07d146104635780632f745c591461048e57806330b2264e146104cb57806330cc7ae01461050857806334918dfd146105315780633ccfd60b146105485761027d565b8063081812fc11610245578063081812fc14610353578063095ea7b31461039057806313faede6146103b957806318160ddd146103e4578063239c70ae1461040f57806323b872dd1461043a5761027d565b806301ffc9a71461028257806302207f29146102bf57806302329a29146102d65780630612bec8146102ff57806306fdde0314610328575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613c1d565b610a70565b6040516102b691906142fb565b60405180910390f35b3480156102cb57600080fd5b506102d4610aea565b005b3480156102e257600080fd5b506102fd60048036038101906102f89190613bf0565b610bb5565b005b34801561030b57600080fd5b5061032660048036038101906103219190613cc0565b610c4e565b005b34801561033457600080fd5b5061033d610cd4565b60405161034a9190614316565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190613cc0565b610d66565b6040516103879190614272565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190613b82565b610deb565b005b3480156103c557600080fd5b506103ce610f03565b6040516103db9190614638565b60405180910390f35b3480156103f057600080fd5b506103f9610f09565b6040516104069190614638565b60405180910390f35b34801561041b57600080fd5b50610424610f16565b6040516104319190614638565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613a6c565b610f1c565b005b34801561046f57600080fd5b50610478610f7c565b6040516104859190614638565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190613b82565b610f82565b6040516104c29190614638565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed91906139d2565b611027565b6040516104ff91906142fb565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a91906139d2565b611047565b005b34801561053d57600080fd5b5061054661111e565b005b6105506111c6565b005b61056c60048036038101906105679190613b82565b6112bb565b005b34801561057a57600080fd5b5061059560048036038101906105909190613a6c565b6115a4565b005b3480156105a357600080fd5b506105be60048036038101906105b991906139d2565b6115c4565b6040516105cb91906142d9565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613cc0565b611672565b005b34801561060957600080fd5b50610624600480360381019061061f91906139d2565b6116f8565b005b34801561063257600080fd5b5061064d60048036038101906106489190613cc0565b6117cf565b60405161065a9190614638565b60405180910390f35b34801561066f57600080fd5b5061068a600480360381019061068591906139ff565b611840565b005b34801561069857600080fd5b506106b360048036038101906106ae9190613bc2565b611957565b005b3480156106c157600080fd5b506106dc60048036038101906106d79190613c77565b611a65565b005b3480156106ea57600080fd5b506106f3611afb565b60405161070091906142fb565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190613cc0565b611b0e565b60405161073d9190614272565b60405180910390f35b34801561075257600080fd5b5061075b611bc0565b6040516107689190614316565b60405180910390f35b34801561077d57600080fd5b50610798600480360381019061079391906139d2565b611c4e565b6040516107a59190614638565b60405180910390f35b3480156107ba57600080fd5b506107c3611d06565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190613cc0565b611d8e565b005b3480156107fa57600080fd5b50610803611e14565b6040516108109190614272565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190613cc0565b611e3e565b005b34801561084e57600080fd5b50610857611ec4565b6040516108649190614316565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613b42565b611f56565b005b3480156108a257600080fd5b506108bd60048036038101906108b891906139d2565b6120d7565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190613abf565b6121ae565b005b3480156108f457600080fd5b506108fd612210565b60405161090a9190614316565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613cc0565b61229e565b6040516109479190614316565b60405180910390f35b34801561095c57600080fd5b50610965612348565b6040516109729190614638565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d91906139d2565b61234e565b6040516109af91906142fb565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da9190613c77565b61236e565b005b3480156109ed57600080fd5b50610a086004803603810190610a039190613a2c565b612404565b604051610a1591906142fb565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a4091906139d2565b612498565b005b348015610a5357600080fd5b50610a6e6004803603810190610a6991906139d2565b61256f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ae35750610ae282612667565b5b9050919050565b610af2612749565b73ffffffffffffffffffffffffffffffffffffffff16610b10611e14565b73ffffffffffffffffffffffffffffffffffffffff1614610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90614538565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bb1573d6000803e3d6000fd5b5050565b610bbd612749565b73ffffffffffffffffffffffffffffffffffffffff16610bdb611e14565b73ffffffffffffffffffffffffffffffffffffffff1614610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890614538565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b610c56612749565b73ffffffffffffffffffffffffffffffffffffffff16610c74611e14565b73ffffffffffffffffffffffffffffffffffffffff1614610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190614538565b60405180910390fd5b8060128190555050565b606060008054610ce390614979565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0f90614979565b8015610d5c5780601f10610d3157610100808354040283529160200191610d5c565b820191906000526020600020905b815481529060010190602001808311610d3f57829003601f168201915b5050505050905090565b6000610d7182612751565b610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790614518565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610df682611b0e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e906145b8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e86612749565b73ffffffffffffffffffffffffffffffffffffffff161480610eb55750610eb481610eaf612749565b612404565b5b610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb90614498565b60405180910390fd5b610efe83836127bd565b505050565b600d5481565b6000600880549050905090565b60105481565b610f2d610f27612749565b82612876565b610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f63906145f8565b60405180910390fd5b610f77838383612954565b505050565b600e5481565b6000610f8d83611c4e565b8210610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590614378565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b61104f612749565b73ffffffffffffffffffffffffffffffffffffffff1661106d611e14565b73ffffffffffffffffffffffffffffffffffffffff16146110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90614538565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611126612749565b73ffffffffffffffffffffffffffffffffffffffff16611144611e14565b73ffffffffffffffffffffffffffffffffffffffff161461119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190614538565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6111ce612749565b73ffffffffffffffffffffffffffffffffffffffff166111ec611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990614538565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112689061425d565b60006040518083038185875af1925050503d80600081146112a5576040519150601f19603f3d011682016040523d82523d6000602084013e6112aa565b606091505b50509050806112b857600080fd5b50565b60006112c5610f09565b9050601160009054906101000a900460ff1615611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90614338565b60405180910390fd5b6000821161135a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611351906145d8565b60405180910390fd5b60105482111561139f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139690614358565b60405180910390fd5b600f5482826113ae919061479c565b11156113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690614598565b60405180910390fd5b60125482826113fe919061479c565b1061140c5761140b61111e565b5b611414611e14565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115685760011515601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146115675760011515601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461154b5781600d546115049190614823565b341015611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90614478565b60405180910390fd5b611566565b81600e546115599190614823565b34101561156557600080fd5b5b5b5b6000600190505b82811161159e5761158b848284611586919061479c565b612bb0565b8080611596906149dc565b91505061156f565b50505050565b6115bf838383604051806020016040528060008152506121ae565b505050565b606060006115d183611c4e565b905060008167ffffffffffffffff8111156115ef576115ee614b41565b5b60405190808252806020026020018201604052801561161d5781602001602082028036833780820191505090505b50905060005b82811015611667576116358582610f82565b82828151811061164857611647614b12565b5b602002602001018181525050808061165f906149dc565b915050611623565b508092505050919050565b61167a612749565b73ffffffffffffffffffffffffffffffffffffffff16611698611e14565b73ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614538565b60405180910390fd5b80600d8190555050565b611700612749565b73ffffffffffffffffffffffffffffffffffffffff1661171e611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90614538565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006117d9610f09565b821061181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190614618565b60405180910390fd5b6008828154811061182e5761182d614b12565b5b90600052602060002001549050919050565b611848612749565b73ffffffffffffffffffffffffffffffffffffffff16611866611e14565b73ffffffffffffffffffffffffffffffffffffffff16146118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b390614538565b60405180910390fd5b600047905067016345785d8a000081101561190c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611903906143f8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611952573d6000803e3d6000fd5b505050565b61195f612749565b73ffffffffffffffffffffffffffffffffffffffff1661197d611e14565b73ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90614538565b60405180910390fd5b60005b6002811015611a61576001601460008484606481106119f8576119f7614b12565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a59906149dc565b9150506119d6565b5050565b611a6d612749565b73ffffffffffffffffffffffffffffffffffffffff16611a8b611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890614538565b60405180910390fd5b80600b9080519060200190611af792919061373f565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae906144d8565b60405180910390fd5b80915050919050565b600b8054611bcd90614979565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf990614979565b8015611c465780601f10611c1b57610100808354040283529160200191611c46565b820191906000526020600020905b815481529060010190602001808311611c2957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb6906144b8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d0e612749565b73ffffffffffffffffffffffffffffffffffffffff16611d2c611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614538565b60405180910390fd5b611d8c6000612bce565b565b611d96612749565b73ffffffffffffffffffffffffffffffffffffffff16611db4611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0190614538565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e46612749565b73ffffffffffffffffffffffffffffffffffffffff16611e64611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614538565b60405180910390fd5b80600e8190555050565b606060018054611ed390614979565b80601f0160208091040260200160405190810160405280929190818152602001828054611eff90614979565b8015611f4c5780601f10611f2157610100808354040283529160200191611f4c565b820191906000526020600020905b815481529060010190602001808311611f2f57829003601f168201915b5050505050905090565b611f5e612749565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc390614438565b60405180910390fd5b8060056000611fd9612749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612086612749565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120cb91906142fb565b60405180910390a35050565b6120df612749565b73ffffffffffffffffffffffffffffffffffffffff166120fd611e14565b73ffffffffffffffffffffffffffffffffffffffff1614612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90614538565b60405180910390fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121bf6121b9612749565b83612876565b6121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f5906145f8565b60405180910390fd5b61220a84848484612c94565b50505050565b600c805461221d90614979565b80601f016020809104026020016040519081016040528092919081815260200182805461224990614979565b80156122965780601f1061226b57610100808354040283529160200191612296565b820191906000526020600020905b81548152906001019060200180831161227957829003601f168201915b505050505081565b60606122a982612751565b6122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df90614578565b60405180910390fd5b60006122f2612cf0565b905060008151116123125760405180602001604052806000815250612340565b8061231c84612d82565b600c6040516020016123309392919061422c565b6040516020818303038152906040525b915050919050565b600f5481565b60136020528060005260406000206000915054906101000a900460ff1681565b612376612749565b73ffffffffffffffffffffffffffffffffffffffff16612394611e14565b73ffffffffffffffffffffffffffffffffffffffff16146123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e190614538565b60405180910390fd5b80600c908051906020019061240092919061373f565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124a0612749565b73ffffffffffffffffffffffffffffffffffffffff166124be611e14565b73ffffffffffffffffffffffffffffffffffffffff1614612514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250b90614538565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612577612749565b73ffffffffffffffffffffffffffffffffffffffff16612595611e14565b73ffffffffffffffffffffffffffffffffffffffff16146125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e290614538565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561265b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612652906143b8565b60405180910390fd5b61266481612bce565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061273257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612742575061274182612ee3565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661283083611b0e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061288182612751565b6128c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b790614458565b60405180910390fd5b60006128cb83611b0e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061293a57508373ffffffffffffffffffffffffffffffffffffffff1661292284610d66565b73ffffffffffffffffffffffffffffffffffffffff16145b8061294b575061294a8185612404565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661297482611b0e565b73ffffffffffffffffffffffffffffffffffffffff16146129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c190614558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3190614418565b60405180910390fd5b612a45838383612f4d565b612a506000826127bd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aa0919061487d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612af7919061479c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612bca828260405180602001604052806000815250613061565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c9f848484612954565b612cab848484846130bc565b612cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce190614398565b60405180910390fd5b50505050565b6060600b8054612cff90614979565b80601f0160208091040260200160405190810160405280929190818152602001828054612d2b90614979565b8015612d785780601f10612d4d57610100808354040283529160200191612d78565b820191906000526020600020905b815481529060010190602001808311612d5b57829003601f168201915b5050505050905090565b60606000821415612dca576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ede565b600082905060005b60008214612dfc578080612de5906149dc565b915050600a82612df591906147f2565b9150612dd2565b60008167ffffffffffffffff811115612e1857612e17614b41565b5b6040519080825280601f01601f191660200182016040528015612e4a5781602001600182028036833780820191505090505b5090505b60008514612ed757600182612e63919061487d565b9150600a85612e729190614a25565b6030612e7e919061479c565b60f81b818381518110612e9457612e93614b12565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ed091906147f2565b9450612e4e565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f58838383613253565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9b57612f9681613258565b612fda565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612fd957612fd883826132a1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561301d576130188161340e565b61305c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461305b5761305a82826134df565b5b5b505050565b61306b838361355e565b61307860008484846130bc565b6130b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ae90614398565b60405180910390fd5b505050565b60006130dd8473ffffffffffffffffffffffffffffffffffffffff1661372c565b15613246578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613106612749565b8786866040518563ffffffff1660e01b8152600401613128949392919061428d565b602060405180830381600087803b15801561314257600080fd5b505af192505050801561317357506040513d601f19601f820116820180604052508101906131709190613c4a565b60015b6131f6573d80600081146131a3576040519150601f19603f3d011682016040523d82523d6000602084013e6131a8565b606091505b506000815114156131ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e590614398565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061324b565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132ae84611c4e565b6132b8919061487d565b905060006007600084815260200190815260200160002054905081811461339d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613422919061487d565b905060006009600084815260200190815260200160002054905060006008838154811061345257613451614b12565b5b90600052602060002001549050806008838154811061347457613473614b12565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134c3576134c2614ae3565b5b6001900381819060005260206000200160009055905550505050565b60006134ea83611c4e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c5906144f8565b60405180910390fd5b6135d781612751565b15613617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360e906143d8565b60405180910390fd5b61362360008383612f4d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613673919061479c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461374b90614979565b90600052602060002090601f01602090048101928261376d57600085556137b4565b82601f1061378657805160ff19168380011785556137b4565b828001600101855582156137b4579182015b828111156137b3578251825591602001919060010190613798565b5b5090506137c191906137c5565b5090565b5b808211156137de5760008160009055506001016137c6565b5090565b60006137f56137f084614678565b614653565b9050808285602086028201111561380f5761380e614b75565b5b60005b8581101561383f578161382588826138cd565b845260208401935060208301925050600181019050613812565b5050509392505050565b600061385c6138578461469e565b614653565b90508281526020810184848401111561387857613877614b7a565b5b613883848285614937565b509392505050565b600061389e613899846146cf565b614653565b9050828152602081018484840111156138ba576138b9614b7a565b5b6138c5848285614937565b509392505050565b6000813590506138dc816151af565b92915050565b6000813590506138f1816151c6565b92915050565b600082601f83011261390c5761390b614b70565b5b60646139198482856137e2565b91505092915050565b600081359050613931816151dd565b92915050565b600081359050613946816151f4565b92915050565b60008151905061395b816151f4565b92915050565b600082601f83011261397657613975614b70565b5b8135613986848260208601613849565b91505092915050565b600082601f8301126139a4576139a3614b70565b5b81356139b484826020860161388b565b91505092915050565b6000813590506139cc8161520b565b92915050565b6000602082840312156139e8576139e7614b84565b5b60006139f6848285016138cd565b91505092915050565b600060208284031215613a1557613a14614b84565b5b6000613a23848285016138e2565b91505092915050565b60008060408385031215613a4357613a42614b84565b5b6000613a51858286016138cd565b9250506020613a62858286016138cd565b9150509250929050565b600080600060608486031215613a8557613a84614b84565b5b6000613a93868287016138cd565b9350506020613aa4868287016138cd565b9250506040613ab5868287016139bd565b9150509250925092565b60008060008060808587031215613ad957613ad8614b84565b5b6000613ae7878288016138cd565b9450506020613af8878288016138cd565b9350506040613b09878288016139bd565b925050606085013567ffffffffffffffff811115613b2a57613b29614b7f565b5b613b3687828801613961565b91505092959194509250565b60008060408385031215613b5957613b58614b84565b5b6000613b67858286016138cd565b9250506020613b7885828601613922565b9150509250929050565b60008060408385031215613b9957613b98614b84565b5b6000613ba7858286016138cd565b9250506020613bb8858286016139bd565b9150509250929050565b6000610c808284031215613bd957613bd8614b84565b5b6000613be7848285016138f7565b91505092915050565b600060208284031215613c0657613c05614b84565b5b6000613c1484828501613922565b91505092915050565b600060208284031215613c3357613c32614b84565b5b6000613c4184828501613937565b91505092915050565b600060208284031215613c6057613c5f614b84565b5b6000613c6e8482850161394c565b91505092915050565b600060208284031215613c8d57613c8c614b84565b5b600082013567ffffffffffffffff811115613cab57613caa614b7f565b5b613cb78482850161398f565b91505092915050565b600060208284031215613cd657613cd5614b84565b5b6000613ce4848285016139bd565b91505092915050565b6000613cf9838361420e565b60208301905092915050565b613d0e816148b1565b82525050565b6000613d1f82614725565b613d298185614753565b9350613d3483614700565b8060005b83811015613d65578151613d4c8882613ced565b9750613d5783614746565b925050600181019050613d38565b5085935050505092915050565b613d7b816148d5565b82525050565b6000613d8c82614730565b613d968185614764565b9350613da6818560208601614946565b613daf81614b89565b840191505092915050565b6000613dc58261473b565b613dcf8185614780565b9350613ddf818560208601614946565b613de881614b89565b840191505092915050565b6000613dfe8261473b565b613e088185614791565b9350613e18818560208601614946565b80840191505092915050565b60008154613e3181614979565b613e3b8186614791565b94506001821660008114613e565760018114613e6757613e9a565b60ff19831686528186019350613e9a565b613e7085614710565b60005b83811015613e9257815481890152600182019150602081019050613e73565b838801955050505b50505092915050565b6000613eb0601f83614780565b9150613ebb82614b9a565b602082019050919050565b6000613ed3601283614780565b9150613ede82614bc3565b602082019050919050565b6000613ef6602b83614780565b9150613f0182614bec565b604082019050919050565b6000613f19603283614780565b9150613f2482614c3b565b604082019050919050565b6000613f3c602683614780565b9150613f4782614c8a565b604082019050919050565b6000613f5f601c83614780565b9150613f6a82614cd9565b602082019050919050565b6000613f82601b83614780565b9150613f8d82614d02565b602082019050919050565b6000613fa5602483614780565b9150613fb082614d2b565b604082019050919050565b6000613fc8601983614780565b9150613fd382614d7a565b602082019050919050565b6000613feb602c83614780565b9150613ff682614da3565b604082019050919050565b600061400e602183614780565b915061401982614df2565b604082019050919050565b6000614031603883614780565b915061403c82614e41565b604082019050919050565b6000614054602a83614780565b915061405f82614e90565b604082019050919050565b6000614077602983614780565b915061408282614edf565b604082019050919050565b600061409a602083614780565b91506140a582614f2e565b602082019050919050565b60006140bd602c83614780565b91506140c882614f57565b604082019050919050565b60006140e0602083614780565b91506140eb82614fa6565b602082019050919050565b6000614103602983614780565b915061410e82614fcf565b604082019050919050565b6000614126602f83614780565b91506141318261501e565b604082019050919050565b6000614149601883614780565b91506141548261506d565b602082019050919050565b600061416c602183614780565b915061417782615096565b604082019050919050565b600061418f601683614780565b915061419a826150e5565b602082019050919050565b60006141b2600083614775565b91506141bd8261510e565b600082019050919050565b60006141d5603183614780565b91506141e082615111565b604082019050919050565b60006141f8602c83614780565b915061420382615160565b604082019050919050565b6142178161492d565b82525050565b6142268161492d565b82525050565b60006142388286613df3565b91506142448285613df3565b91506142508284613e24565b9150819050949350505050565b6000614268826141a5565b9150819050919050565b60006020820190506142876000830184613d05565b92915050565b60006080820190506142a26000830187613d05565b6142af6020830186613d05565b6142bc604083018561421d565b81810360608301526142ce8184613d81565b905095945050505050565b600060208201905081810360008301526142f38184613d14565b905092915050565b60006020820190506143106000830184613d72565b92915050565b600060208201905081810360008301526143308184613dba565b905092915050565b6000602082019050818103600083015261435181613ea3565b9050919050565b6000602082019050818103600083015261437181613ec6565b9050919050565b6000602082019050818103600083015261439181613ee9565b9050919050565b600060208201905081810360008301526143b181613f0c565b9050919050565b600060208201905081810360008301526143d181613f2f565b9050919050565b600060208201905081810360008301526143f181613f52565b9050919050565b6000602082019050818103600083015261441181613f75565b9050919050565b6000602082019050818103600083015261443181613f98565b9050919050565b6000602082019050818103600083015261445181613fbb565b9050919050565b6000602082019050818103600083015261447181613fde565b9050919050565b6000602082019050818103600083015261449181614001565b9050919050565b600060208201905081810360008301526144b181614024565b9050919050565b600060208201905081810360008301526144d181614047565b9050919050565b600060208201905081810360008301526144f18161406a565b9050919050565b600060208201905081810360008301526145118161408d565b9050919050565b60006020820190508181036000830152614531816140b0565b9050919050565b60006020820190508181036000830152614551816140d3565b9050919050565b60006020820190508181036000830152614571816140f6565b9050919050565b6000602082019050818103600083015261459181614119565b9050919050565b600060208201905081810360008301526145b18161413c565b9050919050565b600060208201905081810360008301526145d18161415f565b9050919050565b600060208201905081810360008301526145f181614182565b9050919050565b60006020820190508181036000830152614611816141c8565b9050919050565b60006020820190508181036000830152614631816141eb565b9050919050565b600060208201905061464d600083018461421d565b92915050565b600061465d61466e565b905061466982826149ab565b919050565b6000604051905090565b600067ffffffffffffffff82111561469357614692614b41565b5b602082029050919050565b600067ffffffffffffffff8211156146b9576146b8614b41565b5b6146c282614b89565b9050602081019050919050565b600067ffffffffffffffff8211156146ea576146e9614b41565b5b6146f382614b89565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147a78261492d565b91506147b28361492d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147e7576147e6614a56565b5b828201905092915050565b60006147fd8261492d565b91506148088361492d565b92508261481857614817614a85565b5b828204905092915050565b600061482e8261492d565b91506148398361492d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561487257614871614a56565b5b828202905092915050565b60006148888261492d565b91506148938361492d565b9250828210156148a6576148a5614a56565b5b828203905092915050565b60006148bc8261490d565b9050919050565b60006148ce8261490d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614964578082015181840152602081019050614949565b83811115614973576000848401525b50505050565b6000600282049050600182168061499157607f821691505b602082108114156149a5576149a4614ab4565b5b50919050565b6149b482614b89565b810181811067ffffffffffffffff821117156149d3576149d2614b41565b5b80604052505050565b60006149e78261492d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a1a57614a19614a56565b5b600182019050919050565b6000614a308261492d565b9150614a3b8361492d565b925082614a4b57614a4a614a85565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74204e465400600082015250565b7f416d6f756e7420746f6f20626967202e2e200000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f7567682045544820746f2077697468647261772e0000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e743a20636865636b20707269636560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f476f696e67206265796f6e6420737570706c79202e2e2e200000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e2774206d696e74207468697320616d6f756e7400000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6151b8816148b1565b81146151c357600080fd5b50565b6151cf816148c3565b81146151da57600080fd5b50565b6151e6816148d5565b81146151f157600080fd5b50565b6151fd816148e1565b811461520857600080fd5b50565b6152148161492d565b811461521f57600080fd5b5056fea26469706673582212204a8f623084e098b5bd1c03272bf6d3ecb6b10e45494da41f339e1fee466018f664736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001b436c756220313031204d656d626572204163636573732050617373000000000000000000000000000000000000000000000000000000000000000000000000034d415000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55764d386472434a376938654568677543486332696875366761396e59324361334767567a346959787034712f00000000000000000000
Deployed Bytecode
0x60806040526004361061027d5760003560e01c806351cff8d91161014f57806395d89b41116100c1578063d5abeb011161007a578063d5abeb0114610950578063d936547e1461097b578063da3ef23f146109b8578063e985e9c5146109e1578063ed931e1714610a1e578063f2fde38b14610a475761027d565b806395d89b4114610842578063a22cb4651461086d578063b2f3e85e14610896578063b88d4fde146108bf578063c6682862146108e8578063c87b56dd146109135761027d565b80636c0360eb116101135780636c0360eb1461074657806370a0823114610771578063715018a6146107ae5780637f00c7a6146107c55780638da5cb5b146107ee5780638fdcf942146108195761027d565b806351cff8d914610663578063546857c71461068c57806355f804b3146106b55780635c975abb146106de5780636352211e146107095761027d565b80632a23d07d116101f357806340c10f19116101ac57806340c10f191461055257806342842e0e1461056e578063438b63001461059757806344a0d68a146105d45780634a4c560d146105fd5780634f6ccce7146106265761027d565b80632a23d07d146104635780632f745c591461048e57806330b2264e146104cb57806330cc7ae01461050857806334918dfd146105315780633ccfd60b146105485761027d565b8063081812fc11610245578063081812fc14610353578063095ea7b31461039057806313faede6146103b957806318160ddd146103e4578063239c70ae1461040f57806323b872dd1461043a5761027d565b806301ffc9a71461028257806302207f29146102bf57806302329a29146102d65780630612bec8146102ff57806306fdde0314610328575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613c1d565b610a70565b6040516102b691906142fb565b60405180910390f35b3480156102cb57600080fd5b506102d4610aea565b005b3480156102e257600080fd5b506102fd60048036038101906102f89190613bf0565b610bb5565b005b34801561030b57600080fd5b5061032660048036038101906103219190613cc0565b610c4e565b005b34801561033457600080fd5b5061033d610cd4565b60405161034a9190614316565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190613cc0565b610d66565b6040516103879190614272565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190613b82565b610deb565b005b3480156103c557600080fd5b506103ce610f03565b6040516103db9190614638565b60405180910390f35b3480156103f057600080fd5b506103f9610f09565b6040516104069190614638565b60405180910390f35b34801561041b57600080fd5b50610424610f16565b6040516104319190614638565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613a6c565b610f1c565b005b34801561046f57600080fd5b50610478610f7c565b6040516104859190614638565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190613b82565b610f82565b6040516104c29190614638565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed91906139d2565b611027565b6040516104ff91906142fb565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a91906139d2565b611047565b005b34801561053d57600080fd5b5061054661111e565b005b6105506111c6565b005b61056c60048036038101906105679190613b82565b6112bb565b005b34801561057a57600080fd5b5061059560048036038101906105909190613a6c565b6115a4565b005b3480156105a357600080fd5b506105be60048036038101906105b991906139d2565b6115c4565b6040516105cb91906142d9565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613cc0565b611672565b005b34801561060957600080fd5b50610624600480360381019061061f91906139d2565b6116f8565b005b34801561063257600080fd5b5061064d60048036038101906106489190613cc0565b6117cf565b60405161065a9190614638565b60405180910390f35b34801561066f57600080fd5b5061068a600480360381019061068591906139ff565b611840565b005b34801561069857600080fd5b506106b360048036038101906106ae9190613bc2565b611957565b005b3480156106c157600080fd5b506106dc60048036038101906106d79190613c77565b611a65565b005b3480156106ea57600080fd5b506106f3611afb565b60405161070091906142fb565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190613cc0565b611b0e565b60405161073d9190614272565b60405180910390f35b34801561075257600080fd5b5061075b611bc0565b6040516107689190614316565b60405180910390f35b34801561077d57600080fd5b50610798600480360381019061079391906139d2565b611c4e565b6040516107a59190614638565b60405180910390f35b3480156107ba57600080fd5b506107c3611d06565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190613cc0565b611d8e565b005b3480156107fa57600080fd5b50610803611e14565b6040516108109190614272565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190613cc0565b611e3e565b005b34801561084e57600080fd5b50610857611ec4565b6040516108649190614316565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613b42565b611f56565b005b3480156108a257600080fd5b506108bd60048036038101906108b891906139d2565b6120d7565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190613abf565b6121ae565b005b3480156108f457600080fd5b506108fd612210565b60405161090a9190614316565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613cc0565b61229e565b6040516109479190614316565b60405180910390f35b34801561095c57600080fd5b50610965612348565b6040516109729190614638565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d91906139d2565b61234e565b6040516109af91906142fb565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da9190613c77565b61236e565b005b3480156109ed57600080fd5b50610a086004803603810190610a039190613a2c565b612404565b604051610a1591906142fb565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a4091906139d2565b612498565b005b348015610a5357600080fd5b50610a6e6004803603810190610a6991906139d2565b61256f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ae35750610ae282612667565b5b9050919050565b610af2612749565b73ffffffffffffffffffffffffffffffffffffffff16610b10611e14565b73ffffffffffffffffffffffffffffffffffffffff1614610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90614538565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bb1573d6000803e3d6000fd5b5050565b610bbd612749565b73ffffffffffffffffffffffffffffffffffffffff16610bdb611e14565b73ffffffffffffffffffffffffffffffffffffffff1614610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890614538565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b610c56612749565b73ffffffffffffffffffffffffffffffffffffffff16610c74611e14565b73ffffffffffffffffffffffffffffffffffffffff1614610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190614538565b60405180910390fd5b8060128190555050565b606060008054610ce390614979565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0f90614979565b8015610d5c5780601f10610d3157610100808354040283529160200191610d5c565b820191906000526020600020905b815481529060010190602001808311610d3f57829003601f168201915b5050505050905090565b6000610d7182612751565b610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790614518565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610df682611b0e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e906145b8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e86612749565b73ffffffffffffffffffffffffffffffffffffffff161480610eb55750610eb481610eaf612749565b612404565b5b610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb90614498565b60405180910390fd5b610efe83836127bd565b505050565b600d5481565b6000600880549050905090565b60105481565b610f2d610f27612749565b82612876565b610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f63906145f8565b60405180910390fd5b610f77838383612954565b505050565b600e5481565b6000610f8d83611c4e565b8210610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590614378565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b61104f612749565b73ffffffffffffffffffffffffffffffffffffffff1661106d611e14565b73ffffffffffffffffffffffffffffffffffffffff16146110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90614538565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611126612749565b73ffffffffffffffffffffffffffffffffffffffff16611144611e14565b73ffffffffffffffffffffffffffffffffffffffff161461119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190614538565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6111ce612749565b73ffffffffffffffffffffffffffffffffffffffff166111ec611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990614538565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112689061425d565b60006040518083038185875af1925050503d80600081146112a5576040519150601f19603f3d011682016040523d82523d6000602084013e6112aa565b606091505b50509050806112b857600080fd5b50565b60006112c5610f09565b9050601160009054906101000a900460ff1615611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90614338565b60405180910390fd5b6000821161135a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611351906145d8565b60405180910390fd5b60105482111561139f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139690614358565b60405180910390fd5b600f5482826113ae919061479c565b11156113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690614598565b60405180910390fd5b60125482826113fe919061479c565b1061140c5761140b61111e565b5b611414611e14565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115685760011515601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146115675760011515601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461154b5781600d546115049190614823565b341015611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90614478565b60405180910390fd5b611566565b81600e546115599190614823565b34101561156557600080fd5b5b5b5b6000600190505b82811161159e5761158b848284611586919061479c565b612bb0565b8080611596906149dc565b91505061156f565b50505050565b6115bf838383604051806020016040528060008152506121ae565b505050565b606060006115d183611c4e565b905060008167ffffffffffffffff8111156115ef576115ee614b41565b5b60405190808252806020026020018201604052801561161d5781602001602082028036833780820191505090505b50905060005b82811015611667576116358582610f82565b82828151811061164857611647614b12565b5b602002602001018181525050808061165f906149dc565b915050611623565b508092505050919050565b61167a612749565b73ffffffffffffffffffffffffffffffffffffffff16611698611e14565b73ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614538565b60405180910390fd5b80600d8190555050565b611700612749565b73ffffffffffffffffffffffffffffffffffffffff1661171e611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90614538565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006117d9610f09565b821061181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190614618565b60405180910390fd5b6008828154811061182e5761182d614b12565b5b90600052602060002001549050919050565b611848612749565b73ffffffffffffffffffffffffffffffffffffffff16611866611e14565b73ffffffffffffffffffffffffffffffffffffffff16146118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b390614538565b60405180910390fd5b600047905067016345785d8a000081101561190c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611903906143f8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611952573d6000803e3d6000fd5b505050565b61195f612749565b73ffffffffffffffffffffffffffffffffffffffff1661197d611e14565b73ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90614538565b60405180910390fd5b60005b6002811015611a61576001601460008484606481106119f8576119f7614b12565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a59906149dc565b9150506119d6565b5050565b611a6d612749565b73ffffffffffffffffffffffffffffffffffffffff16611a8b611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890614538565b60405180910390fd5b80600b9080519060200190611af792919061373f565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae906144d8565b60405180910390fd5b80915050919050565b600b8054611bcd90614979565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf990614979565b8015611c465780601f10611c1b57610100808354040283529160200191611c46565b820191906000526020600020905b815481529060010190602001808311611c2957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb6906144b8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d0e612749565b73ffffffffffffffffffffffffffffffffffffffff16611d2c611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614538565b60405180910390fd5b611d8c6000612bce565b565b611d96612749565b73ffffffffffffffffffffffffffffffffffffffff16611db4611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0190614538565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e46612749565b73ffffffffffffffffffffffffffffffffffffffff16611e64611e14565b73ffffffffffffffffffffffffffffffffffffffff1614611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614538565b60405180910390fd5b80600e8190555050565b606060018054611ed390614979565b80601f0160208091040260200160405190810160405280929190818152602001828054611eff90614979565b8015611f4c5780601f10611f2157610100808354040283529160200191611f4c565b820191906000526020600020905b815481529060010190602001808311611f2f57829003601f168201915b5050505050905090565b611f5e612749565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc390614438565b60405180910390fd5b8060056000611fd9612749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612086612749565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120cb91906142fb565b60405180910390a35050565b6120df612749565b73ffffffffffffffffffffffffffffffffffffffff166120fd611e14565b73ffffffffffffffffffffffffffffffffffffffff1614612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90614538565b60405180910390fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121bf6121b9612749565b83612876565b6121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f5906145f8565b60405180910390fd5b61220a84848484612c94565b50505050565b600c805461221d90614979565b80601f016020809104026020016040519081016040528092919081815260200182805461224990614979565b80156122965780601f1061226b57610100808354040283529160200191612296565b820191906000526020600020905b81548152906001019060200180831161227957829003601f168201915b505050505081565b60606122a982612751565b6122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df90614578565b60405180910390fd5b60006122f2612cf0565b905060008151116123125760405180602001604052806000815250612340565b8061231c84612d82565b600c6040516020016123309392919061422c565b6040516020818303038152906040525b915050919050565b600f5481565b60136020528060005260406000206000915054906101000a900460ff1681565b612376612749565b73ffffffffffffffffffffffffffffffffffffffff16612394611e14565b73ffffffffffffffffffffffffffffffffffffffff16146123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e190614538565b60405180910390fd5b80600c908051906020019061240092919061373f565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124a0612749565b73ffffffffffffffffffffffffffffffffffffffff166124be611e14565b73ffffffffffffffffffffffffffffffffffffffff1614612514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250b90614538565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612577612749565b73ffffffffffffffffffffffffffffffffffffffff16612595611e14565b73ffffffffffffffffffffffffffffffffffffffff16146125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e290614538565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561265b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612652906143b8565b60405180910390fd5b61266481612bce565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061273257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612742575061274182612ee3565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661283083611b0e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061288182612751565b6128c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b790614458565b60405180910390fd5b60006128cb83611b0e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061293a57508373ffffffffffffffffffffffffffffffffffffffff1661292284610d66565b73ffffffffffffffffffffffffffffffffffffffff16145b8061294b575061294a8185612404565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661297482611b0e565b73ffffffffffffffffffffffffffffffffffffffff16146129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c190614558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3190614418565b60405180910390fd5b612a45838383612f4d565b612a506000826127bd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aa0919061487d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612af7919061479c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612bca828260405180602001604052806000815250613061565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c9f848484612954565b612cab848484846130bc565b612cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce190614398565b60405180910390fd5b50505050565b6060600b8054612cff90614979565b80601f0160208091040260200160405190810160405280929190818152602001828054612d2b90614979565b8015612d785780601f10612d4d57610100808354040283529160200191612d78565b820191906000526020600020905b815481529060010190602001808311612d5b57829003601f168201915b5050505050905090565b60606000821415612dca576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ede565b600082905060005b60008214612dfc578080612de5906149dc565b915050600a82612df591906147f2565b9150612dd2565b60008167ffffffffffffffff811115612e1857612e17614b41565b5b6040519080825280601f01601f191660200182016040528015612e4a5781602001600182028036833780820191505090505b5090505b60008514612ed757600182612e63919061487d565b9150600a85612e729190614a25565b6030612e7e919061479c565b60f81b818381518110612e9457612e93614b12565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ed091906147f2565b9450612e4e565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f58838383613253565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9b57612f9681613258565b612fda565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612fd957612fd883826132a1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561301d576130188161340e565b61305c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461305b5761305a82826134df565b5b5b505050565b61306b838361355e565b61307860008484846130bc565b6130b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ae90614398565b60405180910390fd5b505050565b60006130dd8473ffffffffffffffffffffffffffffffffffffffff1661372c565b15613246578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613106612749565b8786866040518563ffffffff1660e01b8152600401613128949392919061428d565b602060405180830381600087803b15801561314257600080fd5b505af192505050801561317357506040513d601f19601f820116820180604052508101906131709190613c4a565b60015b6131f6573d80600081146131a3576040519150601f19603f3d011682016040523d82523d6000602084013e6131a8565b606091505b506000815114156131ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e590614398565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061324b565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132ae84611c4e565b6132b8919061487d565b905060006007600084815260200190815260200160002054905081811461339d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613422919061487d565b905060006009600084815260200190815260200160002054905060006008838154811061345257613451614b12565b5b90600052602060002001549050806008838154811061347457613473614b12565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134c3576134c2614ae3565b5b6001900381819060005260206000200160009055905550505050565b60006134ea83611c4e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c5906144f8565b60405180910390fd5b6135d781612751565b15613617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360e906143d8565b60405180910390fd5b61362360008383612f4d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613673919061479c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461374b90614979565b90600052602060002090601f01602090048101928261376d57600085556137b4565b82601f1061378657805160ff19168380011785556137b4565b828001600101855582156137b4579182015b828111156137b3578251825591602001919060010190613798565b5b5090506137c191906137c5565b5090565b5b808211156137de5760008160009055506001016137c6565b5090565b60006137f56137f084614678565b614653565b9050808285602086028201111561380f5761380e614b75565b5b60005b8581101561383f578161382588826138cd565b845260208401935060208301925050600181019050613812565b5050509392505050565b600061385c6138578461469e565b614653565b90508281526020810184848401111561387857613877614b7a565b5b613883848285614937565b509392505050565b600061389e613899846146cf565b614653565b9050828152602081018484840111156138ba576138b9614b7a565b5b6138c5848285614937565b509392505050565b6000813590506138dc816151af565b92915050565b6000813590506138f1816151c6565b92915050565b600082601f83011261390c5761390b614b70565b5b60646139198482856137e2565b91505092915050565b600081359050613931816151dd565b92915050565b600081359050613946816151f4565b92915050565b60008151905061395b816151f4565b92915050565b600082601f83011261397657613975614b70565b5b8135613986848260208601613849565b91505092915050565b600082601f8301126139a4576139a3614b70565b5b81356139b484826020860161388b565b91505092915050565b6000813590506139cc8161520b565b92915050565b6000602082840312156139e8576139e7614b84565b5b60006139f6848285016138cd565b91505092915050565b600060208284031215613a1557613a14614b84565b5b6000613a23848285016138e2565b91505092915050565b60008060408385031215613a4357613a42614b84565b5b6000613a51858286016138cd565b9250506020613a62858286016138cd565b9150509250929050565b600080600060608486031215613a8557613a84614b84565b5b6000613a93868287016138cd565b9350506020613aa4868287016138cd565b9250506040613ab5868287016139bd565b9150509250925092565b60008060008060808587031215613ad957613ad8614b84565b5b6000613ae7878288016138cd565b9450506020613af8878288016138cd565b9350506040613b09878288016139bd565b925050606085013567ffffffffffffffff811115613b2a57613b29614b7f565b5b613b3687828801613961565b91505092959194509250565b60008060408385031215613b5957613b58614b84565b5b6000613b67858286016138cd565b9250506020613b7885828601613922565b9150509250929050565b60008060408385031215613b9957613b98614b84565b5b6000613ba7858286016138cd565b9250506020613bb8858286016139bd565b9150509250929050565b6000610c808284031215613bd957613bd8614b84565b5b6000613be7848285016138f7565b91505092915050565b600060208284031215613c0657613c05614b84565b5b6000613c1484828501613922565b91505092915050565b600060208284031215613c3357613c32614b84565b5b6000613c4184828501613937565b91505092915050565b600060208284031215613c6057613c5f614b84565b5b6000613c6e8482850161394c565b91505092915050565b600060208284031215613c8d57613c8c614b84565b5b600082013567ffffffffffffffff811115613cab57613caa614b7f565b5b613cb78482850161398f565b91505092915050565b600060208284031215613cd657613cd5614b84565b5b6000613ce4848285016139bd565b91505092915050565b6000613cf9838361420e565b60208301905092915050565b613d0e816148b1565b82525050565b6000613d1f82614725565b613d298185614753565b9350613d3483614700565b8060005b83811015613d65578151613d4c8882613ced565b9750613d5783614746565b925050600181019050613d38565b5085935050505092915050565b613d7b816148d5565b82525050565b6000613d8c82614730565b613d968185614764565b9350613da6818560208601614946565b613daf81614b89565b840191505092915050565b6000613dc58261473b565b613dcf8185614780565b9350613ddf818560208601614946565b613de881614b89565b840191505092915050565b6000613dfe8261473b565b613e088185614791565b9350613e18818560208601614946565b80840191505092915050565b60008154613e3181614979565b613e3b8186614791565b94506001821660008114613e565760018114613e6757613e9a565b60ff19831686528186019350613e9a565b613e7085614710565b60005b83811015613e9257815481890152600182019150602081019050613e73565b838801955050505b50505092915050565b6000613eb0601f83614780565b9150613ebb82614b9a565b602082019050919050565b6000613ed3601283614780565b9150613ede82614bc3565b602082019050919050565b6000613ef6602b83614780565b9150613f0182614bec565b604082019050919050565b6000613f19603283614780565b9150613f2482614c3b565b604082019050919050565b6000613f3c602683614780565b9150613f4782614c8a565b604082019050919050565b6000613f5f601c83614780565b9150613f6a82614cd9565b602082019050919050565b6000613f82601b83614780565b9150613f8d82614d02565b602082019050919050565b6000613fa5602483614780565b9150613fb082614d2b565b604082019050919050565b6000613fc8601983614780565b9150613fd382614d7a565b602082019050919050565b6000613feb602c83614780565b9150613ff682614da3565b604082019050919050565b600061400e602183614780565b915061401982614df2565b604082019050919050565b6000614031603883614780565b915061403c82614e41565b604082019050919050565b6000614054602a83614780565b915061405f82614e90565b604082019050919050565b6000614077602983614780565b915061408282614edf565b604082019050919050565b600061409a602083614780565b91506140a582614f2e565b602082019050919050565b60006140bd602c83614780565b91506140c882614f57565b604082019050919050565b60006140e0602083614780565b91506140eb82614fa6565b602082019050919050565b6000614103602983614780565b915061410e82614fcf565b604082019050919050565b6000614126602f83614780565b91506141318261501e565b604082019050919050565b6000614149601883614780565b91506141548261506d565b602082019050919050565b600061416c602183614780565b915061417782615096565b604082019050919050565b600061418f601683614780565b915061419a826150e5565b602082019050919050565b60006141b2600083614775565b91506141bd8261510e565b600082019050919050565b60006141d5603183614780565b91506141e082615111565b604082019050919050565b60006141f8602c83614780565b915061420382615160565b604082019050919050565b6142178161492d565b82525050565b6142268161492d565b82525050565b60006142388286613df3565b91506142448285613df3565b91506142508284613e24565b9150819050949350505050565b6000614268826141a5565b9150819050919050565b60006020820190506142876000830184613d05565b92915050565b60006080820190506142a26000830187613d05565b6142af6020830186613d05565b6142bc604083018561421d565b81810360608301526142ce8184613d81565b905095945050505050565b600060208201905081810360008301526142f38184613d14565b905092915050565b60006020820190506143106000830184613d72565b92915050565b600060208201905081810360008301526143308184613dba565b905092915050565b6000602082019050818103600083015261435181613ea3565b9050919050565b6000602082019050818103600083015261437181613ec6565b9050919050565b6000602082019050818103600083015261439181613ee9565b9050919050565b600060208201905081810360008301526143b181613f0c565b9050919050565b600060208201905081810360008301526143d181613f2f565b9050919050565b600060208201905081810360008301526143f181613f52565b9050919050565b6000602082019050818103600083015261441181613f75565b9050919050565b6000602082019050818103600083015261443181613f98565b9050919050565b6000602082019050818103600083015261445181613fbb565b9050919050565b6000602082019050818103600083015261447181613fde565b9050919050565b6000602082019050818103600083015261449181614001565b9050919050565b600060208201905081810360008301526144b181614024565b9050919050565b600060208201905081810360008301526144d181614047565b9050919050565b600060208201905081810360008301526144f18161406a565b9050919050565b600060208201905081810360008301526145118161408d565b9050919050565b60006020820190508181036000830152614531816140b0565b9050919050565b60006020820190508181036000830152614551816140d3565b9050919050565b60006020820190508181036000830152614571816140f6565b9050919050565b6000602082019050818103600083015261459181614119565b9050919050565b600060208201905081810360008301526145b18161413c565b9050919050565b600060208201905081810360008301526145d18161415f565b9050919050565b600060208201905081810360008301526145f181614182565b9050919050565b60006020820190508181036000830152614611816141c8565b9050919050565b60006020820190508181036000830152614631816141eb565b9050919050565b600060208201905061464d600083018461421d565b92915050565b600061465d61466e565b905061466982826149ab565b919050565b6000604051905090565b600067ffffffffffffffff82111561469357614692614b41565b5b602082029050919050565b600067ffffffffffffffff8211156146b9576146b8614b41565b5b6146c282614b89565b9050602081019050919050565b600067ffffffffffffffff8211156146ea576146e9614b41565b5b6146f382614b89565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147a78261492d565b91506147b28361492d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147e7576147e6614a56565b5b828201905092915050565b60006147fd8261492d565b91506148088361492d565b92508261481857614817614a85565b5b828204905092915050565b600061482e8261492d565b91506148398361492d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561487257614871614a56565b5b828202905092915050565b60006148888261492d565b91506148938361492d565b9250828210156148a6576148a5614a56565b5b828203905092915050565b60006148bc8261490d565b9050919050565b60006148ce8261490d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614964578082015181840152602081019050614949565b83811115614973576000848401525b50505050565b6000600282049050600182168061499157607f821691505b602082108114156149a5576149a4614ab4565b5b50919050565b6149b482614b89565b810181811067ffffffffffffffff821117156149d3576149d2614b41565b5b80604052505050565b60006149e78261492d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a1a57614a19614a56565b5b600182019050919050565b6000614a308261492d565b9150614a3b8361492d565b925082614a4b57614a4a614a85565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74204e465400600082015250565b7f416d6f756e7420746f6f20626967202e2e200000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f7567682045544820746f2077697468647261772e0000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e743a20636865636b20707269636560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f476f696e67206265796f6e6420737570706c79202e2e2e200000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e2774206d696e74207468697320616d6f756e7400000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6151b8816148b1565b81146151c357600080fd5b50565b6151cf816148c3565b81146151da57600080fd5b50565b6151e6816148d5565b81146151f157600080fd5b50565b6151fd816148e1565b811461520857600080fd5b50565b6152148161492d565b811461521f57600080fd5b5056fea26469706673582212204a8f623084e098b5bd1c03272bf6d3ecb6b10e45494da41f339e1fee466018f664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001b436c756220313031204d656d626572204163636573732050617373000000000000000000000000000000000000000000000000000000000000000000000000034d415000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55764d386472434a376938654568677543486332696875366761396e59324361334767567a346959787034712f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Club 101 Member Access Pass
Arg [1] : _symbol (string): MAP
Arg [2] : _initBaseURI (string): ipfs://QmUvM8drCJ7i8eEhguCHc2ihu6ga9nY2Ca3GgVz4iYxp4q/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [4] : 436c756220313031204d656d6265722041636365737320506173730000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4d41500000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d55764d386472434a376938654568677543486332696875
Arg [9] : 366761396e59324361334767567a346959787034712f00000000000000000000
Deployed Bytecode Sourcemap
45057:5104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38553:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49775:148;;;;;;;;;;;;;:::i;:::-;;48751:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48838:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25723:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27416:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26939:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45219:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39356:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45346:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28475:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45261:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38937:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45507:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49044:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48157:77;;;;;;;;;;;;;:::i;:::-;;49577:192;;;:::i;:::-;;45935:1054;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28922:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46997:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48063:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48937:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39546:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49929:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49269:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48480:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45386:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25330:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45147:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24973:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4573:94;;;;;;;;;;;;;:::i;:::-;;48350:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3922:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48242:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25892:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27796:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49158:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29178:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45175:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47395:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45307:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45457:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48592:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28194:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49459:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4822:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38553:300;38700:4;38757:35;38742:50;;;:11;:50;;;;:103;;;;38809:36;38833:11;38809:23;:36::i;:::-;38742:103;38722:123;;38553:300;;;:::o;49775:148::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49828:15:::1;49846:21;49828:39;;49886:10;49878:28;;:37;49907:7;49878:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49817:106;49775:148::o:0;48751:79::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48816:6:::1;48807;;:15;;;;;;;;;;;;;;;;;;48751:79:::0;:::o;48838:91::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48914:7:::1;48903:8;:18;;;;48838:91:::0;:::o;25723:100::-;25777:13;25810:5;25803:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25723:100;:::o;27416:308::-;27537:7;27584:16;27592:7;27584;:16::i;:::-;27562:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27692:15;:24;27708:7;27692:24;;;;;;;;;;;;;;;;;;;;;27685:31;;27416:308;;;:::o;26939:411::-;27020:13;27036:23;27051:7;27036:14;:23::i;:::-;27020:39;;27084:5;27078:11;;:2;:11;;;;27070:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27178:5;27162:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27187:37;27204:5;27211:12;:10;:12::i;:::-;27187:16;:37::i;:::-;27162:62;27140:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27321:21;27330:2;27334:7;27321:8;:21::i;:::-;27009:341;26939:411;;:::o;45219:35::-;;;;:::o;39356:113::-;39417:7;39444:10;:17;;;;39437:24;;39356:113;:::o;45346:33::-;;;;:::o;28475:376::-;28684:41;28703:12;:10;:12::i;:::-;28717:7;28684:18;:41::i;:::-;28662:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28815:28;28825:4;28831:2;28835:7;28815:9;:28::i;:::-;28475:376;;;:::o;45261:39::-;;;;:::o;38937:343::-;39079:7;39134:23;39151:5;39134:16;:23::i;:::-;39126:5;:31;39104:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;39246:12;:19;39259:5;39246:19;;;;;;;;;;;;;;;:26;39266:5;39246:26;;;;;;;;;;;;39239:33;;38937:343;;;;:::o;45507:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;49044:106::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49137:5:::1;49116:11;:18;49128:5;49116:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;49044:106:::0;:::o;48157:77::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48220:6:::1;;;;;;;;;;;48219:7;48210:6;;:16;;;;;;;;;;;;;;;;;;48157:77::o:0;49577:192::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49634:12:::1;49660:10;49652:24;;49698:21;49652:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49633:101;;;49753:7;49745:16;;;::::0;::::1;;49622:147;49577:192::o:0;45935:1054::-;46009:14;46026:13;:11;:13::i;:::-;46009:30;;46059:6;;;;;;;;;;;46058:7;46050:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;46134:1;46120:11;:15;46112:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;46196:13;;46181:11;:28;;46173:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46276:9;;46261:11;46252:6;:20;;;;:::i;:::-;:33;;46244:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46352:8;;46337:11;46328:6;:20;;;;:::i;:::-;:32;46325:78;;46376:15;:13;:15::i;:::-;46325:78;46431:7;:5;:7::i;:::-;46417:21;;:10;:21;;;46413:449;;46486:4;46459:31;;:11;:23;46471:10;46459:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;46455:396;;46545:4;46515:34;;:14;:26;46530:10;46515:26;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;46511:325;;46640:11;46633:4;;:18;;;;:::i;:::-;46620:9;:31;;46612:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;46511:325;;;46804:11;46790;;:25;;;;:::i;:::-;46777:9;:38;;46769:47;;;;;;46511:325;46455:396;46413:449;46879:9;46891:1;46879:13;;46874:108;46899:11;46894:1;:16;46874:108;;46932:26;46942:3;46956:1;46947:6;:10;;;;:::i;:::-;46932:9;:26::i;:::-;46912:3;;;;;:::i;:::-;;;;46874:108;;;;45998:991;45935:1054;;:::o;28922:185::-;29060:39;29077:4;29083:2;29087:7;29060:39;;;;;;;;;;;;:16;:39::i;:::-;28922:185;;;:::o;46997:390::-;47084:16;47118:23;47144:17;47154:6;47144:9;:17::i;:::-;47118:43;;47172:25;47214:15;47200:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47172:58;;47246:9;47241:113;47261:15;47257:1;:19;47241:113;;;47312:30;47332:6;47340:1;47312:19;:30::i;:::-;47298:8;47307:1;47298:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47278:3;;;;;:::i;:::-;;;;47241:113;;;;47371:8;47364:15;;;;46997:390;;;:::o;48063:86::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48133:8:::1;48126:4;:15;;;;48063:86:::0;:::o;48937:99::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49024:4:::1;49003:11;:18;49015:5;49003:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;48937:99:::0;:::o;39546:320::-;39666:7;39721:30;:28;:30::i;:::-;39713:5;:38;39691:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;39841:10;39852:5;39841:17;;;;;;;;:::i;:::-;;;;;;;;;;39834:24;;39546:320;;;:::o;49929:229::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50002:15:::1;50020:21;50002:39;;50071:9;50060:7;:20;;50052:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;50123:9;:18;;:27;50142:7;50123:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49991:167;49929:229:::0;:::o;49269:182::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49358:9:::1;49353:91;49377:1;49373;:5;49353:91;;;49428:4;49400:14;:25;49415:6;49422:1;49415:9;;;;;;;:::i;:::-;;;;;;49400:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;49380:3;;;;;:::i;:::-;;;;49353:91;;;;49269:182:::0;:::o;48480:104::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48565:11:::1;48555:7;:21;;;;;;;;;;;;:::i;:::-;;48480:104:::0;:::o;45386:26::-;;;;;;;;;;;;;:::o;25330:326::-;25447:7;25472:13;25488:7;:16;25496:7;25488:16;;;;;;;;;;;;;;;;;;;;;25472:32;;25554:1;25537:19;;:5;:19;;;;25515:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25643:5;25636:12;;;25330:326;;;:::o;45147:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24973:295::-;25090:7;25154:1;25137:19;;:5;:19;;;;25115:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25244:9;:16;25254:5;25244:16;;;;;;;;;;;;;;;;25237:23;;24973:295;;;:::o;4573:94::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4638:21:::1;4656:1;4638:9;:21::i;:::-;4573:94::o:0;48350:122::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48447:17:::1;48431:13;:33;;;;48350:122:::0;:::o;3922:87::-;3968:7;3995:6;;;;;;;;;;;3988:13;;3922:87;:::o;48242:100::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48326:8:::1;48312:11;:22;;;;48242:100:::0;:::o;25892:104::-;25948:13;25981:7;25974:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25892:104;:::o;27796:327::-;27943:12;:10;:12::i;:::-;27931:24;;:8;:24;;;;27923:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28043:8;27998:18;:32;28017:12;:10;:12::i;:::-;27998:32;;;;;;;;;;;;;;;:42;28031:8;27998:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28096:8;28067:48;;28082:12;:10;:12::i;:::-;28067:48;;;28106:8;28067:48;;;;;;:::i;:::-;;;;;;;;27796:327;;:::o;49158:103::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49249:4:::1;49225:14;:21;49240:5;49225:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;49158:103:::0;:::o;29178:365::-;29367:41;29386:12;:10;:12::i;:::-;29400:7;29367:18;:41::i;:::-;29345:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29496:39;29510:4;29516:2;29520:7;29529:5;29496:13;:39::i;:::-;29178:365;;;;:::o;45175:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47395:642::-;47513:13;47566:16;47574:7;47566;:16::i;:::-;47544:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;47670:28;47701:10;:8;:10::i;:::-;47670:41;;47773:1;47748:14;47742:28;:32;:287;;;;;;;;;;;;;;;;;47866:14;47907:18;:7;:16;:18::i;:::-;47952:13;47823:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47742:287;47722:307;;;47395:642;;;:::o;45307:32::-;;;;:::o;45457:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;48592:151::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48718:17:::1;48702:13;:33;;;;;;;;;;;;:::i;:::-;;48592:151:::0;:::o;28194:214::-;28336:4;28365:18;:25;28384:5;28365:25;;;;;;;;;;;;;;;:35;28391:8;28365:35;;;;;;;;;;;;;;;;;;;;;;;;;28358:42;;28194:214;;;;:::o;49459:107::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49553:5:::1;49529:14;:21;49544:5;49529:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;49459:107:::0;:::o;4822:229::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4945:1:::1;4925:22;;:8;:22;;;;4903:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5024:19;5034:8;5024:9;:19::i;:::-;4822:229:::0;:::o;24554:355::-;24701:4;24758:25;24743:40;;;:11;:40;;;;:105;;;;24815:33;24800:48;;;:11;:48;;;;24743:105;:158;;;;24865:36;24889:11;24865:23;:36::i;:::-;24743:158;24723:178;;24554:355;;;:::o;2699:98::-;2752:7;2779:10;2772:17;;2699:98;:::o;31090:127::-;31155:4;31207:1;31179:30;;:7;:16;31187:7;31179:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31172:37;;31090:127;;;:::o;35213:174::-;35315:2;35288:15;:24;35304:7;35288:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35371:7;35367:2;35333:46;;35342:23;35357:7;35342:14;:23::i;:::-;35333:46;;;;;;;;;;;;35213:174;;:::o;31384:452::-;31513:4;31557:16;31565:7;31557;:16::i;:::-;31535:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31656:13;31672:23;31687:7;31672:14;:23::i;:::-;31656:39;;31725:5;31714:16;;:7;:16;;;:64;;;;31771:7;31747:31;;:20;31759:7;31747:11;:20::i;:::-;:31;;;31714:64;:113;;;;31795:32;31812:5;31819:7;31795:16;:32::i;:::-;31714:113;31706:122;;;31384:452;;;;:::o;34480:615::-;34653:4;34626:31;;:23;34641:7;34626:14;:23::i;:::-;:31;;;34604:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;34759:1;34745:16;;:2;:16;;;;34737:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34815:39;34836:4;34842:2;34846:7;34815:20;:39::i;:::-;34919:29;34936:1;34940:7;34919:8;:29::i;:::-;34980:1;34961:9;:15;34971:4;34961:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35009:1;34992:9;:13;35002:2;34992:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35040:2;35021:7;:16;35029:7;35021:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35079:7;35075:2;35060:27;;35069:4;35060:27;;;;;;;;;;;;34480:615;;;:::o;32178:110::-;32254:26;32264:2;32268:7;32254:26;;;;;;;;;;;;:9;:26::i;:::-;32178:110;;:::o;5059:173::-;5115:16;5134:6;;;;;;;;;;;5115:25;;5160:8;5151:6;;:17;;;;;;;;;;;;;;;;;;5215:8;5184:40;;5205:8;5184:40;;;;;;;;;;;;5104:128;5059:173;:::o;30425:352::-;30582:28;30592:4;30598:2;30602:7;30582:9;:28::i;:::-;30643:48;30666:4;30672:2;30676:7;30685:5;30643:22;:48::i;:::-;30621:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;30425:352;;;;:::o;45804:108::-;45864:13;45897:7;45890:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45804:108;:::o;297:723::-;353:13;583:1;574:5;:10;570:53;;;601:10;;;;;;;;;;;;;;;;;;;;;570:53;633:12;648:5;633:20;;664:14;689:78;704:1;696:4;:9;689:78;;722:8;;;;;:::i;:::-;;;;753:2;745:10;;;;;:::i;:::-;;;689:78;;;777:19;809:6;799:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;777:39;;827:154;843:1;834:5;:10;827:154;;871:1;861:11;;;;;:::i;:::-;;;938:2;930:5;:10;;;;:::i;:::-;917:2;:24;;;;:::i;:::-;904:39;;887:6;894;887:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;967:2;958:11;;;;;:::i;:::-;;;827:154;;;1005:6;991:21;;;;;297:723;;;;:::o;16356:207::-;16486:4;16530:25;16515:40;;;:11;:40;;;;16508:47;;16356:207;;;:::o;40479:589::-;40623:45;40650:4;40656:2;40660:7;40623:26;:45::i;:::-;40701:1;40685:18;;:4;:18;;;40681:187;;;40720:40;40752:7;40720:31;:40::i;:::-;40681:187;;;40790:2;40782:10;;:4;:10;;;40778:90;;40809:47;40842:4;40848:7;40809:32;:47::i;:::-;40778:90;40681:187;40896:1;40882:16;;:2;:16;;;40878:183;;;40915:45;40952:7;40915:36;:45::i;:::-;40878:183;;;40988:4;40982:10;;:2;:10;;;40978:83;;41009:40;41037:2;41041:7;41009:27;:40::i;:::-;40978:83;40878:183;40479:589;;;:::o;32515:321::-;32645:18;32651:2;32655:7;32645:5;:18::i;:::-;32696:54;32727:1;32731:2;32735:7;32744:5;32696:22;:54::i;:::-;32674:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32515:321;;;:::o;35952:980::-;36107:4;36128:15;:2;:13;;;:15::i;:::-;36124:801;;;36197:2;36181:36;;;36240:12;:10;:12::i;:::-;36275:4;36302:7;36332:5;36181:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36160:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36556:1;36539:6;:13;:18;36535:320;;;36582:108;;;;;;;;;;:::i;:::-;;;;;;;;36535:320;36805:6;36799:13;36790:6;36786:2;36782:15;36775:38;36160:710;36430:41;;;36420:51;;;:6;:51;;;;36413:58;;;;;36124:801;36909:4;36902:11;;35952:980;;;;;;;:::o;37504:126::-;;;;:::o;41791:164::-;41895:10;:17;;;;41868:15;:24;41884:7;41868:24;;;;;;;;;;;:44;;;;41923:10;41939:7;41923:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41791:164;:::o;42582:1002::-;42862:22;42912:1;42887:22;42904:4;42887:16;:22::i;:::-;:26;;;;:::i;:::-;42862:51;;42924:18;42945:17;:26;42963:7;42945:26;;;;;;;;;;;;42924:47;;43092:14;43078:10;:28;43074:328;;43123:19;43145:12;:18;43158:4;43145:18;;;;;;;;;;;;;;;:34;43164:14;43145:34;;;;;;;;;;;;43123:56;;43229:11;43196:12;:18;43209:4;43196:18;;;;;;;;;;;;;;;:30;43215:10;43196:30;;;;;;;;;;;:44;;;;43346:10;43313:17;:30;43331:11;43313:30;;;;;;;;;;;:43;;;;43108:294;43074:328;43498:17;:26;43516:7;43498:26;;;;;;;;;;;43491:33;;;43542:12;:18;43555:4;43542:18;;;;;;;;;;;;;;;:34;43561:14;43542:34;;;;;;;;;;;43535:41;;;42677:907;;42582:1002;;:::o;43879:1079::-;44132:22;44177:1;44157:10;:17;;;;:21;;;;:::i;:::-;44132:46;;44189:18;44210:15;:24;44226:7;44210:24;;;;;;;;;;;;44189:45;;44561:19;44583:10;44594:14;44583:26;;;;;;;;:::i;:::-;;;;;;;;;;44561:48;;44647:11;44622:10;44633;44622:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44758:10;44727:15;:28;44743:11;44727:28;;;;;;;;;;;:41;;;;44899:15;:24;44915:7;44899:24;;;;;;;;;;;44892:31;;;44934:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43950:1008;;;43879:1079;:::o;41369:221::-;41454:14;41471:20;41488:2;41471:16;:20::i;:::-;41454:37;;41529:7;41502:12;:16;41515:2;41502:16;;;;;;;;;;;;;;;:24;41519:6;41502:24;;;;;;;;;;;:34;;;;41576:6;41547:17;:26;41565:7;41547:26;;;;;;;;;;;:35;;;;41443:147;41369:221;;:::o;33172:382::-;33266:1;33252:16;;:2;:16;;;;33244:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33325:16;33333:7;33325;:16::i;:::-;33324:17;33316:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33387:45;33416:1;33420:2;33424:7;33387:20;:45::i;:::-;33462:1;33445:9;:13;33455:2;33445:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33493:2;33474:7;:16;33482:7;33474:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33538:7;33534:2;33513:33;;33530:1;33513:33;;;;;;;;;;;;33172:382;;:::o;5991:387::-;6051:4;6259:12;6326:7;6314:20;6306:28;;6369:1;6362:4;:8;6355:15;;;5991:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;27:659:1:-;123:5;148:81;164:64;221:6;164:64;:::i;:::-;148:81;:::i;:::-;139:90;;249:5;275:6;325:3;317:4;309:6;305:17;300:3;296:27;293:36;290:143;;;344:79;;:::i;:::-;290:143;457:1;442:238;467:6;464:1;461:13;442:238;;;535:3;564:37;597:3;585:10;564:37;:::i;:::-;559:3;552:50;631:4;626:3;622:14;615:21;;665:4;660:3;656:14;649:21;;502:178;489:1;486;482:9;477:14;;442:238;;;446:14;129:557;;27:659;;;;;:::o;692:410::-;769:5;794:65;810:48;851:6;810:48;:::i;:::-;794:65;:::i;:::-;785:74;;882:6;875:5;868:21;920:4;913:5;909:16;958:3;949:6;944:3;940:16;937:25;934:112;;;965:79;;:::i;:::-;934:112;1055:41;1089:6;1084:3;1079;1055:41;:::i;:::-;775:327;692:410;;;;;:::o;1108:412::-;1186:5;1211:66;1227:49;1269:6;1227:49;:::i;:::-;1211:66;:::i;:::-;1202:75;;1300:6;1293:5;1286:21;1338:4;1331:5;1327:16;1376:3;1367:6;1362:3;1358:16;1355:25;1352:112;;;1383:79;;:::i;:::-;1352:112;1473:41;1507:6;1502:3;1497;1473:41;:::i;:::-;1192:328;1108:412;;;;;:::o;1526:139::-;1572:5;1610:6;1597:20;1588:29;;1626:33;1653:5;1626:33;:::i;:::-;1526:139;;;;:::o;1671:155::-;1725:5;1763:6;1750:20;1741:29;;1779:41;1814:5;1779:41;:::i;:::-;1671:155;;;;:::o;1852:343::-;1923:5;1972:3;1965:4;1957:6;1953:17;1949:27;1939:122;;1980:79;;:::i;:::-;1939:122;2084:4;2106:83;2185:3;2177:6;2169;2106:83;:::i;:::-;2097:92;;1929:266;1852:343;;;;:::o;2201:133::-;2244:5;2282:6;2269:20;2260:29;;2298:30;2322:5;2298:30;:::i;:::-;2201:133;;;;:::o;2340:137::-;2385:5;2423:6;2410:20;2401:29;;2439:32;2465:5;2439:32;:::i;:::-;2340:137;;;;:::o;2483:141::-;2539:5;2570:6;2564:13;2555:22;;2586:32;2612:5;2586:32;:::i;:::-;2483:141;;;;:::o;2643:338::-;2698:5;2747:3;2740:4;2732:6;2728:17;2724:27;2714:122;;2755:79;;:::i;:::-;2714:122;2872:6;2859:20;2897:78;2971:3;2963:6;2956:4;2948:6;2944:17;2897:78;:::i;:::-;2888:87;;2704:277;2643:338;;;;:::o;3001:340::-;3057:5;3106:3;3099:4;3091:6;3087:17;3083:27;3073:122;;3114:79;;:::i;:::-;3073:122;3231:6;3218:20;3256:79;3331:3;3323:6;3316:4;3308:6;3304:17;3256:79;:::i;:::-;3247:88;;3063:278;3001:340;;;;:::o;3347:139::-;3393:5;3431:6;3418:20;3409:29;;3447:33;3474:5;3447:33;:::i;:::-;3347:139;;;;:::o;3492:329::-;3551:6;3600:2;3588:9;3579:7;3575:23;3571:32;3568:119;;;3606:79;;:::i;:::-;3568:119;3726:1;3751:53;3796:7;3787:6;3776:9;3772:22;3751:53;:::i;:::-;3741:63;;3697:117;3492:329;;;;:::o;3827:345::-;3894:6;3943:2;3931:9;3922:7;3918:23;3914:32;3911:119;;;3949:79;;:::i;:::-;3911:119;4069:1;4094:61;4147:7;4138:6;4127:9;4123:22;4094:61;:::i;:::-;4084:71;;4040:125;3827:345;;;;:::o;4178:474::-;4246:6;4254;4303:2;4291:9;4282:7;4278:23;4274:32;4271:119;;;4309:79;;:::i;:::-;4271:119;4429:1;4454:53;4499:7;4490:6;4479:9;4475:22;4454:53;:::i;:::-;4444:63;;4400:117;4556:2;4582:53;4627:7;4618:6;4607:9;4603:22;4582:53;:::i;:::-;4572:63;;4527:118;4178:474;;;;;:::o;4658:619::-;4735:6;4743;4751;4800:2;4788:9;4779:7;4775:23;4771:32;4768:119;;;4806:79;;:::i;:::-;4768:119;4926:1;4951:53;4996:7;4987:6;4976:9;4972:22;4951:53;:::i;:::-;4941:63;;4897:117;5053:2;5079:53;5124:7;5115:6;5104:9;5100:22;5079:53;:::i;:::-;5069:63;;5024:118;5181:2;5207:53;5252:7;5243:6;5232:9;5228:22;5207:53;:::i;:::-;5197:63;;5152:118;4658:619;;;;;:::o;5283:943::-;5378:6;5386;5394;5402;5451:3;5439:9;5430:7;5426:23;5422:33;5419:120;;;5458:79;;:::i;:::-;5419:120;5578:1;5603:53;5648:7;5639:6;5628:9;5624:22;5603:53;:::i;:::-;5593:63;;5549:117;5705:2;5731:53;5776:7;5767:6;5756:9;5752:22;5731:53;:::i;:::-;5721:63;;5676:118;5833:2;5859:53;5904:7;5895:6;5884:9;5880:22;5859:53;:::i;:::-;5849:63;;5804:118;5989:2;5978:9;5974:18;5961:32;6020:18;6012:6;6009:30;6006:117;;;6042:79;;:::i;:::-;6006:117;6147:62;6201:7;6192:6;6181:9;6177:22;6147:62;:::i;:::-;6137:72;;5932:287;5283:943;;;;;;;:::o;6232:468::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6480:1;6505:53;6550:7;6541:6;6530:9;6526:22;6505:53;:::i;:::-;6495:63;;6451:117;6607:2;6633:50;6675:7;6666:6;6655:9;6651:22;6633:50;:::i;:::-;6623:60;;6578:115;6232:468;;;;;:::o;6706:474::-;6774:6;6782;6831:2;6819:9;6810:7;6806:23;6802:32;6799:119;;;6837:79;;:::i;:::-;6799:119;6957:1;6982:53;7027:7;7018:6;7007:9;7003:22;6982:53;:::i;:::-;6972:63;;6928:117;7084:2;7110:53;7155:7;7146:6;7135:9;7131:22;7110:53;:::i;:::-;7100:63;;7055:118;6706:474;;;;;:::o;7186:381::-;7270:6;7319:4;7307:9;7298:7;7294:23;7290:34;7287:121;;;7327:79;;:::i;:::-;7287:121;7447:1;7472:78;7542:7;7533:6;7522:9;7518:22;7472:78;:::i;:::-;7462:88;;7418:142;7186:381;;;;:::o;7573:323::-;7629:6;7678:2;7666:9;7657:7;7653:23;7649:32;7646:119;;;7684:79;;:::i;:::-;7646:119;7804:1;7829:50;7871:7;7862:6;7851:9;7847:22;7829:50;:::i;:::-;7819:60;;7775:114;7573:323;;;;:::o;7902:327::-;7960:6;8009:2;7997:9;7988:7;7984:23;7980:32;7977:119;;;8015:79;;:::i;:::-;7977:119;8135:1;8160:52;8204:7;8195:6;8184:9;8180:22;8160:52;:::i;:::-;8150:62;;8106:116;7902:327;;;;:::o;8235:349::-;8304:6;8353:2;8341:9;8332:7;8328:23;8324:32;8321:119;;;8359:79;;:::i;:::-;8321:119;8479:1;8504:63;8559:7;8550:6;8539:9;8535:22;8504:63;:::i;:::-;8494:73;;8450:127;8235:349;;;;:::o;8590:509::-;8659:6;8708:2;8696:9;8687:7;8683:23;8679:32;8676:119;;;8714:79;;:::i;:::-;8676:119;8862:1;8851:9;8847:17;8834:31;8892:18;8884:6;8881:30;8878:117;;;8914:79;;:::i;:::-;8878:117;9019:63;9074:7;9065:6;9054:9;9050:22;9019:63;:::i;:::-;9009:73;;8805:287;8590:509;;;;:::o;9105:329::-;9164:6;9213:2;9201:9;9192:7;9188:23;9184:32;9181:119;;;9219:79;;:::i;:::-;9181:119;9339:1;9364:53;9409:7;9400:6;9389:9;9385:22;9364:53;:::i;:::-;9354:63;;9310:117;9105:329;;;;:::o;9440:179::-;9509:10;9530:46;9572:3;9564:6;9530:46;:::i;:::-;9608:4;9603:3;9599:14;9585:28;;9440:179;;;;:::o;9625:118::-;9712:24;9730:5;9712:24;:::i;:::-;9707:3;9700:37;9625:118;;:::o;9779:732::-;9898:3;9927:54;9975:5;9927:54;:::i;:::-;9997:86;10076:6;10071:3;9997:86;:::i;:::-;9990:93;;10107:56;10157:5;10107:56;:::i;:::-;10186:7;10217:1;10202:284;10227:6;10224:1;10221:13;10202:284;;;10303:6;10297:13;10330:63;10389:3;10374:13;10330:63;:::i;:::-;10323:70;;10416:60;10469:6;10416:60;:::i;:::-;10406:70;;10262:224;10249:1;10246;10242:9;10237:14;;10202:284;;;10206:14;10502:3;10495:10;;9903:608;;;9779:732;;;;:::o;10517:109::-;10598:21;10613:5;10598:21;:::i;:::-;10593:3;10586:34;10517:109;;:::o;10632:360::-;10718:3;10746:38;10778:5;10746:38;:::i;:::-;10800:70;10863:6;10858:3;10800:70;:::i;:::-;10793:77;;10879:52;10924:6;10919:3;10912:4;10905:5;10901:16;10879:52;:::i;:::-;10956:29;10978:6;10956:29;:::i;:::-;10951:3;10947:39;10940:46;;10722:270;10632:360;;;;:::o;10998:364::-;11086:3;11114:39;11147:5;11114:39;:::i;:::-;11169:71;11233:6;11228:3;11169:71;:::i;:::-;11162:78;;11249:52;11294:6;11289:3;11282:4;11275:5;11271:16;11249:52;:::i;:::-;11326:29;11348:6;11326:29;:::i;:::-;11321:3;11317:39;11310:46;;11090:272;10998:364;;;;:::o;11368:377::-;11474:3;11502:39;11535:5;11502:39;:::i;:::-;11557:89;11639:6;11634:3;11557:89;:::i;:::-;11550:96;;11655:52;11700:6;11695:3;11688:4;11681:5;11677:16;11655:52;:::i;:::-;11732:6;11727:3;11723:16;11716:23;;11478:267;11368:377;;;;:::o;11775:845::-;11878:3;11915:5;11909:12;11944:36;11970:9;11944:36;:::i;:::-;11996:89;12078:6;12073:3;11996:89;:::i;:::-;11989:96;;12116:1;12105:9;12101:17;12132:1;12127:137;;;;12278:1;12273:341;;;;12094:520;;12127:137;12211:4;12207:9;12196;12192:25;12187:3;12180:38;12247:6;12242:3;12238:16;12231:23;;12127:137;;12273:341;12340:38;12372:5;12340:38;:::i;:::-;12400:1;12414:154;12428:6;12425:1;12422:13;12414:154;;;12502:7;12496:14;12492:1;12487:3;12483:11;12476:35;12552:1;12543:7;12539:15;12528:26;;12450:4;12447:1;12443:12;12438:17;;12414:154;;;12597:6;12592:3;12588:16;12581:23;;12280:334;;12094:520;;11882:738;;11775:845;;;;:::o;12626:366::-;12768:3;12789:67;12853:2;12848:3;12789:67;:::i;:::-;12782:74;;12865:93;12954:3;12865:93;:::i;:::-;12983:2;12978:3;12974:12;12967:19;;12626:366;;;:::o;12998:::-;13140:3;13161:67;13225:2;13220:3;13161:67;:::i;:::-;13154:74;;13237:93;13326:3;13237:93;:::i;:::-;13355:2;13350:3;13346:12;13339:19;;12998:366;;;:::o;13370:::-;13512:3;13533:67;13597:2;13592:3;13533:67;:::i;:::-;13526:74;;13609:93;13698:3;13609:93;:::i;:::-;13727:2;13722:3;13718:12;13711:19;;13370:366;;;:::o;13742:::-;13884:3;13905:67;13969:2;13964:3;13905:67;:::i;:::-;13898:74;;13981:93;14070:3;13981:93;:::i;:::-;14099:2;14094:3;14090:12;14083:19;;13742:366;;;:::o;14114:::-;14256:3;14277:67;14341:2;14336:3;14277:67;:::i;:::-;14270:74;;14353:93;14442:3;14353:93;:::i;:::-;14471:2;14466:3;14462:12;14455:19;;14114:366;;;:::o;14486:::-;14628:3;14649:67;14713:2;14708:3;14649:67;:::i;:::-;14642:74;;14725:93;14814:3;14725:93;:::i;:::-;14843:2;14838:3;14834:12;14827:19;;14486:366;;;:::o;14858:::-;15000:3;15021:67;15085:2;15080:3;15021:67;:::i;:::-;15014:74;;15097:93;15186:3;15097:93;:::i;:::-;15215:2;15210:3;15206:12;15199:19;;14858:366;;;:::o;15230:::-;15372:3;15393:67;15457:2;15452:3;15393:67;:::i;:::-;15386:74;;15469:93;15558:3;15469:93;:::i;:::-;15587:2;15582:3;15578:12;15571:19;;15230:366;;;:::o;15602:::-;15744:3;15765:67;15829:2;15824:3;15765:67;:::i;:::-;15758:74;;15841:93;15930:3;15841:93;:::i;:::-;15959:2;15954:3;15950:12;15943:19;;15602:366;;;:::o;15974:::-;16116:3;16137:67;16201:2;16196:3;16137:67;:::i;:::-;16130:74;;16213:93;16302:3;16213:93;:::i;:::-;16331:2;16326:3;16322:12;16315:19;;15974:366;;;:::o;16346:::-;16488:3;16509:67;16573:2;16568:3;16509:67;:::i;:::-;16502:74;;16585:93;16674:3;16585:93;:::i;:::-;16703:2;16698:3;16694:12;16687:19;;16346:366;;;:::o;16718:::-;16860:3;16881:67;16945:2;16940:3;16881:67;:::i;:::-;16874:74;;16957:93;17046:3;16957:93;:::i;:::-;17075:2;17070:3;17066:12;17059:19;;16718:366;;;:::o;17090:::-;17232:3;17253:67;17317:2;17312:3;17253:67;:::i;:::-;17246:74;;17329:93;17418:3;17329:93;:::i;:::-;17447:2;17442:3;17438:12;17431:19;;17090:366;;;:::o;17462:::-;17604:3;17625:67;17689:2;17684:3;17625:67;:::i;:::-;17618:74;;17701:93;17790:3;17701:93;:::i;:::-;17819:2;17814:3;17810:12;17803:19;;17462:366;;;:::o;17834:::-;17976:3;17997:67;18061:2;18056:3;17997:67;:::i;:::-;17990:74;;18073:93;18162:3;18073:93;:::i;:::-;18191:2;18186:3;18182:12;18175:19;;17834:366;;;:::o;18206:::-;18348:3;18369:67;18433:2;18428:3;18369:67;:::i;:::-;18362:74;;18445:93;18534:3;18445:93;:::i;:::-;18563:2;18558:3;18554:12;18547:19;;18206:366;;;:::o;18578:::-;18720:3;18741:67;18805:2;18800:3;18741:67;:::i;:::-;18734:74;;18817:93;18906:3;18817:93;:::i;:::-;18935:2;18930:3;18926:12;18919:19;;18578:366;;;:::o;18950:::-;19092:3;19113:67;19177:2;19172:3;19113:67;:::i;:::-;19106:74;;19189:93;19278:3;19189:93;:::i;:::-;19307:2;19302:3;19298:12;19291:19;;18950:366;;;:::o;19322:::-;19464:3;19485:67;19549:2;19544:3;19485:67;:::i;:::-;19478:74;;19561:93;19650:3;19561:93;:::i;:::-;19679:2;19674:3;19670:12;19663:19;;19322:366;;;:::o;19694:::-;19836:3;19857:67;19921:2;19916:3;19857:67;:::i;:::-;19850:74;;19933:93;20022:3;19933:93;:::i;:::-;20051:2;20046:3;20042:12;20035:19;;19694:366;;;:::o;20066:::-;20208:3;20229:67;20293:2;20288:3;20229:67;:::i;:::-;20222:74;;20305:93;20394:3;20305:93;:::i;:::-;20423:2;20418:3;20414:12;20407:19;;20066:366;;;:::o;20438:::-;20580:3;20601:67;20665:2;20660:3;20601:67;:::i;:::-;20594:74;;20677:93;20766:3;20677:93;:::i;:::-;20795:2;20790:3;20786:12;20779:19;;20438:366;;;:::o;20810:398::-;20969:3;20990:83;21071:1;21066:3;20990:83;:::i;:::-;20983:90;;21082:93;21171:3;21082:93;:::i;:::-;21200:1;21195:3;21191:11;21184:18;;20810:398;;;:::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:::-;21728:3;21749:67;21813:2;21808:3;21749:67;:::i;:::-;21742:74;;21825:93;21914:3;21825:93;:::i;:::-;21943:2;21938:3;21934:12;21927:19;;21586:366;;;:::o;21958:108::-;22035:24;22053:5;22035:24;:::i;:::-;22030:3;22023:37;21958:108;;:::o;22072:118::-;22159:24;22177:5;22159:24;:::i;:::-;22154:3;22147:37;22072:118;;:::o;22196:589::-;22421:3;22443:95;22534:3;22525:6;22443:95;:::i;:::-;22436:102;;22555:95;22646:3;22637:6;22555:95;:::i;:::-;22548:102;;22667:92;22755:3;22746:6;22667:92;:::i;:::-;22660:99;;22776:3;22769:10;;22196:589;;;;;;:::o;22791:379::-;22975:3;22997:147;23140:3;22997:147;:::i;:::-;22990:154;;23161:3;23154:10;;22791:379;;;:::o;23176:222::-;23269:4;23307:2;23296:9;23292:18;23284:26;;23320:71;23388:1;23377:9;23373:17;23364:6;23320:71;:::i;:::-;23176:222;;;;:::o;23404:640::-;23599:4;23637:3;23626:9;23622:19;23614:27;;23651:71;23719:1;23708:9;23704:17;23695:6;23651:71;:::i;:::-;23732:72;23800:2;23789:9;23785:18;23776:6;23732:72;:::i;:::-;23814;23882:2;23871:9;23867:18;23858:6;23814:72;:::i;:::-;23933:9;23927:4;23923:20;23918:2;23907:9;23903:18;23896:48;23961:76;24032:4;24023:6;23961:76;:::i;:::-;23953:84;;23404:640;;;;;;;:::o;24050:373::-;24193:4;24231:2;24220:9;24216:18;24208:26;;24280:9;24274:4;24270:20;24266:1;24255:9;24251:17;24244:47;24308:108;24411:4;24402:6;24308:108;:::i;:::-;24300:116;;24050:373;;;;:::o;24429:210::-;24516:4;24554:2;24543:9;24539:18;24531:26;;24567:65;24629:1;24618:9;24614:17;24605:6;24567:65;:::i;:::-;24429:210;;;;:::o;24645:313::-;24758:4;24796:2;24785:9;24781:18;24773:26;;24845:9;24839:4;24835:20;24831:1;24820:9;24816:17;24809:47;24873:78;24946:4;24937:6;24873:78;:::i;:::-;24865:86;;24645:313;;;;:::o;24964:419::-;25130:4;25168:2;25157:9;25153:18;25145:26;;25217:9;25211:4;25207:20;25203:1;25192:9;25188:17;25181:47;25245:131;25371:4;25245:131;:::i;:::-;25237:139;;24964:419;;;:::o;25389:::-;25555:4;25593:2;25582:9;25578:18;25570:26;;25642:9;25636:4;25632:20;25628:1;25617:9;25613:17;25606:47;25670:131;25796:4;25670:131;:::i;:::-;25662:139;;25389:419;;;:::o;25814:::-;25980:4;26018:2;26007:9;26003:18;25995:26;;26067:9;26061:4;26057:20;26053:1;26042:9;26038:17;26031:47;26095:131;26221:4;26095:131;:::i;:::-;26087:139;;25814:419;;;:::o;26239:::-;26405:4;26443:2;26432:9;26428:18;26420:26;;26492:9;26486:4;26482:20;26478:1;26467:9;26463:17;26456:47;26520:131;26646:4;26520:131;:::i;:::-;26512:139;;26239:419;;;:::o;26664:::-;26830:4;26868:2;26857:9;26853:18;26845:26;;26917:9;26911:4;26907:20;26903:1;26892:9;26888:17;26881:47;26945:131;27071:4;26945:131;:::i;:::-;26937:139;;26664:419;;;:::o;27089:::-;27255:4;27293:2;27282:9;27278:18;27270:26;;27342:9;27336:4;27332:20;27328:1;27317:9;27313:17;27306:47;27370:131;27496:4;27370:131;:::i;:::-;27362:139;;27089:419;;;:::o;27514:::-;27680:4;27718:2;27707:9;27703:18;27695:26;;27767:9;27761:4;27757:20;27753:1;27742:9;27738:17;27731:47;27795:131;27921:4;27795:131;:::i;:::-;27787:139;;27514:419;;;:::o;27939:::-;28105:4;28143:2;28132:9;28128:18;28120:26;;28192:9;28186:4;28182:20;28178:1;28167:9;28163:17;28156:47;28220:131;28346:4;28220:131;:::i;:::-;28212:139;;27939:419;;;:::o;28364:::-;28530:4;28568:2;28557:9;28553:18;28545:26;;28617:9;28611:4;28607:20;28603:1;28592:9;28588:17;28581:47;28645:131;28771:4;28645:131;:::i;:::-;28637:139;;28364:419;;;:::o;28789:::-;28955:4;28993:2;28982:9;28978:18;28970:26;;29042:9;29036:4;29032:20;29028:1;29017:9;29013:17;29006:47;29070:131;29196:4;29070:131;:::i;:::-;29062:139;;28789:419;;;:::o;29214:::-;29380:4;29418:2;29407:9;29403:18;29395:26;;29467:9;29461:4;29457:20;29453:1;29442:9;29438:17;29431:47;29495:131;29621:4;29495:131;:::i;:::-;29487:139;;29214:419;;;:::o;29639:::-;29805:4;29843:2;29832:9;29828:18;29820:26;;29892:9;29886:4;29882:20;29878:1;29867:9;29863:17;29856:47;29920:131;30046:4;29920:131;:::i;:::-;29912:139;;29639:419;;;:::o;30064:::-;30230:4;30268:2;30257:9;30253:18;30245:26;;30317:9;30311:4;30307:20;30303:1;30292:9;30288:17;30281:47;30345:131;30471:4;30345:131;:::i;:::-;30337:139;;30064:419;;;:::o;30489:::-;30655:4;30693:2;30682:9;30678:18;30670:26;;30742:9;30736:4;30732:20;30728:1;30717:9;30713:17;30706:47;30770:131;30896:4;30770:131;:::i;:::-;30762:139;;30489:419;;;:::o;30914:::-;31080:4;31118:2;31107:9;31103:18;31095:26;;31167:9;31161:4;31157:20;31153:1;31142:9;31138:17;31131:47;31195:131;31321:4;31195:131;:::i;:::-;31187:139;;30914:419;;;:::o;31339:::-;31505:4;31543:2;31532:9;31528:18;31520:26;;31592:9;31586:4;31582:20;31578:1;31567:9;31563:17;31556:47;31620:131;31746:4;31620:131;:::i;:::-;31612:139;;31339:419;;;:::o;31764:::-;31930:4;31968:2;31957:9;31953:18;31945:26;;32017:9;32011:4;32007:20;32003:1;31992:9;31988:17;31981:47;32045:131;32171:4;32045:131;:::i;:::-;32037:139;;31764:419;;;:::o;32189:::-;32355:4;32393:2;32382:9;32378:18;32370:26;;32442:9;32436:4;32432:20;32428:1;32417:9;32413:17;32406:47;32470:131;32596:4;32470:131;:::i;:::-;32462:139;;32189:419;;;:::o;32614:::-;32780:4;32818:2;32807:9;32803:18;32795:26;;32867:9;32861:4;32857:20;32853:1;32842:9;32838:17;32831:47;32895:131;33021:4;32895:131;:::i;:::-;32887:139;;32614:419;;;:::o;33039:::-;33205:4;33243:2;33232:9;33228:18;33220:26;;33292:9;33286:4;33282:20;33278:1;33267:9;33263:17;33256:47;33320:131;33446:4;33320:131;:::i;:::-;33312:139;;33039:419;;;:::o;33464:::-;33630:4;33668:2;33657:9;33653:18;33645:26;;33717:9;33711:4;33707:20;33703:1;33692:9;33688:17;33681:47;33745:131;33871:4;33745:131;:::i;:::-;33737:139;;33464:419;;;:::o;33889:::-;34055:4;34093:2;34082:9;34078:18;34070:26;;34142:9;34136:4;34132:20;34128:1;34117:9;34113:17;34106:47;34170:131;34296:4;34170:131;:::i;:::-;34162:139;;33889:419;;;:::o;34314:::-;34480:4;34518:2;34507:9;34503:18;34495:26;;34567:9;34561:4;34557:20;34553:1;34542:9;34538:17;34531:47;34595:131;34721:4;34595:131;:::i;:::-;34587:139;;34314:419;;;:::o;34739:::-;34905:4;34943:2;34932:9;34928:18;34920:26;;34992:9;34986:4;34982:20;34978:1;34967:9;34963:17;34956:47;35020:131;35146:4;35020:131;:::i;:::-;35012:139;;34739:419;;;:::o;35164:222::-;35257:4;35295:2;35284:9;35280:18;35272:26;;35308:71;35376:1;35365:9;35361:17;35352:6;35308:71;:::i;:::-;35164:222;;;;:::o;35392:129::-;35426:6;35453:20;;:::i;:::-;35443:30;;35482:33;35510:4;35502:6;35482:33;:::i;:::-;35392:129;;;:::o;35527:75::-;35560:6;35593:2;35587:9;35577:19;;35527:75;:::o;35608:251::-;35685:4;35775:18;35767:6;35764:30;35761:56;;;35797:18;;:::i;:::-;35761:56;35847:4;35839:6;35835:17;35827:25;;35608:251;;;:::o;35865:307::-;35926:4;36016:18;36008:6;36005:30;36002:56;;;36038:18;;:::i;:::-;36002:56;36076:29;36098:6;36076:29;:::i;:::-;36068:37;;36160:4;36154;36150:15;36142:23;;35865:307;;;:::o;36178:308::-;36240:4;36330:18;36322:6;36319:30;36316:56;;;36352:18;;:::i;:::-;36316:56;36390:29;36412:6;36390:29;:::i;:::-;36382:37;;36474:4;36468;36464:15;36456:23;;36178:308;;;:::o;36492:132::-;36559:4;36582:3;36574:11;;36612:4;36607:3;36603:14;36595:22;;36492:132;;;:::o;36630:141::-;36679:4;36702:3;36694:11;;36725:3;36722:1;36715:14;36759:4;36756:1;36746:18;36738:26;;36630:141;;;:::o;36777:114::-;36844:6;36878:5;36872:12;36862:22;;36777:114;;;:::o;36897:98::-;36948:6;36982:5;36976:12;36966:22;;36897:98;;;:::o;37001:99::-;37053:6;37087:5;37081:12;37071:22;;37001:99;;;:::o;37106:113::-;37176:4;37208;37203:3;37199:14;37191:22;;37106:113;;;:::o;37225:184::-;37324:11;37358:6;37353:3;37346:19;37398:4;37393:3;37389:14;37374:29;;37225:184;;;;:::o;37415:168::-;37498:11;37532:6;37527:3;37520:19;37572:4;37567:3;37563:14;37548:29;;37415:168;;;;:::o;37589:147::-;37690:11;37727:3;37712:18;;37589:147;;;;:::o;37742:169::-;37826:11;37860:6;37855:3;37848:19;37900:4;37895:3;37891:14;37876:29;;37742:169;;;;:::o;37917:148::-;38019:11;38056:3;38041:18;;37917:148;;;;:::o;38071:305::-;38111:3;38130:20;38148:1;38130:20;:::i;:::-;38125:25;;38164:20;38182:1;38164:20;:::i;:::-;38159:25;;38318:1;38250:66;38246:74;38243:1;38240:81;38237:107;;;38324:18;;:::i;:::-;38237:107;38368:1;38365;38361:9;38354:16;;38071:305;;;;:::o;38382:185::-;38422:1;38439:20;38457:1;38439:20;:::i;:::-;38434:25;;38473:20;38491:1;38473:20;:::i;:::-;38468:25;;38512:1;38502:35;;38517:18;;:::i;:::-;38502:35;38559:1;38556;38552:9;38547:14;;38382:185;;;;:::o;38573:348::-;38613:7;38636:20;38654:1;38636:20;:::i;:::-;38631:25;;38670:20;38688:1;38670:20;:::i;:::-;38665:25;;38858:1;38790:66;38786:74;38783:1;38780:81;38775:1;38768:9;38761:17;38757:105;38754:131;;;38865:18;;:::i;:::-;38754:131;38913:1;38910;38906:9;38895:20;;38573:348;;;;:::o;38927:191::-;38967:4;38987:20;39005:1;38987:20;:::i;:::-;38982:25;;39021:20;39039:1;39021:20;:::i;:::-;39016:25;;39060:1;39057;39054:8;39051:34;;;39065:18;;:::i;:::-;39051:34;39110:1;39107;39103:9;39095:17;;38927:191;;;;:::o;39124:96::-;39161:7;39190:24;39208:5;39190:24;:::i;:::-;39179:35;;39124:96;;;:::o;39226:104::-;39271:7;39300:24;39318:5;39300:24;:::i;:::-;39289:35;;39226:104;;;:::o;39336:90::-;39370:7;39413:5;39406:13;39399:21;39388:32;;39336:90;;;:::o;39432:149::-;39468:7;39508:66;39501:5;39497:78;39486:89;;39432:149;;;:::o;39587:126::-;39624:7;39664:42;39657:5;39653:54;39642:65;;39587:126;;;:::o;39719:77::-;39756:7;39785:5;39774:16;;39719:77;;;:::o;39802:154::-;39886:6;39881:3;39876;39863:30;39948:1;39939:6;39934:3;39930:16;39923:27;39802:154;;;:::o;39962:307::-;40030:1;40040:113;40054:6;40051:1;40048:13;40040:113;;;40139:1;40134:3;40130:11;40124:18;40120:1;40115:3;40111:11;40104:39;40076:2;40073:1;40069:10;40064:15;;40040:113;;;40171:6;40168:1;40165:13;40162:101;;;40251:1;40242:6;40237:3;40233:16;40226:27;40162:101;40011:258;39962:307;;;:::o;40275:320::-;40319:6;40356:1;40350:4;40346:12;40336:22;;40403:1;40397:4;40393:12;40424:18;40414:81;;40480:4;40472:6;40468:17;40458:27;;40414:81;40542:2;40534:6;40531:14;40511:18;40508:38;40505:84;;;40561:18;;:::i;:::-;40505:84;40326:269;40275:320;;;:::o;40601:281::-;40684:27;40706:4;40684:27;:::i;:::-;40676:6;40672:40;40814:6;40802:10;40799:22;40778:18;40766:10;40763:34;40760:62;40757:88;;;40825:18;;:::i;:::-;40757:88;40865:10;40861:2;40854:22;40644:238;40601:281;;:::o;40888:233::-;40927:3;40950:24;40968:5;40950:24;:::i;:::-;40941:33;;40996:66;40989:5;40986:77;40983:103;;;41066:18;;:::i;:::-;40983:103;41113:1;41106:5;41102:13;41095:20;;40888:233;;;:::o;41127:176::-;41159:1;41176:20;41194:1;41176:20;:::i;:::-;41171:25;;41210:20;41228:1;41210:20;:::i;:::-;41205:25;;41249:1;41239:35;;41254:18;;:::i;:::-;41239:35;41295:1;41292;41288:9;41283:14;;41127:176;;;;:::o;41309:180::-;41357:77;41354:1;41347:88;41454:4;41451:1;41444:15;41478:4;41475:1;41468:15;41495:180;41543:77;41540:1;41533:88;41640:4;41637:1;41630:15;41664:4;41661:1;41654:15;41681:180;41729:77;41726:1;41719:88;41826:4;41823:1;41816:15;41850:4;41847:1;41840:15;41867:180;41915:77;41912:1;41905:88;42012:4;42009:1;42002:15;42036:4;42033:1;42026:15;42053:180;42101:77;42098:1;42091:88;42198:4;42195:1;42188:15;42222:4;42219:1;42212:15;42239:180;42287:77;42284:1;42277:88;42384:4;42381:1;42374:15;42408:4;42405:1;42398:15;42425:117;42534:1;42531;42524:12;42548:117;42657:1;42654;42647:12;42671:117;42780:1;42777;42770:12;42794:117;42903:1;42900;42893:12;42917:117;43026:1;43023;43016:12;43040:102;43081:6;43132:2;43128:7;43123:2;43116:5;43112:14;43108:28;43098:38;;43040:102;;;:::o;43148:181::-;43288:33;43284:1;43276:6;43272:14;43265:57;43148:181;:::o;43335:168::-;43475:20;43471:1;43463:6;43459:14;43452:44;43335:168;:::o;43509:230::-;43649:34;43645:1;43637:6;43633:14;43626:58;43718:13;43713:2;43705:6;43701:15;43694:38;43509:230;:::o;43745:237::-;43885:34;43881:1;43873:6;43869:14;43862:58;43954:20;43949:2;43941:6;43937:15;43930:45;43745:237;:::o;43988:225::-;44128:34;44124:1;44116:6;44112:14;44105:58;44197:8;44192:2;44184:6;44180:15;44173:33;43988:225;:::o;44219:178::-;44359:30;44355:1;44347:6;44343:14;44336:54;44219:178;:::o;44403:177::-;44543:29;44539:1;44531:6;44527:14;44520:53;44403:177;:::o;44586:223::-;44726:34;44722:1;44714:6;44710:14;44703:58;44795:6;44790:2;44782:6;44778:15;44771:31;44586:223;:::o;44815:175::-;44955:27;44951:1;44943:6;44939:14;44932:51;44815:175;:::o;44996:231::-;45136:34;45132:1;45124:6;45120:14;45113:58;45205:14;45200:2;45192:6;45188:15;45181:39;44996:231;:::o;45233:220::-;45373:34;45369:1;45361:6;45357:14;45350:58;45442:3;45437:2;45429:6;45425:15;45418:28;45233:220;:::o;45459:243::-;45599:34;45595:1;45587:6;45583:14;45576:58;45668:26;45663:2;45655:6;45651:15;45644:51;45459:243;:::o;45708:229::-;45848:34;45844:1;45836:6;45832:14;45825:58;45917:12;45912:2;45904:6;45900:15;45893:37;45708:229;:::o;45943:228::-;46083:34;46079:1;46071:6;46067:14;46060:58;46152:11;46147:2;46139:6;46135:15;46128:36;45943:228;:::o;46177:182::-;46317:34;46313:1;46305:6;46301:14;46294:58;46177:182;:::o;46365:231::-;46505:34;46501:1;46493:6;46489:14;46482:58;46574:14;46569:2;46561:6;46557:15;46550:39;46365:231;:::o;46602:182::-;46742:34;46738:1;46730:6;46726:14;46719:58;46602:182;:::o;46790:228::-;46930:34;46926:1;46918:6;46914:14;46907:58;46999:11;46994:2;46986:6;46982:15;46975:36;46790:228;:::o;47024:234::-;47164:34;47160:1;47152:6;47148:14;47141:58;47233:17;47228:2;47220:6;47216:15;47209:42;47024:234;:::o;47264:174::-;47404:26;47400:1;47392:6;47388:14;47381:50;47264:174;:::o;47444:220::-;47584:34;47580:1;47572:6;47568:14;47561:58;47653:3;47648:2;47640:6;47636:15;47629:28;47444:220;:::o;47670:172::-;47810:24;47806:1;47798:6;47794:14;47787:48;47670:172;:::o;47848:114::-;;:::o;47968:236::-;48108:34;48104:1;48096:6;48092:14;48085:58;48177:19;48172:2;48164:6;48160:15;48153:44;47968:236;:::o;48210:231::-;48350:34;48346:1;48338:6;48334:14;48327:58;48419:14;48414:2;48406:6;48402:15;48395:39;48210:231;:::o;48447:122::-;48520:24;48538:5;48520:24;:::i;:::-;48513:5;48510:35;48500:63;;48559:1;48556;48549:12;48500:63;48447:122;:::o;48575:138::-;48656:32;48682:5;48656:32;:::i;:::-;48649:5;48646:43;48636:71;;48703:1;48700;48693:12;48636:71;48575:138;:::o;48719:116::-;48789:21;48804:5;48789:21;:::i;:::-;48782:5;48779:32;48769:60;;48825:1;48822;48815:12;48769:60;48719:116;:::o;48841:120::-;48913:23;48930:5;48913:23;:::i;:::-;48906:5;48903:34;48893:62;;48951:1;48948;48941:12;48893:62;48841:120;:::o;48967:122::-;49040:24;49058:5;49040:24;:::i;:::-;49033:5;49030:35;49020:63;;49079:1;49076;49069:12;49020:63;48967:122;:::o
Swarm Source
ipfs://4a8f623084e098b5bd1c03272bf6d3ecb6b10e45494da41f339e1fee466018f6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.