ERC-721
Overview
Max Total Supply
10,000 BOO
Holders
4,163
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BOOLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BooThings
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-04-05 */ /** *Submitted for verification at polygonscan.com on 2022-01-07 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.11; // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) /** * @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); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) /** * @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); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) /** * @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(); } } // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // /$$$$$$ /$$ /$$ /$$ // /$$__ $$ | $$ | $$| $$ // | $$ \__/ /$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ | $$| $$ /$$$$$$ /$$$$$$ // | $$ /$$__ $$| $$__ $$|_ $$_/ /$$__ $$ /$$__ $$| $$| $$ /$$__ $$ /$$__ $$ // | $$ | $$ \ $$| $$ \ $$ | $$ | $$ \__/| $$ \ $$| $$| $$| $$$$$$$$| $$ \__/ // | $$ $$| $$ | $$| $$ | $$ | $$ /$$| $$ | $$ | $$| $$| $$| $$_____/| $$ // | $$$$$$/| $$$$$$/| $$ | $$ | $$$$/| $$ | $$$$$$/| $$| $$| $$$$$$$| $$ // \______/ \______/ |__/ |__/ \___/ |__/ \______/ |__/|__/ \_______/|__/ // Let's keep the whitelist clean // Let's avoid greedy bots // By Kaio Medau - @kaiomedau contract MintCountController is Ownable { bool public whitelistMintingActive = false; //holds addresses that minted already and the token count mapping(address => uint) _mintedAddresses; //holds whitelisted addresses and the given amount of tokens mapping(address => uint) _whiteAddresses; // // // // Price Handlers function getPriceForAddress(address addr, uint256 basePrice) internal view returns (uint256) { // The first token will be free // Whitelist spots are free // After the whitelist amount, price doubles every mint to avoid greedy bots // Initial price uint256 price = 0; // check if address is in the minted list if(getMintCount(addr) == 0){ return price; //The address haven't minted yet } uint mintCount = getMintCount(addr); uint whiteCount = getWhiteCount(addr); mintCount--; // At least one mint for free if(mintCount < whiteCount) { return price; // This address still have whitelist slots to mint for free } price = basePrice * (2**(mintCount - whiteCount)); return price; } // // // // Mint Handlers // Add minting count to address function increaseMintCount(address addr) internal { _mintedAddresses[addr] = getMintCount(addr) + 1; } // Check minting count for address function getMintCount(address addr) public view returns (uint256) { return _mintedAddresses[addr]; } // // // // Whitelist Handlers // Check if whitelist is available or not modifier isWhitelistLive() { require(whitelistMintingActive, "Whitelist minting not live yet."); _; } // Check address in the list modifier isSenderWhitelisted() { require(getWhiteCount(msg.sender) >= 1, "Msg.sender is not whitelisted."); _; } // Allow minting only if minting ammount less than available on whitelist modifier hasWhitelistMintsLeft() { require(getMintCount(msg.sender) < getWhiteCount(msg.sender) , "Msg.sender has reached the whitelist minting limit."); _; } // Toggle on and off whitelist minting function toggleWhitelistMinting() external onlyOwner { whitelistMintingActive = !whitelistMintingActive; } // // // WL Spots // Add whitelist slots to addresses function addWhiteSlots(address[] memory addresses, uint amount) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add the null address."); addWhiteSlot(addresses[i], amount); } } // Remove whitelist slots from addresses function removeWhiteSlots(address[] memory addresses, uint amount) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add the null address."); removeWhiteSlotCount(addresses[i], amount); } } // Add whitelist slot to address function addWhiteSlot(address addr, uint amount) private { uint currentCount = getWhiteCount(addr); _whiteAddresses[addr] = currentCount + amount; } // Remove whitelist slot from address function removeWhiteSlotCount(address addr, uint amount) private { uint currentCount = getWhiteCount(addr); _whiteAddresses[addr] = amount < currentCount ? currentCount - amount : 0; } // Get available whitelist slots after minting function getAvailableWhiteSlots(address addr) public view returns (uint256 availableSlots) { return getWhiteCount(addr) > 0 ? getWhiteCount(addr) - getMintCount(addr) : 0; } // Get total whitelist slots function getWhiteCount(address addr) public view returns (uint256) { return _whiteAddresses[addr]; } } // .-. .-') .-') _ ('-. .-. .-') _ .-') // \ ( OO ) ( OO) ) ( OO ) / ( OO ) ) ( OO ). // ;-----.\ .-'),-----. .-'),-----. / '._ ,--. ,--. ,-.-') ,--./ ,--,' ,----. (_)---\_) // | .-. | ( OO' .-. '( OO' .-. ' |'--...__)| | | | | |OO)| \ | |\ ' .-./-') / _ | // | '-' /_)/ | | | |/ | | | | '--. .--'| .| | | | \| \| | )| |_( O- )\ :` `. // | .-. `. \_) | |\| |\_) | |\| | | | | | | |(_/| . |/ | | .--, \ '..`''.) // | | \ | \ | | | | \ | | | | | | | .-. | ,| |_.'| |\ | (| | '. (_/.-._) \ // | '--' / `' '-' ' `' '-' ' | | | | | |(_| | | | \ | | '--' | \ / // `------' `-----' `-----' `--' `--' `--' `--' `--' `--' `------' `-----' // By Kaio Medau - @kaiomedau contract BooThings is ERC721Enumerable, MintCountController { using SafeMath for uint256; using Strings for uint256; using Address for address; bool public isMetadataLocked = false; bool public isSaleActive = false; bool private revealed = false; string internal baseURL; string internal notRevealedURI; string internal baseExtension = ".json"; uint256 public constant MAX_SUPPLY = 10000; uint256 public constant MAX_MINT_QUANTITY = 1; uint256 private basePrice; uint256 private shareAmount = 50; address private wallet1; address private wallet2; constructor(string memory _initialURL, string memory _notRevealedURI) ERC721("Boo Things", "BOO") { baseURL = _initialURL; notRevealedURI = _notRevealedURI; basePrice = 20 ether; } modifier isValueCorrect() { require( msg.value >= getPriceForAddress(msg.sender, basePrice), "Value sent is not correct." ); _; } modifier saleActive() { require(isSaleActive, "Sale must be active."); _; } modifier quantityIsOk() { require( totalSupply().add(1) <= MAX_SUPPLY, "Minting would exceed max supply." ); _; } // // // Mint function mint() public payable saleActive quantityIsOk isValueCorrect() { _safeMint(msg.sender, getNextTokenId()); increaseMintCount(msg.sender); } function mintWhitelist() public payable isWhitelistLive isSenderWhitelisted hasWhitelistMintsLeft quantityIsOk() { _safeMint(msg.sender, getNextTokenId()); increaseMintCount(msg.sender); } // // // Controllers function toggleSaleState() external onlyOwner { isSaleActive = !isSaleActive; } function revealCollection() external onlyOwner { revealed = true; } function getNextTokenId() private view returns (uint256) { return totalSupply() + 1; } function lockMetadata() external onlyOwner { isMetadataLocked = true; } // // // URI function _baseURI() internal view virtual override returns (string memory) { return baseURL; } function setBaseURI(string memory _newBaseURI) external onlyOwner { require(!isMetadataLocked, "Metadata is locked"); baseURL = _newBaseURI; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedURI = _notRevealedURI; } function getURIs() public view onlyOwner returns (string memory base, string memory notRevealed){ return (baseURL, notRevealedURI); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); if(revealed == false) { return notRevealedURI; } return string(abi.encodePacked(_baseURI(), tokenId.toString(), baseExtension)); } // // // Price function setBasePrice(uint256 newPrice) public onlyOwner { basePrice = newPrice; } function getMyNextPriceWithAddress(address addr) public view returns (uint256 nextPrice) { return getPriceForAddress(addr, basePrice); } // // // // Withdraw function setShareAmount(uint256 amount) public onlyOwner { require(amount <= 100, "Share amount needs to be btween 0 and 100"); shareAmount = amount; } function setMainWallet(address addr) public onlyOwner { require(addr != address(0), "Can't update null address"); wallet1 = addr; } function setSecondaryWallet(address addr) public onlyOwner { require(addr != address(0), "Can't update null address"); wallet2 = addr; } function listWithdrawAddresses() public view onlyOwner returns (address mainAddress, address secondaryAddress) { return (wallet1, wallet2); } function withdrawAll() external onlyOwner { require(wallet1 != address(0), "Main address not given"); uint256 currentBalance = address(this).balance; if(wallet2 != address(0) && shareAmount > 0){ uint256 sharePercent = currentBalance.mul(shareAmount).div(100); require(payable(wallet2).send(sharePercent)); } require(payable(wallet1).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initialURL","type":"string"},{"internalType":"string","name":"_notRevealedURI","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":"MAX_MINT_QUANTITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addWhiteSlots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAvailableWhiteSlots","outputs":[{"internalType":"uint256","name":"availableSlots","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getMyNextPriceWithAddress","outputs":[{"internalType":"uint256","name":"nextPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getURIs","outputs":[{"internalType":"string","name":"base","type":"string"},{"internalType":"string","name":"notRevealed","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getWhiteCount","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":[],"name":"isMetadataLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"listWithdrawAddresses","outputs":[{"internalType":"address","name":"mainAddress","type":"address"},{"internalType":"address","name":"secondaryAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintWhitelist","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":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeWhiteSlots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealCollection","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":"uint256","name":"newPrice","type":"uint256"}],"name":"setBasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setMainWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSecondaryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setShareAmount","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":[],"name":"toggleSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhitelistMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060109080519060200190620000bd929190620002ce565b506032601255348015620000d057600080fd5b5060405162005f4738038062005f478339818101604052810190620000f691906200051b565b6040518060400160405280600a81526020017f426f6f205468696e6773000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f424f4f000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200017a929190620002ce565b50806001908051906020019062000193929190620002ce565b505050620001b6620001aa6200020060201b60201c565b6200020860201b60201c565b81600e9080519060200190620001ce929190620002ce565b5080600f9080519060200190620001e7929190620002ce565b506801158e460913d00000601181905550505062000605565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002dc90620005cf565b90600052602060002090601f0160209004810192826200030057600085556200034c565b82601f106200031b57805160ff19168380011785556200034c565b828001600101855582156200034c579182015b828111156200034b5782518255916020019190600101906200032e565b5b5090506200035b91906200035f565b5090565b5b808211156200037a57600081600090555060010162000360565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003e7826200039c565b810181811067ffffffffffffffff82111715620004095762000408620003ad565b5b80604052505050565b60006200041e6200037e565b90506200042c8282620003dc565b919050565b600067ffffffffffffffff8211156200044f576200044e620003ad565b5b6200045a826200039c565b9050602081019050919050565b60005b83811015620004875780820151818401526020810190506200046a565b8381111562000497576000848401525b50505050565b6000620004b4620004ae8462000431565b62000412565b905082815260208101848484011115620004d357620004d262000397565b5b620004e084828562000467565b509392505050565b600082601f8301126200050057620004ff62000392565b5b8151620005128482602086016200049d565b91505092915050565b6000806040838503121562000535576200053462000388565b5b600083015167ffffffffffffffff8111156200055657620005556200038d565b5b6200056485828601620004e8565b925050602083015167ffffffffffffffff8111156200058857620005876200038d565b5b6200059685828601620004e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005e857607f821691505b60208210811415620005ff57620005fe620005a0565b5b50919050565b61593280620006156000396000f3fe6080604052600436106102725760003560e01c806370a082311161014f578063a2801f57116100c1578063de4b32621161007a578063de4b3262146108e9578063e467a4fd14610912578063e5363dca1461093e578063e985e9c51461097b578063f2c4ce1e146109b8578063f2fde38b146109e157610272565b8063a2801f57146107db578063b88d4fde14610818578063c87b56dd14610841578063d0a5eb4e1461087e578063d7e45cd7146108a7578063daaeec86146108d257610272565b8063853828b611610113578063853828b6146107055780638da5cb5b1461071c57806392ec72101461074757806395d89b4114610770578063989bdbb61461079b578063a22cb465146107b257610272565b806370a082311461062057806371273bb71461065d578063715018a6146106885780637192d0241461069f578063813f9dbf146106c857610272565b806332cb6b0c116101e85780634b78286a116101ac5780634b78286a146105005780634f6ccce71461052957806355f804b314610566578063564566a81461058f5780636352211e146105ba5780636412e5ff146105f757610272565b806332cb6b0c1461042d57806335d49dc31461045857806340d0b4a91461048357806342842e0e1461049a578063471d8582146104c357610272565b806318160ddd1161023a57806318160ddd1461034f57806323b872dd1461037a57806328c5440f146103a35780632c1270ee146103cf5780632d3df31f146103e65780632f745c59146103f057610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c5780631249c58b14610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613c63565b610a0a565b6040516102ab9190613cab565b60405180910390f35b3480156102c057600080fd5b506102c9610a84565b6040516102d69190613d5f565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613db7565b610b16565b6040516103139190613e25565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613e6c565b610b9b565b005b61034d610cb3565b005b34801561035b57600080fd5b50610364610dcb565b6040516103719190613ebb565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613ed6565b610dd8565b005b3480156103af57600080fd5b506103b8610e38565b6040516103c6929190613f29565b60405180910390f35b3480156103db57600080fd5b506103e4610fdb565b005b6103ee611083565b005b3480156103fc57600080fd5b5061041760048036038101906104129190613e6c565b6111eb565b6040516104249190613ebb565b60405180910390f35b34801561043957600080fd5b50610442611290565b60405161044f9190613ebb565b60405180910390f35b34801561046457600080fd5b5061046d611296565b60405161047a9190613cab565b60405180910390f35b34801561048f57600080fd5b506104986112a9565b005b3480156104a657600080fd5b506104c160048036038101906104bc9190613ed6565b611342565b005b3480156104cf57600080fd5b506104ea60048036038101906104e59190613f60565b611362565b6040516104f79190613ebb565b60405180910390f35b34801561050c57600080fd5b5061052760048036038101906105229190613f60565b6113ab565b005b34801561053557600080fd5b50610550600480360381019061054b9190613db7565b6114db565b60405161055d9190613ebb565b60405180910390f35b34801561057257600080fd5b5061058d600480360381019061058891906140c2565b61154c565b005b34801561059b57600080fd5b506105a4611632565b6040516105b19190613cab565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613db7565b611645565b6040516105ee9190613e25565b60405180910390f35b34801561060357600080fd5b5061061e600480360381019061061991906141d3565b6116f7565b005b34801561062c57600080fd5b5061064760048036038101906106429190613f60565b611845565b6040516106549190613ebb565b60405180910390f35b34801561066957600080fd5b506106726118fd565b60405161067f9190613ebb565b60405180910390f35b34801561069457600080fd5b5061069d611902565b005b3480156106ab57600080fd5b506106c660048036038101906106c19190613db7565b61198a565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190613f60565b611a54565b6040516106fc9190613ebb565b60405180910390f35b34801561071157600080fd5b5061071a611a69565b005b34801561072857600080fd5b50610731611cd3565b60405161073e9190613e25565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906141d3565b611cfd565b005b34801561077c57600080fd5b50610785611e4b565b6040516107929190613d5f565b60405180910390f35b3480156107a757600080fd5b506107b0611edd565b005b3480156107be57600080fd5b506107d960048036038101906107d4919061425b565b611f76565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613f60565b611f8c565b60405161080f9190613ebb565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a919061433c565b611fd5565b005b34801561084d57600080fd5b5061086860048036038101906108639190613db7565b612037565b6040516108759190613d5f565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613f60565b61216b565b005b3480156108b357600080fd5b506108bc61229b565b6040516108c99190613cab565b60405180910390f35b3480156108de57600080fd5b506108e76122ae565b005b3480156108f557600080fd5b50610910600480360381019061090b9190613db7565b612356565b005b34801561091e57600080fd5b506109276123dc565b6040516109359291906143bf565b60405180910390f35b34801561094a57600080fd5b5061096560048036038101906109609190613f60565b6124a9565b6040516109729190613ebb565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d91906143e8565b6124e5565b6040516109af9190613cab565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da91906140c2565b612579565b005b3480156109ed57600080fd5b50610a086004803603810190610a039190613f60565b61260f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7d5750610a7c82612707565b5b9050919050565b606060008054610a9390614457565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf90614457565b8015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b5050505050905090565b6000610b21826127e9565b610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b57906144fb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ba682611645565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e9061458d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c36612855565b73ffffffffffffffffffffffffffffffffffffffff161480610c655750610c6481610c5f612855565b6124e5565b5b610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b9061461f565b60405180910390fd5b610cae838361285d565b505050565b600d60019054906101000a900460ff16610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf99061468b565b60405180910390fd5b612710610d206001610d12610dcb565b61291690919063ffffffff16565b1115610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d58906146f7565b60405180910390fd5b610d6d3360115461292c565b341015610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690614763565b60405180910390fd5b610dc033610dbb6129ba565b6129d5565b610dc9336129f3565b565b6000600880549050905090565b610de9610de3612855565b82612a4e565b610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f906147f5565b60405180910390fd5b610e33838383612b2c565b505050565b606080610e43612855565b73ffffffffffffffffffffffffffffffffffffffff16610e61611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae90614861565b60405180910390fd5b600e600f818054610ec790614457565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef390614457565b8015610f405780601f10610f1557610100808354040283529160200191610f40565b820191906000526020600020905b815481529060010190602001808311610f2357829003601f168201915b50505050509150808054610f5390614457565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7f90614457565b8015610fcc5780601f10610fa157610100808354040283529160200191610fcc565b820191906000526020600020905b815481529060010190602001808311610faf57829003601f168201915b50505050509050915091509091565b610fe3612855565b73ffffffffffffffffffffffffffffffffffffffff16611001611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e90614861565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b600a60149054906101000a900460ff166110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906148cd565b60405180910390fd5b60016110dd33611362565b101561111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590614939565b60405180910390fd5b61112733611362565b61113033611f8c565b10611170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611167906149cb565b60405180910390fd5b61271061118e6001611180610dcb565b61291690919063ffffffff16565b11156111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c6906146f7565b60405180910390fd5b6111e0336111db6129ba565b6129d5565b6111e9336129f3565b565b60006111f683611845565b8210611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e90614a5d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b600a60149054906101000a900460ff1681565b6112b1612855565b73ffffffffffffffffffffffffffffffffffffffff166112cf611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90614861565b60405180910390fd5b6001600d60026101000a81548160ff021916908315150217905550565b61135d83838360405180602001604052806000815250611fd5565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113b3612855565b73ffffffffffffffffffffffffffffffffffffffff166113d1611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e90614861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90614ac9565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006114e5610dcb565b8210611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90614b5b565b60405180910390fd5b6008828154811061153a57611539614b7b565b5b90600052602060002001549050919050565b611554612855565b73ffffffffffffffffffffffffffffffffffffffff16611572611cd3565b73ffffffffffffffffffffffffffffffffffffffff16146115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90614861565b60405180910390fd5b600d60009054906101000a900460ff1615611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f90614bf6565b60405180910390fd5b80600e908051906020019061162e929190613b54565b5050565b600d60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614c88565b60405180910390fd5b80915050919050565b6116ff612855565b73ffffffffffffffffffffffffffffffffffffffff1661171d611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90614861565b60405180910390fd5b60005b825181101561184057600073ffffffffffffffffffffffffffffffffffffffff168382815181106117aa576117a9614b7b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614cf4565b60405180910390fd5b61182d83828151811061181f5761181e614b7b565b5b602002602001015183612d88565b808061183890614d43565b915050611776565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90614dfe565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600181565b61190a612855565b73ffffffffffffffffffffffffffffffffffffffff16611928611cd3565b73ffffffffffffffffffffffffffffffffffffffff161461197e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197590614861565b60405180910390fd5b6119886000612de9565b565b611992612855565b73ffffffffffffffffffffffffffffffffffffffff166119b0611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90614861565b60405180910390fd5b6064811115611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190614e90565b60405180910390fd5b8060128190555050565b6000611a628260115461292c565b9050919050565b611a71612855565b73ffffffffffffffffffffffffffffffffffffffff16611a8f611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90614861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90614efc565b60405180910390fd5b6000479050600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611bdd57506000601254115b15611c70576000611c0c6064611bfe60125485612eaf90919063ffffffff16565b612ec590919063ffffffff16565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050611c6e57600080fd5b505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611cd057600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d05612855565b73ffffffffffffffffffffffffffffffffffffffff16611d23611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090614861565b60405180910390fd5b60005b8251811015611e4657600073ffffffffffffffffffffffffffffffffffffffff16838281518110611db057611daf614b7b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614cf4565b60405180910390fd5b611e33838281518110611e2557611e24614b7b565b5b602002602001015183612edb565b8080611e3e90614d43565b915050611d7c565b505050565b606060018054611e5a90614457565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8690614457565b8015611ed35780601f10611ea857610100808354040283529160200191611ed3565b820191906000526020600020905b815481529060010190602001808311611eb657829003601f168201915b5050505050905090565b611ee5612855565b73ffffffffffffffffffffffffffffffffffffffff16611f03611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090614861565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b611f88611f81612855565b8383612f4b565b5050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611fe6611fe0612855565b83612a4e565b612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c906147f5565b60405180910390fd5b612031848484846130b8565b50505050565b6060612042826127e9565b612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207890614f8e565b60405180910390fd5b60001515600d60029054906101000a900460ff161515141561212f57600f80546120aa90614457565b80601f01602080910402602001604051908101604052809291908181526020018280546120d690614457565b80156121235780601f106120f857610100808354040283529160200191612123565b820191906000526020600020905b81548152906001019060200180831161210657829003601f168201915b50505050509050612166565b612137613114565b612140836131a6565b60106040516020016121549392919061507e565b60405160208183030381529060405290505b919050565b612173612855565b73ffffffffffffffffffffffffffffffffffffffff16612191611cd3565b73ffffffffffffffffffffffffffffffffffffffff16146121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90614861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614ac9565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900460ff1681565b6122b6612855565b73ffffffffffffffffffffffffffffffffffffffff166122d4611cd3565b73ffffffffffffffffffffffffffffffffffffffff161461232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232190614861565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b61235e612855565b73ffffffffffffffffffffffffffffffffffffffff1661237c611cd3565b73ffffffffffffffffffffffffffffffffffffffff16146123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c990614861565b60405180910390fd5b8060118190555050565b6000806123e7612855565b73ffffffffffffffffffffffffffffffffffffffff16612405611cd3565b73ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290614861565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000806124b583611362565b116124c15760006124de565b6124ca82611f8c565b6124d383611362565b6124dd91906150af565b5b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612581612855565b73ffffffffffffffffffffffffffffffffffffffff1661259f611cd3565b73ffffffffffffffffffffffffffffffffffffffff16146125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614861565b60405180910390fd5b80600f908051906020019061260b929190613b54565b5050565b612617612855565b73ffffffffffffffffffffffffffffffffffffffff16612635611cd3565b73ffffffffffffffffffffffffffffffffffffffff161461268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f290615155565b60405180910390fd5b61270481612de9565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127e257506127e182613307565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128d083611645565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081836129249190615175565b905092915050565b60008060009050600061293e85611f8c565b141561294d57809150506129b4565b600061295885611f8c565b9050600061296586611362565b90508180612972906151cb565b92505080821015612988578293505050506129b4565b808261299491906150af565b60026129a09190615328565b856129ab9190615373565b92508293505050505b92915050565b600060016129c6610dcb565b6129d09190615175565b905090565b6129ef828260405180602001604052806000815250613371565b5050565b60016129fe82611f8c565b612a089190615175565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000612a59826127e9565b612a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8f9061543f565b60405180910390fd5b6000612aa383611645565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b1257508373ffffffffffffffffffffffffffffffffffffffff16612afa84610b16565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b235750612b2281856124e5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b4c82611645565b73ffffffffffffffffffffffffffffffffffffffff1614612ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b99906154d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0990615563565b60405180910390fd5b612c1d8383836133cc565b612c2860008261285d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c7891906150af565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ccf9190615175565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612d9383611362565b90508181612da19190615175565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612ebd9190615373565b905092915050565b60008183612ed391906155b2565b905092915050565b6000612ee683611362565b9050808210612ef6576000612f03565b8181612f0291906150af565b5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb19061562f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516130ab9190613cab565b60405180910390a3505050565b6130c3848484612b2c565b6130cf848484846134e0565b61310e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613105906156c1565b60405180910390fd5b50505050565b6060600e805461312390614457565b80601f016020809104026020016040519081016040528092919081815260200182805461314f90614457565b801561319c5780601f106131715761010080835404028352916020019161319c565b820191906000526020600020905b81548152906001019060200180831161317f57829003601f168201915b5050505050905090565b606060008214156131ee576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613302565b600082905060005b6000821461322057808061320990614d43565b915050600a8261321991906155b2565b91506131f6565b60008167ffffffffffffffff81111561323c5761323b613f97565b5b6040519080825280601f01601f19166020018201604052801561326e5781602001600182028036833780820191505090505b5090505b600085146132fb5760018261328791906150af565b9150600a8561329691906156e1565b60306132a29190615175565b60f81b8183815181106132b8576132b7614b7b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132f491906155b2565b9450613272565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61337b8383613668565b61338860008484846134e0565b6133c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133be906156c1565b60405180910390fd5b505050565b6133d7838383613836565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561341a576134158161383b565b613459565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613458576134578382613884565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561349c57613497816139f1565b6134db565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146134da576134d98282613ac2565b5b5b505050565b60006135018473ffffffffffffffffffffffffffffffffffffffff16613b41565b1561365b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261352a612855565b8786866040518563ffffffff1660e01b815260040161354c9493929190615767565b6020604051808303816000875af192505050801561358857506040513d601f19601f8201168201806040525081019061358591906157c8565b60015b61360b573d80600081146135b8576040519150601f19603f3d011682016040523d82523d6000602084013e6135bd565b606091505b50600081511415613603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fa906156c1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613660565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136cf90615841565b60405180910390fd5b6136e1816127e9565b15613721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613718906158ad565b60405180910390fd5b61372d600083836133cc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461377d9190615175565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161389184611845565b61389b91906150af565b9050600060076000848152602001908152602001600020549050818114613980576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613a0591906150af565b9050600060096000848152602001908152602001600020549050600060088381548110613a3557613a34614b7b565b5b906000526020600020015490508060088381548110613a5757613a56614b7b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613aa657613aa56158cd565b5b6001900381819060005260206000200160009055905550505050565b6000613acd83611845565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613b6090614457565b90600052602060002090601f016020900481019282613b825760008555613bc9565b82601f10613b9b57805160ff1916838001178555613bc9565b82800160010185558215613bc9579182015b82811115613bc8578251825591602001919060010190613bad565b5b509050613bd69190613bda565b5090565b5b80821115613bf3576000816000905550600101613bdb565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613c4081613c0b565b8114613c4b57600080fd5b50565b600081359050613c5d81613c37565b92915050565b600060208284031215613c7957613c78613c01565b5b6000613c8784828501613c4e565b91505092915050565b60008115159050919050565b613ca581613c90565b82525050565b6000602082019050613cc06000830184613c9c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d00578082015181840152602081019050613ce5565b83811115613d0f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d3182613cc6565b613d3b8185613cd1565b9350613d4b818560208601613ce2565b613d5481613d15565b840191505092915050565b60006020820190508181036000830152613d798184613d26565b905092915050565b6000819050919050565b613d9481613d81565b8114613d9f57600080fd5b50565b600081359050613db181613d8b565b92915050565b600060208284031215613dcd57613dcc613c01565b5b6000613ddb84828501613da2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e0f82613de4565b9050919050565b613e1f81613e04565b82525050565b6000602082019050613e3a6000830184613e16565b92915050565b613e4981613e04565b8114613e5457600080fd5b50565b600081359050613e6681613e40565b92915050565b60008060408385031215613e8357613e82613c01565b5b6000613e9185828601613e57565b9250506020613ea285828601613da2565b9150509250929050565b613eb581613d81565b82525050565b6000602082019050613ed06000830184613eac565b92915050565b600080600060608486031215613eef57613eee613c01565b5b6000613efd86828701613e57565b9350506020613f0e86828701613e57565b9250506040613f1f86828701613da2565b9150509250925092565b60006040820190508181036000830152613f438185613d26565b90508181036020830152613f578184613d26565b90509392505050565b600060208284031215613f7657613f75613c01565b5b6000613f8484828501613e57565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fcf82613d15565b810181811067ffffffffffffffff82111715613fee57613fed613f97565b5b80604052505050565b6000614001613bf7565b905061400d8282613fc6565b919050565b600067ffffffffffffffff82111561402d5761402c613f97565b5b61403682613d15565b9050602081019050919050565b82818337600083830152505050565b600061406561406084614012565b613ff7565b90508281526020810184848401111561408157614080613f92565b5b61408c848285614043565b509392505050565b600082601f8301126140a9576140a8613f8d565b5b81356140b9848260208601614052565b91505092915050565b6000602082840312156140d8576140d7613c01565b5b600082013567ffffffffffffffff8111156140f6576140f5613c06565b5b61410284828501614094565b91505092915050565b600067ffffffffffffffff82111561412657614125613f97565b5b602082029050602081019050919050565b600080fd5b600061414f61414a8461410b565b613ff7565b9050808382526020820190506020840283018581111561417257614171614137565b5b835b8181101561419b57806141878882613e57565b845260208401935050602081019050614174565b5050509392505050565b600082601f8301126141ba576141b9613f8d565b5b81356141ca84826020860161413c565b91505092915050565b600080604083850312156141ea576141e9613c01565b5b600083013567ffffffffffffffff81111561420857614207613c06565b5b614214858286016141a5565b925050602061422585828601613da2565b9150509250929050565b61423881613c90565b811461424357600080fd5b50565b6000813590506142558161422f565b92915050565b6000806040838503121561427257614271613c01565b5b600061428085828601613e57565b925050602061429185828601614246565b9150509250929050565b600067ffffffffffffffff8211156142b6576142b5613f97565b5b6142bf82613d15565b9050602081019050919050565b60006142df6142da8461429b565b613ff7565b9050828152602081018484840111156142fb576142fa613f92565b5b614306848285614043565b509392505050565b600082601f83011261432357614322613f8d565b5b81356143338482602086016142cc565b91505092915050565b6000806000806080858703121561435657614355613c01565b5b600061436487828801613e57565b945050602061437587828801613e57565b935050604061438687828801613da2565b925050606085013567ffffffffffffffff8111156143a7576143a6613c06565b5b6143b38782880161430e565b91505092959194509250565b60006040820190506143d46000830185613e16565b6143e16020830184613e16565b9392505050565b600080604083850312156143ff576143fe613c01565b5b600061440d85828601613e57565b925050602061441e85828601613e57565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446f57607f821691505b6020821081141561448357614482614428565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006144e5602c83613cd1565b91506144f082614489565b604082019050919050565b60006020820190508181036000830152614514816144d8565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614577602183613cd1565b91506145828261451b565b604082019050919050565b600060208201905081810360008301526145a68161456a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614609603883613cd1565b9150614614826145ad565b604082019050919050565b60006020820190508181036000830152614638816145fc565b9050919050565b7f53616c65206d757374206265206163746976652e000000000000000000000000600082015250565b6000614675601483613cd1565b91506146808261463f565b602082019050919050565b600060208201905081810360008301526146a481614668565b9050919050565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c792e600082015250565b60006146e1602083613cd1565b91506146ec826146ab565b602082019050919050565b60006020820190508181036000830152614710816146d4565b9050919050565b7f56616c75652073656e74206973206e6f7420636f72726563742e000000000000600082015250565b600061474d601a83613cd1565b915061475882614717565b602082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006147df603183613cd1565b91506147ea82614783565b604082019050919050565b6000602082019050818103600083015261480e816147d2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061484b602083613cd1565b915061485682614815565b602082019050919050565b6000602082019050818103600083015261487a8161483e565b9050919050565b7f57686974656c697374206d696e74696e67206e6f74206c697665207965742e00600082015250565b60006148b7601f83613cd1565b91506148c282614881565b602082019050919050565b600060208201905081810360008301526148e6816148aa565b9050919050565b7f4d73672e73656e646572206973206e6f742077686974656c69737465642e0000600082015250565b6000614923601e83613cd1565b915061492e826148ed565b602082019050919050565b6000602082019050818103600083015261495281614916565b9050919050565b7f4d73672e73656e6465722068617320726561636865642074686520776869746560008201527f6c697374206d696e74696e67206c696d69742e00000000000000000000000000602082015250565b60006149b5603383613cd1565b91506149c082614959565b604082019050919050565b600060208201905081810360008301526149e4816149a8565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614a47602b83613cd1565b9150614a52826149eb565b604082019050919050565b60006020820190508181036000830152614a7681614a3a565b9050919050565b7f43616e277420757064617465206e756c6c206164647265737300000000000000600082015250565b6000614ab3601983613cd1565b9150614abe82614a7d565b602082019050919050565b60006020820190508181036000830152614ae281614aa6565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614b45602c83613cd1565b9150614b5082614ae9565b604082019050919050565b60006020820190508181036000830152614b7481614b38565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4d65746164617461206973206c6f636b65640000000000000000000000000000600082015250565b6000614be0601283613cd1565b9150614beb82614baa565b602082019050919050565b60006020820190508181036000830152614c0f81614bd3565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614c72602983613cd1565b9150614c7d82614c16565b604082019050919050565b60006020820190508181036000830152614ca181614c65565b9050919050565b7f43616e27742061646420746865206e756c6c20616464726573732e0000000000600082015250565b6000614cde601b83613cd1565b9150614ce982614ca8565b602082019050919050565b60006020820190508181036000830152614d0d81614cd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d4e82613d81565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d8157614d80614d14565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614de8602a83613cd1565b9150614df382614d8c565b604082019050919050565b60006020820190508181036000830152614e1781614ddb565b9050919050565b7f536861726520616d6f756e74206e6565647320746f2062652062747765656e2060008201527f3020616e64203130300000000000000000000000000000000000000000000000602082015250565b6000614e7a602983613cd1565b9150614e8582614e1e565b604082019050919050565b60006020820190508181036000830152614ea981614e6d565b9050919050565b7f4d61696e2061646472657373206e6f7420676976656e00000000000000000000600082015250565b6000614ee6601683613cd1565b9150614ef182614eb0565b602082019050919050565b60006020820190508181036000830152614f1581614ed9565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614f78602f83613cd1565b9150614f8382614f1c565b604082019050919050565b60006020820190508181036000830152614fa781614f6b565b9050919050565b600081905092915050565b6000614fc482613cc6565b614fce8185614fae565b9350614fde818560208601613ce2565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461500c81614457565b6150168186614fae565b94506001821660008114615031576001811461504257615075565b60ff19831686528186019350615075565b61504b85614fea565b60005b8381101561506d5781548189015260018201915060208101905061504e565b838801955050505b50505092915050565b600061508a8286614fb9565b91506150968285614fb9565b91506150a28284614fff565b9150819050949350505050565b60006150ba82613d81565b91506150c583613d81565b9250828210156150d8576150d7614d14565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061513f602683613cd1565b915061514a826150e3565b604082019050919050565b6000602082019050818103600083015261516e81615132565b9050919050565b600061518082613d81565b915061518b83613d81565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151c0576151bf614d14565b5b828201905092915050565b60006151d682613d81565b915060008214156151ea576151e9614d14565b5b600182039050919050565b60008160011c9050919050565b6000808291508390505b600185111561524c5780860481111561522857615227614d14565b5b60018516156152375780820291505b8081029050615245856151f5565b945061520c565b94509492505050565b6000826152655760019050615321565b816152735760009050615321565b81600181146152895760028114615293576152c2565b6001915050615321565b60ff8411156152a5576152a4614d14565b5b8360020a9150848211156152bc576152bb614d14565b5b50615321565b5060208310610133831016604e8410600b84101617156152f75782820a9050838111156152f2576152f1614d14565b5b615321565b6153048484846001615202565b9250905081840481111561531b5761531a614d14565b5b81810290505b9392505050565b600061533382613d81565b915061533e83613d81565b925061536b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615255565b905092915050565b600061537e82613d81565b915061538983613d81565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153c2576153c1614d14565b5b828202905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000615429602c83613cd1565b9150615434826153cd565b604082019050919050565b600060208201905081810360008301526154588161541c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006154bb602983613cd1565b91506154c68261545f565b604082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061554d602483613cd1565b9150615558826154f1565b604082019050919050565b6000602082019050818103600083015261557c81615540565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006155bd82613d81565b91506155c883613d81565b9250826155d8576155d7615583565b5b828204905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615619601983613cd1565b9150615624826155e3565b602082019050919050565b600060208201905081810360008301526156488161560c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006156ab603283613cd1565b91506156b68261564f565b604082019050919050565b600060208201905081810360008301526156da8161569e565b9050919050565b60006156ec82613d81565b91506156f783613d81565b92508261570757615706615583565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061573982615712565b615743818561571d565b9350615753818560208601613ce2565b61575c81613d15565b840191505092915050565b600060808201905061577c6000830187613e16565b6157896020830186613e16565b6157966040830185613eac565b81810360608301526157a8818461572e565b905095945050505050565b6000815190506157c281613c37565b92915050565b6000602082840312156157de576157dd613c01565b5b60006157ec848285016157b3565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061582b602083613cd1565b9150615836826157f5565b602082019050919050565b6000602082019050818103600083015261585a8161581e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615897601c83613cd1565b91506158a282615861565b602082019050919050565b600060208201905081810360008301526158c68161588a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220b2b3ba5171087ad2f183ee43d412a11da0b576b7f2ac1fc30277c5a9801e856764736f6c634300080b00330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c806370a082311161014f578063a2801f57116100c1578063de4b32621161007a578063de4b3262146108e9578063e467a4fd14610912578063e5363dca1461093e578063e985e9c51461097b578063f2c4ce1e146109b8578063f2fde38b146109e157610272565b8063a2801f57146107db578063b88d4fde14610818578063c87b56dd14610841578063d0a5eb4e1461087e578063d7e45cd7146108a7578063daaeec86146108d257610272565b8063853828b611610113578063853828b6146107055780638da5cb5b1461071c57806392ec72101461074757806395d89b4114610770578063989bdbb61461079b578063a22cb465146107b257610272565b806370a082311461062057806371273bb71461065d578063715018a6146106885780637192d0241461069f578063813f9dbf146106c857610272565b806332cb6b0c116101e85780634b78286a116101ac5780634b78286a146105005780634f6ccce71461052957806355f804b314610566578063564566a81461058f5780636352211e146105ba5780636412e5ff146105f757610272565b806332cb6b0c1461042d57806335d49dc31461045857806340d0b4a91461048357806342842e0e1461049a578063471d8582146104c357610272565b806318160ddd1161023a57806318160ddd1461034f57806323b872dd1461037a57806328c5440f146103a35780632c1270ee146103cf5780632d3df31f146103e65780632f745c59146103f057610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c5780631249c58b14610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613c63565b610a0a565b6040516102ab9190613cab565b60405180910390f35b3480156102c057600080fd5b506102c9610a84565b6040516102d69190613d5f565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613db7565b610b16565b6040516103139190613e25565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613e6c565b610b9b565b005b61034d610cb3565b005b34801561035b57600080fd5b50610364610dcb565b6040516103719190613ebb565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613ed6565b610dd8565b005b3480156103af57600080fd5b506103b8610e38565b6040516103c6929190613f29565b60405180910390f35b3480156103db57600080fd5b506103e4610fdb565b005b6103ee611083565b005b3480156103fc57600080fd5b5061041760048036038101906104129190613e6c565b6111eb565b6040516104249190613ebb565b60405180910390f35b34801561043957600080fd5b50610442611290565b60405161044f9190613ebb565b60405180910390f35b34801561046457600080fd5b5061046d611296565b60405161047a9190613cab565b60405180910390f35b34801561048f57600080fd5b506104986112a9565b005b3480156104a657600080fd5b506104c160048036038101906104bc9190613ed6565b611342565b005b3480156104cf57600080fd5b506104ea60048036038101906104e59190613f60565b611362565b6040516104f79190613ebb565b60405180910390f35b34801561050c57600080fd5b5061052760048036038101906105229190613f60565b6113ab565b005b34801561053557600080fd5b50610550600480360381019061054b9190613db7565b6114db565b60405161055d9190613ebb565b60405180910390f35b34801561057257600080fd5b5061058d600480360381019061058891906140c2565b61154c565b005b34801561059b57600080fd5b506105a4611632565b6040516105b19190613cab565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613db7565b611645565b6040516105ee9190613e25565b60405180910390f35b34801561060357600080fd5b5061061e600480360381019061061991906141d3565b6116f7565b005b34801561062c57600080fd5b5061064760048036038101906106429190613f60565b611845565b6040516106549190613ebb565b60405180910390f35b34801561066957600080fd5b506106726118fd565b60405161067f9190613ebb565b60405180910390f35b34801561069457600080fd5b5061069d611902565b005b3480156106ab57600080fd5b506106c660048036038101906106c19190613db7565b61198a565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190613f60565b611a54565b6040516106fc9190613ebb565b60405180910390f35b34801561071157600080fd5b5061071a611a69565b005b34801561072857600080fd5b50610731611cd3565b60405161073e9190613e25565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906141d3565b611cfd565b005b34801561077c57600080fd5b50610785611e4b565b6040516107929190613d5f565b60405180910390f35b3480156107a757600080fd5b506107b0611edd565b005b3480156107be57600080fd5b506107d960048036038101906107d4919061425b565b611f76565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613f60565b611f8c565b60405161080f9190613ebb565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a919061433c565b611fd5565b005b34801561084d57600080fd5b5061086860048036038101906108639190613db7565b612037565b6040516108759190613d5f565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613f60565b61216b565b005b3480156108b357600080fd5b506108bc61229b565b6040516108c99190613cab565b60405180910390f35b3480156108de57600080fd5b506108e76122ae565b005b3480156108f557600080fd5b50610910600480360381019061090b9190613db7565b612356565b005b34801561091e57600080fd5b506109276123dc565b6040516109359291906143bf565b60405180910390f35b34801561094a57600080fd5b5061096560048036038101906109609190613f60565b6124a9565b6040516109729190613ebb565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d91906143e8565b6124e5565b6040516109af9190613cab565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da91906140c2565b612579565b005b3480156109ed57600080fd5b50610a086004803603810190610a039190613f60565b61260f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7d5750610a7c82612707565b5b9050919050565b606060008054610a9390614457565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf90614457565b8015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b5050505050905090565b6000610b21826127e9565b610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b57906144fb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ba682611645565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e9061458d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c36612855565b73ffffffffffffffffffffffffffffffffffffffff161480610c655750610c6481610c5f612855565b6124e5565b5b610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b9061461f565b60405180910390fd5b610cae838361285d565b505050565b600d60019054906101000a900460ff16610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf99061468b565b60405180910390fd5b612710610d206001610d12610dcb565b61291690919063ffffffff16565b1115610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d58906146f7565b60405180910390fd5b610d6d3360115461292c565b341015610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690614763565b60405180910390fd5b610dc033610dbb6129ba565b6129d5565b610dc9336129f3565b565b6000600880549050905090565b610de9610de3612855565b82612a4e565b610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f906147f5565b60405180910390fd5b610e33838383612b2c565b505050565b606080610e43612855565b73ffffffffffffffffffffffffffffffffffffffff16610e61611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae90614861565b60405180910390fd5b600e600f818054610ec790614457565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef390614457565b8015610f405780601f10610f1557610100808354040283529160200191610f40565b820191906000526020600020905b815481529060010190602001808311610f2357829003601f168201915b50505050509150808054610f5390614457565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7f90614457565b8015610fcc5780601f10610fa157610100808354040283529160200191610fcc565b820191906000526020600020905b815481529060010190602001808311610faf57829003601f168201915b50505050509050915091509091565b610fe3612855565b73ffffffffffffffffffffffffffffffffffffffff16611001611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e90614861565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b600a60149054906101000a900460ff166110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906148cd565b60405180910390fd5b60016110dd33611362565b101561111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590614939565b60405180910390fd5b61112733611362565b61113033611f8c565b10611170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611167906149cb565b60405180910390fd5b61271061118e6001611180610dcb565b61291690919063ffffffff16565b11156111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c6906146f7565b60405180910390fd5b6111e0336111db6129ba565b6129d5565b6111e9336129f3565b565b60006111f683611845565b8210611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e90614a5d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b600a60149054906101000a900460ff1681565b6112b1612855565b73ffffffffffffffffffffffffffffffffffffffff166112cf611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90614861565b60405180910390fd5b6001600d60026101000a81548160ff021916908315150217905550565b61135d83838360405180602001604052806000815250611fd5565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113b3612855565b73ffffffffffffffffffffffffffffffffffffffff166113d1611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e90614861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90614ac9565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006114e5610dcb565b8210611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90614b5b565b60405180910390fd5b6008828154811061153a57611539614b7b565b5b90600052602060002001549050919050565b611554612855565b73ffffffffffffffffffffffffffffffffffffffff16611572611cd3565b73ffffffffffffffffffffffffffffffffffffffff16146115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90614861565b60405180910390fd5b600d60009054906101000a900460ff1615611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f90614bf6565b60405180910390fd5b80600e908051906020019061162e929190613b54565b5050565b600d60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614c88565b60405180910390fd5b80915050919050565b6116ff612855565b73ffffffffffffffffffffffffffffffffffffffff1661171d611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90614861565b60405180910390fd5b60005b825181101561184057600073ffffffffffffffffffffffffffffffffffffffff168382815181106117aa576117a9614b7b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614cf4565b60405180910390fd5b61182d83828151811061181f5761181e614b7b565b5b602002602001015183612d88565b808061183890614d43565b915050611776565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90614dfe565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600181565b61190a612855565b73ffffffffffffffffffffffffffffffffffffffff16611928611cd3565b73ffffffffffffffffffffffffffffffffffffffff161461197e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197590614861565b60405180910390fd5b6119886000612de9565b565b611992612855565b73ffffffffffffffffffffffffffffffffffffffff166119b0611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90614861565b60405180910390fd5b6064811115611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190614e90565b60405180910390fd5b8060128190555050565b6000611a628260115461292c565b9050919050565b611a71612855565b73ffffffffffffffffffffffffffffffffffffffff16611a8f611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90614861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90614efc565b60405180910390fd5b6000479050600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611bdd57506000601254115b15611c70576000611c0c6064611bfe60125485612eaf90919063ffffffff16565b612ec590919063ffffffff16565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050611c6e57600080fd5b505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611cd057600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d05612855565b73ffffffffffffffffffffffffffffffffffffffff16611d23611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090614861565b60405180910390fd5b60005b8251811015611e4657600073ffffffffffffffffffffffffffffffffffffffff16838281518110611db057611daf614b7b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614cf4565b60405180910390fd5b611e33838281518110611e2557611e24614b7b565b5b602002602001015183612edb565b8080611e3e90614d43565b915050611d7c565b505050565b606060018054611e5a90614457565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8690614457565b8015611ed35780601f10611ea857610100808354040283529160200191611ed3565b820191906000526020600020905b815481529060010190602001808311611eb657829003601f168201915b5050505050905090565b611ee5612855565b73ffffffffffffffffffffffffffffffffffffffff16611f03611cd3565b73ffffffffffffffffffffffffffffffffffffffff1614611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090614861565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b611f88611f81612855565b8383612f4b565b5050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611fe6611fe0612855565b83612a4e565b612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c906147f5565b60405180910390fd5b612031848484846130b8565b50505050565b6060612042826127e9565b612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207890614f8e565b60405180910390fd5b60001515600d60029054906101000a900460ff161515141561212f57600f80546120aa90614457565b80601f01602080910402602001604051908101604052809291908181526020018280546120d690614457565b80156121235780601f106120f857610100808354040283529160200191612123565b820191906000526020600020905b81548152906001019060200180831161210657829003601f168201915b50505050509050612166565b612137613114565b612140836131a6565b60106040516020016121549392919061507e565b60405160208183030381529060405290505b919050565b612173612855565b73ffffffffffffffffffffffffffffffffffffffff16612191611cd3565b73ffffffffffffffffffffffffffffffffffffffff16146121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90614861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614ac9565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900460ff1681565b6122b6612855565b73ffffffffffffffffffffffffffffffffffffffff166122d4611cd3565b73ffffffffffffffffffffffffffffffffffffffff161461232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232190614861565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b61235e612855565b73ffffffffffffffffffffffffffffffffffffffff1661237c611cd3565b73ffffffffffffffffffffffffffffffffffffffff16146123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c990614861565b60405180910390fd5b8060118190555050565b6000806123e7612855565b73ffffffffffffffffffffffffffffffffffffffff16612405611cd3565b73ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290614861565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000806124b583611362565b116124c15760006124de565b6124ca82611f8c565b6124d383611362565b6124dd91906150af565b5b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612581612855565b73ffffffffffffffffffffffffffffffffffffffff1661259f611cd3565b73ffffffffffffffffffffffffffffffffffffffff16146125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614861565b60405180910390fd5b80600f908051906020019061260b929190613b54565b5050565b612617612855565b73ffffffffffffffffffffffffffffffffffffffff16612635611cd3565b73ffffffffffffffffffffffffffffffffffffffff161461268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614861565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f290615155565b60405180910390fd5b61270481612de9565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127e257506127e182613307565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128d083611645565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081836129249190615175565b905092915050565b60008060009050600061293e85611f8c565b141561294d57809150506129b4565b600061295885611f8c565b9050600061296586611362565b90508180612972906151cb565b92505080821015612988578293505050506129b4565b808261299491906150af565b60026129a09190615328565b856129ab9190615373565b92508293505050505b92915050565b600060016129c6610dcb565b6129d09190615175565b905090565b6129ef828260405180602001604052806000815250613371565b5050565b60016129fe82611f8c565b612a089190615175565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000612a59826127e9565b612a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8f9061543f565b60405180910390fd5b6000612aa383611645565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b1257508373ffffffffffffffffffffffffffffffffffffffff16612afa84610b16565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b235750612b2281856124e5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b4c82611645565b73ffffffffffffffffffffffffffffffffffffffff1614612ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b99906154d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0990615563565b60405180910390fd5b612c1d8383836133cc565b612c2860008261285d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c7891906150af565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ccf9190615175565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612d9383611362565b90508181612da19190615175565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612ebd9190615373565b905092915050565b60008183612ed391906155b2565b905092915050565b6000612ee683611362565b9050808210612ef6576000612f03565b8181612f0291906150af565b5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb19061562f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516130ab9190613cab565b60405180910390a3505050565b6130c3848484612b2c565b6130cf848484846134e0565b61310e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613105906156c1565b60405180910390fd5b50505050565b6060600e805461312390614457565b80601f016020809104026020016040519081016040528092919081815260200182805461314f90614457565b801561319c5780601f106131715761010080835404028352916020019161319c565b820191906000526020600020905b81548152906001019060200180831161317f57829003601f168201915b5050505050905090565b606060008214156131ee576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613302565b600082905060005b6000821461322057808061320990614d43565b915050600a8261321991906155b2565b91506131f6565b60008167ffffffffffffffff81111561323c5761323b613f97565b5b6040519080825280601f01601f19166020018201604052801561326e5781602001600182028036833780820191505090505b5090505b600085146132fb5760018261328791906150af565b9150600a8561329691906156e1565b60306132a29190615175565b60f81b8183815181106132b8576132b7614b7b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132f491906155b2565b9450613272565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61337b8383613668565b61338860008484846134e0565b6133c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133be906156c1565b60405180910390fd5b505050565b6133d7838383613836565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561341a576134158161383b565b613459565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613458576134578382613884565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561349c57613497816139f1565b6134db565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146134da576134d98282613ac2565b5b5b505050565b60006135018473ffffffffffffffffffffffffffffffffffffffff16613b41565b1561365b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261352a612855565b8786866040518563ffffffff1660e01b815260040161354c9493929190615767565b6020604051808303816000875af192505050801561358857506040513d601f19601f8201168201806040525081019061358591906157c8565b60015b61360b573d80600081146135b8576040519150601f19603f3d011682016040523d82523d6000602084013e6135bd565b606091505b50600081511415613603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fa906156c1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613660565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136cf90615841565b60405180910390fd5b6136e1816127e9565b15613721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613718906158ad565b60405180910390fd5b61372d600083836133cc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461377d9190615175565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161389184611845565b61389b91906150af565b9050600060076000848152602001908152602001600020549050818114613980576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613a0591906150af565b9050600060096000848152602001908152602001600020549050600060088381548110613a3557613a34614b7b565b5b906000526020600020015490508060088381548110613a5757613a56614b7b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613aa657613aa56158cd565b5b6001900381819060005260206000200160009055905550505050565b6000613acd83611845565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613b6090614457565b90600052602060002090601f016020900481019282613b825760008555613bc9565b82601f10613b9b57805160ff1916838001178555613bc9565b82800160010185558215613bc9579182015b82811115613bc8578251825591602001919060010190613bad565b5b509050613bd69190613bda565b5090565b5b80821115613bf3576000816000905550600101613bdb565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613c4081613c0b565b8114613c4b57600080fd5b50565b600081359050613c5d81613c37565b92915050565b600060208284031215613c7957613c78613c01565b5b6000613c8784828501613c4e565b91505092915050565b60008115159050919050565b613ca581613c90565b82525050565b6000602082019050613cc06000830184613c9c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d00578082015181840152602081019050613ce5565b83811115613d0f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d3182613cc6565b613d3b8185613cd1565b9350613d4b818560208601613ce2565b613d5481613d15565b840191505092915050565b60006020820190508181036000830152613d798184613d26565b905092915050565b6000819050919050565b613d9481613d81565b8114613d9f57600080fd5b50565b600081359050613db181613d8b565b92915050565b600060208284031215613dcd57613dcc613c01565b5b6000613ddb84828501613da2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e0f82613de4565b9050919050565b613e1f81613e04565b82525050565b6000602082019050613e3a6000830184613e16565b92915050565b613e4981613e04565b8114613e5457600080fd5b50565b600081359050613e6681613e40565b92915050565b60008060408385031215613e8357613e82613c01565b5b6000613e9185828601613e57565b9250506020613ea285828601613da2565b9150509250929050565b613eb581613d81565b82525050565b6000602082019050613ed06000830184613eac565b92915050565b600080600060608486031215613eef57613eee613c01565b5b6000613efd86828701613e57565b9350506020613f0e86828701613e57565b9250506040613f1f86828701613da2565b9150509250925092565b60006040820190508181036000830152613f438185613d26565b90508181036020830152613f578184613d26565b90509392505050565b600060208284031215613f7657613f75613c01565b5b6000613f8484828501613e57565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fcf82613d15565b810181811067ffffffffffffffff82111715613fee57613fed613f97565b5b80604052505050565b6000614001613bf7565b905061400d8282613fc6565b919050565b600067ffffffffffffffff82111561402d5761402c613f97565b5b61403682613d15565b9050602081019050919050565b82818337600083830152505050565b600061406561406084614012565b613ff7565b90508281526020810184848401111561408157614080613f92565b5b61408c848285614043565b509392505050565b600082601f8301126140a9576140a8613f8d565b5b81356140b9848260208601614052565b91505092915050565b6000602082840312156140d8576140d7613c01565b5b600082013567ffffffffffffffff8111156140f6576140f5613c06565b5b61410284828501614094565b91505092915050565b600067ffffffffffffffff82111561412657614125613f97565b5b602082029050602081019050919050565b600080fd5b600061414f61414a8461410b565b613ff7565b9050808382526020820190506020840283018581111561417257614171614137565b5b835b8181101561419b57806141878882613e57565b845260208401935050602081019050614174565b5050509392505050565b600082601f8301126141ba576141b9613f8d565b5b81356141ca84826020860161413c565b91505092915050565b600080604083850312156141ea576141e9613c01565b5b600083013567ffffffffffffffff81111561420857614207613c06565b5b614214858286016141a5565b925050602061422585828601613da2565b9150509250929050565b61423881613c90565b811461424357600080fd5b50565b6000813590506142558161422f565b92915050565b6000806040838503121561427257614271613c01565b5b600061428085828601613e57565b925050602061429185828601614246565b9150509250929050565b600067ffffffffffffffff8211156142b6576142b5613f97565b5b6142bf82613d15565b9050602081019050919050565b60006142df6142da8461429b565b613ff7565b9050828152602081018484840111156142fb576142fa613f92565b5b614306848285614043565b509392505050565b600082601f83011261432357614322613f8d565b5b81356143338482602086016142cc565b91505092915050565b6000806000806080858703121561435657614355613c01565b5b600061436487828801613e57565b945050602061437587828801613e57565b935050604061438687828801613da2565b925050606085013567ffffffffffffffff8111156143a7576143a6613c06565b5b6143b38782880161430e565b91505092959194509250565b60006040820190506143d46000830185613e16565b6143e16020830184613e16565b9392505050565b600080604083850312156143ff576143fe613c01565b5b600061440d85828601613e57565b925050602061441e85828601613e57565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446f57607f821691505b6020821081141561448357614482614428565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006144e5602c83613cd1565b91506144f082614489565b604082019050919050565b60006020820190508181036000830152614514816144d8565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614577602183613cd1565b91506145828261451b565b604082019050919050565b600060208201905081810360008301526145a68161456a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614609603883613cd1565b9150614614826145ad565b604082019050919050565b60006020820190508181036000830152614638816145fc565b9050919050565b7f53616c65206d757374206265206163746976652e000000000000000000000000600082015250565b6000614675601483613cd1565b91506146808261463f565b602082019050919050565b600060208201905081810360008301526146a481614668565b9050919050565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c792e600082015250565b60006146e1602083613cd1565b91506146ec826146ab565b602082019050919050565b60006020820190508181036000830152614710816146d4565b9050919050565b7f56616c75652073656e74206973206e6f7420636f72726563742e000000000000600082015250565b600061474d601a83613cd1565b915061475882614717565b602082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006147df603183613cd1565b91506147ea82614783565b604082019050919050565b6000602082019050818103600083015261480e816147d2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061484b602083613cd1565b915061485682614815565b602082019050919050565b6000602082019050818103600083015261487a8161483e565b9050919050565b7f57686974656c697374206d696e74696e67206e6f74206c697665207965742e00600082015250565b60006148b7601f83613cd1565b91506148c282614881565b602082019050919050565b600060208201905081810360008301526148e6816148aa565b9050919050565b7f4d73672e73656e646572206973206e6f742077686974656c69737465642e0000600082015250565b6000614923601e83613cd1565b915061492e826148ed565b602082019050919050565b6000602082019050818103600083015261495281614916565b9050919050565b7f4d73672e73656e6465722068617320726561636865642074686520776869746560008201527f6c697374206d696e74696e67206c696d69742e00000000000000000000000000602082015250565b60006149b5603383613cd1565b91506149c082614959565b604082019050919050565b600060208201905081810360008301526149e4816149a8565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614a47602b83613cd1565b9150614a52826149eb565b604082019050919050565b60006020820190508181036000830152614a7681614a3a565b9050919050565b7f43616e277420757064617465206e756c6c206164647265737300000000000000600082015250565b6000614ab3601983613cd1565b9150614abe82614a7d565b602082019050919050565b60006020820190508181036000830152614ae281614aa6565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614b45602c83613cd1565b9150614b5082614ae9565b604082019050919050565b60006020820190508181036000830152614b7481614b38565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4d65746164617461206973206c6f636b65640000000000000000000000000000600082015250565b6000614be0601283613cd1565b9150614beb82614baa565b602082019050919050565b60006020820190508181036000830152614c0f81614bd3565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614c72602983613cd1565b9150614c7d82614c16565b604082019050919050565b60006020820190508181036000830152614ca181614c65565b9050919050565b7f43616e27742061646420746865206e756c6c20616464726573732e0000000000600082015250565b6000614cde601b83613cd1565b9150614ce982614ca8565b602082019050919050565b60006020820190508181036000830152614d0d81614cd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d4e82613d81565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d8157614d80614d14565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614de8602a83613cd1565b9150614df382614d8c565b604082019050919050565b60006020820190508181036000830152614e1781614ddb565b9050919050565b7f536861726520616d6f756e74206e6565647320746f2062652062747765656e2060008201527f3020616e64203130300000000000000000000000000000000000000000000000602082015250565b6000614e7a602983613cd1565b9150614e8582614e1e565b604082019050919050565b60006020820190508181036000830152614ea981614e6d565b9050919050565b7f4d61696e2061646472657373206e6f7420676976656e00000000000000000000600082015250565b6000614ee6601683613cd1565b9150614ef182614eb0565b602082019050919050565b60006020820190508181036000830152614f1581614ed9565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614f78602f83613cd1565b9150614f8382614f1c565b604082019050919050565b60006020820190508181036000830152614fa781614f6b565b9050919050565b600081905092915050565b6000614fc482613cc6565b614fce8185614fae565b9350614fde818560208601613ce2565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461500c81614457565b6150168186614fae565b94506001821660008114615031576001811461504257615075565b60ff19831686528186019350615075565b61504b85614fea565b60005b8381101561506d5781548189015260018201915060208101905061504e565b838801955050505b50505092915050565b600061508a8286614fb9565b91506150968285614fb9565b91506150a28284614fff565b9150819050949350505050565b60006150ba82613d81565b91506150c583613d81565b9250828210156150d8576150d7614d14565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061513f602683613cd1565b915061514a826150e3565b604082019050919050565b6000602082019050818103600083015261516e81615132565b9050919050565b600061518082613d81565b915061518b83613d81565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151c0576151bf614d14565b5b828201905092915050565b60006151d682613d81565b915060008214156151ea576151e9614d14565b5b600182039050919050565b60008160011c9050919050565b6000808291508390505b600185111561524c5780860481111561522857615227614d14565b5b60018516156152375780820291505b8081029050615245856151f5565b945061520c565b94509492505050565b6000826152655760019050615321565b816152735760009050615321565b81600181146152895760028114615293576152c2565b6001915050615321565b60ff8411156152a5576152a4614d14565b5b8360020a9150848211156152bc576152bb614d14565b5b50615321565b5060208310610133831016604e8410600b84101617156152f75782820a9050838111156152f2576152f1614d14565b5b615321565b6153048484846001615202565b9250905081840481111561531b5761531a614d14565b5b81810290505b9392505050565b600061533382613d81565b915061533e83613d81565b925061536b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615255565b905092915050565b600061537e82613d81565b915061538983613d81565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153c2576153c1614d14565b5b828202905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000615429602c83613cd1565b9150615434826153cd565b604082019050919050565b600060208201905081810360008301526154588161541c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006154bb602983613cd1565b91506154c68261545f565b604082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061554d602483613cd1565b9150615558826154f1565b604082019050919050565b6000602082019050818103600083015261557c81615540565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006155bd82613d81565b91506155c883613d81565b9250826155d8576155d7615583565b5b828204905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615619601983613cd1565b9150615624826155e3565b602082019050919050565b600060208201905081810360008301526156488161560c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006156ab603283613cd1565b91506156b68261564f565b604082019050919050565b600060208201905081810360008301526156da8161569e565b9050919050565b60006156ec82613d81565b91506156f783613d81565b92508261570757615706615583565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061573982615712565b615743818561571d565b9350615753818560208601613ce2565b61575c81613d15565b840191505092915050565b600060808201905061577c6000830187613e16565b6157896020830186613e16565b6157966040830185613eac565b81810360608301526157a8818461572e565b905095945050505050565b6000815190506157c281613c37565b92915050565b6000602082840312156157de576157dd613c01565b5b60006157ec848285016157b3565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061582b602083613cd1565b9150615836826157f5565b602082019050919050565b6000602082019050818103600083015261585a8161581e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615897601c83613cd1565b91506158a282615861565b602082019050919050565b600060208201905081810360008301526158c68161588a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220b2b3ba5171087ad2f183ee43d412a11da0b576b7f2ac1fc30277c5a9801e856764736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initialURL (string):
Arg [1] : _notRevealedURI (string):
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
56257:4814:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34798:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21446:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23005:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22528:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57637:220;;;:::i;:::-;;35438:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23755:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59029:147;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;53498:120;;;;;;;;;;;;;:::i;:::-;;57865:272;;;:::i;:::-;;35106:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56658:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51213;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58282:82;;;;;;;;;;;;;:::i;:::-;;24165:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55127:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60283:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35628:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58718:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56466:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21140:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53708:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20870:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56707:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49509:103;;;;;;;;;;;;;:::i;:::-;;59935:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59736:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60613:449;;;;;;;;;;;;;:::i;:::-;;48858:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54052:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21615:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58481:85;;;;;;;;;;;;;:::i;:::-;;23298:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52657:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24421:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59184:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60117:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56423:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58181:93;;;;;;;;;;;;;:::i;:::-;;59632:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60450:155;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;54896:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23524:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58895:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49767:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34798:224;34900:4;34939:35;34924:50;;;:11;:50;;;;:90;;;;34978:36;35002:11;34978:23;:36::i;:::-;34924:90;34917:97;;34798:224;;;:::o;21446:100::-;21500:13;21533:5;21526:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21446:100;:::o;23005:221::-;23081:7;23109:16;23117:7;23109;:16::i;:::-;23101:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23194:15;:24;23210:7;23194:24;;;;;;;;;;;;;;;;;;;;;23187:31;;23005:221;;;:::o;22528:411::-;22609:13;22625:23;22640:7;22625:14;:23::i;:::-;22609:39;;22673:5;22667:11;;:2;:11;;;;22659:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22767:5;22751:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22776:37;22793:5;22800:12;:10;:12::i;:::-;22776:16;:37::i;:::-;22751:62;22729:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22910:21;22919:2;22923:7;22910:8;:21::i;:::-;22598:341;22528:411;;:::o;57637:220::-;57362:12;;;;;;;;;;;57354:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;56695:5:::1;57484:20;57502:1;57484:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:34;;57462:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;57198:41:::2;57217:10;57229:9;;57198:18;:41::i;:::-;57185:9;:54;;57163:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;57770:39:::3;57780:10;57792:16;:14;:16::i;:::-;57770:9;:39::i;:::-;57820:29;57838:10;57820:17;:29::i;:::-;57637:220::o:0;35438:113::-;35499:7;35526:10;:17;;;;35519:24;;35438:113;:::o;23755:339::-;23950:41;23969:12;:10;:12::i;:::-;23983:7;23950:18;:41::i;:::-;23942:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24058:28;24068:4;24074:2;24078:7;24058:9;:28::i;:::-;23755:339;;;:::o;59029:147::-;59079:18;59099:25;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59144:7:::1;59153:14;59136:32;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59029:147:::0;;:::o;53498:120::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53588:22:::1;;;;;;;;;;;53587:23;53562:22;;:48;;;;;;;;;;;;;;;;;;53498:120::o:0;57865:272::-;52923:22;;;;;;;;;;;52915:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;53122:1:::1;53093:25;53107:10;53093:13;:25::i;:::-;:30;;53085:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;53344:25:::2;53358:10;53344:13;:25::i;:::-;53317:24;53330:10;53317:12;:24::i;:::-;:52;53309:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;56695:5:::3;57484:20;57502:1;57484:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:34;;57462:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;58050:39:::4;58060:10;58072:16;:14;:16::i;:::-;58050:9;:39::i;:::-;58100:29;58118:10;58100:17;:29::i;:::-;57865:272::o:0;35106:256::-;35203:7;35239:23;35256:5;35239:16;:23::i;:::-;35231:5;:31;35223:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35328:12;:19;35341:5;35328:19;;;;;;;;;;;;;;;:26;35348:5;35328:26;;;;;;;;;;;;35321:33;;35106:256;;;;:::o;56658:42::-;56695:5;56658:42;:::o;51213:::-;;;;;;;;;;;;;:::o;58282:82::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58351:4:::1;58340:8;;:15;;;;;;;;;;;;;;;;;;58282:82::o:0;24165:185::-;24303:39;24320:4;24326:2;24330:7;24303:39;;;;;;;;;;;;:16;:39::i;:::-;24165:185;;;:::o;55127:114::-;55185:7;55212:15;:21;55228:4;55212:21;;;;;;;;;;;;;;;;55205:28;;55127:114;;;:::o;60283:159::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60377:1:::1;60361:18;;:4;:18;;;;60353:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;60430:4;60420:7;;:14;;;;;;;;;;;;;;;;;;60283:159:::0;:::o;35628:233::-;35703:7;35739:30;:28;:30::i;:::-;35731:5;:38;35723:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35836:10;35847:5;35836:17;;;;;;;;:::i;:::-;;;;;;;;;;35829:24;;35628:233;;;:::o;58718:165::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58804:16:::1;;;;;;;;;;;58803:17;58795:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;58864:11;58854:7;:21;;;;;;;;;;;;:::i;:::-;;58718:165:::0;:::o;56466:32::-;;;;;;;;;;;;;:::o;21140:239::-;21212:7;21232:13;21248:7;:16;21256:7;21248:16;;;;;;;;;;;;;;;;;;;;;21232:32;;21300:1;21283:19;;:5;:19;;;;21275:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21366:5;21359:12;;;21140:239;;;:::o;53708:290::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53807:9:::1;53802:189;53826:9;:16;53822:1;:20;53802:189;;;53896:1;53872:26;;:9;53882:1;53872:12;;;;;;;;:::i;:::-;;;;;;;;:26;;;;53864:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;53945:34;53958:9;53968:1;53958:12;;;;;;;;:::i;:::-;;;;;;;;53972:6;53945:12;:34::i;:::-;53844:3;;;;;:::i;:::-;;;;53802:189;;;;53708:290:::0;;:::o;20870:208::-;20942:7;20987:1;20970:19;;:5;:19;;;;20962:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21054:9;:16;21064:5;21054:16;;;;;;;;;;;;;;;;21047:23;;20870:208;;;:::o;56707:45::-;56751:1;56707:45;:::o;49509:103::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49574:30:::1;49601:1;49574:18;:30::i;:::-;49509:103::o:0;59935:174::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60021:3:::1;60011:6;:13;;60003:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;60095:6;60081:11;:20;;;;59935:174:::0;:::o;59736:150::-;59806:17;59843:35;59862:4;59868:9;;59843:18;:35::i;:::-;59836:42;;59736:150;;;:::o;60613:449::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60693:1:::1;60674:21;;:7;;;;;;;;;;;:21;;;;60666:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;60735:22;60760:21;60735:46;;60814:1;60795:21;;:7;;;;;;;;;;;:21;;;;:40;;;;;60834:1;60820:11;;:15;60795:40;60792:193;;;60851:20;60874:40;60910:3;60874:31;60893:11;;60874:14;:18;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;60851:63;;60945:7;;;;;;;;;;;60937:21;;:35;60959:12;60937:35;;;;;;;;;;;;;;;;;;;;;;;60929:44;;;::::0;::::1;;60836:149;60792:193;61017:7;;;;;;;;;;;61009:21;;:44;61031:21;61009:44;;;;;;;;;;;;;;;;;;;;;;;61001:53;;;::::0;::::1;;60655:407;60613:449::o:0;48858:87::-;48904:7;48931:6;;;;;;;;;;;48924:13;;48858:87;:::o;54052:301::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54154:9:::1;54149:197;54173:9;:16;54169:1;:20;54149:197;;;54243:1;54219:26;;:9;54229:1;54219:12;;;;;;;;:::i;:::-;;;;;;;;:26;;;;54211:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;54292:42;54313:9;54323:1;54313:12;;;;;;;;:::i;:::-;;;;;;;;54327:6;54292:20;:42::i;:::-;54191:3;;;;;:::i;:::-;;;;54149:197;;;;54052:301:::0;;:::o;21615:104::-;21671:13;21704:7;21697:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21615:104;:::o;58481:85::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58554:4:::1;58535:16;;:23;;;;;;;;;;;;;;;;;;58481:85::o:0;23298:155::-;23393:52;23412:12;:10;:12::i;:::-;23426:8;23436;23393:18;:52::i;:::-;23298:155;;:::o;52657:114::-;52714:7;52741:16;:22;52758:4;52741:22;;;;;;;;;;;;;;;;52734:29;;52657:114;;;:::o;24421:328::-;24596:41;24615:12;:10;:12::i;:::-;24629:7;24596:18;:41::i;:::-;24588:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24702:39;24716:4;24722:2;24726:7;24735:5;24702:13;:39::i;:::-;24421:328;;;;:::o;59184:406::-;59302:13;59341:16;59349:7;59341;:16::i;:::-;59333:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;59437:5;59425:17;;:8;;;;;;;;;;;:17;;;59422:70;;;59466:14;59459:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59422:70;59535:10;:8;:10::i;:::-;59547:18;:7;:16;:18::i;:::-;59567:13;59518:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59504:78;;59184:406;;;;:::o;60117:154::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60206:1:::1;60190:18;;:4;:18;;;;60182:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;60259:4;60249:7;;:14;;;;;;;;;;;;;;;;;;60117:154:::0;:::o;56423:36::-;;;;;;;;;;;;;:::o;58181:93::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58254:12:::1;;;;;;;;;;;58253:13;58238:12;;:28;;;;;;;;;;;;;;;;;;58181:93::o:0;59632:96::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59712:8:::1;59700:9;:20;;;;59632:96:::0;:::o;60450:155::-;60514:19;60535:24;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60580:7:::1;;;;;;;;;;;60589;;;;;;;;;;;60572:25;;;;60450:155:::0;;:::o;54896:189::-;54963:22;55027:1;55005:19;55019:4;55005:13;:19::i;:::-;:23;:71;;55075:1;55005:71;;;55053:18;55066:4;55053:12;:18::i;:::-;55031:19;55045:4;55031:13;:19::i;:::-;:40;;;;:::i;:::-;55005:71;54998:78;;54896:189;;;:::o;23524:164::-;23621:4;23645:18;:25;23664:5;23645:25;;;;;;;;;;;;;;;:35;23671:8;23645:35;;;;;;;;;;;;;;;;;;;;;;;;;23638:42;;23524:164;;;;:::o;58895:126::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58998:15:::1;58981:14;:32;;;;;;;;;;;;:::i;:::-;;58895:126:::0;:::o;49767:201::-;49089:12;:10;:12::i;:::-;49078:23;;:7;:5;:7::i;:::-;:23;;;49070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49876:1:::1;49856:22;;:8;:22;;;;49848:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49932:28;49951:8;49932:18;:28::i;:::-;49767:201:::0;:::o;20501:305::-;20603:4;20655:25;20640:40;;;:11;:40;;;;:105;;;;20712:33;20697:48;;;:11;:48;;;;20640:105;:158;;;;20762:36;20786:11;20762:23;:36::i;:::-;20640:158;20620:178;;20501:305;;;:::o;26259:127::-;26324:4;26376:1;26348:30;;:7;:16;26356:7;26348:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26341:37;;26259:127;;;:::o;16026:98::-;16079:7;16106:10;16099:17;;16026:98;:::o;30241:174::-;30343:2;30316:15;:24;30332:7;30316:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30399:7;30395:2;30361:46;;30370:23;30385:7;30370:14;:23::i;:::-;30361:46;;;;;;;;;;;;30241:174;;:::o;43717:98::-;43775:7;43806:1;43802;:5;;;;:::i;:::-;43795:12;;43717:98;;;;:::o;51536:864::-;51620:7;51832:13;51848:1;51832:17;;51938:1;51916:18;51929:4;51916:12;:18::i;:::-;:23;51913:99;;;51962:5;51955:12;;;;;51913:99;52032:14;52049:18;52062:4;52049:12;:18::i;:::-;52032:35;;52078:15;52096:19;52110:4;52096:13;:19::i;:::-;52078:37;;52128:11;;;;;:::i;:::-;;;;52195:10;52183:9;:22;52180:126;;;52229:5;52222:12;;;;;;;52180:126;52355:10;52343:9;:22;;;;:::i;:::-;52339:1;:27;;;;:::i;:::-;52326:9;:41;;;;:::i;:::-;52318:49;;52387:5;52380:12;;;;;51536:864;;;;;:::o;58372:101::-;58420:7;58463:1;58447:13;:11;:13::i;:::-;:17;;;;:::i;:::-;58440:24;;58372:101;:::o;27243:110::-;27319:26;27329:2;27333:7;27319:26;;;;;;;;;;;;:9;:26::i;:::-;27243:110;;:::o;52493:116::-;52600:1;52579:18;52592:4;52579:12;:18::i;:::-;:22;;;;:::i;:::-;52554:16;:22;52571:4;52554:22;;;;;;;;;;;;;;;:47;;;;52493:116;:::o;26553:348::-;26646:4;26671:16;26679:7;26671;:16::i;:::-;26663:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26747:13;26763:23;26778:7;26763:14;:23::i;:::-;26747:39;;26816:5;26805:16;;:7;:16;;;:51;;;;26849:7;26825:31;;:20;26837:7;26825:11;:20::i;:::-;:31;;;26805:51;:87;;;;26860:32;26877:5;26884:7;26860:16;:32::i;:::-;26805:87;26797:96;;;26553:348;;;;:::o;29545:578::-;29704:4;29677:31;;:23;29692:7;29677:14;:23::i;:::-;:31;;;29669:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29787:1;29773:16;;:2;:16;;;;29765:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29843:39;29864:4;29870:2;29874:7;29843:20;:39::i;:::-;29947:29;29964:1;29968:7;29947:8;:29::i;:::-;30008:1;29989:9;:15;29999:4;29989:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30037:1;30020:9;:13;30030:2;30020:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30068:2;30049:7;:16;30057:7;30049:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30107:7;30103:2;30088:27;;30097:4;30088:27;;;;;;;;;;;;29545:578;;;:::o;54403:171::-;54471:17;54491:19;54505:4;54491:13;:19::i;:::-;54471:39;;54560:6;54545:12;:21;;;;:::i;:::-;54521:15;:21;54537:4;54521:21;;;;;;;;;;;;;;;:45;;;;54460:114;54403:171;;:::o;50128:191::-;50202:16;50221:6;;;;;;;;;;;50202:25;;50247:8;50238:6;;:17;;;;;;;;;;;;;;;;;;50302:8;50271:40;;50292:8;50271:40;;;;;;;;;;;;50191:128;50128:191;:::o;44455:98::-;44513:7;44544:1;44540;:5;;;;:::i;:::-;44533:12;;44455:98;;;;:::o;44854:::-;44912:7;44943:1;44939;:5;;;;:::i;:::-;44932:12;;44854:98;;;;:::o;54629:207::-;54705:17;54725:19;54739:4;54725:13;:19::i;:::-;54705:39;;54788:12;54779:6;:21;:49;;54827:1;54779:49;;;54818:6;54803:12;:21;;;;:::i;:::-;54779:49;54755:15;:21;54771:4;54755:21;;;;;;;;;;;;;;;:73;;;;54694:142;54629:207;;:::o;30557:315::-;30712:8;30703:17;;:5;:17;;;;30695:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;30799:8;30761:18;:25;30780:5;30761:25;;;;;;;;;;;;;;;:35;30787:8;30761:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30845:8;30823:41;;30838:5;30823:41;;;30855:8;30823:41;;;;;;:::i;:::-;;;;;;;;30557:315;;;:::o;25631:::-;25788:28;25798:4;25804:2;25808:7;25788:9;:28::i;:::-;25835:48;25858:4;25864:2;25868:7;25877:5;25835:22;:48::i;:::-;25827:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25631:315;;;;:::o;58602:108::-;58662:13;58695:7;58688:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58602:108;:::o;16522:723::-;16578:13;16808:1;16799:5;:10;16795:53;;;16826:10;;;;;;;;;;;;;;;;;;;;;16795:53;16858:12;16873:5;16858:20;;16889:14;16914:78;16929:1;16921:4;:9;16914:78;;16947:8;;;;;:::i;:::-;;;;16978:2;16970:10;;;;;:::i;:::-;;;16914:78;;;17002:19;17034:6;17024:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17002:39;;17052:154;17068:1;17059:5;:10;17052:154;;17096:1;17086:11;;;;;:::i;:::-;;;17163:2;17155:5;:10;;;;:::i;:::-;17142:2;:24;;;;:::i;:::-;17129:39;;17112:6;17119;17112:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17192:2;17183:11;;;;;:::i;:::-;;;17052:154;;;17230:6;17216:21;;;;;16522:723;;;;:::o;19048:157::-;19133:4;19172:25;19157:40;;;:11;:40;;;;19150:47;;19048:157;;;:::o;27580:321::-;27710:18;27716:2;27720:7;27710:5;:18::i;:::-;27761:54;27792:1;27796:2;27800:7;27809:5;27761:22;:54::i;:::-;27739:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27580:321;;;:::o;36474:589::-;36618:45;36645:4;36651:2;36655:7;36618:26;:45::i;:::-;36696:1;36680:18;;:4;:18;;;36676:187;;;36715:40;36747:7;36715:31;:40::i;:::-;36676:187;;;36785:2;36777:10;;:4;:10;;;36773:90;;36804:47;36837:4;36843:7;36804:32;:47::i;:::-;36773:90;36676:187;36891:1;36877:16;;:2;:16;;;36873:183;;;36910:45;36947:7;36910:36;:45::i;:::-;36873:183;;;36983:4;36977:10;;:2;:10;;;36973:83;;37004:40;37032:2;37036:7;37004:27;:40::i;:::-;36973:83;36873:183;36474:589;;;:::o;31437:799::-;31592:4;31613:15;:2;:13;;;:15::i;:::-;31609:620;;;31665:2;31649:36;;;31686:12;:10;:12::i;:::-;31700:4;31706:7;31715:5;31649:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31645:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31908:1;31891:6;:13;:18;31887:272;;;31934:60;;;;;;;;;;:::i;:::-;;;;;;;;31887:272;32109:6;32103:13;32094:6;32090:2;32086:15;32079:38;31645:529;31782:41;;;31772:51;;;:6;:51;;;;31765:58;;;;;31609:620;32213:4;32206:11;;31437:799;;;;;;;:::o;28237:382::-;28331:1;28317:16;;:2;:16;;;;28309:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28390:16;28398:7;28390;:16::i;:::-;28389:17;28381:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28452:45;28481:1;28485:2;28489:7;28452:20;:45::i;:::-;28527:1;28510:9;:13;28520:2;28510:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28558:2;28539:7;:16;28547:7;28539:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28603:7;28599:2;28578:33;;28595:1;28578:33;;;;;;;;;;;;28237:382;;:::o;32808:126::-;;;;:::o;37786:164::-;37890:10;:17;;;;37863:15;:24;37879:7;37863:24;;;;;;;;;;;:44;;;;37918:10;37934:7;37918:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37786:164;:::o;38577:988::-;38843:22;38893:1;38868:22;38885:4;38868:16;:22::i;:::-;:26;;;;:::i;:::-;38843:51;;38905:18;38926:17;:26;38944:7;38926:26;;;;;;;;;;;;38905:47;;39073:14;39059:10;:28;39055:328;;39104:19;39126:12;:18;39139:4;39126:18;;;;;;;;;;;;;;;:34;39145:14;39126:34;;;;;;;;;;;;39104:56;;39210:11;39177:12;:18;39190:4;39177:18;;;;;;;;;;;;;;;:30;39196:10;39177:30;;;;;;;;;;;:44;;;;39327:10;39294:17;:30;39312:11;39294:30;;;;;;;;;;;:43;;;;39089:294;39055:328;39479:17;:26;39497:7;39479:26;;;;;;;;;;;39472:33;;;39523:12;:18;39536:4;39523:18;;;;;;;;;;;;;;;:34;39542:14;39523:34;;;;;;;;;;;39516:41;;;38658:907;;38577:988;;:::o;39860:1079::-;40113:22;40158:1;40138:10;:17;;;;:21;;;;:::i;:::-;40113:46;;40170:18;40191:15;:24;40207:7;40191:24;;;;;;;;;;;;40170:45;;40542:19;40564:10;40575:14;40564:26;;;;;;;;:::i;:::-;;;;;;;;;;40542:48;;40628:11;40603:10;40614;40603:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40739:10;40708:15;:28;40724:11;40708:28;;;;;;;;;;;:41;;;;40880:15;:24;40896:7;40880:24;;;;;;;;;;;40873:31;;;40915:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39931:1008;;;39860:1079;:::o;37364:221::-;37449:14;37466:20;37483:2;37466:16;:20::i;:::-;37449:37;;37524:7;37497:12;:16;37510:2;37497:16;;;;;;;;;;;;;;;:24;37514:6;37497:24;;;;;;;;;;;:34;;;;37571:6;37542:17;:26;37560:7;37542:26;;;;;;;;;;;:35;;;;37438:147;37364:221;;:::o;8099:387::-;8159:4;8367:12;8434:7;8422:20;8414:28;;8477:1;8470:4;:8;8463:15;;;8099:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:514::-;6076:4;6114:2;6103:9;6099:18;6091:26;;6163:9;6157:4;6153:20;6149:1;6138:9;6134:17;6127:47;6191:78;6264:4;6255:6;6191:78;:::i;:::-;6183:86;;6316:9;6310:4;6306:20;6301:2;6290:9;6286:18;6279:48;6344:78;6417:4;6408:6;6344:78;:::i;:::-;6336:86;;5915:514;;;;;:::o;6435:329::-;6494:6;6543:2;6531:9;6522:7;6518:23;6514:32;6511:119;;;6549:79;;:::i;:::-;6511:119;6669:1;6694:53;6739:7;6730:6;6719:9;6715:22;6694:53;:::i;:::-;6684:63;;6640:117;6435:329;;;;:::o;6770:117::-;6879:1;6876;6869:12;6893:117;7002:1;6999;6992:12;7016:180;7064:77;7061:1;7054:88;7161:4;7158:1;7151:15;7185:4;7182:1;7175:15;7202:281;7285:27;7307:4;7285:27;:::i;:::-;7277:6;7273:40;7415:6;7403:10;7400:22;7379:18;7367:10;7364:34;7361:62;7358:88;;;7426:18;;:::i;:::-;7358:88;7466:10;7462:2;7455:22;7245:238;7202:281;;:::o;7489:129::-;7523:6;7550:20;;:::i;:::-;7540:30;;7579:33;7607:4;7599:6;7579:33;:::i;:::-;7489:129;;;:::o;7624:308::-;7686:4;7776:18;7768:6;7765:30;7762:56;;;7798:18;;:::i;:::-;7762:56;7836:29;7858:6;7836:29;:::i;:::-;7828:37;;7920:4;7914;7910:15;7902:23;;7624:308;;;:::o;7938:154::-;8022:6;8017:3;8012;7999:30;8084:1;8075:6;8070:3;8066:16;8059:27;7938:154;;;:::o;8098:412::-;8176:5;8201:66;8217:49;8259:6;8217:49;:::i;:::-;8201:66;:::i;:::-;8192:75;;8290:6;8283:5;8276:21;8328:4;8321:5;8317:16;8366:3;8357:6;8352:3;8348:16;8345:25;8342:112;;;8373:79;;:::i;:::-;8342:112;8463:41;8497:6;8492:3;8487;8463:41;:::i;:::-;8182:328;8098:412;;;;;:::o;8530:340::-;8586:5;8635:3;8628:4;8620:6;8616:17;8612:27;8602:122;;8643:79;;:::i;:::-;8602:122;8760:6;8747:20;8785:79;8860:3;8852:6;8845:4;8837:6;8833:17;8785:79;:::i;:::-;8776:88;;8592:278;8530:340;;;;:::o;8876:509::-;8945:6;8994:2;8982:9;8973:7;8969:23;8965:32;8962:119;;;9000:79;;:::i;:::-;8962:119;9148:1;9137:9;9133:17;9120:31;9178:18;9170:6;9167:30;9164:117;;;9200:79;;:::i;:::-;9164:117;9305:63;9360:7;9351:6;9340:9;9336:22;9305:63;:::i;:::-;9295:73;;9091:287;8876:509;;;;:::o;9391:311::-;9468:4;9558:18;9550:6;9547:30;9544:56;;;9580:18;;:::i;:::-;9544:56;9630:4;9622:6;9618:17;9610:25;;9690:4;9684;9680:15;9672:23;;9391:311;;;:::o;9708:117::-;9817:1;9814;9807:12;9848:710;9944:5;9969:81;9985:64;10042:6;9985:64;:::i;:::-;9969:81;:::i;:::-;9960:90;;10070:5;10099:6;10092:5;10085:21;10133:4;10126:5;10122:16;10115:23;;10186:4;10178:6;10174:17;10166:6;10162:30;10215:3;10207:6;10204:15;10201:122;;;10234:79;;:::i;:::-;10201:122;10349:6;10332:220;10366:6;10361:3;10358:15;10332:220;;;10441:3;10470:37;10503:3;10491:10;10470:37;:::i;:::-;10465:3;10458:50;10537:4;10532:3;10528:14;10521:21;;10408:144;10392:4;10387:3;10383:14;10376:21;;10332:220;;;10336:21;9950:608;;9848:710;;;;;:::o;10581:370::-;10652:5;10701:3;10694:4;10686:6;10682:17;10678:27;10668:122;;10709:79;;:::i;:::-;10668:122;10826:6;10813:20;10851:94;10941:3;10933:6;10926:4;10918:6;10914:17;10851:94;:::i;:::-;10842:103;;10658:293;10581:370;;;;:::o;10957:684::-;11050:6;11058;11107:2;11095:9;11086:7;11082:23;11078:32;11075:119;;;11113:79;;:::i;:::-;11075:119;11261:1;11250:9;11246:17;11233:31;11291:18;11283:6;11280:30;11277:117;;;11313:79;;:::i;:::-;11277:117;11418:78;11488:7;11479:6;11468:9;11464:22;11418:78;:::i;:::-;11408:88;;11204:302;11545:2;11571:53;11616:7;11607:6;11596:9;11592:22;11571:53;:::i;:::-;11561:63;;11516:118;10957:684;;;;;:::o;11647:116::-;11717:21;11732:5;11717:21;:::i;:::-;11710:5;11707:32;11697:60;;11753:1;11750;11743:12;11697:60;11647:116;:::o;11769:133::-;11812:5;11850:6;11837:20;11828:29;;11866:30;11890:5;11866:30;:::i;:::-;11769:133;;;;:::o;11908:468::-;11973:6;11981;12030:2;12018:9;12009:7;12005:23;12001:32;11998:119;;;12036:79;;:::i;:::-;11998:119;12156:1;12181:53;12226:7;12217:6;12206:9;12202:22;12181:53;:::i;:::-;12171:63;;12127:117;12283:2;12309:50;12351:7;12342:6;12331:9;12327:22;12309:50;:::i;:::-;12299:60;;12254:115;11908:468;;;;;:::o;12382:307::-;12443:4;12533:18;12525:6;12522:30;12519:56;;;12555:18;;:::i;:::-;12519:56;12593:29;12615:6;12593:29;:::i;:::-;12585:37;;12677:4;12671;12667:15;12659:23;;12382:307;;;:::o;12695:410::-;12772:5;12797:65;12813:48;12854:6;12813:48;:::i;:::-;12797:65;:::i;:::-;12788:74;;12885:6;12878:5;12871:21;12923:4;12916:5;12912:16;12961:3;12952:6;12947:3;12943:16;12940:25;12937:112;;;12968:79;;:::i;:::-;12937:112;13058:41;13092:6;13087:3;13082;13058:41;:::i;:::-;12778:327;12695:410;;;;;:::o;13124:338::-;13179:5;13228:3;13221:4;13213:6;13209:17;13205:27;13195:122;;13236:79;;:::i;:::-;13195:122;13353:6;13340:20;13378:78;13452:3;13444:6;13437:4;13429:6;13425:17;13378:78;:::i;:::-;13369:87;;13185:277;13124:338;;;;:::o;13468:943::-;13563:6;13571;13579;13587;13636:3;13624:9;13615:7;13611:23;13607:33;13604:120;;;13643:79;;:::i;:::-;13604:120;13763:1;13788:53;13833:7;13824:6;13813:9;13809:22;13788:53;:::i;:::-;13778:63;;13734:117;13890:2;13916:53;13961:7;13952:6;13941:9;13937:22;13916:53;:::i;:::-;13906:63;;13861:118;14018:2;14044:53;14089:7;14080:6;14069:9;14065:22;14044:53;:::i;:::-;14034:63;;13989:118;14174:2;14163:9;14159:18;14146:32;14205:18;14197:6;14194:30;14191:117;;;14227:79;;:::i;:::-;14191:117;14332:62;14386:7;14377:6;14366:9;14362:22;14332:62;:::i;:::-;14322:72;;14117:287;13468:943;;;;;;;:::o;14417:332::-;14538:4;14576:2;14565:9;14561:18;14553:26;;14589:71;14657:1;14646:9;14642:17;14633:6;14589:71;:::i;:::-;14670:72;14738:2;14727:9;14723:18;14714:6;14670:72;:::i;:::-;14417:332;;;;;:::o;14755:474::-;14823:6;14831;14880:2;14868:9;14859:7;14855:23;14851:32;14848:119;;;14886:79;;:::i;:::-;14848:119;15006:1;15031:53;15076:7;15067:6;15056:9;15052:22;15031:53;:::i;:::-;15021:63;;14977:117;15133:2;15159:53;15204:7;15195:6;15184:9;15180:22;15159:53;:::i;:::-;15149:63;;15104:118;14755:474;;;;;:::o;15235:180::-;15283:77;15280:1;15273:88;15380:4;15377:1;15370:15;15404:4;15401:1;15394:15;15421:320;15465:6;15502:1;15496:4;15492:12;15482:22;;15549:1;15543:4;15539:12;15570:18;15560:81;;15626:4;15618:6;15614:17;15604:27;;15560:81;15688:2;15680:6;15677:14;15657:18;15654:38;15651:84;;;15707:18;;:::i;:::-;15651:84;15472:269;15421:320;;;:::o;15747:231::-;15887:34;15883:1;15875:6;15871:14;15864:58;15956:14;15951:2;15943:6;15939:15;15932:39;15747:231;:::o;15984:366::-;16126:3;16147:67;16211:2;16206:3;16147:67;:::i;:::-;16140:74;;16223:93;16312:3;16223:93;:::i;:::-;16341:2;16336:3;16332:12;16325:19;;15984:366;;;:::o;16356:419::-;16522:4;16560:2;16549:9;16545:18;16537:26;;16609:9;16603:4;16599:20;16595:1;16584:9;16580:17;16573:47;16637:131;16763:4;16637:131;:::i;:::-;16629:139;;16356:419;;;:::o;16781:220::-;16921:34;16917:1;16909:6;16905:14;16898:58;16990:3;16985:2;16977:6;16973:15;16966:28;16781:220;:::o;17007:366::-;17149:3;17170:67;17234:2;17229:3;17170:67;:::i;:::-;17163:74;;17246:93;17335:3;17246:93;:::i;:::-;17364:2;17359:3;17355:12;17348:19;;17007:366;;;:::o;17379:419::-;17545:4;17583:2;17572:9;17568:18;17560:26;;17632:9;17626:4;17622:20;17618:1;17607:9;17603:17;17596:47;17660:131;17786:4;17660:131;:::i;:::-;17652:139;;17379:419;;;:::o;17804:243::-;17944:34;17940:1;17932:6;17928:14;17921:58;18013:26;18008:2;18000:6;17996:15;17989:51;17804:243;:::o;18053:366::-;18195:3;18216:67;18280:2;18275:3;18216:67;:::i;:::-;18209:74;;18292:93;18381:3;18292:93;:::i;:::-;18410:2;18405:3;18401:12;18394:19;;18053:366;;;:::o;18425:419::-;18591:4;18629:2;18618:9;18614:18;18606:26;;18678:9;18672:4;18668:20;18664:1;18653:9;18649:17;18642:47;18706:131;18832:4;18706:131;:::i;:::-;18698:139;;18425:419;;;:::o;18850:170::-;18990:22;18986:1;18978:6;18974:14;18967:46;18850:170;:::o;19026:366::-;19168:3;19189:67;19253:2;19248:3;19189:67;:::i;:::-;19182:74;;19265:93;19354:3;19265:93;:::i;:::-;19383:2;19378:3;19374:12;19367:19;;19026:366;;;:::o;19398:419::-;19564:4;19602:2;19591:9;19587:18;19579:26;;19651:9;19645:4;19641:20;19637:1;19626:9;19622:17;19615:47;19679:131;19805:4;19679:131;:::i;:::-;19671:139;;19398:419;;;:::o;19823:182::-;19963:34;19959:1;19951:6;19947:14;19940:58;19823:182;:::o;20011:366::-;20153:3;20174:67;20238:2;20233:3;20174:67;:::i;:::-;20167:74;;20250:93;20339:3;20250:93;:::i;:::-;20368:2;20363:3;20359:12;20352:19;;20011:366;;;:::o;20383:419::-;20549:4;20587:2;20576:9;20572:18;20564:26;;20636:9;20630:4;20626:20;20622:1;20611:9;20607:17;20600:47;20664:131;20790:4;20664:131;:::i;:::-;20656:139;;20383:419;;;:::o;20808:176::-;20948:28;20944:1;20936:6;20932:14;20925:52;20808:176;:::o;20990:366::-;21132:3;21153:67;21217:2;21212:3;21153:67;:::i;:::-;21146:74;;21229:93;21318:3;21229:93;:::i;:::-;21347:2;21342:3;21338:12;21331:19;;20990:366;;;:::o;21362:419::-;21528:4;21566:2;21555:9;21551:18;21543:26;;21615:9;21609:4;21605:20;21601:1;21590:9;21586:17;21579:47;21643:131;21769:4;21643:131;:::i;:::-;21635:139;;21362:419;;;:::o;21787:236::-;21927:34;21923:1;21915:6;21911:14;21904:58;21996:19;21991:2;21983:6;21979:15;21972:44;21787:236;:::o;22029:366::-;22171:3;22192:67;22256:2;22251:3;22192:67;:::i;:::-;22185:74;;22268:93;22357:3;22268:93;:::i;:::-;22386:2;22381:3;22377:12;22370:19;;22029:366;;;:::o;22401:419::-;22567:4;22605:2;22594:9;22590:18;22582:26;;22654:9;22648:4;22644:20;22640:1;22629:9;22625:17;22618:47;22682:131;22808:4;22682:131;:::i;:::-;22674:139;;22401:419;;;:::o;22826:182::-;22966:34;22962:1;22954:6;22950:14;22943:58;22826:182;:::o;23014:366::-;23156:3;23177:67;23241:2;23236:3;23177:67;:::i;:::-;23170:74;;23253:93;23342:3;23253:93;:::i;:::-;23371:2;23366:3;23362:12;23355:19;;23014:366;;;:::o;23386:419::-;23552:4;23590:2;23579:9;23575:18;23567:26;;23639:9;23633:4;23629:20;23625:1;23614:9;23610:17;23603:47;23667:131;23793:4;23667:131;:::i;:::-;23659:139;;23386:419;;;:::o;23811:181::-;23951:33;23947:1;23939:6;23935:14;23928:57;23811:181;:::o;23998:366::-;24140:3;24161:67;24225:2;24220:3;24161:67;:::i;:::-;24154:74;;24237:93;24326:3;24237:93;:::i;:::-;24355:2;24350:3;24346:12;24339:19;;23998:366;;;:::o;24370:419::-;24536:4;24574:2;24563:9;24559:18;24551:26;;24623:9;24617:4;24613:20;24609:1;24598:9;24594:17;24587:47;24651:131;24777:4;24651:131;:::i;:::-;24643:139;;24370:419;;;:::o;24795:180::-;24935:32;24931:1;24923:6;24919:14;24912:56;24795:180;:::o;24981:366::-;25123:3;25144:67;25208:2;25203:3;25144:67;:::i;:::-;25137:74;;25220:93;25309:3;25220:93;:::i;:::-;25338:2;25333:3;25329:12;25322:19;;24981:366;;;:::o;25353:419::-;25519:4;25557:2;25546:9;25542:18;25534:26;;25606:9;25600:4;25596:20;25592:1;25581:9;25577:17;25570:47;25634:131;25760:4;25634:131;:::i;:::-;25626:139;;25353:419;;;:::o;25778:238::-;25918:34;25914:1;25906:6;25902:14;25895:58;25987:21;25982:2;25974:6;25970:15;25963:46;25778:238;:::o;26022:366::-;26164:3;26185:67;26249:2;26244:3;26185:67;:::i;:::-;26178:74;;26261:93;26350:3;26261:93;:::i;:::-;26379:2;26374:3;26370:12;26363:19;;26022:366;;;:::o;26394:419::-;26560:4;26598:2;26587:9;26583:18;26575:26;;26647:9;26641:4;26637:20;26633:1;26622:9;26618:17;26611:47;26675:131;26801:4;26675:131;:::i;:::-;26667:139;;26394:419;;;:::o;26819:230::-;26959:34;26955:1;26947:6;26943:14;26936:58;27028:13;27023:2;27015:6;27011:15;27004:38;26819:230;:::o;27055:366::-;27197:3;27218:67;27282:2;27277:3;27218:67;:::i;:::-;27211:74;;27294:93;27383:3;27294:93;:::i;:::-;27412:2;27407:3;27403:12;27396:19;;27055:366;;;:::o;27427:419::-;27593:4;27631:2;27620:9;27616:18;27608:26;;27680:9;27674:4;27670:20;27666:1;27655:9;27651:17;27644:47;27708:131;27834:4;27708:131;:::i;:::-;27700:139;;27427:419;;;:::o;27852:175::-;27992:27;27988:1;27980:6;27976:14;27969:51;27852:175;:::o;28033:366::-;28175:3;28196:67;28260:2;28255:3;28196:67;:::i;:::-;28189:74;;28272:93;28361:3;28272:93;:::i;:::-;28390:2;28385:3;28381:12;28374:19;;28033:366;;;:::o;28405:419::-;28571:4;28609:2;28598:9;28594:18;28586:26;;28658:9;28652:4;28648:20;28644:1;28633:9;28629:17;28622:47;28686:131;28812:4;28686:131;:::i;:::-;28678:139;;28405:419;;;:::o;28830:231::-;28970:34;28966:1;28958:6;28954:14;28947:58;29039:14;29034:2;29026:6;29022:15;29015:39;28830:231;:::o;29067:366::-;29209:3;29230:67;29294:2;29289:3;29230:67;:::i;:::-;29223:74;;29306:93;29395:3;29306:93;:::i;:::-;29424:2;29419:3;29415:12;29408:19;;29067:366;;;:::o;29439:419::-;29605:4;29643:2;29632:9;29628:18;29620:26;;29692:9;29686:4;29682:20;29678:1;29667:9;29663:17;29656:47;29720:131;29846:4;29720:131;:::i;:::-;29712:139;;29439:419;;;:::o;29864:180::-;29912:77;29909:1;29902:88;30009:4;30006:1;29999:15;30033:4;30030:1;30023:15;30050:168;30190:20;30186:1;30178:6;30174:14;30167:44;30050:168;:::o;30224:366::-;30366:3;30387:67;30451:2;30446:3;30387:67;:::i;:::-;30380:74;;30463:93;30552:3;30463:93;:::i;:::-;30581:2;30576:3;30572:12;30565:19;;30224:366;;;:::o;30596:419::-;30762:4;30800:2;30789:9;30785:18;30777:26;;30849:9;30843:4;30839:20;30835:1;30824:9;30820:17;30813:47;30877:131;31003:4;30877:131;:::i;:::-;30869:139;;30596:419;;;:::o;31021:228::-;31161:34;31157:1;31149:6;31145:14;31138:58;31230:11;31225:2;31217:6;31213:15;31206:36;31021:228;:::o;31255:366::-;31397:3;31418:67;31482:2;31477:3;31418:67;:::i;:::-;31411:74;;31494:93;31583:3;31494:93;:::i;:::-;31612:2;31607:3;31603:12;31596:19;;31255:366;;;:::o;31627:419::-;31793:4;31831:2;31820:9;31816:18;31808:26;;31880:9;31874:4;31870:20;31866:1;31855:9;31851:17;31844:47;31908:131;32034:4;31908:131;:::i;:::-;31900:139;;31627:419;;;:::o;32052:177::-;32192:29;32188:1;32180:6;32176:14;32169:53;32052:177;:::o;32235:366::-;32377:3;32398:67;32462:2;32457:3;32398:67;:::i;:::-;32391:74;;32474:93;32563:3;32474:93;:::i;:::-;32592:2;32587:3;32583:12;32576:19;;32235:366;;;:::o;32607:419::-;32773:4;32811:2;32800:9;32796:18;32788:26;;32860:9;32854:4;32850:20;32846:1;32835:9;32831:17;32824:47;32888:131;33014:4;32888:131;:::i;:::-;32880:139;;32607:419;;;:::o;33032:180::-;33080:77;33077:1;33070:88;33177:4;33174:1;33167:15;33201:4;33198:1;33191:15;33218:233;33257:3;33280:24;33298:5;33280:24;:::i;:::-;33271:33;;33326:66;33319:5;33316:77;33313:103;;;33396:18;;:::i;:::-;33313:103;33443:1;33436:5;33432:13;33425:20;;33218:233;;;:::o;33457:229::-;33597:34;33593:1;33585:6;33581:14;33574:58;33666:12;33661:2;33653:6;33649:15;33642:37;33457:229;:::o;33692:366::-;33834:3;33855:67;33919:2;33914:3;33855:67;:::i;:::-;33848:74;;33931:93;34020:3;33931:93;:::i;:::-;34049:2;34044:3;34040:12;34033:19;;33692:366;;;:::o;34064:419::-;34230:4;34268:2;34257:9;34253:18;34245:26;;34317:9;34311:4;34307:20;34303:1;34292:9;34288:17;34281:47;34345:131;34471:4;34345:131;:::i;:::-;34337:139;;34064:419;;;:::o;34489:228::-;34629:34;34625:1;34617:6;34613:14;34606:58;34698:11;34693:2;34685:6;34681:15;34674:36;34489:228;:::o;34723:366::-;34865:3;34886:67;34950:2;34945:3;34886:67;:::i;:::-;34879:74;;34962:93;35051:3;34962:93;:::i;:::-;35080:2;35075:3;35071:12;35064:19;;34723:366;;;:::o;35095:419::-;35261:4;35299:2;35288:9;35284:18;35276:26;;35348:9;35342:4;35338:20;35334:1;35323:9;35319:17;35312:47;35376:131;35502:4;35376:131;:::i;:::-;35368:139;;35095:419;;;:::o;35520:172::-;35660:24;35656:1;35648:6;35644:14;35637:48;35520:172;:::o;35698:366::-;35840:3;35861:67;35925:2;35920:3;35861:67;:::i;:::-;35854:74;;35937:93;36026:3;35937:93;:::i;:::-;36055:2;36050:3;36046:12;36039:19;;35698:366;;;:::o;36070:419::-;36236:4;36274:2;36263:9;36259:18;36251:26;;36323:9;36317:4;36313:20;36309:1;36298:9;36294:17;36287:47;36351:131;36477:4;36351:131;:::i;:::-;36343:139;;36070:419;;;:::o;36495:234::-;36635:34;36631:1;36623:6;36619:14;36612:58;36704:17;36699:2;36691:6;36687:15;36680:42;36495:234;:::o;36735:366::-;36877:3;36898:67;36962:2;36957:3;36898:67;:::i;:::-;36891:74;;36974:93;37063:3;36974:93;:::i;:::-;37092:2;37087:3;37083:12;37076:19;;36735:366;;;:::o;37107:419::-;37273:4;37311:2;37300:9;37296:18;37288:26;;37360:9;37354:4;37350:20;37346:1;37335:9;37331:17;37324:47;37388:131;37514:4;37388:131;:::i;:::-;37380:139;;37107:419;;;:::o;37532:148::-;37634:11;37671:3;37656:18;;37532:148;;;;:::o;37686:377::-;37792:3;37820:39;37853:5;37820:39;:::i;:::-;37875:89;37957:6;37952:3;37875:89;:::i;:::-;37868:96;;37973:52;38018:6;38013:3;38006:4;37999:5;37995:16;37973:52;:::i;:::-;38050:6;38045:3;38041:16;38034:23;;37796:267;37686:377;;;;:::o;38069:141::-;38118:4;38141:3;38133:11;;38164:3;38161:1;38154:14;38198:4;38195:1;38185:18;38177:26;;38069:141;;;:::o;38240:845::-;38343:3;38380:5;38374:12;38409:36;38435:9;38409:36;:::i;:::-;38461:89;38543:6;38538:3;38461:89;:::i;:::-;38454:96;;38581:1;38570:9;38566:17;38597:1;38592:137;;;;38743:1;38738:341;;;;38559:520;;38592:137;38676:4;38672:9;38661;38657:25;38652:3;38645:38;38712:6;38707:3;38703:16;38696:23;;38592:137;;38738:341;38805:38;38837:5;38805:38;:::i;:::-;38865:1;38879:154;38893:6;38890:1;38887:13;38879:154;;;38967:7;38961:14;38957:1;38952:3;38948:11;38941:35;39017:1;39008:7;39004:15;38993:26;;38915:4;38912:1;38908:12;38903:17;;38879:154;;;39062:6;39057:3;39053:16;39046:23;;38745:334;;38559:520;;38347:738;;38240:845;;;;:::o;39091:589::-;39316:3;39338:95;39429:3;39420:6;39338:95;:::i;:::-;39331:102;;39450:95;39541:3;39532:6;39450:95;:::i;:::-;39443:102;;39562:92;39650:3;39641:6;39562:92;:::i;:::-;39555:99;;39671:3;39664:10;;39091:589;;;;;;:::o;39686:191::-;39726:4;39746:20;39764:1;39746:20;:::i;:::-;39741:25;;39780:20;39798:1;39780:20;:::i;:::-;39775:25;;39819:1;39816;39813:8;39810:34;;;39824:18;;:::i;:::-;39810:34;39869:1;39866;39862:9;39854:17;;39686:191;;;;:::o;39883:225::-;40023:34;40019:1;40011:6;40007:14;40000:58;40092:8;40087:2;40079:6;40075:15;40068:33;39883:225;:::o;40114:366::-;40256:3;40277:67;40341:2;40336:3;40277:67;:::i;:::-;40270:74;;40353:93;40442:3;40353:93;:::i;:::-;40471:2;40466:3;40462:12;40455:19;;40114:366;;;:::o;40486:419::-;40652:4;40690:2;40679:9;40675:18;40667:26;;40739:9;40733:4;40729:20;40725:1;40714:9;40710:17;40703:47;40767:131;40893:4;40767:131;:::i;:::-;40759:139;;40486:419;;;:::o;40911:305::-;40951:3;40970:20;40988:1;40970:20;:::i;:::-;40965:25;;41004:20;41022:1;41004:20;:::i;:::-;40999:25;;41158:1;41090:66;41086:74;41083:1;41080:81;41077:107;;;41164:18;;:::i;:::-;41077:107;41208:1;41205;41201:9;41194:16;;40911:305;;;;:::o;41222:171::-;41261:3;41284:24;41302:5;41284:24;:::i;:::-;41275:33;;41330:4;41323:5;41320:15;41317:41;;;41338:18;;:::i;:::-;41317:41;41385:1;41378:5;41374:13;41367:20;;41222:171;;;:::o;41399:102::-;41441:8;41488:5;41485:1;41481:13;41460:34;;41399:102;;;:::o;41507:848::-;41568:5;41575:4;41599:6;41590:15;;41623:5;41614:14;;41637:712;41658:1;41648:8;41645:15;41637:712;;;41753:4;41748:3;41744:14;41738:4;41735:24;41732:50;;;41762:18;;:::i;:::-;41732:50;41812:1;41802:8;41798:16;41795:451;;;42227:4;42220:5;42216:16;42207:25;;41795:451;42277:4;42271;42267:15;42259:23;;42307:32;42330:8;42307:32;:::i;:::-;42295:44;;41637:712;;;41507:848;;;;;;;:::o;42361:1073::-;42415:5;42606:8;42596:40;;42627:1;42618:10;;42629:5;;42596:40;42655:4;42645:36;;42672:1;42663:10;;42674:5;;42645:36;42741:4;42789:1;42784:27;;;;42825:1;42820:191;;;;42734:277;;42784:27;42802:1;42793:10;;42804:5;;;42820:191;42865:3;42855:8;42852:17;42849:43;;;42872:18;;:::i;:::-;42849:43;42921:8;42918:1;42914:16;42905:25;;42956:3;42949:5;42946:14;42943:40;;;42963:18;;:::i;:::-;42943:40;42996:5;;;42734:277;;43120:2;43110:8;43107:16;43101:3;43095:4;43092:13;43088:36;43070:2;43060:8;43057:16;43052:2;43046:4;43043:12;43039:35;43023:111;43020:246;;;43176:8;43170:4;43166:19;43157:28;;43211:3;43204:5;43201:14;43198:40;;;43218:18;;:::i;:::-;43198:40;43251:5;;43020:246;43291:42;43329:3;43319:8;43313:4;43310:1;43291:42;:::i;:::-;43276:57;;;;43365:4;43360:3;43356:14;43349:5;43346:25;43343:51;;;43374:18;;:::i;:::-;43343:51;43423:4;43416:5;43412:16;43403:25;;42361:1073;;;;;;:::o;43440:285::-;43500:5;43524:23;43542:4;43524:23;:::i;:::-;43516:31;;43568:27;43586:8;43568:27;:::i;:::-;43556:39;;43614:104;43651:66;43641:8;43635:4;43614:104;:::i;:::-;43605:113;;43440:285;;;;:::o;43731:348::-;43771:7;43794:20;43812:1;43794:20;:::i;:::-;43789:25;;43828:20;43846:1;43828:20;:::i;:::-;43823:25;;44016:1;43948:66;43944:74;43941:1;43938:81;43933:1;43926:9;43919:17;43915:105;43912:131;;;44023:18;;:::i;:::-;43912:131;44071:1;44068;44064:9;44053:20;;43731:348;;;;:::o;44085:231::-;44225:34;44221:1;44213:6;44209:14;44202:58;44294:14;44289:2;44281:6;44277:15;44270:39;44085:231;:::o;44322:366::-;44464:3;44485:67;44549:2;44544:3;44485:67;:::i;:::-;44478:74;;44561:93;44650:3;44561:93;:::i;:::-;44679:2;44674:3;44670:12;44663:19;;44322:366;;;:::o;44694:419::-;44860:4;44898:2;44887:9;44883:18;44875:26;;44947:9;44941:4;44937:20;44933:1;44922:9;44918:17;44911:47;44975:131;45101:4;44975:131;:::i;:::-;44967:139;;44694:419;;;:::o;45119:228::-;45259:34;45255:1;45247:6;45243:14;45236:58;45328:11;45323:2;45315:6;45311:15;45304:36;45119:228;:::o;45353:366::-;45495:3;45516:67;45580:2;45575:3;45516:67;:::i;:::-;45509:74;;45592:93;45681:3;45592:93;:::i;:::-;45710:2;45705:3;45701:12;45694:19;;45353:366;;;:::o;45725:419::-;45891:4;45929:2;45918:9;45914:18;45906:26;;45978:9;45972:4;45968:20;45964:1;45953:9;45949:17;45942:47;46006:131;46132:4;46006:131;:::i;:::-;45998:139;;45725:419;;;:::o;46150:223::-;46290:34;46286:1;46278:6;46274:14;46267:58;46359:6;46354:2;46346:6;46342:15;46335:31;46150:223;:::o;46379:366::-;46521:3;46542:67;46606:2;46601:3;46542:67;:::i;:::-;46535:74;;46618:93;46707:3;46618:93;:::i;:::-;46736:2;46731:3;46727:12;46720:19;;46379:366;;;:::o;46751:419::-;46917:4;46955:2;46944:9;46940:18;46932:26;;47004:9;46998:4;46994:20;46990:1;46979:9;46975:17;46968:47;47032:131;47158:4;47032:131;:::i;:::-;47024:139;;46751:419;;;:::o;47176:180::-;47224:77;47221:1;47214:88;47321:4;47318:1;47311:15;47345:4;47342:1;47335:15;47362:185;47402:1;47419:20;47437:1;47419:20;:::i;:::-;47414:25;;47453:20;47471:1;47453:20;:::i;:::-;47448:25;;47492:1;47482:35;;47497:18;;:::i;:::-;47482:35;47539:1;47536;47532:9;47527:14;;47362:185;;;;:::o;47553:175::-;47693:27;47689:1;47681:6;47677:14;47670:51;47553:175;:::o;47734:366::-;47876:3;47897:67;47961:2;47956:3;47897:67;:::i;:::-;47890:74;;47973:93;48062:3;47973:93;:::i;:::-;48091:2;48086:3;48082:12;48075:19;;47734:366;;;:::o;48106:419::-;48272:4;48310:2;48299:9;48295:18;48287:26;;48359:9;48353:4;48349:20;48345:1;48334:9;48330:17;48323:47;48387:131;48513:4;48387:131;:::i;:::-;48379:139;;48106:419;;;:::o;48531:237::-;48671:34;48667:1;48659:6;48655:14;48648:58;48740:20;48735:2;48727:6;48723:15;48716:45;48531:237;:::o;48774:366::-;48916:3;48937:67;49001:2;48996:3;48937:67;:::i;:::-;48930:74;;49013:93;49102:3;49013:93;:::i;:::-;49131:2;49126:3;49122:12;49115:19;;48774:366;;;:::o;49146:419::-;49312:4;49350:2;49339:9;49335:18;49327:26;;49399:9;49393:4;49389:20;49385:1;49374:9;49370:17;49363:47;49427:131;49553:4;49427:131;:::i;:::-;49419:139;;49146:419;;;:::o;49571:176::-;49603:1;49620:20;49638:1;49620:20;:::i;:::-;49615:25;;49654:20;49672:1;49654:20;:::i;:::-;49649:25;;49693:1;49683:35;;49698:18;;:::i;:::-;49683:35;49739:1;49736;49732:9;49727:14;;49571:176;;;;:::o;49753:98::-;49804:6;49838:5;49832:12;49822:22;;49753:98;;;:::o;49857:168::-;49940:11;49974:6;49969:3;49962:19;50014:4;50009:3;50005:14;49990:29;;49857:168;;;;:::o;50031:360::-;50117:3;50145:38;50177:5;50145:38;:::i;:::-;50199:70;50262:6;50257:3;50199:70;:::i;:::-;50192:77;;50278:52;50323:6;50318:3;50311:4;50304:5;50300:16;50278:52;:::i;:::-;50355:29;50377:6;50355:29;:::i;:::-;50350:3;50346:39;50339:46;;50121:270;50031:360;;;;:::o;50397:640::-;50592:4;50630:3;50619:9;50615:19;50607:27;;50644:71;50712:1;50701:9;50697:17;50688:6;50644:71;:::i;:::-;50725:72;50793:2;50782:9;50778:18;50769:6;50725:72;:::i;:::-;50807;50875:2;50864:9;50860:18;50851:6;50807:72;:::i;:::-;50926:9;50920:4;50916:20;50911:2;50900:9;50896:18;50889:48;50954:76;51025:4;51016:6;50954:76;:::i;:::-;50946:84;;50397:640;;;;;;;:::o;51043:141::-;51099:5;51130:6;51124:13;51115:22;;51146:32;51172:5;51146:32;:::i;:::-;51043:141;;;;:::o;51190:349::-;51259:6;51308:2;51296:9;51287:7;51283:23;51279:32;51276:119;;;51314:79;;:::i;:::-;51276:119;51434:1;51459:63;51514:7;51505:6;51494:9;51490:22;51459:63;:::i;:::-;51449:73;;51405:127;51190:349;;;;:::o;51545:182::-;51685:34;51681:1;51673:6;51669:14;51662:58;51545:182;:::o;51733:366::-;51875:3;51896:67;51960:2;51955:3;51896:67;:::i;:::-;51889:74;;51972:93;52061:3;51972:93;:::i;:::-;52090:2;52085:3;52081:12;52074:19;;51733:366;;;:::o;52105:419::-;52271:4;52309:2;52298:9;52294:18;52286:26;;52358:9;52352:4;52348:20;52344:1;52333:9;52329:17;52322:47;52386:131;52512:4;52386:131;:::i;:::-;52378:139;;52105:419;;;:::o;52530:178::-;52670:30;52666:1;52658:6;52654:14;52647:54;52530:178;:::o;52714:366::-;52856:3;52877:67;52941:2;52936:3;52877:67;:::i;:::-;52870:74;;52953:93;53042:3;52953:93;:::i;:::-;53071:2;53066:3;53062:12;53055:19;;52714:366;;;:::o;53086:419::-;53252:4;53290:2;53279:9;53275:18;53267:26;;53339:9;53333:4;53329:20;53325:1;53314:9;53310:17;53303:47;53367:131;53493:4;53367:131;:::i;:::-;53359:139;;53086:419;;;:::o;53511:180::-;53559:77;53556:1;53549:88;53656:4;53653:1;53646:15;53680:4;53677:1;53670:15
Swarm Source
ipfs://b2b3ba5171087ad2f183ee43d412a11da0b576b7f2ac1fc30277c5a9801e8567
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.