ERC-721
Overview
Max Total Supply
1,518 BLOOTMF
Holders
681
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 BLOOTMFLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BlootMF
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-02 */ /** *Submitted for verification at Etherscan.io on 2021-09-28 */ // libraries // Address.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // interfaces // 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); } // 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; } // 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); } // IERCEnumerable.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); } // IERCReceiver.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); } // contracts // 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // 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; } } // 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}. 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly 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` 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 { } } // 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(); } } // BlootMF.sol pragma solidity ^0.8.0; contract BlootMF is ERC721Enumerable, Ownable { using Strings for uint256; uint256 private constant MAX_TOTAL = 3000; uint256 private constant MAX_FREE = 2400; uint256 private constant MAX_DIAMOND = 500; uint256 private constant MAX_FOUNDER = 100; uint256 private constant DIAMOND_DONATION = 0.1 ether; uint256 private constant FOUNDER_DONATION= 0.5 ether; address private constant WITHDRAWAL_ADDRESS = 0x0A0Da512157d16f456C837a93a91c12f4B703672; address private constant BLOOT_ADDRESS = 0x4F8730E0b32B04beaa5757e5aea3aeF970E5B613; mapping(address => bool) private diamondMap; mapping(address => bool) private founderMap; address[] private founderList; address[] private diamondList; uint256 private freeMintCounter = 0; string _baseTokenURI; bool public _paused = true; ERC721 bloot = ERC721(BLOOT_ADDRESS); constructor(string memory baseURI) ERC721("BlootMF", "BLOOTMF") { setBaseURI(baseURI); } function mint() public payable { uint256 supply = totalSupply(); require( !_paused, "Minting is paused" ); require(supply + 1 <= MAX_TOTAL, "Exceeds maximum BlootMF supply"); require(bloot.balanceOf(msg.sender) >= 1, "You need to hold a Bloot to mint"); require(bloot.balanceOf(msg.sender) > balanceOf(msg.sender), "You can mint one BlootMF per Bloot only"); if (msg.value >= FOUNDER_DONATION) { require(founderList.length + 1 <= MAX_FOUNDER, "All Founder slots are taken"); founderMap[msg.sender] = true; founderList.push(msg.sender); } else if (msg.value >= DIAMOND_DONATION) { require(diamondList.length + 1 <= MAX_DIAMOND, "All Diamond slots are taken"); diamondMap[msg.sender] = true; diamondList.push(msg.sender); } else { require(freeMintCounter <= MAX_FREE, "No more free mints available"); freeMintCounter++; } _safeMint(msg.sender, supply + 1); } function isDiamond(address owner) public view returns (bool) { return diamondMap[owner]; } function isFounder(address owner) public view returns (bool) { return founderMap[owner]; } function getAllDiamond() public view returns (address[] memory) { return diamondList; } function getAllFounder() public view returns (address[] memory) { return founderList; } function getDiamondCount() public view returns (uint) { return diamondList.length; } function getFounderCount() public view returns (uint) { return founderList.length; } function getFreeMintCount() public view returns (uint) { return freeMintCounter; } function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function pause(bool val) public onlyOwner { _paused = val; } function withdrawAll() public payable onlyOwner { uint256 bal = address(this).balance; require(payable(WITHDRAWAL_ADDRESS).send(bal)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllDiamond","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllFounder","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDiamondCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFounderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFreeMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"isDiamond","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"isFounder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","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":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600f556001601160006101000a81548160ff021916908315150217905550734f8730e0b32b04beaa5757e5aea3aef970e5b613601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008657600080fd5b5060405162004ecf38038062004ecf8339818101604052810190620000ac919062000420565b6040518060400160405280600781526020017f426c6f6f744d46000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f424c4f4f544d4600000000000000000000000000000000000000000000000000815250816000908051906020019062000130929190620002f2565b50806001908051906020019062000149929190620002f2565b50505060006200015e6200021560201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200020e816200021d60201b60201c565b5062000678565b600033905090565b6200022d6200021560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000253620002c860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a39062000498565b60405180910390fd5b8060109080519060200190620002c4929190620002f2565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003009062000560565b90600052602060002090601f01602090048101928262000324576000855562000370565b82601f106200033f57805160ff191683800117855562000370565b8280016001018555821562000370579182015b828111156200036f57825182559160200191906001019062000352565b5b5090506200037f919062000383565b5090565b5b808211156200039e57600081600090555060010162000384565b5090565b6000620003b9620003b384620004e3565b620004ba565b905082815260208101848484011115620003d857620003d76200062f565b5b620003e58482856200052a565b509392505050565b600082601f8301126200040557620004046200062a565b5b815162000417848260208601620003a2565b91505092915050565b60006020828403121562000439576200043862000639565b5b600082015167ffffffffffffffff8111156200045a576200045962000634565b5b6200046884828501620003ed565b91505092915050565b60006200048060208362000519565b91506200048d826200064f565b602082019050919050565b60006020820190508181036000830152620004b38162000471565b9050919050565b6000620004c6620004d9565b9050620004d4828262000596565b919050565b6000604051905090565b600067ffffffffffffffff821115620005015762000500620005fb565b5b6200050c826200063e565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200054a5780820151818401526020810190506200052d565b838111156200055a576000848401525b50505050565b600060028204905060018216806200057957607f821691505b6020821081141562000590576200058f620005cc565b5b50919050565b620005a1826200063e565b810181811067ffffffffffffffff82111715620005c357620005c2620005fb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61484780620006886000396000f3fe6080604052600436106101e35760003560e01c8063438b63001161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd146106c8578063db9844d714610705578063e985e9c514610742578063f2fde38b1461077f576101e3565b806395d89b411461060e578063a22cb46514610639578063b88d4fde14610662578063c7b578411461068b576101e3565b806370a08231116100d157806370a0823114610585578063715018a6146105c2578063853828b6146105d95780638da5cb5b146105e3576101e3565b8063438b6300146104a55780634f6ccce7146104e257806355f804b31461051f5780636352211e14610548576101e3565b806318160ddd1161017a5780632f745c59116101495780632f745c59146103e95780633670bab2146104265780633e14c2f61461045157806342842e0e1461047c576101e3565b806318160ddd1461033f5780631c7a99a61461036a57806323b872dd14610395578063268ca7b2146103be576101e3565b8063081812fc116101b6578063081812fc146102a4578063095ea7b3146102e15780631249c58b1461030a57806316c61ccc14610314576101e3565b806301ffc9a7146101e857806302329a2914610225578063065070d91461024e57806306fdde0314610279575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613228565b6107a8565b60405161021c9190613939565b60405180910390f35b34801561023157600080fd5b5061024c600480360381019061024791906131fb565b610822565b005b34801561025a57600080fd5b506102636108bb565b60405161027091906138f5565b60405180910390f35b34801561028557600080fd5b5061028e610949565b60405161029b9190613954565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906132cb565b6109db565b6040516102d8919061388e565b60405180910390f35b3480156102ed57600080fd5b50610308600480360381019061030391906131bb565b610a60565b005b610312610b78565b005b34801561032057600080fd5b506103296110ca565b6040516103369190613939565b60405180910390f35b34801561034b57600080fd5b506103546110dd565b6040516103619190613c96565b60405180910390f35b34801561037657600080fd5b5061037f6110ea565b60405161038c9190613c96565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b791906130a5565b6110f4565b005b3480156103ca57600080fd5b506103d3611154565b6040516103e091906138f5565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906131bb565b6111e2565b60405161041d9190613c96565b60405180910390f35b34801561043257600080fd5b5061043b611287565b6040516104489190613c96565b60405180910390f35b34801561045d57600080fd5b50610466611294565b6040516104739190613c96565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906130a5565b6112a1565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190613038565b6112c1565b6040516104d99190613917565b60405180910390f35b3480156104ee57600080fd5b50610509600480360381019061050491906132cb565b61136f565b6040516105169190613c96565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190613282565b6113e0565b005b34801561055457600080fd5b5061056f600480360381019061056a91906132cb565b611476565b60405161057c919061388e565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613038565b611528565b6040516105b99190613c96565b60405180910390f35b3480156105ce57600080fd5b506105d76115e0565b005b6105e161171d565b005b3480156105ef57600080fd5b506105f86117f3565b604051610605919061388e565b60405180910390f35b34801561061a57600080fd5b5061062361181d565b6040516106309190613954565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b919061317b565b6118af565b005b34801561066e57600080fd5b50610689600480360381019061068491906130f8565b611a30565b005b34801561069757600080fd5b506106b260048036038101906106ad9190613038565b611a92565b6040516106bf9190613939565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea91906132cb565b611ae8565b6040516106fc9190613954565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190613038565b611b8f565b6040516107399190613939565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190613065565b611be5565b6040516107769190613939565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a19190613038565b611c79565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081b575061081a82611e25565b5b9050919050565b61082a611f07565b73ffffffffffffffffffffffffffffffffffffffff166108486117f3565b73ffffffffffffffffffffffffffffffffffffffff161461089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590613b36565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6060600e80548060200260200160405190810160405280929190818152602001828054801561093f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116108f5575b5050505050905090565b60606000805461095890613f5e565b80601f016020809104026020016040519081016040528092919081815260200182805461098490613f5e565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b60006109e682611f0f565b610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90613af6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a6b82611476565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390613b96565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610afb611f07565b73ffffffffffffffffffffffffffffffffffffffff161480610b2a5750610b2981610b24611f07565b611be5565b5b610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090613a76565b60405180910390fd5b610b738383611f7b565b505050565b6000610b826110dd565b9050601160009054906101000a900460ff1615610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb90613bd6565b60405180910390fd5b610bb8600182610be49190613ded565b1115610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c90613bf6565b60405180910390fd5b6001601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610c82919061388e565b60206040518083038186803b158015610c9a57600080fd5b505afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd291906132f8565b1015610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a90613c56565b60405180910390fd5b610d1c33611528565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d77919061388e565b60206040518083038186803b158015610d8f57600080fd5b505afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc791906132f8565b11610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613c76565b60405180910390fd5b6706f05b59d3b200003410610f2b5760646001600d80549050610e2a9190613ded565b1115610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e62906139f6565b60405180910390fd5b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110b1565b67016345785d8a00003410611050576101f46001600e80549050610f4f9190613ded565b1115610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8790613c36565b60405180910390fd5b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600e339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110b0565b610960600f541115611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613b16565b60405180910390fd5b600f60008154809291906110aa90613fc1565b91905055505b5b6110c7336001836110c29190613ded565b612034565b50565b601160009054906101000a900460ff1681565b6000600880549050905090565b6000600f54905090565b6111056110ff611f07565b82612052565b611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613bb6565b60405180910390fd5b61114f838383612130565b505050565b6060600d8054806020026020016040519081016040528092919081815260200182805480156111d857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161118e575b5050505050905090565b60006111ed83611528565b821061122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590613976565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600e80549050905090565b6000600d80549050905090565b6112bc83838360405180602001604052806000815250611a30565b505050565b606060006112ce83611528565b905060008167ffffffffffffffff8111156112ec576112eb614126565b5b60405190808252806020026020018201604052801561131a5781602001602082028036833780820191505090505b50905060005b828110156113645761133285826111e2565b828281518110611345576113446140f7565b5b602002602001018181525050808061135c90613fc1565b915050611320565b508092505050919050565b60006113796110dd565b82106113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190613c16565b60405180910390fd5b600882815481106113ce576113cd6140f7565b5b90600052602060002001549050919050565b6113e8611f07565b73ffffffffffffffffffffffffffffffffffffffff166114066117f3565b73ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390613b36565b60405180910390fd5b8060109080519060200190611472929190612e37565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613ab6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613a96565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e8611f07565b73ffffffffffffffffffffffffffffffffffffffff166116066117f3565b73ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390613b36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611725611f07565b73ffffffffffffffffffffffffffffffffffffffff166117436117f3565b73ffffffffffffffffffffffffffffffffffffffff1614611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090613b36565b60405180910390fd5b6000479050730a0da512157d16f456c837a93a91c12f4b70367273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506117f057600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461182c90613f5e565b80601f016020809104026020016040519081016040528092919081815260200182805461185890613f5e565b80156118a55780601f1061187a576101008083540402835291602001916118a5565b820191906000526020600020905b81548152906001019060200180831161188857829003601f168201915b5050505050905090565b6118b7611f07565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613a36565b60405180910390fd5b8060056000611932611f07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119df611f07565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a249190613939565b60405180910390a35050565b611a41611a3b611f07565b83612052565b611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790613bb6565b60405180910390fd5b611a8c8484848461238c565b50505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060611af382611f0f565b611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2990613b76565b60405180910390fd5b6000611b3c6123e8565b90506000815111611b5c5760405180602001604052806000815250611b87565b80611b668461247a565b604051602001611b7792919061386a565b6040516020818303038152906040525b915050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c81611f07565b73ffffffffffffffffffffffffffffffffffffffff16611c9f6117f3565b73ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613b36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c906139b6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ef057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f005750611eff826125db565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fee83611476565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61204e828260405180602001604052806000815250612645565b5050565b600061205d82611f0f565b61209c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209390613a56565b60405180910390fd5b60006120a783611476565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061211657508373ffffffffffffffffffffffffffffffffffffffff166120fe846109db565b73ffffffffffffffffffffffffffffffffffffffff16145b8061212757506121268185611be5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661215082611476565b73ffffffffffffffffffffffffffffffffffffffff16146121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219d90613b56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220d90613a16565b60405180910390fd5b6122218383836126a0565b61222c600082611f7b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461227c9190613e74565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d39190613ded565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612397848484612130565b6123a3848484846127b4565b6123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990613996565b60405180910390fd5b50505050565b6060601080546123f790613f5e565b80601f016020809104026020016040519081016040528092919081815260200182805461242390613f5e565b80156124705780601f1061244557610100808354040283529160200191612470565b820191906000526020600020905b81548152906001019060200180831161245357829003601f168201915b5050505050905090565b606060008214156124c2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125d6565b600082905060005b600082146124f45780806124dd90613fc1565b915050600a826124ed9190613e43565b91506124ca565b60008167ffffffffffffffff8111156125105761250f614126565b5b6040519080825280601f01601f1916602001820160405280156125425781602001600182028036833780820191505090505b5090505b600085146125cf5760018261255b9190613e74565b9150600a8561256a919061400a565b60306125769190613ded565b60f81b81838151811061258c5761258b6140f7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125c89190613e43565b9450612546565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61264f838361294b565b61265c60008484846127b4565b61269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269290613996565b60405180910390fd5b505050565b6126ab838383612b19565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ee576126e981612b1e565b61272d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461272c5761272b8382612b67565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127705761276b81612cd4565b6127af565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127ae576127ad8282612da5565b5b5b505050565b60006127d58473ffffffffffffffffffffffffffffffffffffffff16612e24565b1561293e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127fe611f07565b8786866040518563ffffffff1660e01b815260040161282094939291906138a9565b602060405180830381600087803b15801561283a57600080fd5b505af192505050801561286b57506040513d601f19601f820116820180604052508101906128689190613255565b60015b6128ee573d806000811461289b576040519150601f19603f3d011682016040523d82523d6000602084013e6128a0565b606091505b506000815114156128e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dd90613996565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612943565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b290613ad6565b60405180910390fd5b6129c481611f0f565b15612a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fb906139d6565b60405180910390fd5b612a10600083836126a0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a609190613ded565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b7484611528565b612b7e9190613e74565b9050600060076000848152602001908152602001600020549050818114612c63576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ce89190613e74565b9050600060096000848152602001908152602001600020549050600060088381548110612d1857612d176140f7565b5b906000526020600020015490508060088381548110612d3a57612d396140f7565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d8957612d886140c8565b5b6001900381819060005260206000200160009055905550505050565b6000612db083611528565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612e4390613f5e565b90600052602060002090601f016020900481019282612e655760008555612eac565b82601f10612e7e57805160ff1916838001178555612eac565b82800160010185558215612eac579182015b82811115612eab578251825591602001919060010190612e90565b5b509050612eb99190612ebd565b5090565b5b80821115612ed6576000816000905550600101612ebe565b5090565b6000612eed612ee884613cd6565b613cb1565b905082815260208101848484011115612f0957612f0861415a565b5b612f14848285613f1c565b509392505050565b6000612f2f612f2a84613d07565b613cb1565b905082815260208101848484011115612f4b57612f4a61415a565b5b612f56848285613f1c565b509392505050565b600081359050612f6d816147b5565b92915050565b600081359050612f82816147cc565b92915050565b600081359050612f97816147e3565b92915050565b600081519050612fac816147e3565b92915050565b600082601f830112612fc757612fc6614155565b5b8135612fd7848260208601612eda565b91505092915050565b600082601f830112612ff557612ff4614155565b5b8135613005848260208601612f1c565b91505092915050565b60008135905061301d816147fa565b92915050565b600081519050613032816147fa565b92915050565b60006020828403121561304e5761304d614164565b5b600061305c84828501612f5e565b91505092915050565b6000806040838503121561307c5761307b614164565b5b600061308a85828601612f5e565b925050602061309b85828601612f5e565b9150509250929050565b6000806000606084860312156130be576130bd614164565b5b60006130cc86828701612f5e565b93505060206130dd86828701612f5e565b92505060406130ee8682870161300e565b9150509250925092565b6000806000806080858703121561311257613111614164565b5b600061312087828801612f5e565b945050602061313187828801612f5e565b93505060406131428782880161300e565b925050606085013567ffffffffffffffff8111156131635761316261415f565b5b61316f87828801612fb2565b91505092959194509250565b6000806040838503121561319257613191614164565b5b60006131a085828601612f5e565b92505060206131b185828601612f73565b9150509250929050565b600080604083850312156131d2576131d1614164565b5b60006131e085828601612f5e565b92505060206131f18582860161300e565b9150509250929050565b60006020828403121561321157613210614164565b5b600061321f84828501612f73565b91505092915050565b60006020828403121561323e5761323d614164565b5b600061324c84828501612f88565b91505092915050565b60006020828403121561326b5761326a614164565b5b600061327984828501612f9d565b91505092915050565b60006020828403121561329857613297614164565b5b600082013567ffffffffffffffff8111156132b6576132b561415f565b5b6132c284828501612fe0565b91505092915050565b6000602082840312156132e1576132e0614164565b5b60006132ef8482850161300e565b91505092915050565b60006020828403121561330e5761330d614164565b5b600061331c84828501613023565b91505092915050565b60006133318383613355565b60208301905092915050565b6000613349838361384c565b60208301905092915050565b61335e81613ea8565b82525050565b61336d81613ea8565b82525050565b600061337e82613d58565b6133888185613d9e565b935061339383613d38565b8060005b838110156133c45781516133ab8882613325565b97506133b683613d84565b925050600181019050613397565b5085935050505092915050565b60006133dc82613d63565b6133e68185613daf565b93506133f183613d48565b8060005b83811015613422578151613409888261333d565b975061341483613d91565b9250506001810190506133f5565b5085935050505092915050565b61343881613eba565b82525050565b600061344982613d6e565b6134538185613dc0565b9350613463818560208601613f2b565b61346c81614169565b840191505092915050565b600061348282613d79565b61348c8185613dd1565b935061349c818560208601613f2b565b6134a581614169565b840191505092915050565b60006134bb82613d79565b6134c58185613de2565b93506134d5818560208601613f2b565b80840191505092915050565b60006134ee602b83613dd1565b91506134f98261417a565b604082019050919050565b6000613511603283613dd1565b915061351c826141c9565b604082019050919050565b6000613534602683613dd1565b915061353f82614218565b604082019050919050565b6000613557601c83613dd1565b915061356282614267565b602082019050919050565b600061357a601b83613dd1565b915061358582614290565b602082019050919050565b600061359d602483613dd1565b91506135a8826142b9565b604082019050919050565b60006135c0601983613dd1565b91506135cb82614308565b602082019050919050565b60006135e3602c83613dd1565b91506135ee82614331565b604082019050919050565b6000613606603883613dd1565b915061361182614380565b604082019050919050565b6000613629602a83613dd1565b9150613634826143cf565b604082019050919050565b600061364c602983613dd1565b91506136578261441e565b604082019050919050565b600061366f602083613dd1565b915061367a8261446d565b602082019050919050565b6000613692602c83613dd1565b915061369d82614496565b604082019050919050565b60006136b5601c83613dd1565b91506136c0826144e5565b602082019050919050565b60006136d8602083613dd1565b91506136e38261450e565b602082019050919050565b60006136fb602983613dd1565b915061370682614537565b604082019050919050565b600061371e602f83613dd1565b915061372982614586565b604082019050919050565b6000613741602183613dd1565b915061374c826145d5565b604082019050919050565b6000613764603183613dd1565b915061376f82614624565b604082019050919050565b6000613787601183613dd1565b915061379282614673565b602082019050919050565b60006137aa601e83613dd1565b91506137b58261469c565b602082019050919050565b60006137cd602c83613dd1565b91506137d8826146c5565b604082019050919050565b60006137f0601b83613dd1565b91506137fb82614714565b602082019050919050565b6000613813602083613dd1565b915061381e8261473d565b602082019050919050565b6000613836602783613dd1565b915061384182614766565b604082019050919050565b61385581613f12565b82525050565b61386481613f12565b82525050565b600061387682856134b0565b915061388282846134b0565b91508190509392505050565b60006020820190506138a36000830184613364565b92915050565b60006080820190506138be6000830187613364565b6138cb6020830186613364565b6138d8604083018561385b565b81810360608301526138ea818461343e565b905095945050505050565b6000602082019050818103600083015261390f8184613373565b905092915050565b6000602082019050818103600083015261393181846133d1565b905092915050565b600060208201905061394e600083018461342f565b92915050565b6000602082019050818103600083015261396e8184613477565b905092915050565b6000602082019050818103600083015261398f816134e1565b9050919050565b600060208201905081810360008301526139af81613504565b9050919050565b600060208201905081810360008301526139cf81613527565b9050919050565b600060208201905081810360008301526139ef8161354a565b9050919050565b60006020820190508181036000830152613a0f8161356d565b9050919050565b60006020820190508181036000830152613a2f81613590565b9050919050565b60006020820190508181036000830152613a4f816135b3565b9050919050565b60006020820190508181036000830152613a6f816135d6565b9050919050565b60006020820190508181036000830152613a8f816135f9565b9050919050565b60006020820190508181036000830152613aaf8161361c565b9050919050565b60006020820190508181036000830152613acf8161363f565b9050919050565b60006020820190508181036000830152613aef81613662565b9050919050565b60006020820190508181036000830152613b0f81613685565b9050919050565b60006020820190508181036000830152613b2f816136a8565b9050919050565b60006020820190508181036000830152613b4f816136cb565b9050919050565b60006020820190508181036000830152613b6f816136ee565b9050919050565b60006020820190508181036000830152613b8f81613711565b9050919050565b60006020820190508181036000830152613baf81613734565b9050919050565b60006020820190508181036000830152613bcf81613757565b9050919050565b60006020820190508181036000830152613bef8161377a565b9050919050565b60006020820190508181036000830152613c0f8161379d565b9050919050565b60006020820190508181036000830152613c2f816137c0565b9050919050565b60006020820190508181036000830152613c4f816137e3565b9050919050565b60006020820190508181036000830152613c6f81613806565b9050919050565b60006020820190508181036000830152613c8f81613829565b9050919050565b6000602082019050613cab600083018461385b565b92915050565b6000613cbb613ccc565b9050613cc78282613f90565b919050565b6000604051905090565b600067ffffffffffffffff821115613cf157613cf0614126565b5b613cfa82614169565b9050602081019050919050565b600067ffffffffffffffff821115613d2257613d21614126565b5b613d2b82614169565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613df882613f12565b9150613e0383613f12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e3857613e3761403b565b5b828201905092915050565b6000613e4e82613f12565b9150613e5983613f12565b925082613e6957613e6861406a565b5b828204905092915050565b6000613e7f82613f12565b9150613e8a83613f12565b925082821015613e9d57613e9c61403b565b5b828203905092915050565b6000613eb382613ef2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f49578082015181840152602081019050613f2e565b83811115613f58576000848401525b50505050565b60006002820490506001821680613f7657607f821691505b60208210811415613f8a57613f89614099565b5b50919050565b613f9982614169565b810181811067ffffffffffffffff82111715613fb857613fb7614126565b5b80604052505050565b6000613fcc82613f12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fff57613ffe61403b565b5b600182019050919050565b600061401582613f12565b915061402083613f12565b9250826140305761402f61406a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416c6c20466f756e64657220736c6f7473206172652074616b656e0000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f206d6f72652066726565206d696e747320617661696c61626c6500000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b7f45786365656473206d6178696d756d20426c6f6f744d4620737570706c790000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416c6c204469616d6f6e6420736c6f7473206172652074616b656e0000000000600082015250565b7f596f75206e65656420746f20686f6c64206120426c6f6f7420746f206d696e74600082015250565b7f596f752063616e206d696e74206f6e6520426c6f6f744d462070657220426c6f60008201527f6f74206f6e6c7900000000000000000000000000000000000000000000000000602082015250565b6147be81613ea8565b81146147c957600080fd5b50565b6147d581613eba565b81146147e057600080fd5b50565b6147ec81613ec6565b81146147f757600080fd5b50565b61480381613f12565b811461480e57600080fd5b5056fea2646970667358221220bb37a0af8b6107b902a26741fd81ea1acc6e7f24e13c688ee71794996ad04f5064736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d65476b7469415771386b4668456d50755068584e486979624a7265666f39575768776474314a695668726a6d2f00000000000000000000
Deployed Bytecode
0x6080604052600436106101e35760003560e01c8063438b63001161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd146106c8578063db9844d714610705578063e985e9c514610742578063f2fde38b1461077f576101e3565b806395d89b411461060e578063a22cb46514610639578063b88d4fde14610662578063c7b578411461068b576101e3565b806370a08231116100d157806370a0823114610585578063715018a6146105c2578063853828b6146105d95780638da5cb5b146105e3576101e3565b8063438b6300146104a55780634f6ccce7146104e257806355f804b31461051f5780636352211e14610548576101e3565b806318160ddd1161017a5780632f745c59116101495780632f745c59146103e95780633670bab2146104265780633e14c2f61461045157806342842e0e1461047c576101e3565b806318160ddd1461033f5780631c7a99a61461036a57806323b872dd14610395578063268ca7b2146103be576101e3565b8063081812fc116101b6578063081812fc146102a4578063095ea7b3146102e15780631249c58b1461030a57806316c61ccc14610314576101e3565b806301ffc9a7146101e857806302329a2914610225578063065070d91461024e57806306fdde0314610279575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613228565b6107a8565b60405161021c9190613939565b60405180910390f35b34801561023157600080fd5b5061024c600480360381019061024791906131fb565b610822565b005b34801561025a57600080fd5b506102636108bb565b60405161027091906138f5565b60405180910390f35b34801561028557600080fd5b5061028e610949565b60405161029b9190613954565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906132cb565b6109db565b6040516102d8919061388e565b60405180910390f35b3480156102ed57600080fd5b50610308600480360381019061030391906131bb565b610a60565b005b610312610b78565b005b34801561032057600080fd5b506103296110ca565b6040516103369190613939565b60405180910390f35b34801561034b57600080fd5b506103546110dd565b6040516103619190613c96565b60405180910390f35b34801561037657600080fd5b5061037f6110ea565b60405161038c9190613c96565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b791906130a5565b6110f4565b005b3480156103ca57600080fd5b506103d3611154565b6040516103e091906138f5565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906131bb565b6111e2565b60405161041d9190613c96565b60405180910390f35b34801561043257600080fd5b5061043b611287565b6040516104489190613c96565b60405180910390f35b34801561045d57600080fd5b50610466611294565b6040516104739190613c96565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906130a5565b6112a1565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190613038565b6112c1565b6040516104d99190613917565b60405180910390f35b3480156104ee57600080fd5b50610509600480360381019061050491906132cb565b61136f565b6040516105169190613c96565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190613282565b6113e0565b005b34801561055457600080fd5b5061056f600480360381019061056a91906132cb565b611476565b60405161057c919061388e565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613038565b611528565b6040516105b99190613c96565b60405180910390f35b3480156105ce57600080fd5b506105d76115e0565b005b6105e161171d565b005b3480156105ef57600080fd5b506105f86117f3565b604051610605919061388e565b60405180910390f35b34801561061a57600080fd5b5061062361181d565b6040516106309190613954565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b919061317b565b6118af565b005b34801561066e57600080fd5b50610689600480360381019061068491906130f8565b611a30565b005b34801561069757600080fd5b506106b260048036038101906106ad9190613038565b611a92565b6040516106bf9190613939565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea91906132cb565b611ae8565b6040516106fc9190613954565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190613038565b611b8f565b6040516107399190613939565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190613065565b611be5565b6040516107769190613939565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a19190613038565b611c79565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081b575061081a82611e25565b5b9050919050565b61082a611f07565b73ffffffffffffffffffffffffffffffffffffffff166108486117f3565b73ffffffffffffffffffffffffffffffffffffffff161461089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590613b36565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6060600e80548060200260200160405190810160405280929190818152602001828054801561093f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116108f5575b5050505050905090565b60606000805461095890613f5e565b80601f016020809104026020016040519081016040528092919081815260200182805461098490613f5e565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b60006109e682611f0f565b610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90613af6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a6b82611476565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390613b96565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610afb611f07565b73ffffffffffffffffffffffffffffffffffffffff161480610b2a5750610b2981610b24611f07565b611be5565b5b610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090613a76565b60405180910390fd5b610b738383611f7b565b505050565b6000610b826110dd565b9050601160009054906101000a900460ff1615610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb90613bd6565b60405180910390fd5b610bb8600182610be49190613ded565b1115610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c90613bf6565b60405180910390fd5b6001601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610c82919061388e565b60206040518083038186803b158015610c9a57600080fd5b505afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd291906132f8565b1015610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a90613c56565b60405180910390fd5b610d1c33611528565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d77919061388e565b60206040518083038186803b158015610d8f57600080fd5b505afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc791906132f8565b11610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613c76565b60405180910390fd5b6706f05b59d3b200003410610f2b5760646001600d80549050610e2a9190613ded565b1115610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e62906139f6565b60405180910390fd5b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110b1565b67016345785d8a00003410611050576101f46001600e80549050610f4f9190613ded565b1115610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8790613c36565b60405180910390fd5b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600e339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110b0565b610960600f541115611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613b16565b60405180910390fd5b600f60008154809291906110aa90613fc1565b91905055505b5b6110c7336001836110c29190613ded565b612034565b50565b601160009054906101000a900460ff1681565b6000600880549050905090565b6000600f54905090565b6111056110ff611f07565b82612052565b611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613bb6565b60405180910390fd5b61114f838383612130565b505050565b6060600d8054806020026020016040519081016040528092919081815260200182805480156111d857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161118e575b5050505050905090565b60006111ed83611528565b821061122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590613976565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600e80549050905090565b6000600d80549050905090565b6112bc83838360405180602001604052806000815250611a30565b505050565b606060006112ce83611528565b905060008167ffffffffffffffff8111156112ec576112eb614126565b5b60405190808252806020026020018201604052801561131a5781602001602082028036833780820191505090505b50905060005b828110156113645761133285826111e2565b828281518110611345576113446140f7565b5b602002602001018181525050808061135c90613fc1565b915050611320565b508092505050919050565b60006113796110dd565b82106113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190613c16565b60405180910390fd5b600882815481106113ce576113cd6140f7565b5b90600052602060002001549050919050565b6113e8611f07565b73ffffffffffffffffffffffffffffffffffffffff166114066117f3565b73ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390613b36565b60405180910390fd5b8060109080519060200190611472929190612e37565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613ab6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613a96565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e8611f07565b73ffffffffffffffffffffffffffffffffffffffff166116066117f3565b73ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390613b36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611725611f07565b73ffffffffffffffffffffffffffffffffffffffff166117436117f3565b73ffffffffffffffffffffffffffffffffffffffff1614611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090613b36565b60405180910390fd5b6000479050730a0da512157d16f456c837a93a91c12f4b70367273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506117f057600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461182c90613f5e565b80601f016020809104026020016040519081016040528092919081815260200182805461185890613f5e565b80156118a55780601f1061187a576101008083540402835291602001916118a5565b820191906000526020600020905b81548152906001019060200180831161188857829003601f168201915b5050505050905090565b6118b7611f07565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613a36565b60405180910390fd5b8060056000611932611f07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119df611f07565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a249190613939565b60405180910390a35050565b611a41611a3b611f07565b83612052565b611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790613bb6565b60405180910390fd5b611a8c8484848461238c565b50505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060611af382611f0f565b611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2990613b76565b60405180910390fd5b6000611b3c6123e8565b90506000815111611b5c5760405180602001604052806000815250611b87565b80611b668461247a565b604051602001611b7792919061386a565b6040516020818303038152906040525b915050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c81611f07565b73ffffffffffffffffffffffffffffffffffffffff16611c9f6117f3565b73ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613b36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c906139b6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ef057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f005750611eff826125db565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fee83611476565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61204e828260405180602001604052806000815250612645565b5050565b600061205d82611f0f565b61209c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209390613a56565b60405180910390fd5b60006120a783611476565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061211657508373ffffffffffffffffffffffffffffffffffffffff166120fe846109db565b73ffffffffffffffffffffffffffffffffffffffff16145b8061212757506121268185611be5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661215082611476565b73ffffffffffffffffffffffffffffffffffffffff16146121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219d90613b56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220d90613a16565b60405180910390fd5b6122218383836126a0565b61222c600082611f7b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461227c9190613e74565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d39190613ded565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612397848484612130565b6123a3848484846127b4565b6123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990613996565b60405180910390fd5b50505050565b6060601080546123f790613f5e565b80601f016020809104026020016040519081016040528092919081815260200182805461242390613f5e565b80156124705780601f1061244557610100808354040283529160200191612470565b820191906000526020600020905b81548152906001019060200180831161245357829003601f168201915b5050505050905090565b606060008214156124c2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125d6565b600082905060005b600082146124f45780806124dd90613fc1565b915050600a826124ed9190613e43565b91506124ca565b60008167ffffffffffffffff8111156125105761250f614126565b5b6040519080825280601f01601f1916602001820160405280156125425781602001600182028036833780820191505090505b5090505b600085146125cf5760018261255b9190613e74565b9150600a8561256a919061400a565b60306125769190613ded565b60f81b81838151811061258c5761258b6140f7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125c89190613e43565b9450612546565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61264f838361294b565b61265c60008484846127b4565b61269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269290613996565b60405180910390fd5b505050565b6126ab838383612b19565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ee576126e981612b1e565b61272d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461272c5761272b8382612b67565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127705761276b81612cd4565b6127af565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127ae576127ad8282612da5565b5b5b505050565b60006127d58473ffffffffffffffffffffffffffffffffffffffff16612e24565b1561293e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127fe611f07565b8786866040518563ffffffff1660e01b815260040161282094939291906138a9565b602060405180830381600087803b15801561283a57600080fd5b505af192505050801561286b57506040513d601f19601f820116820180604052508101906128689190613255565b60015b6128ee573d806000811461289b576040519150601f19603f3d011682016040523d82523d6000602084013e6128a0565b606091505b506000815114156128e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dd90613996565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612943565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b290613ad6565b60405180910390fd5b6129c481611f0f565b15612a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fb906139d6565b60405180910390fd5b612a10600083836126a0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a609190613ded565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b7484611528565b612b7e9190613e74565b9050600060076000848152602001908152602001600020549050818114612c63576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ce89190613e74565b9050600060096000848152602001908152602001600020549050600060088381548110612d1857612d176140f7565b5b906000526020600020015490508060088381548110612d3a57612d396140f7565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d8957612d886140c8565b5b6001900381819060005260206000200160009055905550505050565b6000612db083611528565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612e4390613f5e565b90600052602060002090601f016020900481019282612e655760008555612eac565b82601f10612e7e57805160ff1916838001178555612eac565b82800160010185558215612eac579182015b82811115612eab578251825591602001919060010190612e90565b5b509050612eb99190612ebd565b5090565b5b80821115612ed6576000816000905550600101612ebe565b5090565b6000612eed612ee884613cd6565b613cb1565b905082815260208101848484011115612f0957612f0861415a565b5b612f14848285613f1c565b509392505050565b6000612f2f612f2a84613d07565b613cb1565b905082815260208101848484011115612f4b57612f4a61415a565b5b612f56848285613f1c565b509392505050565b600081359050612f6d816147b5565b92915050565b600081359050612f82816147cc565b92915050565b600081359050612f97816147e3565b92915050565b600081519050612fac816147e3565b92915050565b600082601f830112612fc757612fc6614155565b5b8135612fd7848260208601612eda565b91505092915050565b600082601f830112612ff557612ff4614155565b5b8135613005848260208601612f1c565b91505092915050565b60008135905061301d816147fa565b92915050565b600081519050613032816147fa565b92915050565b60006020828403121561304e5761304d614164565b5b600061305c84828501612f5e565b91505092915050565b6000806040838503121561307c5761307b614164565b5b600061308a85828601612f5e565b925050602061309b85828601612f5e565b9150509250929050565b6000806000606084860312156130be576130bd614164565b5b60006130cc86828701612f5e565b93505060206130dd86828701612f5e565b92505060406130ee8682870161300e565b9150509250925092565b6000806000806080858703121561311257613111614164565b5b600061312087828801612f5e565b945050602061313187828801612f5e565b93505060406131428782880161300e565b925050606085013567ffffffffffffffff8111156131635761316261415f565b5b61316f87828801612fb2565b91505092959194509250565b6000806040838503121561319257613191614164565b5b60006131a085828601612f5e565b92505060206131b185828601612f73565b9150509250929050565b600080604083850312156131d2576131d1614164565b5b60006131e085828601612f5e565b92505060206131f18582860161300e565b9150509250929050565b60006020828403121561321157613210614164565b5b600061321f84828501612f73565b91505092915050565b60006020828403121561323e5761323d614164565b5b600061324c84828501612f88565b91505092915050565b60006020828403121561326b5761326a614164565b5b600061327984828501612f9d565b91505092915050565b60006020828403121561329857613297614164565b5b600082013567ffffffffffffffff8111156132b6576132b561415f565b5b6132c284828501612fe0565b91505092915050565b6000602082840312156132e1576132e0614164565b5b60006132ef8482850161300e565b91505092915050565b60006020828403121561330e5761330d614164565b5b600061331c84828501613023565b91505092915050565b60006133318383613355565b60208301905092915050565b6000613349838361384c565b60208301905092915050565b61335e81613ea8565b82525050565b61336d81613ea8565b82525050565b600061337e82613d58565b6133888185613d9e565b935061339383613d38565b8060005b838110156133c45781516133ab8882613325565b97506133b683613d84565b925050600181019050613397565b5085935050505092915050565b60006133dc82613d63565b6133e68185613daf565b93506133f183613d48565b8060005b83811015613422578151613409888261333d565b975061341483613d91565b9250506001810190506133f5565b5085935050505092915050565b61343881613eba565b82525050565b600061344982613d6e565b6134538185613dc0565b9350613463818560208601613f2b565b61346c81614169565b840191505092915050565b600061348282613d79565b61348c8185613dd1565b935061349c818560208601613f2b565b6134a581614169565b840191505092915050565b60006134bb82613d79565b6134c58185613de2565b93506134d5818560208601613f2b565b80840191505092915050565b60006134ee602b83613dd1565b91506134f98261417a565b604082019050919050565b6000613511603283613dd1565b915061351c826141c9565b604082019050919050565b6000613534602683613dd1565b915061353f82614218565b604082019050919050565b6000613557601c83613dd1565b915061356282614267565b602082019050919050565b600061357a601b83613dd1565b915061358582614290565b602082019050919050565b600061359d602483613dd1565b91506135a8826142b9565b604082019050919050565b60006135c0601983613dd1565b91506135cb82614308565b602082019050919050565b60006135e3602c83613dd1565b91506135ee82614331565b604082019050919050565b6000613606603883613dd1565b915061361182614380565b604082019050919050565b6000613629602a83613dd1565b9150613634826143cf565b604082019050919050565b600061364c602983613dd1565b91506136578261441e565b604082019050919050565b600061366f602083613dd1565b915061367a8261446d565b602082019050919050565b6000613692602c83613dd1565b915061369d82614496565b604082019050919050565b60006136b5601c83613dd1565b91506136c0826144e5565b602082019050919050565b60006136d8602083613dd1565b91506136e38261450e565b602082019050919050565b60006136fb602983613dd1565b915061370682614537565b604082019050919050565b600061371e602f83613dd1565b915061372982614586565b604082019050919050565b6000613741602183613dd1565b915061374c826145d5565b604082019050919050565b6000613764603183613dd1565b915061376f82614624565b604082019050919050565b6000613787601183613dd1565b915061379282614673565b602082019050919050565b60006137aa601e83613dd1565b91506137b58261469c565b602082019050919050565b60006137cd602c83613dd1565b91506137d8826146c5565b604082019050919050565b60006137f0601b83613dd1565b91506137fb82614714565b602082019050919050565b6000613813602083613dd1565b915061381e8261473d565b602082019050919050565b6000613836602783613dd1565b915061384182614766565b604082019050919050565b61385581613f12565b82525050565b61386481613f12565b82525050565b600061387682856134b0565b915061388282846134b0565b91508190509392505050565b60006020820190506138a36000830184613364565b92915050565b60006080820190506138be6000830187613364565b6138cb6020830186613364565b6138d8604083018561385b565b81810360608301526138ea818461343e565b905095945050505050565b6000602082019050818103600083015261390f8184613373565b905092915050565b6000602082019050818103600083015261393181846133d1565b905092915050565b600060208201905061394e600083018461342f565b92915050565b6000602082019050818103600083015261396e8184613477565b905092915050565b6000602082019050818103600083015261398f816134e1565b9050919050565b600060208201905081810360008301526139af81613504565b9050919050565b600060208201905081810360008301526139cf81613527565b9050919050565b600060208201905081810360008301526139ef8161354a565b9050919050565b60006020820190508181036000830152613a0f8161356d565b9050919050565b60006020820190508181036000830152613a2f81613590565b9050919050565b60006020820190508181036000830152613a4f816135b3565b9050919050565b60006020820190508181036000830152613a6f816135d6565b9050919050565b60006020820190508181036000830152613a8f816135f9565b9050919050565b60006020820190508181036000830152613aaf8161361c565b9050919050565b60006020820190508181036000830152613acf8161363f565b9050919050565b60006020820190508181036000830152613aef81613662565b9050919050565b60006020820190508181036000830152613b0f81613685565b9050919050565b60006020820190508181036000830152613b2f816136a8565b9050919050565b60006020820190508181036000830152613b4f816136cb565b9050919050565b60006020820190508181036000830152613b6f816136ee565b9050919050565b60006020820190508181036000830152613b8f81613711565b9050919050565b60006020820190508181036000830152613baf81613734565b9050919050565b60006020820190508181036000830152613bcf81613757565b9050919050565b60006020820190508181036000830152613bef8161377a565b9050919050565b60006020820190508181036000830152613c0f8161379d565b9050919050565b60006020820190508181036000830152613c2f816137c0565b9050919050565b60006020820190508181036000830152613c4f816137e3565b9050919050565b60006020820190508181036000830152613c6f81613806565b9050919050565b60006020820190508181036000830152613c8f81613829565b9050919050565b6000602082019050613cab600083018461385b565b92915050565b6000613cbb613ccc565b9050613cc78282613f90565b919050565b6000604051905090565b600067ffffffffffffffff821115613cf157613cf0614126565b5b613cfa82614169565b9050602081019050919050565b600067ffffffffffffffff821115613d2257613d21614126565b5b613d2b82614169565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613df882613f12565b9150613e0383613f12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e3857613e3761403b565b5b828201905092915050565b6000613e4e82613f12565b9150613e5983613f12565b925082613e6957613e6861406a565b5b828204905092915050565b6000613e7f82613f12565b9150613e8a83613f12565b925082821015613e9d57613e9c61403b565b5b828203905092915050565b6000613eb382613ef2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f49578082015181840152602081019050613f2e565b83811115613f58576000848401525b50505050565b60006002820490506001821680613f7657607f821691505b60208210811415613f8a57613f89614099565b5b50919050565b613f9982614169565b810181811067ffffffffffffffff82111715613fb857613fb7614126565b5b80604052505050565b6000613fcc82613f12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fff57613ffe61403b565b5b600182019050919050565b600061401582613f12565b915061402083613f12565b9250826140305761402f61406a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416c6c20466f756e64657220736c6f7473206172652074616b656e0000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f206d6f72652066726565206d696e747320617661696c61626c6500000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b7f45786365656473206d6178696d756d20426c6f6f744d4620737570706c790000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416c6c204469616d6f6e6420736c6f7473206172652074616b656e0000000000600082015250565b7f596f75206e65656420746f20686f6c64206120426c6f6f7420746f206d696e74600082015250565b7f596f752063616e206d696e74206f6e6520426c6f6f744d462070657220426c6f60008201527f6f74206f6e6c7900000000000000000000000000000000000000000000000000602082015250565b6147be81613ea8565b81146147c957600080fd5b50565b6147d581613eba565b81146147e057600080fd5b50565b6147ec81613ec6565b81146147f757600080fd5b50565b61480381613f12565b811461480e57600080fd5b5056fea2646970667358221220bb37a0af8b6107b902a26741fd81ea1acc6e7f24e13c688ee71794996ad04f5064736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d65476b7469415771386b4668456d50755068584e486979624a7265666f39575768776474314a695668726a6d2f00000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmeGktiAWq8kFhEmPuPhXNHiybJrefo9WWhwdt1JiVhrjm/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d65476b7469415771386b4668456d50755068584e486979
Arg [3] : 624a7265666f39575768776474314a695668726a6d2f00000000000000000000
Deployed Bytecode Sourcemap
42303:3718:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36131:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45777:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44645:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24391:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25851:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25388:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43334:1067;;;:::i;:::-;;43143:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36784:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45091:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26741:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44758:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36452:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44871:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44981;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27117:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45195:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36974:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45667:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24085:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23815:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20722:148;;;;;;;;;;;;;:::i;:::-;;45859:159;;;:::i;:::-;;20071:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24560:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26144:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27339:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44529:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24735:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44413:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26510:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21025:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36131:237;36233:4;36272:35;36257:50;;;:11;:50;;;;:103;;;;36324:36;36348:11;36324:23;:36::i;:::-;36257:103;36250:110;;36131:237;;;:::o;45777:74::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45840:3:::1;45830:7;;:13;;;;;;;;;;;;;;;;;;45777:74:::0;:::o;44645:101::-;44691:16;44727:11;44720:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44645:101;:::o;24391:100::-;24445:13;24478:5;24471:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24391:100;:::o;25851:221::-;25927:7;25955:16;25963:7;25955;:16::i;:::-;25947:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26040:15;:24;26056:7;26040:24;;;;;;;;;;;;;;;;;;;;;26033:31;;25851:221;;;:::o;25388:397::-;25469:13;25485:23;25500:7;25485:14;:23::i;:::-;25469:39;;25533:5;25527:11;;:2;:11;;;;25519:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25613:5;25597:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25622:37;25639:5;25646:12;:10;:12::i;:::-;25622:16;:37::i;:::-;25597:62;25589:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25756:21;25765:2;25769:7;25756:8;:21::i;:::-;25458:327;25388:397;;:::o;43334:1067::-;43376:14;43393:13;:11;:13::i;:::-;43376:30;;43427:7;;;;;;;;;;;43426:8;43417:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;42429:4;43485:1;43476:6;:10;;;;:::i;:::-;:23;;43468:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43584:1;43553:5;;;;;;;;;;;:15;;;43569:10;43553:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;;43545:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43671:21;43681:10;43671:9;:21::i;:::-;43641:5;;;;;;;;;;;:15;;;43657:10;43641:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;43633:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;42689:9;43761;:29;43757:591;;42576:3;43836:1;43815:11;:18;;;;:22;;;;:::i;:::-;:37;;43807:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43924:4;43899:10;:22;43910:10;43899:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43943:11;43960:10;43943:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43757:591;;;42630:9;43993;:29;43989:359;;42527:3;44068:1;44047:11;:18;;;;:22;;;;:::i;:::-;:37;;44039:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44156:4;44131:10;:22;44142:10;44131:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44175:11;44192:10;44175:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43989:359;;;42477:4;44244:15;;:27;;44236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44319:15;;:17;;;;;;;;;:::i;:::-;;;;;;43989:359;43757:591;44360:33;44370:10;44391:1;44382:6;:10;;;;:::i;:::-;44360:9;:33::i;:::-;43365:1036;43334:1067::o;43143:26::-;;;;;;;;;;;;;:::o;36784:113::-;36845:7;36872:10;:17;;;;36865:24;;36784:113;:::o;45091:96::-;45140:4;45164:15;;45157:22;;45091:96;:::o;26741:305::-;26902:41;26921:12;:10;:12::i;:::-;26935:7;26902:18;:41::i;:::-;26894:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27010:28;27020:4;27026:2;27030:7;27010:9;:28::i;:::-;26741:305;;;:::o;44758:101::-;44804:16;44840:11;44833:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44758:101;:::o;36452:256::-;36549:7;36585:23;36602:5;36585:16;:23::i;:::-;36577:5;:31;36569:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36674:12;:19;36687:5;36674:19;;;;;;;;;;;;;;;:26;36694:5;36674:26;;;;;;;;;;;;36667:33;;36452:256;;;;:::o;44871:98::-;44919:4;44943:11;:18;;;;44936:25;;44871:98;:::o;44981:::-;45029:4;45053:11;:18;;;;45046:25;;44981:98;:::o;27117:151::-;27221:39;27238:4;27244:2;27248:7;27221:39;;;;;;;;;;;;:16;:39::i;:::-;27117:151;;;:::o;45195:342::-;45254:16;45283:18;45304:17;45314:6;45304:9;:17::i;:::-;45283:38;;45334:25;45376:10;45362:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45334:53;;45402:9;45398:106;45417:10;45413:1;:14;45398:106;;;45462:30;45482:6;45490:1;45462:19;:30::i;:::-;45448:8;45457:1;45448:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45429:3;;;;;:::i;:::-;;;;45398:106;;;;45521:8;45514:15;;;;45195:342;;;:::o;36974:233::-;37049:7;37085:30;:28;:30::i;:::-;37077:5;:38;37069:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37182:10;37193:5;37182:17;;;;;;;;:::i;:::-;;;;;;;;;;37175:24;;36974:233;;;:::o;45667:102::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45754:7:::1;45738:13;:23;;;;;;;;;;;;:::i;:::-;;45667:102:::0;:::o;24085:239::-;24157:7;24177:13;24193:7;:16;24201:7;24193:16;;;;;;;;;;;;;;;;;;;;;24177:32;;24245:1;24228:19;;:5;:19;;;;24220:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24311:5;24304:12;;;24085:239;;;:::o;23815:208::-;23887:7;23932:1;23915:19;;:5;:19;;;;23907:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23999:9;:16;24009:5;23999:16;;;;;;;;;;;;;;;;23992:23;;23815:208;;;:::o;20722:148::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20829:1:::1;20792:40;;20813:6;;;;;;;;;;;20792:40;;;;;;;;;;;;20860:1;20843:6;;:19;;;;;;;;;;;;;;;;;;20722:148::o:0;45859:159::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45918:11:::1;45932:21;45918:35;;42751:42;45972:32;;:37;46005:3;45972:37;;;;;;;;;;;;;;;;;;;;;;;45964:46;;;::::0;::::1;;45907:111;45859:159::o:0;20071:87::-;20117:7;20144:6;;;;;;;;;;;20137:13;;20071:87;:::o;24560:104::-;24616:13;24649:7;24642:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24560:104;:::o;26144:295::-;26259:12;:10;:12::i;:::-;26247:24;;:8;:24;;;;26239:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26359:8;26314:18;:32;26333:12;:10;:12::i;:::-;26314:32;;;;;;;;;;;;;;;:42;26347:8;26314:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26412:8;26383:48;;26398:12;:10;:12::i;:::-;26383:48;;;26422:8;26383:48;;;;;;:::i;:::-;;;;;;;;26144:295;;:::o;27339:285::-;27471:41;27490:12;:10;:12::i;:::-;27504:7;27471:18;:41::i;:::-;27463:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27577:39;27591:4;27597:2;27601:7;27610:5;27577:13;:39::i;:::-;27339:285;;;;:::o;44529:104::-;44584:4;44608:10;:17;44619:5;44608:17;;;;;;;;;;;;;;;;;;;;;;;;;44601:24;;44529:104;;;:::o;24735:360::-;24808:13;24842:16;24850:7;24842;:16::i;:::-;24834:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24923:21;24947:10;:8;:10::i;:::-;24923:34;;24999:1;24981:7;24975:21;:25;:112;;;;;;;;;;;;;;;;;25040:7;25049:18;:7;:16;:18::i;:::-;25023:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24975:112;24968:119;;;24735:360;;;:::o;44413:104::-;44468:4;44492:10;:17;44503:5;44492:17;;;;;;;;;;;;;;;;;;;;;;;;;44485:24;;44413:104;;;:::o;26510:164::-;26607:4;26631:18;:25;26650:5;26631:25;;;;;;;;;;;;;;;:35;26657:8;26631:35;;;;;;;;;;;;;;;;;;;;;;;;;26624:42;;26510:164;;;;:::o;21025:244::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21134:1:::1;21114:22;;:8;:22;;;;21106:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21224:8;21195:38;;21216:6;;;;;;;;;;;21195:38;;;;;;;;;;;;21253:8;21244:6;;:17;;;;;;;;;;;;;;;;;;21025:244:::0;:::o;23459:292::-;23561:4;23600:25;23585:40;;;:11;:40;;;;:105;;;;23657:33;23642:48;;;:11;:48;;;;23585:105;:158;;;;23707:36;23731:11;23707:23;:36::i;:::-;23585:158;23578:165;;23459:292;;;:::o;18670:98::-;18723:7;18750:10;18743:17;;18670:98;:::o;29091:127::-;29156:4;29208:1;29180:30;;:7;:16;29188:7;29180:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29173:37;;29091:127;;;:::o;32968:174::-;33070:2;33043:15;:24;33059:7;33043:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33126:7;33122:2;33088:46;;33097:23;33112:7;33097:14;:23::i;:::-;33088:46;;;;;;;;;;;;32968:174;;:::o;30075:110::-;30151:26;30161:2;30165:7;30151:26;;;;;;;;;;;;:9;:26::i;:::-;30075:110;;:::o;29385:348::-;29478:4;29503:16;29511:7;29503;:16::i;:::-;29495:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29579:13;29595:23;29610:7;29595:14;:23::i;:::-;29579:39;;29648:5;29637:16;;:7;:16;;;:51;;;;29681:7;29657:31;;:20;29669:7;29657:11;:20::i;:::-;:31;;;29637:51;:87;;;;29692:32;29709:5;29716:7;29692:16;:32::i;:::-;29637:87;29629:96;;;29385:348;;;;:::o;32306:544::-;32431:4;32404:31;;:23;32419:7;32404:14;:23::i;:::-;:31;;;32396:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32514:1;32500:16;;:2;:16;;;;32492:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32570:39;32591:4;32597:2;32601:7;32570:20;:39::i;:::-;32674:29;32691:1;32695:7;32674:8;:29::i;:::-;32735:1;32716:9;:15;32726:4;32716:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32764:1;32747:9;:13;32757:2;32747:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32795:2;32776:7;:16;32784:7;32776:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32834:7;32830:2;32815:27;;32824:4;32815:27;;;;;;;;;;;;32306:544;;;:::o;28506:272::-;28620:28;28630:4;28636:2;28640:7;28620:9;:28::i;:::-;28667:48;28690:4;28696:2;28700:7;28709:5;28667:22;:48::i;:::-;28659:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28506:272;;;;:::o;45545:114::-;45605:13;45638;45631:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45545:114;:::o;8374:723::-;8430:13;8660:1;8651:5;:10;8647:53;;;8678:10;;;;;;;;;;;;;;;;;;;;;8647:53;8710:12;8725:5;8710:20;;8741:14;8766:78;8781:1;8773:4;:9;8766:78;;8799:8;;;;;:::i;:::-;;;;8830:2;8822:10;;;;;:::i;:::-;;;8766:78;;;8854:19;8886:6;8876:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8854:39;;8904:154;8920:1;8911:5;:10;8904:154;;8948:1;8938:11;;;;;:::i;:::-;;;9015:2;9007:5;:10;;;;:::i;:::-;8994:2;:24;;;;:::i;:::-;8981:39;;8964:6;8971;8964:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9044:2;9035:11;;;;;:::i;:::-;;;8904:154;;;9082:6;9068:21;;;;;8374:723;;;;:::o;22018:157::-;22103:4;22142:25;22127:40;;;:11;:40;;;;22120:47;;22018:157;;;:::o;30412:250::-;30508:18;30514:2;30518:7;30508:5;:18::i;:::-;30545:54;30576:1;30580:2;30584:7;30593:5;30545:22;:54::i;:::-;30537:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;30412:250;;;:::o;37820:555::-;37930:45;37957:4;37963:2;37967:7;37930:26;:45::i;:::-;38008:1;37992:18;;:4;:18;;;37988:187;;;38027:40;38059:7;38027:31;:40::i;:::-;37988:187;;;38097:2;38089:10;;:4;:10;;;38085:90;;38116:47;38149:4;38155:7;38116:32;:47::i;:::-;38085:90;37988:187;38203:1;38189:16;;:2;:16;;;38185:183;;;38222:45;38259:7;38222:36;:45::i;:::-;38185:183;;;38295:4;38289:10;;:2;:10;;;38285:83;;38316:40;38344:2;38348:7;38316:27;:40::i;:::-;38285:83;38185:183;37820:555;;;:::o;33707:843::-;33828:4;33854:15;:2;:13;;;:15::i;:::-;33850:693;;;33906:2;33890:36;;;33927:12;:10;:12::i;:::-;33941:4;33947:7;33956:5;33890:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33886:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34153:1;34136:6;:13;:18;34132:341;;;34179:60;;;;;;;;;;:::i;:::-;;;;;;;;34132:341;34423:6;34417:13;34408:6;34404:2;34400:15;34393:38;33886:602;34023:45;;;34013:55;;;:6;:55;;;;34006:62;;;;;33850:693;34527:4;34520:11;;33707:843;;;;;;;:::o;30998:382::-;31092:1;31078:16;;:2;:16;;;;31070:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31151:16;31159:7;31151;:16::i;:::-;31150:17;31142:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31213:45;31242:1;31246:2;31250:7;31213:20;:45::i;:::-;31288:1;31271:9;:13;31281:2;31271:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31319:2;31300:7;:16;31308:7;31300:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31364:7;31360:2;31339:33;;31356:1;31339:33;;;;;;;;;;;;30998:382;;:::o;35163:93::-;;;;:::o;39098:164::-;39202:10;:17;;;;39175:15;:24;39191:7;39175:24;;;;;;;;;;;:44;;;;39230:10;39246:7;39230:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39098:164;:::o;39889:988::-;40155:22;40205:1;40180:22;40197:4;40180:16;:22::i;:::-;:26;;;;:::i;:::-;40155:51;;40217:18;40238:17;:26;40256:7;40238:26;;;;;;;;;;;;40217:47;;40385:14;40371:10;:28;40367:328;;40416:19;40438:12;:18;40451:4;40438:18;;;;;;;;;;;;;;;:34;40457:14;40438:34;;;;;;;;;;;;40416:56;;40522:11;40489:12;:18;40502:4;40489:18;;;;;;;;;;;;;;;:30;40508:10;40489:30;;;;;;;;;;;:44;;;;40639:10;40606:17;:30;40624:11;40606:30;;;;;;;;;;;:43;;;;40401:294;40367:328;40791:17;:26;40809:7;40791:26;;;;;;;;;;;40784:33;;;40835:12;:18;40848:4;40835:18;;;;;;;;;;;;;;;:34;40854:14;40835:34;;;;;;;;;;;40828:41;;;39970:907;;39889:988;;:::o;41172:1079::-;41425:22;41470:1;41450:10;:17;;;;:21;;;;:::i;:::-;41425:46;;41482:18;41503:15;:24;41519:7;41503:24;;;;;;;;;;;;41482:45;;41854:19;41876:10;41887:14;41876:26;;;;;;;;:::i;:::-;;;;;;;;;;41854:48;;41940:11;41915:10;41926;41915:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42051:10;42020:15;:28;42036:11;42020:28;;;;;;;;;;;:41;;;;42192:15;:24;42208:7;42192:24;;;;;;;;;;;42185:31;;;42227:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41243:1008;;;41172:1079;:::o;38676:221::-;38761:14;38778:20;38795:2;38778:16;:20::i;:::-;38761:37;;38836:7;38809:12;:16;38822:2;38809:16;;;;;;;;;;;;;;;:24;38826:6;38809:24;;;;;;;;;;;:34;;;;38883:6;38854:17;:26;38872:7;38854:26;;;;;;;;;;;:35;;;;38750:147;38676:221;;:::o;848:422::-;908:4;1116:12;1227:7;1215:20;1207:28;;1261:1;1254:4;:8;1247:15;;;848:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2277:143;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:119;;;2892:79;;:::i;:::-;2854:119;3012:1;3037:53;3082:7;3073:6;3062:9;3058:22;3037:53;:::i;:::-;3027:63;;2983:117;3139:2;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3110:118;2761:474;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:119;;;3389:79;;:::i;:::-;3351:119;3509:1;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3480:117;3636:2;3662:53;3707:7;3698:6;3687:9;3683:22;3662:53;:::i;:::-;3652:63;;3607:118;3764:2;3790:53;3835:7;3826:6;3815:9;3811:22;3790:53;:::i;:::-;3780:63;;3735:118;3241:619;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:120;;;4041:79;;:::i;:::-;4002:120;4161:1;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4132:117;4288:2;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4259:118;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4572:2;4561:9;4557:18;4544:32;4603:18;4595:6;4592:30;4589:117;;;4625:79;;:::i;:::-;4589:117;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3866:943;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:119;;;4943:79;;:::i;:::-;4905:119;5063:1;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5034:117;5190:2;5216:50;5258:7;5249:6;5238:9;5234:22;5216:50;:::i;:::-;5206:60;;5161:115;4815:468;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:119;;;5420:79;;:::i;:::-;5382:119;5540:1;5565:53;5610:7;5601:6;5590:9;5586:22;5565:53;:::i;:::-;5555:63;;5511:117;5667:2;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5638:118;5289:474;;;;;:::o;5769:323::-;5825:6;5874:2;5862:9;5853:7;5849:23;5845:32;5842:119;;;5880:79;;:::i;:::-;5842:119;6000:1;6025:50;6067:7;6058:6;6047:9;6043:22;6025:50;:::i;:::-;6015:60;;5971:114;5769:323;;;;:::o;6098:327::-;6156:6;6205:2;6193:9;6184:7;6180:23;6176:32;6173:119;;;6211:79;;:::i;:::-;6173:119;6331:1;6356:52;6400:7;6391:6;6380:9;6376:22;6356:52;:::i;:::-;6346:62;;6302:116;6098:327;;;;:::o;6431:349::-;6500:6;6549:2;6537:9;6528:7;6524:23;6520:32;6517:119;;;6555:79;;:::i;:::-;6517:119;6675:1;6700:63;6755:7;6746:6;6735:9;6731:22;6700:63;:::i;:::-;6690:73;;6646:127;6431:349;;;;:::o;6786:509::-;6855:6;6904:2;6892:9;6883:7;6879:23;6875:32;6872:119;;;6910:79;;:::i;:::-;6872:119;7058:1;7047:9;7043:17;7030:31;7088:18;7080:6;7077:30;7074:117;;;7110:79;;:::i;:::-;7074:117;7215:63;7270:7;7261:6;7250:9;7246:22;7215:63;:::i;:::-;7205:73;;7001:287;6786:509;;;;:::o;7301:329::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:119;;;7415:79;;:::i;:::-;7377:119;7535:1;7560:53;7605:7;7596:6;7585:9;7581:22;7560:53;:::i;:::-;7550:63;;7506:117;7301:329;;;;:::o;7636:351::-;7706:6;7755:2;7743:9;7734:7;7730:23;7726:32;7723:119;;;7761:79;;:::i;:::-;7723:119;7881:1;7906:64;7962:7;7953:6;7942:9;7938:22;7906:64;:::i;:::-;7896:74;;7852:128;7636:351;;;;:::o;7993:179::-;8062:10;8083:46;8125:3;8117:6;8083:46;:::i;:::-;8161:4;8156:3;8152:14;8138:28;;7993:179;;;;:::o;8178:::-;8247:10;8268:46;8310:3;8302:6;8268:46;:::i;:::-;8346:4;8341:3;8337:14;8323:28;;8178:179;;;;:::o;8363:108::-;8440:24;8458:5;8440:24;:::i;:::-;8435:3;8428:37;8363:108;;:::o;8477:118::-;8564:24;8582:5;8564:24;:::i;:::-;8559:3;8552:37;8477:118;;:::o;8631:732::-;8750:3;8779:54;8827:5;8779:54;:::i;:::-;8849:86;8928:6;8923:3;8849:86;:::i;:::-;8842:93;;8959:56;9009:5;8959:56;:::i;:::-;9038:7;9069:1;9054:284;9079:6;9076:1;9073:13;9054:284;;;9155:6;9149:13;9182:63;9241:3;9226:13;9182:63;:::i;:::-;9175:70;;9268:60;9321:6;9268:60;:::i;:::-;9258:70;;9114:224;9101:1;9098;9094:9;9089:14;;9054:284;;;9058:14;9354:3;9347:10;;8755:608;;;8631:732;;;;:::o;9399:::-;9518:3;9547:54;9595:5;9547:54;:::i;:::-;9617:86;9696:6;9691:3;9617:86;:::i;:::-;9610:93;;9727:56;9777:5;9727:56;:::i;:::-;9806:7;9837:1;9822:284;9847:6;9844:1;9841:13;9822:284;;;9923:6;9917:13;9950:63;10009:3;9994:13;9950:63;:::i;:::-;9943:70;;10036:60;10089:6;10036:60;:::i;:::-;10026:70;;9882:224;9869:1;9866;9862:9;9857:14;;9822:284;;;9826:14;10122:3;10115:10;;9523:608;;;9399:732;;;;:::o;10137:109::-;10218:21;10233:5;10218:21;:::i;:::-;10213:3;10206:34;10137:109;;:::o;10252:360::-;10338:3;10366:38;10398:5;10366:38;:::i;:::-;10420:70;10483:6;10478:3;10420:70;:::i;:::-;10413:77;;10499:52;10544:6;10539:3;10532:4;10525:5;10521:16;10499:52;:::i;:::-;10576:29;10598:6;10576:29;:::i;:::-;10571:3;10567:39;10560:46;;10342:270;10252:360;;;;:::o;10618:364::-;10706:3;10734:39;10767:5;10734:39;:::i;:::-;10789:71;10853:6;10848:3;10789:71;:::i;:::-;10782:78;;10869:52;10914:6;10909:3;10902:4;10895:5;10891:16;10869:52;:::i;:::-;10946:29;10968:6;10946:29;:::i;:::-;10941:3;10937:39;10930:46;;10710:272;10618:364;;;;:::o;10988:377::-;11094:3;11122:39;11155:5;11122:39;:::i;:::-;11177:89;11259:6;11254:3;11177:89;:::i;:::-;11170:96;;11275:52;11320:6;11315:3;11308:4;11301:5;11297:16;11275:52;:::i;:::-;11352:6;11347:3;11343:16;11336:23;;11098:267;10988:377;;;;:::o;11371:366::-;11513:3;11534:67;11598:2;11593:3;11534:67;:::i;:::-;11527:74;;11610:93;11699:3;11610:93;:::i;:::-;11728:2;11723:3;11719:12;11712:19;;11371:366;;;:::o;11743:::-;11885:3;11906:67;11970:2;11965:3;11906:67;:::i;:::-;11899:74;;11982:93;12071:3;11982:93;:::i;:::-;12100:2;12095:3;12091:12;12084:19;;11743:366;;;:::o;12115:::-;12257:3;12278:67;12342:2;12337:3;12278:67;:::i;:::-;12271:74;;12354:93;12443:3;12354:93;:::i;:::-;12472:2;12467:3;12463:12;12456:19;;12115:366;;;:::o;12487:::-;12629:3;12650:67;12714:2;12709:3;12650:67;:::i;:::-;12643:74;;12726:93;12815:3;12726:93;:::i;:::-;12844:2;12839:3;12835:12;12828:19;;12487:366;;;:::o;12859:::-;13001:3;13022:67;13086:2;13081:3;13022:67;:::i;:::-;13015:74;;13098:93;13187:3;13098:93;:::i;:::-;13216:2;13211:3;13207:12;13200:19;;12859:366;;;:::o;13231:::-;13373:3;13394:67;13458:2;13453:3;13394:67;:::i;:::-;13387:74;;13470:93;13559:3;13470:93;:::i;:::-;13588:2;13583:3;13579:12;13572:19;;13231:366;;;:::o;13603:::-;13745:3;13766:67;13830:2;13825:3;13766:67;:::i;:::-;13759:74;;13842:93;13931:3;13842:93;:::i;:::-;13960:2;13955:3;13951:12;13944:19;;13603:366;;;:::o;13975:::-;14117:3;14138:67;14202:2;14197:3;14138:67;:::i;:::-;14131:74;;14214:93;14303:3;14214:93;:::i;:::-;14332:2;14327:3;14323:12;14316:19;;13975:366;;;:::o;14347:::-;14489:3;14510:67;14574:2;14569:3;14510:67;:::i;:::-;14503:74;;14586:93;14675:3;14586:93;:::i;:::-;14704:2;14699:3;14695:12;14688:19;;14347:366;;;:::o;14719:::-;14861:3;14882:67;14946:2;14941:3;14882:67;:::i;:::-;14875:74;;14958:93;15047:3;14958:93;:::i;:::-;15076:2;15071:3;15067:12;15060:19;;14719:366;;;:::o;15091:::-;15233:3;15254:67;15318:2;15313:3;15254:67;:::i;:::-;15247:74;;15330:93;15419:3;15330:93;:::i;:::-;15448:2;15443:3;15439:12;15432:19;;15091:366;;;:::o;15463:::-;15605:3;15626:67;15690:2;15685:3;15626:67;:::i;:::-;15619:74;;15702:93;15791:3;15702:93;:::i;:::-;15820:2;15815:3;15811:12;15804:19;;15463:366;;;:::o;15835:::-;15977:3;15998:67;16062:2;16057:3;15998:67;:::i;:::-;15991:74;;16074:93;16163:3;16074:93;:::i;:::-;16192:2;16187:3;16183:12;16176:19;;15835:366;;;:::o;16207:::-;16349:3;16370:67;16434:2;16429:3;16370:67;:::i;:::-;16363:74;;16446:93;16535:3;16446:93;:::i;:::-;16564:2;16559:3;16555:12;16548:19;;16207:366;;;:::o;16579:::-;16721:3;16742:67;16806:2;16801:3;16742:67;:::i;:::-;16735:74;;16818:93;16907:3;16818:93;:::i;:::-;16936:2;16931:3;16927:12;16920:19;;16579:366;;;:::o;16951:::-;17093:3;17114:67;17178:2;17173:3;17114:67;:::i;:::-;17107:74;;17190:93;17279:3;17190:93;:::i;:::-;17308:2;17303:3;17299:12;17292:19;;16951:366;;;:::o;17323:::-;17465:3;17486:67;17550:2;17545:3;17486:67;:::i;:::-;17479:74;;17562:93;17651:3;17562:93;:::i;:::-;17680:2;17675:3;17671:12;17664:19;;17323:366;;;:::o;17695:::-;17837:3;17858:67;17922:2;17917:3;17858:67;:::i;:::-;17851:74;;17934:93;18023:3;17934:93;:::i;:::-;18052:2;18047:3;18043:12;18036:19;;17695:366;;;:::o;18067:::-;18209:3;18230:67;18294:2;18289:3;18230:67;:::i;:::-;18223:74;;18306:93;18395:3;18306:93;:::i;:::-;18424:2;18419:3;18415:12;18408:19;;18067:366;;;:::o;18439:::-;18581:3;18602:67;18666:2;18661:3;18602:67;:::i;:::-;18595:74;;18678:93;18767:3;18678:93;:::i;:::-;18796:2;18791:3;18787:12;18780:19;;18439:366;;;:::o;18811:::-;18953:3;18974:67;19038:2;19033:3;18974:67;:::i;:::-;18967:74;;19050:93;19139:3;19050:93;:::i;:::-;19168:2;19163:3;19159:12;19152:19;;18811:366;;;:::o;19183:::-;19325:3;19346:67;19410:2;19405:3;19346:67;:::i;:::-;19339:74;;19422:93;19511:3;19422:93;:::i;:::-;19540:2;19535:3;19531:12;19524:19;;19183:366;;;:::o;19555:::-;19697:3;19718:67;19782:2;19777:3;19718:67;:::i;:::-;19711:74;;19794:93;19883:3;19794:93;:::i;:::-;19912:2;19907:3;19903:12;19896:19;;19555:366;;;:::o;19927:::-;20069:3;20090:67;20154:2;20149:3;20090:67;:::i;:::-;20083:74;;20166:93;20255:3;20166:93;:::i;:::-;20284:2;20279:3;20275:12;20268:19;;19927:366;;;:::o;20299:::-;20441:3;20462:67;20526:2;20521:3;20462:67;:::i;:::-;20455:74;;20538:93;20627:3;20538:93;:::i;:::-;20656:2;20651:3;20647:12;20640:19;;20299:366;;;:::o;20671:108::-;20748:24;20766:5;20748:24;:::i;:::-;20743:3;20736:37;20671:108;;:::o;20785:118::-;20872:24;20890:5;20872:24;:::i;:::-;20867:3;20860:37;20785:118;;:::o;20909:435::-;21089:3;21111:95;21202:3;21193:6;21111:95;:::i;:::-;21104:102;;21223:95;21314:3;21305:6;21223:95;:::i;:::-;21216:102;;21335:3;21328:10;;20909:435;;;;;:::o;21350:222::-;21443:4;21481:2;21470:9;21466:18;21458:26;;21494:71;21562:1;21551:9;21547:17;21538:6;21494:71;:::i;:::-;21350:222;;;;:::o;21578:640::-;21773:4;21811:3;21800:9;21796:19;21788:27;;21825:71;21893:1;21882:9;21878:17;21869:6;21825:71;:::i;:::-;21906:72;21974:2;21963:9;21959:18;21950:6;21906:72;:::i;:::-;21988;22056:2;22045:9;22041:18;22032:6;21988:72;:::i;:::-;22107:9;22101:4;22097:20;22092:2;22081:9;22077:18;22070:48;22135:76;22206:4;22197:6;22135:76;:::i;:::-;22127:84;;21578:640;;;;;;;:::o;22224:373::-;22367:4;22405:2;22394:9;22390:18;22382:26;;22454:9;22448:4;22444:20;22440:1;22429:9;22425:17;22418:47;22482:108;22585:4;22576:6;22482:108;:::i;:::-;22474:116;;22224:373;;;;:::o;22603:::-;22746:4;22784:2;22773:9;22769:18;22761:26;;22833:9;22827:4;22823:20;22819:1;22808:9;22804:17;22797:47;22861:108;22964:4;22955:6;22861:108;:::i;:::-;22853:116;;22603:373;;;;:::o;22982:210::-;23069:4;23107:2;23096:9;23092:18;23084:26;;23120:65;23182:1;23171:9;23167:17;23158:6;23120:65;:::i;:::-;22982:210;;;;:::o;23198:313::-;23311:4;23349:2;23338:9;23334:18;23326:26;;23398:9;23392:4;23388:20;23384:1;23373:9;23369:17;23362:47;23426:78;23499:4;23490:6;23426:78;:::i;:::-;23418:86;;23198:313;;;;:::o;23517:419::-;23683:4;23721:2;23710:9;23706:18;23698:26;;23770:9;23764:4;23760:20;23756:1;23745:9;23741:17;23734:47;23798:131;23924:4;23798:131;:::i;:::-;23790:139;;23517:419;;;:::o;23942:::-;24108:4;24146:2;24135:9;24131:18;24123:26;;24195:9;24189:4;24185:20;24181:1;24170:9;24166:17;24159:47;24223:131;24349:4;24223:131;:::i;:::-;24215:139;;23942:419;;;:::o;24367:::-;24533:4;24571:2;24560:9;24556:18;24548:26;;24620:9;24614:4;24610:20;24606:1;24595:9;24591:17;24584:47;24648:131;24774:4;24648:131;:::i;:::-;24640:139;;24367:419;;;:::o;24792:::-;24958:4;24996:2;24985:9;24981:18;24973:26;;25045:9;25039:4;25035:20;25031:1;25020:9;25016:17;25009:47;25073:131;25199:4;25073:131;:::i;:::-;25065:139;;24792:419;;;:::o;25217:::-;25383:4;25421:2;25410:9;25406:18;25398:26;;25470:9;25464:4;25460:20;25456:1;25445:9;25441:17;25434:47;25498:131;25624:4;25498:131;:::i;:::-;25490:139;;25217:419;;;:::o;25642:::-;25808:4;25846:2;25835:9;25831:18;25823:26;;25895:9;25889:4;25885:20;25881:1;25870:9;25866:17;25859:47;25923:131;26049:4;25923:131;:::i;:::-;25915:139;;25642:419;;;:::o;26067:::-;26233:4;26271:2;26260:9;26256:18;26248:26;;26320:9;26314:4;26310:20;26306:1;26295:9;26291:17;26284:47;26348:131;26474:4;26348:131;:::i;:::-;26340:139;;26067:419;;;:::o;26492:::-;26658:4;26696:2;26685:9;26681:18;26673:26;;26745:9;26739:4;26735:20;26731:1;26720:9;26716:17;26709:47;26773:131;26899:4;26773:131;:::i;:::-;26765:139;;26492:419;;;:::o;26917:::-;27083:4;27121:2;27110:9;27106:18;27098:26;;27170:9;27164:4;27160:20;27156:1;27145:9;27141:17;27134:47;27198:131;27324:4;27198:131;:::i;:::-;27190:139;;26917:419;;;:::o;27342:::-;27508:4;27546:2;27535:9;27531:18;27523:26;;27595:9;27589:4;27585:20;27581:1;27570:9;27566:17;27559:47;27623:131;27749:4;27623:131;:::i;:::-;27615:139;;27342:419;;;:::o;27767:::-;27933:4;27971:2;27960:9;27956:18;27948:26;;28020:9;28014:4;28010:20;28006:1;27995:9;27991:17;27984:47;28048:131;28174:4;28048:131;:::i;:::-;28040:139;;27767:419;;;:::o;28192:::-;28358:4;28396:2;28385:9;28381:18;28373:26;;28445:9;28439:4;28435:20;28431:1;28420:9;28416:17;28409:47;28473:131;28599:4;28473:131;:::i;:::-;28465:139;;28192:419;;;:::o;28617:::-;28783:4;28821:2;28810:9;28806:18;28798:26;;28870:9;28864:4;28860:20;28856:1;28845:9;28841:17;28834:47;28898:131;29024:4;28898:131;:::i;:::-;28890:139;;28617:419;;;:::o;29042:::-;29208:4;29246:2;29235:9;29231:18;29223:26;;29295:9;29289:4;29285:20;29281:1;29270:9;29266:17;29259:47;29323:131;29449:4;29323:131;:::i;:::-;29315:139;;29042:419;;;:::o;29467:::-;29633:4;29671:2;29660:9;29656:18;29648:26;;29720:9;29714:4;29710:20;29706:1;29695:9;29691:17;29684:47;29748:131;29874:4;29748:131;:::i;:::-;29740:139;;29467:419;;;:::o;29892:::-;30058:4;30096:2;30085:9;30081:18;30073:26;;30145:9;30139:4;30135:20;30131:1;30120:9;30116:17;30109:47;30173:131;30299:4;30173:131;:::i;:::-;30165:139;;29892:419;;;:::o;30317:::-;30483:4;30521:2;30510:9;30506:18;30498:26;;30570:9;30564:4;30560:20;30556:1;30545:9;30541:17;30534:47;30598:131;30724:4;30598:131;:::i;:::-;30590:139;;30317:419;;;:::o;30742:::-;30908:4;30946:2;30935:9;30931:18;30923:26;;30995:9;30989:4;30985:20;30981:1;30970:9;30966:17;30959:47;31023:131;31149:4;31023:131;:::i;:::-;31015:139;;30742:419;;;:::o;31167:::-;31333:4;31371:2;31360:9;31356:18;31348:26;;31420:9;31414:4;31410:20;31406:1;31395:9;31391:17;31384:47;31448:131;31574:4;31448:131;:::i;:::-;31440:139;;31167:419;;;:::o;31592:::-;31758:4;31796:2;31785:9;31781:18;31773:26;;31845:9;31839:4;31835:20;31831:1;31820:9;31816:17;31809:47;31873:131;31999:4;31873:131;:::i;:::-;31865:139;;31592:419;;;:::o;32017:::-;32183:4;32221:2;32210:9;32206:18;32198:26;;32270:9;32264:4;32260:20;32256:1;32245:9;32241:17;32234:47;32298:131;32424:4;32298:131;:::i;:::-;32290:139;;32017:419;;;:::o;32442:::-;32608:4;32646:2;32635:9;32631:18;32623:26;;32695:9;32689:4;32685:20;32681:1;32670:9;32666:17;32659:47;32723:131;32849:4;32723:131;:::i;:::-;32715:139;;32442:419;;;:::o;32867:::-;33033:4;33071:2;33060:9;33056:18;33048:26;;33120:9;33114:4;33110:20;33106:1;33095:9;33091:17;33084:47;33148:131;33274:4;33148:131;:::i;:::-;33140:139;;32867:419;;;:::o;33292:::-;33458:4;33496:2;33485:9;33481:18;33473:26;;33545:9;33539:4;33535:20;33531:1;33520:9;33516:17;33509:47;33573:131;33699:4;33573:131;:::i;:::-;33565:139;;33292:419;;;:::o;33717:::-;33883:4;33921:2;33910:9;33906:18;33898:26;;33970:9;33964:4;33960:20;33956:1;33945:9;33941:17;33934:47;33998:131;34124:4;33998:131;:::i;:::-;33990:139;;33717:419;;;:::o;34142:222::-;34235:4;34273:2;34262:9;34258:18;34250:26;;34286:71;34354:1;34343:9;34339:17;34330:6;34286:71;:::i;:::-;34142:222;;;;:::o;34370:129::-;34404:6;34431:20;;:::i;:::-;34421:30;;34460:33;34488:4;34480:6;34460:33;:::i;:::-;34370:129;;;:::o;34505:75::-;34538:6;34571:2;34565:9;34555:19;;34505:75;:::o;34586:307::-;34647:4;34737:18;34729:6;34726:30;34723:56;;;34759:18;;:::i;:::-;34723:56;34797:29;34819:6;34797:29;:::i;:::-;34789:37;;34881:4;34875;34871:15;34863:23;;34586:307;;;:::o;34899:308::-;34961:4;35051:18;35043:6;35040:30;35037:56;;;35073:18;;:::i;:::-;35037:56;35111:29;35133:6;35111:29;:::i;:::-;35103:37;;35195:4;35189;35185:15;35177:23;;34899:308;;;:::o;35213:132::-;35280:4;35303:3;35295:11;;35333:4;35328:3;35324:14;35316:22;;35213:132;;;:::o;35351:::-;35418:4;35441:3;35433:11;;35471:4;35466:3;35462:14;35454:22;;35351:132;;;:::o;35489:114::-;35556:6;35590:5;35584:12;35574:22;;35489:114;;;:::o;35609:::-;35676:6;35710:5;35704:12;35694:22;;35609:114;;;:::o;35729:98::-;35780:6;35814:5;35808:12;35798:22;;35729:98;;;:::o;35833:99::-;35885:6;35919:5;35913:12;35903:22;;35833:99;;;:::o;35938:113::-;36008:4;36040;36035:3;36031:14;36023:22;;35938:113;;;:::o;36057:::-;36127:4;36159;36154:3;36150:14;36142:22;;36057:113;;;:::o;36176:184::-;36275:11;36309:6;36304:3;36297:19;36349:4;36344:3;36340:14;36325:29;;36176:184;;;;:::o;36366:::-;36465:11;36499:6;36494:3;36487:19;36539:4;36534:3;36530:14;36515:29;;36366:184;;;;:::o;36556:168::-;36639:11;36673:6;36668:3;36661:19;36713:4;36708:3;36704:14;36689:29;;36556:168;;;;:::o;36730:169::-;36814:11;36848:6;36843:3;36836:19;36888:4;36883:3;36879:14;36864:29;;36730:169;;;;:::o;36905:148::-;37007:11;37044:3;37029:18;;36905:148;;;;:::o;37059:305::-;37099:3;37118:20;37136:1;37118:20;:::i;:::-;37113:25;;37152:20;37170:1;37152:20;:::i;:::-;37147:25;;37306:1;37238:66;37234:74;37231:1;37228:81;37225:107;;;37312:18;;:::i;:::-;37225:107;37356:1;37353;37349:9;37342:16;;37059:305;;;;:::o;37370:185::-;37410:1;37427:20;37445:1;37427:20;:::i;:::-;37422:25;;37461:20;37479:1;37461:20;:::i;:::-;37456:25;;37500:1;37490:35;;37505:18;;:::i;:::-;37490:35;37547:1;37544;37540:9;37535:14;;37370:185;;;;:::o;37561:191::-;37601:4;37621:20;37639:1;37621:20;:::i;:::-;37616:25;;37655:20;37673:1;37655:20;:::i;:::-;37650:25;;37694:1;37691;37688:8;37685:34;;;37699:18;;:::i;:::-;37685:34;37744:1;37741;37737:9;37729:17;;37561:191;;;;:::o;37758:96::-;37795:7;37824:24;37842:5;37824:24;:::i;:::-;37813:35;;37758:96;;;:::o;37860:90::-;37894:7;37937:5;37930:13;37923:21;37912:32;;37860:90;;;:::o;37956:149::-;37992:7;38032:66;38025:5;38021:78;38010:89;;37956:149;;;:::o;38111:126::-;38148:7;38188:42;38181:5;38177:54;38166:65;;38111:126;;;:::o;38243:77::-;38280:7;38309:5;38298:16;;38243:77;;;:::o;38326:154::-;38410:6;38405:3;38400;38387:30;38472:1;38463:6;38458:3;38454:16;38447:27;38326:154;;;:::o;38486:307::-;38554:1;38564:113;38578:6;38575:1;38572:13;38564:113;;;38663:1;38658:3;38654:11;38648:18;38644:1;38639:3;38635:11;38628:39;38600:2;38597:1;38593:10;38588:15;;38564:113;;;38695:6;38692:1;38689:13;38686:101;;;38775:1;38766:6;38761:3;38757:16;38750:27;38686:101;38535:258;38486:307;;;:::o;38799:320::-;38843:6;38880:1;38874:4;38870:12;38860:22;;38927:1;38921:4;38917:12;38948:18;38938:81;;39004:4;38996:6;38992:17;38982:27;;38938:81;39066:2;39058:6;39055:14;39035:18;39032:38;39029:84;;;39085:18;;:::i;:::-;39029:84;38850:269;38799:320;;;:::o;39125:281::-;39208:27;39230:4;39208:27;:::i;:::-;39200:6;39196:40;39338:6;39326:10;39323:22;39302:18;39290:10;39287:34;39284:62;39281:88;;;39349:18;;:::i;:::-;39281:88;39389:10;39385:2;39378:22;39168:238;39125:281;;:::o;39412:233::-;39451:3;39474:24;39492:5;39474:24;:::i;:::-;39465:33;;39520:66;39513:5;39510:77;39507:103;;;39590:18;;:::i;:::-;39507:103;39637:1;39630:5;39626:13;39619:20;;39412:233;;;:::o;39651:176::-;39683:1;39700:20;39718:1;39700:20;:::i;:::-;39695:25;;39734:20;39752:1;39734:20;:::i;:::-;39729:25;;39773:1;39763:35;;39778:18;;:::i;:::-;39763:35;39819:1;39816;39812:9;39807:14;;39651:176;;;;:::o;39833:180::-;39881:77;39878:1;39871:88;39978:4;39975:1;39968:15;40002:4;39999:1;39992:15;40019:180;40067:77;40064:1;40057:88;40164:4;40161:1;40154:15;40188:4;40185:1;40178:15;40205:180;40253:77;40250:1;40243:88;40350:4;40347:1;40340:15;40374:4;40371:1;40364:15;40391:180;40439:77;40436:1;40429:88;40536:4;40533:1;40526:15;40560:4;40557:1;40550:15;40577:180;40625:77;40622:1;40615:88;40722:4;40719:1;40712:15;40746:4;40743:1;40736:15;40763:180;40811:77;40808:1;40801:88;40908:4;40905:1;40898:15;40932:4;40929:1;40922:15;40949:117;41058:1;41055;41048:12;41072:117;41181:1;41178;41171:12;41195:117;41304:1;41301;41294:12;41318:117;41427:1;41424;41417:12;41441:102;41482:6;41533:2;41529:7;41524:2;41517:5;41513:14;41509:28;41499:38;;41441:102;;;:::o;41549:230::-;41689:34;41685:1;41677:6;41673:14;41666:58;41758:13;41753:2;41745:6;41741:15;41734:38;41549:230;:::o;41785:237::-;41925:34;41921:1;41913:6;41909:14;41902:58;41994:20;41989:2;41981:6;41977:15;41970:45;41785:237;:::o;42028:225::-;42168:34;42164:1;42156:6;42152:14;42145:58;42237:8;42232:2;42224:6;42220:15;42213:33;42028:225;:::o;42259:178::-;42399:30;42395:1;42387:6;42383:14;42376:54;42259:178;:::o;42443:177::-;42583:29;42579:1;42571:6;42567:14;42560:53;42443:177;:::o;42626:223::-;42766:34;42762:1;42754:6;42750:14;42743:58;42835:6;42830:2;42822:6;42818:15;42811:31;42626:223;:::o;42855:175::-;42995:27;42991:1;42983:6;42979:14;42972:51;42855:175;:::o;43036:231::-;43176:34;43172:1;43164:6;43160:14;43153:58;43245:14;43240:2;43232:6;43228:15;43221:39;43036:231;:::o;43273:243::-;43413:34;43409:1;43401:6;43397:14;43390:58;43482:26;43477:2;43469:6;43465:15;43458:51;43273:243;:::o;43522:229::-;43662:34;43658:1;43650:6;43646:14;43639:58;43731:12;43726:2;43718:6;43714:15;43707:37;43522:229;:::o;43757:228::-;43897:34;43893:1;43885:6;43881:14;43874:58;43966:11;43961:2;43953:6;43949:15;43942:36;43757:228;:::o;43991:182::-;44131:34;44127:1;44119:6;44115:14;44108:58;43991:182;:::o;44179:231::-;44319:34;44315:1;44307:6;44303:14;44296:58;44388:14;44383:2;44375:6;44371:15;44364:39;44179:231;:::o;44416:178::-;44556:30;44552:1;44544:6;44540:14;44533:54;44416:178;:::o;44600:182::-;44740:34;44736:1;44728:6;44724:14;44717:58;44600:182;:::o;44788:228::-;44928:34;44924:1;44916:6;44912:14;44905:58;44997:11;44992:2;44984:6;44980:15;44973:36;44788:228;:::o;45022:234::-;45162:34;45158:1;45150:6;45146:14;45139:58;45231:17;45226:2;45218:6;45214:15;45207:42;45022:234;:::o;45262:220::-;45402:34;45398:1;45390:6;45386:14;45379:58;45471:3;45466:2;45458:6;45454:15;45447:28;45262:220;:::o;45488:236::-;45628:34;45624:1;45616:6;45612:14;45605:58;45697:19;45692:2;45684:6;45680:15;45673:44;45488:236;:::o;45730:167::-;45870:19;45866:1;45858:6;45854:14;45847:43;45730:167;:::o;45903:180::-;46043:32;46039:1;46031:6;46027:14;46020:56;45903:180;:::o;46089:231::-;46229:34;46225:1;46217:6;46213:14;46206:58;46298:14;46293:2;46285:6;46281:15;46274:39;46089:231;:::o;46326:177::-;46466:29;46462:1;46454:6;46450:14;46443:53;46326:177;:::o;46509:182::-;46649:34;46645:1;46637:6;46633:14;46626:58;46509:182;:::o;46697:226::-;46837:34;46833:1;46825:6;46821:14;46814:58;46906:9;46901:2;46893:6;46889:15;46882:34;46697:226;:::o;46929:122::-;47002:24;47020:5;47002:24;:::i;:::-;46995:5;46992:35;46982:63;;47041:1;47038;47031:12;46982:63;46929:122;:::o;47057:116::-;47127:21;47142:5;47127:21;:::i;:::-;47120:5;47117:32;47107:60;;47163:1;47160;47153:12;47107:60;47057:116;:::o;47179:120::-;47251:23;47268:5;47251:23;:::i;:::-;47244:5;47241:34;47231:62;;47289:1;47286;47279:12;47231:62;47179:120;:::o;47305:122::-;47378:24;47396:5;47378:24;:::i;:::-;47371:5;47368:35;47358:63;;47417:1;47414;47407:12;47358:63;47305:122;:::o
Swarm Source
ipfs://bb37a0af8b6107b902a26741fd81ea1acc6e7f24e13c688ee71794996ad04f50
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.