ERC-721
NFT
Overview
Max Total Supply
2,500 TheEveryones
Holders
506
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 TheEveryonesLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheEveryones
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: GPL-3.0 // HOFHOFHOFHOFHOFHOFHOFHOFHOFHOFHHOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOF HOFHF HOFHOFHOFHOF // HOFHOFHOFHOF HOF HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOFHOFHOFHOFHOFHOFHOFHHOFHOFHOFHOF // ----------- House Of First ----------- // ----- The Everyones - Ian Murray ----- pragma solidity ^0.8.10; import "./ERC721Enum.sol"; import "./Ownable.sol"; import "./Strings.sol"; import "./ReentrancyGuard.sol"; contract OwnableDelegateProxy {} /** * Used to delegate ownership of a contract to another address, to save on unneeded transactions to approve contract use for users */ contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract TheEveryones is ERC721Enum, Ownable, ReentrancyGuard { using Strings for uint256; string public baseURI; //sale settings uint256 public constant SALE_START_TIMESTAMP = 1639504800; // Tuesday Dec 14th 2021 18:00:00 GMT uint256 public price = 0.08 ether; uint256 public maxSupply = 5000; uint256 public reserved = 250; // 250 NFTs reserved for vault uint256 public maxMint = 5; // max per transaction bool public salePaused = false; // whitelist address public constant WHITELIST_SIGNER = 0x9Ae97e577C40AE33443917828E4485C6c3894741; uint256 public disableWhitelistTimestamp = SALE_START_TIMESTAMP + (86400 * 1); // whitelist active for 1 day mapping(address => uint256) public whitelistPurchases; string _name = "The Everyones"; string _symbol = "TheEveryones"; string _initBaseURI = "https://houseoffirst.com:1335/theeveryones/opensea/"; address public proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; // OpenSea Mainnet Proxy Registry address constructor() ERC721P(_name, _symbol) { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual returns (string memory) { return baseURI; } function mintingHasStarted() public view returns (bool) { return block.timestamp > SALE_START_TIMESTAMP; } function whitelistHasEnded() public view returns (bool) { return block.timestamp > disableWhitelistTimestamp; } /** * @dev Gets current NFT Price */ function getNFTPrice() public view returns (uint256) { return price; } /* whitelist */ function isWhitelisted(address user, bytes memory signature) public pure returns (bool) { bytes32 messageHash = keccak256(abi.encodePacked(user)); bytes32 ethSignedMessageHash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash)); return recoverSigner(ethSignedMessageHash, signature) == WHITELIST_SIGNER; } function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) private pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); return ecrecover(_ethSignedMessageHash, v, r, s); } function splitSignature(bytes memory sig) private pure returns (bytes32 r, bytes32 s, uint8 v) { require(sig.length == 65, "invalid signature length"); assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } } // public minting function mintNFT(uint256 numberOfNfts) public payable nonReentrant { require(block.timestamp > disableWhitelistTimestamp, "Public Sale has not started"); uint256 s = _owners.length; require(!salePaused, "Sale Paused"); require(numberOfNfts > 0 && numberOfNfts <= maxMint, "Invalid numberOfNfts"); require((s + numberOfNfts) <= (maxSupply - reserved), "Exceeds Max Supply"); require(msg.value >= price * numberOfNfts, "Not Enough ETH"); for (uint256 i = 0; i < numberOfNfts; ++i) { _safeMint(msg.sender, s + i, ""); } delete s; } // whitelist minting function whitelistMintNFT(uint256 numberOfNfts, bytes memory signature) public payable nonReentrant { require(block.timestamp > SALE_START_TIMESTAMP, "Sale has not started"); uint256 s = _owners.length; require(!salePaused, "Sale Paused"); require(numberOfNfts > 0 && numberOfNfts <= maxMint, "Invalid numberOfNfts"); require((s + numberOfNfts) <= (maxSupply - reserved), "Exceeds Max Supply"); require(msg.value >= price * numberOfNfts, "Not Enough ETH"); require(whitelistPurchases[msg.sender] + numberOfNfts <= maxMint, "Exceeds Whitelist Allocation"); require(isWhitelisted(msg.sender, signature), "Address not whitelisted"); whitelistPurchases[msg.sender] += numberOfNfts; for (uint256 i = 0; i < numberOfNfts; ++i) { _safeMint(msg.sender, s + i, ""); } delete s; } // admin minting for reserved NFTs function giftNFT(uint256[] calldata quantity, address[] calldata recipient) external onlyOwner { require(quantity.length == recipient.length, "Invalid quantities and recipients (length mismatch)"); uint256 totalQuantity = 0; uint256 s = _owners.length; for (uint256 i = 0; i < quantity.length; ++i) { totalQuantity += quantity[i]; } require(s + totalQuantity <= maxSupply, "Exceeds Max Supply"); require(totalQuantity <= reserved, "Exceeds Max Reserved"); // update remaining reserved count reserved -= totalQuantity; delete totalQuantity; for (uint256 i = 0; i < recipient.length; ++i) { for (uint256 j = 0; j < quantity[i]; ++j) { _safeMint(recipient[i], s++, ""); } } delete s; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: Nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : ""; } function setPrice(uint256 _newPrice) public onlyOwner { price = _newPrice; } function setMaxMintAmount(uint256 _newMaxMintAmount) public onlyOwner { maxMint = _newMaxMintAmount; } function setmaxSupply(uint256 _newMaxSupply) public onlyOwner { maxSupply = _newMaxSupply; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setSalePaused(bool _salePaused) public onlyOwner { salePaused = _salePaused; } function setDisableWhitelistTimestamp(uint256 _disableWhitelistTimestamp) public onlyOwner { disableWhitelistTimestamp = _disableWhitelistTimestamp; } // for transparency regarding ETH raised uint256 totalWithdrawn = 0; function getTotalWithdrawn() public view returns (uint256) { return totalWithdrawn; } function getTotalBalance() public view returns (uint256) { return address(this).balance; } function getTotalRaised() public view returns (uint256) { return getTotalWithdrawn() + getTotalBalance(); } /** * withdraw ETH from the contract (callable by Owner only) */ function withdraw() public payable onlyOwner { uint256 val = address(this).balance; (bool success, ) = payable(msg.sender).call{ value: val }(""); require(success); totalWithdrawn += val; delete val; } /** * whitelist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll(address owner, address operator) override public view returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.10; import "./ERC721P.sol"; import "./IERC721Enumerable.sol"; abstract contract ERC721Enum is ERC721P, IERC721Enumerable { function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) { require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint256 count; for (uint256 i; i < _owners.length; ++i) { if (owner == _owners[i]) { if (count == index) return i; else ++count; } } require(false, "ERC721Enum: owner ioob"); } function tokensOfOwner(address owner) public view returns (uint256[] memory) { require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint256 tokenCount = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(owner, i); } return tokenIds; } function totalSupply() public view virtual override returns (uint256) { return _owners.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob"); return index; } }
// SPDX-License-Identifier: GPL-3.0 // Thank you to ToyBoogers & Pagzi Tech for the optimised ERC721 pragma solidity ^0.8.10; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./ERC165.sol"; abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata { using Address for address; string private _name; string private _symbol; address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function getOwners() external view returns (address[] memory) { return _owners; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); uint256 count = 0; uint256 length = _owners.length; for (uint256 i = 0; i < length; ++i) { if (owner == _owners[i]) { ++count; } } delete length; return count; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721P.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721P.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _owners.push(to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721P.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721P.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721P.ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"SALE_START_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_SIGNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableWhitelistTimestamp","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":[],"name":"getNFTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"giftNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfNfts","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintingHasStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","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":"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":[],"name":"salePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_disableWhitelistTimestamp","type":"uint256"}],"name":"setDisableWhitelistTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_salePaused","type":"bool"}],"name":"setSalePaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistHasEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfNfts","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"whitelistMintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistPurchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405267011c37937e08000060085561138860095560fa600a556005600b55600c805460ff191690556200003d6361b8dba062015180620004a5565b600d908155604080518082019091528181526c5468652045766572796f6e657360981b60209091019081526200007791600f9190620003ff565b5060408051808201909152600c8082526b54686545766572796f6e657360a01b6020909201918252620000ad91601091620003ff565b5060405180606001604052806033815260200162003cdb603391398051620000de91601191602090910190620003ff565b50601280546001600160a01b03191673a5409ec958c83c3f309868babaca7c86dcb077c117905560006013553480156200011757600080fd5b50600f80546200012790620004cc565b80601f01602080910402602001604051908101604052809291908181526020018280546200015590620004cc565b8015620001a65780601f106200017a57610100808354040283529160200191620001a6565b820191906000526020600020905b8154815290600101906020018083116200018857829003601f168201915b505050505060108054620001ba90620004cc565b80601f0160208091040260200160405190810160405280929190818152602001828054620001e890620004cc565b8015620002395780601f106200020d5761010080835404028352916020019162000239565b820191906000526020600020905b8154815290600101906020018083116200021b57829003601f168201915b5050845162000253935060009250602086019150620003ff565b50805162000269906001906020840190620003ff565b50505062000286620002806200033160201b60201c565b62000335565b6001600655601180546200032b9190620002a090620004cc565b80601f0160208091040260200160405190810160405280929190818152602001828054620002ce90620004cc565b80156200031f5780601f10620002f3576101008083540402835291602001916200031f565b820191906000526020600020905b8154815290600101906020018083116200030157829003601f168201915b50506200038792505050565b62000509565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620003e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620003fb906007906020840190620003ff565b5050565b8280546200040d90620004cc565b90600052602060002090601f0160209004810192826200043157600085556200047c565b82601f106200044c57805160ff19168380011785556200047c565b828001600101855582156200047c579182015b828111156200047c5782518255916020019190600101906200045f565b506200048a9291506200048e565b5090565b5b808211156200048a57600081556001016200048f565b60008219821115620004c757634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620004e157607f821691505b602082108114156200050357634e487b7160e01b600052602260045260246000fd5b50919050565b6137c280620005196000396000f3fe60806040526004361061031e5760003560e01c80637501f741116101a5578063a0e67e2b116100ec578063d5abeb0111610095578063f632fdb01161006f578063f632fdb014610896578063fae40c7c146108ad578063fb107a4f146108c0578063fe60d12c146108d557600080fd5b8063d5abeb0114610840578063e985e9c514610856578063f2fde38b1461087657600080fd5b8063c29af274116100c6578063c29af274146107d3578063c87b56dd146107f3578063cd7c03261461081357600080fd5b8063a0e67e2b14610771578063a22cb46514610793578063b88d4fde146107b357600080fd5b806391b7f5ed1161014e57806395d89b411161012857806395d89b41146107315780639f55029314610746578063a035b1fe1461075b57600080fd5b806391b7f5ed146106e65780639264274414610706578063946807fd1461071957600080fd5b80638d92becd1161017f5780638d92becd1461067b5780638da5cb5b1461069b578063910dc0d8146106c657600080fd5b80637501f741146106235780638462151c1461063957806389404a791461066657600080fd5b8063417b9483116102695780635d08c1ae116102125780636c0360eb116101ec5780636c0360eb146105d957806370a08231146105ee578063715018a61461060e57600080fd5b80635d08c1ae146105725780636343ed8a1461058c5780636352211e146105b957600080fd5b80634f6ccce7116102435780634f6ccce71461051957806354964d271461053957806355f804b31461055257600080fd5b8063417b9483146104bb57806342842e0e146104e35780634298abbe1461050357600080fd5b806318160ddd116102cb57806323b872dd116102a557806323b872dd146104735780632f745c59146104935780633ccfd60b146104b357600080fd5b806318160ddd1461041e5780631f0a8fa714610433578063228025e81461045357600080fd5b8063088a4ed0116102fc578063088a4ed0146103bf578063095ea7b3146103e157806312b583491461040157600080fd5b806301ffc9a71461032357806306fdde0314610358578063081812fc1461037a575b600080fd5b34801561032f57600080fd5b5061034361033e366004612fc0565b6108eb565b60405190151581526020015b60405180910390f35b34801561036457600080fd5b5061036d610947565b60405161034f9190613053565b34801561038657600080fd5b5061039a610395366004613066565b6109d9565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034f565b3480156103cb57600080fd5b506103df6103da366004613066565b610a84565b005b3480156103ed57600080fd5b506103df6103fc3660046130a1565b610af0565b34801561040d57600080fd5b50475b60405190815260200161034f565b34801561042a57600080fd5b50600254610410565b34801561043f57600080fd5b5061034361044e3660046131b0565b610c49565b34801561045f57600080fd5b506103df61046e366004613066565b610d1b565b34801561047f57600080fd5b506103df61048e366004613200565b610d87565b34801561049f57600080fd5b506104106104ae3660046130a1565b610e0e565b6103df610f2a565b3480156104c757600080fd5b5061039a739ae97e577c40ae33443917828e4485c6c389474181565b3480156104ef57600080fd5b506103df6104fe366004613200565b611003565b34801561050f57600080fd5b50610410600d5481565b34801561052557600080fd5b50610410610534366004613066565b61101e565b34801561054557600080fd5b506361b8dba04211610343565b34801561055e57600080fd5b506103df61056d366004613241565b61107b565b34801561057e57600080fd5b50600c546103439060ff1681565b34801561059857600080fd5b506104106105a736600461328a565b600e6020526000908152604090205481565b3480156105c557600080fd5b5061039a6105d4366004613066565b6110f9565b3480156105e557600080fd5b5061036d6111a6565b3480156105fa57600080fd5b5061041061060936600461328a565b611234565b34801561061a57600080fd5b506103df611333565b34801561062f57600080fd5b50610410600b5481565b34801561064557600080fd5b5061065961065436600461328a565b6113a6565b60405161034f91906132a7565b34801561067257600080fd5b50601354610410565b34801561068757600080fd5b506103df610696366004613300565b6114a0565b3480156106a757600080fd5b5060055473ffffffffffffffffffffffffffffffffffffffff1661039a565b3480156106d257600080fd5b506103df6106e1366004613066565b611538565b3480156106f257600080fd5b506103df610701366004613066565b6115a4565b6103df610714366004613066565b611610565b34801561072557600080fd5b506104106361b8dba081565b34801561073d57600080fd5b5061036d61187a565b34801561075257600080fd5b50610410611889565b34801561076757600080fd5b5061041060085481565b34801561077d57600080fd5b5061078661189e565b60405161034f919061331b565b34801561079f57600080fd5b506103df6107ae366004613369565b61190c565b3480156107bf57600080fd5b506103df6107ce36600461339e565b611a09565b3480156107df57600080fd5b506103df6107ee366004613456565b611a97565b3480156107ff57600080fd5b5061036d61080e366004613066565b611d25565b34801561081f57600080fd5b5060125461039a9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561084c57600080fd5b5061041060095481565b34801561086257600080fd5b506103436108713660046134c2565b611dfe565b34801561088257600080fd5b506103df61089136600461328a565b611eff565b3480156108a257600080fd5b50600d544211610343565b6103df6108bb3660046134fb565b611ffb565b3480156108cc57600080fd5b50600854610410565b3480156108e157600080fd5b50610410600a5481565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000148061094157506109418261233a565b92915050565b6060600080546109569061352c565b80601f01602080910402602001604051908101604052809291908181526020018280546109829061352c565b80156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b5050505050905090565b60006109e48261241d565b610a5b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60055473ffffffffffffffffffffffffffffffffffffffff163314610aeb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b600b55565b6000610afb826110f9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b9f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610a52565b3373ffffffffffffffffffffffffffffffffffffffff82161480610bc85750610bc88133611dfe565b610c3a5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a52565b610c448383612481565b505050565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b16602080830191909152825180830360140181526034830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060548401526070808401829052845180850390910181526090909301909352815191012060009190739ae97e577c40ae33443917828e4485c6c3894741610cfb8286612521565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610d825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b600955565b610d9133826125be565b610e035760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a52565b610c448383836126c5565b6000610e1983611234565b8210610e675760405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f62000000000000000000006044820152606401610a52565b6000805b600254811015610ee15760028181548110610e8857610e88613580565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff86811691161415610ed15783821415610ec55791506109419050565b610ece826135de565b91505b610eda816135de565b9050610e6b565b5060405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f62000000000000000000006044820152606401610a52565b60055473ffffffffffffffffffffffffffffffffffffffff163314610f915760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b6040514790600090339083908381818185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5050905080610fe857600080fd5b8160136000828254610ffa9190613617565b90915550505050565b610c4483838360405180602001604052806000815250611a09565b600061102960025490565b82106110775760405162461bcd60e51b815260206004820152601760248201527f455243373231456e756d3a20676c6f62616c20696f6f620000000000000000006044820152606401610a52565b5090565b60055473ffffffffffffffffffffffffffffffffffffffff1633146110e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b80516110f5906007906020840190612f02565b5050565b6000806002838154811061110f5761110f613580565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169050806109415760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610a52565b600780546111b39061352c565b80601f01602080910402602001604051908101604052809291908181526020018280546111df9061352c565b801561122c5780601f106112015761010080835404028352916020019161122c565b820191906000526020600020905b81548152906001019060200180831161120f57829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff82166112bf5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610a52565b600254600090815b8181101561132a57600281815481106112e2576112e2613580565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff8681169116141561131a57611317836135de565b92505b611323816135de565b90506112c7565b50909392505050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461139a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b6113a46000612894565b565b60606113b182611234565b6000106114005760405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f62000000000000000000006044820152606401610a52565b600061140b83611234565b905060008167ffffffffffffffff811115611428576114286130cd565b604051908082528060200260200182016040528015611451578160200160208202803683370190505b50905060005b82811015611498576114698582610e0e565b82828151811061147b5761147b613580565b602090810291909101015280611490816135de565b915050611457565b509392505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146115075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60055473ffffffffffffffffffffffffffffffffffffffff16331461159f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b600d55565b60055473ffffffffffffffffffffffffffffffffffffffff16331461160b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b600855565b600260065414156116635760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a52565b6002600655600d5442116116b95760405162461bcd60e51b815260206004820152601b60248201527f5075626c69632053616c6520686173206e6f74207374617274656400000000006044820152606401610a52565b600254600c5460ff161561170f5760405162461bcd60e51b815260206004820152600b60248201527f53616c65205061757365640000000000000000000000000000000000000000006044820152606401610a52565b6000821180156117215750600b548211155b61176d5760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206e756d6265724f664e6674730000000000000000000000006044820152606401610a52565b600a5460095461177d919061362f565b6117878383613617565b11156117d55760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c7900000000000000000000000000006044820152606401610a52565b816008546117e39190613646565b3410156118325760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420456e6f756768204554480000000000000000000000000000000000006044820152606401610a52565b60005b82811015611870576118603361184b8385613617565b6040518060200160405280600081525061290b565b611869816135de565b9050611835565b5050600160065550565b6060600180546109569061352c565b6000476013546118999190613617565b905090565b606060028054806020026020016040519081016040528092919081815260200182805480156109cf57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116118d8575050505050905090565b73ffffffffffffffffffffffffffffffffffffffff82163314156119725760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a52565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611a1333836125be565b611a855760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a52565b611a9184848484612994565b50505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611afe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b828114611b735760405162461bcd60e51b815260206004820152603360248201527f496e76616c6964207175616e74697469657320616e6420726563697069656e7460448201527f7320286c656e677468206d69736d6174636829000000000000000000000000006064820152608401610a52565b600254600090815b85811015611bb957868682818110611b9557611b95613580565b9050602002013583611ba79190613617565b9250611bb2816135de565b9050611b7b565b50600954611bc78383613617565b1115611c155760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c7900000000000000000000000000006044820152606401610a52565b600a54821115611c675760405162461bcd60e51b815260206004820152601460248201527f45786365656473204d61782052657365727665640000000000000000000000006044820152606401610a52565b81600a6000828254611c79919061362f565b90915550600092508290505b83811015611d1c5760005b878783818110611ca257611ca2613580565b90506020020135811015611d0b57611cfb868684818110611cc557611cc5613580565b9050602002016020810190611cda919061328a565b84611ce4816135de565b95506040518060200160405280600081525061290b565b611d04816135de565b9050611c90565b50611d15816135de565b9050611c85565b50505050505050565b6060611d308261241d565b611da25760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560448201527f6e000000000000000000000000000000000000000000000000000000000000006064820152608401610a52565b6000611dac612a1d565b90506000815111611dcc5760405180602001604052806000815250611df7565b80611dd684612a2c565b604051602001611de7929190613683565b6040516020818303038152906040525b9392505050565b6012546040517fc455279100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009281169190841690829063c455279190602401602060405180830381865afa158015611e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9a91906136b2565b73ffffffffffffffffffffffffffffffffffffffff161415611ec0576001915050610941565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611f665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b73ffffffffffffffffffffffffffffffffffffffff8116611fef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a52565b611ff881612894565b50565b6002600654141561204e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a52565b60026006556361b8dba042116120a65760405162461bcd60e51b815260206004820152601460248201527f53616c6520686173206e6f7420737461727465640000000000000000000000006044820152606401610a52565b600254600c5460ff16156120fc5760405162461bcd60e51b815260206004820152600b60248201527f53616c65205061757365640000000000000000000000000000000000000000006044820152606401610a52565b60008311801561210e5750600b548311155b61215a5760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206e756d6265724f664e6674730000000000000000000000006044820152606401610a52565b600a5460095461216a919061362f565b6121748483613617565b11156121c25760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c7900000000000000000000000000006044820152606401610a52565b826008546121d09190613646565b34101561221f5760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420456e6f756768204554480000000000000000000000000000000000006044820152606401610a52565b600b54336000908152600e602052604090205461223d908590613617565b111561228b5760405162461bcd60e51b815260206004820152601c60248201527f457863656564732057686974656c69737420416c6c6f636174696f6e000000006044820152606401610a52565b6122953383610c49565b6122e15760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f742077686974656c69737465640000000000000000006044820152606401610a52565b336000908152600e602052604081208054859290612300908490613617565b90915550600090505b8381101561232f5761231f3361184b8385613617565b612328816135de565b9050612309565b505060016006555050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806123cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061094157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610941565b600254600090821080156109415750600073ffffffffffffffffffffffffffffffffffffffff166002838154811061245757612457613580565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141592915050565b600081815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906124db826110f9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008060008061253085612b5e565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa15801561258b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151979650505050505050565b60006125c98261241d565b61263b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610a52565b6000612646836110f9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126b557508373ffffffffffffffffffffffffffffffffffffffff1661269d846109d9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ef75750611ef78185611dfe565b8273ffffffffffffffffffffffffffffffffffffffff166126e5826110f9565b73ffffffffffffffffffffffffffffffffffffffff161461276e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610a52565b73ffffffffffffffffffffffffffffffffffffffff82166127f65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a52565b612801600082612481565b816002828154811061281557612815613580565b6000918252602082200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6129158383612bd2565b6129226000848484612d2c565b610c445760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a52565b61299f8484846126c5565b6129ab84848484612d2c565b611a915760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a52565b6060600780546109569061352c565b606081612a6c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612a965780612a80816135de565b9150612a8f9050600a836136fe565b9150612a70565b60008167ffffffffffffffff811115612ab157612ab16130cd565b6040519080825280601f01601f191660200182016040528015612adb576020820181803683370190505b5090505b8415611ef757612af060018361362f565b9150612afd600a86613712565b612b08906030613617565b60f81b818381518110612b1d57612b1d613580565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612b57600a866136fe565b9450612adf565b60008060008351604114612bb45760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610a52565b50505060208101516040820151606090920151909260009190911a90565b73ffffffffffffffffffffffffffffffffffffffff8216612c355760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a52565b612c3e8161241d565b15612c8b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a52565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612ef7576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612da3903390899088908890600401613726565b6020604051808303816000875af1925050508015612dfc575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612df99181019061376f565b60015b612eac573d808015612e2a576040519150601f19603f3d011682016040523d82523d6000602084013e612e2f565b606091505b508051612ea45760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a52565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611ef7565b506001949350505050565b828054612f0e9061352c565b90600052602060002090601f016020900481019282612f305760008555612f76565b82601f10612f4957805160ff1916838001178555612f76565b82800160010185558215612f76579182015b82811115612f76578251825591602001919060010190612f5b565b506110779291505b808211156110775760008155600101612f7e565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611ff857600080fd5b600060208284031215612fd257600080fd5b8135611df781612f92565b60005b83811015612ff8578181015183820152602001612fe0565b83811115611a915750506000910152565b60008151808452613021816020860160208601612fdd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611df76020830184613009565b60006020828403121561307857600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611ff857600080fd5b600080604083850312156130b457600080fd5b82356130bf8161307f565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115613117576131176130cd565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561315d5761315d6130cd565b8160405280935085815286868601111561317657600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126131a157600080fd5b611df7838335602085016130fc565b600080604083850312156131c357600080fd5b82356131ce8161307f565b9150602083013567ffffffffffffffff8111156131ea57600080fd5b6131f685828601613190565b9150509250929050565b60008060006060848603121561321557600080fd5b83356132208161307f565b925060208401356132308161307f565b929592945050506040919091013590565b60006020828403121561325357600080fd5b813567ffffffffffffffff81111561326a57600080fd5b8201601f8101841361327b57600080fd5b611ef7848235602084016130fc565b60006020828403121561329c57600080fd5b8135611df78161307f565b6020808252825182820181905260009190848201906040850190845b818110156132df578351835292840192918401916001016132c3565b50909695505050505050565b803580151581146132fb57600080fd5b919050565b60006020828403121561331257600080fd5b611df7826132eb565b6020808252825182820181905260009190848201906040850190845b818110156132df57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613337565b6000806040838503121561337c57600080fd5b82356133878161307f565b9150613395602084016132eb565b90509250929050565b600080600080608085870312156133b457600080fd5b84356133bf8161307f565b935060208501356133cf8161307f565b925060408501359150606085013567ffffffffffffffff8111156133f257600080fd5b6133fe87828801613190565b91505092959194509250565b60008083601f84011261341c57600080fd5b50813567ffffffffffffffff81111561343457600080fd5b6020830191508360208260051b850101111561344f57600080fd5b9250929050565b6000806000806040858703121561346c57600080fd5b843567ffffffffffffffff8082111561348457600080fd5b6134908883890161340a565b909650945060208701359150808211156134a957600080fd5b506134b68782880161340a565b95989497509550505050565b600080604083850312156134d557600080fd5b82356134e08161307f565b915060208301356134f08161307f565b809150509250929050565b6000806040838503121561350e57600080fd5b82359150602083013567ffffffffffffffff8111156131ea57600080fd5b600181811c9082168061354057607f821691505b6020821081141561357a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613610576136106135af565b5060010190565b6000821982111561362a5761362a6135af565b500190565b600082821015613641576136416135af565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561367e5761367e6135af565b500290565b60008351613695818460208801612fdd565b8351908301906136a9818360208801612fdd565b01949350505050565b6000602082840312156136c457600080fd5b8151611df78161307f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261370d5761370d6136cf565b500490565b600082613721576137216136cf565b500690565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526137656080830184613009565b9695505050505050565b60006020828403121561378157600080fd5b8151611df781612f9256fea26469706673582212201e8a8ab5b717d32ef48ab76170f593b2d69653b6d4ae510458eab8f9665b848864736f6c634300080a003368747470733a2f2f686f7573656f6666697273742e636f6d3a313333352f74686565766572796f6e65732f6f70656e7365612f
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80637501f741116101a5578063a0e67e2b116100ec578063d5abeb0111610095578063f632fdb01161006f578063f632fdb014610896578063fae40c7c146108ad578063fb107a4f146108c0578063fe60d12c146108d557600080fd5b8063d5abeb0114610840578063e985e9c514610856578063f2fde38b1461087657600080fd5b8063c29af274116100c6578063c29af274146107d3578063c87b56dd146107f3578063cd7c03261461081357600080fd5b8063a0e67e2b14610771578063a22cb46514610793578063b88d4fde146107b357600080fd5b806391b7f5ed1161014e57806395d89b411161012857806395d89b41146107315780639f55029314610746578063a035b1fe1461075b57600080fd5b806391b7f5ed146106e65780639264274414610706578063946807fd1461071957600080fd5b80638d92becd1161017f5780638d92becd1461067b5780638da5cb5b1461069b578063910dc0d8146106c657600080fd5b80637501f741146106235780638462151c1461063957806389404a791461066657600080fd5b8063417b9483116102695780635d08c1ae116102125780636c0360eb116101ec5780636c0360eb146105d957806370a08231146105ee578063715018a61461060e57600080fd5b80635d08c1ae146105725780636343ed8a1461058c5780636352211e146105b957600080fd5b80634f6ccce7116102435780634f6ccce71461051957806354964d271461053957806355f804b31461055257600080fd5b8063417b9483146104bb57806342842e0e146104e35780634298abbe1461050357600080fd5b806318160ddd116102cb57806323b872dd116102a557806323b872dd146104735780632f745c59146104935780633ccfd60b146104b357600080fd5b806318160ddd1461041e5780631f0a8fa714610433578063228025e81461045357600080fd5b8063088a4ed0116102fc578063088a4ed0146103bf578063095ea7b3146103e157806312b583491461040157600080fd5b806301ffc9a71461032357806306fdde0314610358578063081812fc1461037a575b600080fd5b34801561032f57600080fd5b5061034361033e366004612fc0565b6108eb565b60405190151581526020015b60405180910390f35b34801561036457600080fd5b5061036d610947565b60405161034f9190613053565b34801561038657600080fd5b5061039a610395366004613066565b6109d9565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034f565b3480156103cb57600080fd5b506103df6103da366004613066565b610a84565b005b3480156103ed57600080fd5b506103df6103fc3660046130a1565b610af0565b34801561040d57600080fd5b50475b60405190815260200161034f565b34801561042a57600080fd5b50600254610410565b34801561043f57600080fd5b5061034361044e3660046131b0565b610c49565b34801561045f57600080fd5b506103df61046e366004613066565b610d1b565b34801561047f57600080fd5b506103df61048e366004613200565b610d87565b34801561049f57600080fd5b506104106104ae3660046130a1565b610e0e565b6103df610f2a565b3480156104c757600080fd5b5061039a739ae97e577c40ae33443917828e4485c6c389474181565b3480156104ef57600080fd5b506103df6104fe366004613200565b611003565b34801561050f57600080fd5b50610410600d5481565b34801561052557600080fd5b50610410610534366004613066565b61101e565b34801561054557600080fd5b506361b8dba04211610343565b34801561055e57600080fd5b506103df61056d366004613241565b61107b565b34801561057e57600080fd5b50600c546103439060ff1681565b34801561059857600080fd5b506104106105a736600461328a565b600e6020526000908152604090205481565b3480156105c557600080fd5b5061039a6105d4366004613066565b6110f9565b3480156105e557600080fd5b5061036d6111a6565b3480156105fa57600080fd5b5061041061060936600461328a565b611234565b34801561061a57600080fd5b506103df611333565b34801561062f57600080fd5b50610410600b5481565b34801561064557600080fd5b5061065961065436600461328a565b6113a6565b60405161034f91906132a7565b34801561067257600080fd5b50601354610410565b34801561068757600080fd5b506103df610696366004613300565b6114a0565b3480156106a757600080fd5b5060055473ffffffffffffffffffffffffffffffffffffffff1661039a565b3480156106d257600080fd5b506103df6106e1366004613066565b611538565b3480156106f257600080fd5b506103df610701366004613066565b6115a4565b6103df610714366004613066565b611610565b34801561072557600080fd5b506104106361b8dba081565b34801561073d57600080fd5b5061036d61187a565b34801561075257600080fd5b50610410611889565b34801561076757600080fd5b5061041060085481565b34801561077d57600080fd5b5061078661189e565b60405161034f919061331b565b34801561079f57600080fd5b506103df6107ae366004613369565b61190c565b3480156107bf57600080fd5b506103df6107ce36600461339e565b611a09565b3480156107df57600080fd5b506103df6107ee366004613456565b611a97565b3480156107ff57600080fd5b5061036d61080e366004613066565b611d25565b34801561081f57600080fd5b5060125461039a9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561084c57600080fd5b5061041060095481565b34801561086257600080fd5b506103436108713660046134c2565b611dfe565b34801561088257600080fd5b506103df61089136600461328a565b611eff565b3480156108a257600080fd5b50600d544211610343565b6103df6108bb3660046134fb565b611ffb565b3480156108cc57600080fd5b50600854610410565b3480156108e157600080fd5b50610410600a5481565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000148061094157506109418261233a565b92915050565b6060600080546109569061352c565b80601f01602080910402602001604051908101604052809291908181526020018280546109829061352c565b80156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b5050505050905090565b60006109e48261241d565b610a5b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60055473ffffffffffffffffffffffffffffffffffffffff163314610aeb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b600b55565b6000610afb826110f9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b9f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610a52565b3373ffffffffffffffffffffffffffffffffffffffff82161480610bc85750610bc88133611dfe565b610c3a5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a52565b610c448383612481565b505050565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b16602080830191909152825180830360140181526034830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060548401526070808401829052845180850390910181526090909301909352815191012060009190739ae97e577c40ae33443917828e4485c6c3894741610cfb8286612521565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610d825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b600955565b610d9133826125be565b610e035760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a52565b610c448383836126c5565b6000610e1983611234565b8210610e675760405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f62000000000000000000006044820152606401610a52565b6000805b600254811015610ee15760028181548110610e8857610e88613580565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff86811691161415610ed15783821415610ec55791506109419050565b610ece826135de565b91505b610eda816135de565b9050610e6b565b5060405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f62000000000000000000006044820152606401610a52565b60055473ffffffffffffffffffffffffffffffffffffffff163314610f915760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b6040514790600090339083908381818185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5050905080610fe857600080fd5b8160136000828254610ffa9190613617565b90915550505050565b610c4483838360405180602001604052806000815250611a09565b600061102960025490565b82106110775760405162461bcd60e51b815260206004820152601760248201527f455243373231456e756d3a20676c6f62616c20696f6f620000000000000000006044820152606401610a52565b5090565b60055473ffffffffffffffffffffffffffffffffffffffff1633146110e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b80516110f5906007906020840190612f02565b5050565b6000806002838154811061110f5761110f613580565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169050806109415760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610a52565b600780546111b39061352c565b80601f01602080910402602001604051908101604052809291908181526020018280546111df9061352c565b801561122c5780601f106112015761010080835404028352916020019161122c565b820191906000526020600020905b81548152906001019060200180831161120f57829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff82166112bf5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610a52565b600254600090815b8181101561132a57600281815481106112e2576112e2613580565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff8681169116141561131a57611317836135de565b92505b611323816135de565b90506112c7565b50909392505050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461139a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b6113a46000612894565b565b60606113b182611234565b6000106114005760405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f62000000000000000000006044820152606401610a52565b600061140b83611234565b905060008167ffffffffffffffff811115611428576114286130cd565b604051908082528060200260200182016040528015611451578160200160208202803683370190505b50905060005b82811015611498576114698582610e0e565b82828151811061147b5761147b613580565b602090810291909101015280611490816135de565b915050611457565b509392505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146115075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60055473ffffffffffffffffffffffffffffffffffffffff16331461159f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b600d55565b60055473ffffffffffffffffffffffffffffffffffffffff16331461160b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b600855565b600260065414156116635760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a52565b6002600655600d5442116116b95760405162461bcd60e51b815260206004820152601b60248201527f5075626c69632053616c6520686173206e6f74207374617274656400000000006044820152606401610a52565b600254600c5460ff161561170f5760405162461bcd60e51b815260206004820152600b60248201527f53616c65205061757365640000000000000000000000000000000000000000006044820152606401610a52565b6000821180156117215750600b548211155b61176d5760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206e756d6265724f664e6674730000000000000000000000006044820152606401610a52565b600a5460095461177d919061362f565b6117878383613617565b11156117d55760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c7900000000000000000000000000006044820152606401610a52565b816008546117e39190613646565b3410156118325760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420456e6f756768204554480000000000000000000000000000000000006044820152606401610a52565b60005b82811015611870576118603361184b8385613617565b6040518060200160405280600081525061290b565b611869816135de565b9050611835565b5050600160065550565b6060600180546109569061352c565b6000476013546118999190613617565b905090565b606060028054806020026020016040519081016040528092919081815260200182805480156109cf57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116118d8575050505050905090565b73ffffffffffffffffffffffffffffffffffffffff82163314156119725760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a52565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611a1333836125be565b611a855760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a52565b611a9184848484612994565b50505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611afe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b828114611b735760405162461bcd60e51b815260206004820152603360248201527f496e76616c6964207175616e74697469657320616e6420726563697069656e7460448201527f7320286c656e677468206d69736d6174636829000000000000000000000000006064820152608401610a52565b600254600090815b85811015611bb957868682818110611b9557611b95613580565b9050602002013583611ba79190613617565b9250611bb2816135de565b9050611b7b565b50600954611bc78383613617565b1115611c155760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c7900000000000000000000000000006044820152606401610a52565b600a54821115611c675760405162461bcd60e51b815260206004820152601460248201527f45786365656473204d61782052657365727665640000000000000000000000006044820152606401610a52565b81600a6000828254611c79919061362f565b90915550600092508290505b83811015611d1c5760005b878783818110611ca257611ca2613580565b90506020020135811015611d0b57611cfb868684818110611cc557611cc5613580565b9050602002016020810190611cda919061328a565b84611ce4816135de565b95506040518060200160405280600081525061290b565b611d04816135de565b9050611c90565b50611d15816135de565b9050611c85565b50505050505050565b6060611d308261241d565b611da25760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560448201527f6e000000000000000000000000000000000000000000000000000000000000006064820152608401610a52565b6000611dac612a1d565b90506000815111611dcc5760405180602001604052806000815250611df7565b80611dd684612a2c565b604051602001611de7929190613683565b6040516020818303038152906040525b9392505050565b6012546040517fc455279100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009281169190841690829063c455279190602401602060405180830381865afa158015611e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9a91906136b2565b73ffffffffffffffffffffffffffffffffffffffff161415611ec0576001915050610941565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611f665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a52565b73ffffffffffffffffffffffffffffffffffffffff8116611fef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a52565b611ff881612894565b50565b6002600654141561204e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a52565b60026006556361b8dba042116120a65760405162461bcd60e51b815260206004820152601460248201527f53616c6520686173206e6f7420737461727465640000000000000000000000006044820152606401610a52565b600254600c5460ff16156120fc5760405162461bcd60e51b815260206004820152600b60248201527f53616c65205061757365640000000000000000000000000000000000000000006044820152606401610a52565b60008311801561210e5750600b548311155b61215a5760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206e756d6265724f664e6674730000000000000000000000006044820152606401610a52565b600a5460095461216a919061362f565b6121748483613617565b11156121c25760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c7900000000000000000000000000006044820152606401610a52565b826008546121d09190613646565b34101561221f5760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420456e6f756768204554480000000000000000000000000000000000006044820152606401610a52565b600b54336000908152600e602052604090205461223d908590613617565b111561228b5760405162461bcd60e51b815260206004820152601c60248201527f457863656564732057686974656c69737420416c6c6f636174696f6e000000006044820152606401610a52565b6122953383610c49565b6122e15760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f742077686974656c69737465640000000000000000006044820152606401610a52565b336000908152600e602052604081208054859290612300908490613617565b90915550600090505b8381101561232f5761231f3361184b8385613617565b612328816135de565b9050612309565b505060016006555050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806123cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061094157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610941565b600254600090821080156109415750600073ffffffffffffffffffffffffffffffffffffffff166002838154811061245757612457613580565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141592915050565b600081815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906124db826110f9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008060008061253085612b5e565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa15801561258b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151979650505050505050565b60006125c98261241d565b61263b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610a52565b6000612646836110f9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126b557508373ffffffffffffffffffffffffffffffffffffffff1661269d846109d9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ef75750611ef78185611dfe565b8273ffffffffffffffffffffffffffffffffffffffff166126e5826110f9565b73ffffffffffffffffffffffffffffffffffffffff161461276e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610a52565b73ffffffffffffffffffffffffffffffffffffffff82166127f65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a52565b612801600082612481565b816002828154811061281557612815613580565b6000918252602082200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6129158383612bd2565b6129226000848484612d2c565b610c445760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a52565b61299f8484846126c5565b6129ab84848484612d2c565b611a915760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a52565b6060600780546109569061352c565b606081612a6c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612a965780612a80816135de565b9150612a8f9050600a836136fe565b9150612a70565b60008167ffffffffffffffff811115612ab157612ab16130cd565b6040519080825280601f01601f191660200182016040528015612adb576020820181803683370190505b5090505b8415611ef757612af060018361362f565b9150612afd600a86613712565b612b08906030613617565b60f81b818381518110612b1d57612b1d613580565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612b57600a866136fe565b9450612adf565b60008060008351604114612bb45760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610a52565b50505060208101516040820151606090920151909260009190911a90565b73ffffffffffffffffffffffffffffffffffffffff8216612c355760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a52565b612c3e8161241d565b15612c8b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a52565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612ef7576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612da3903390899088908890600401613726565b6020604051808303816000875af1925050508015612dfc575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612df99181019061376f565b60015b612eac573d808015612e2a576040519150601f19603f3d011682016040523d82523d6000602084013e612e2f565b606091505b508051612ea45760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a52565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611ef7565b506001949350505050565b828054612f0e9061352c565b90600052602060002090601f016020900481019282612f305760008555612f76565b82601f10612f4957805160ff1916838001178555612f76565b82800160010185558215612f76579182015b82811115612f76578251825591602001919060010190612f5b565b506110779291505b808211156110775760008155600101612f7e565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611ff857600080fd5b600060208284031215612fd257600080fd5b8135611df781612f92565b60005b83811015612ff8578181015183820152602001612fe0565b83811115611a915750506000910152565b60008151808452613021816020860160208601612fdd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611df76020830184613009565b60006020828403121561307857600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611ff857600080fd5b600080604083850312156130b457600080fd5b82356130bf8161307f565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115613117576131176130cd565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561315d5761315d6130cd565b8160405280935085815286868601111561317657600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126131a157600080fd5b611df7838335602085016130fc565b600080604083850312156131c357600080fd5b82356131ce8161307f565b9150602083013567ffffffffffffffff8111156131ea57600080fd5b6131f685828601613190565b9150509250929050565b60008060006060848603121561321557600080fd5b83356132208161307f565b925060208401356132308161307f565b929592945050506040919091013590565b60006020828403121561325357600080fd5b813567ffffffffffffffff81111561326a57600080fd5b8201601f8101841361327b57600080fd5b611ef7848235602084016130fc565b60006020828403121561329c57600080fd5b8135611df78161307f565b6020808252825182820181905260009190848201906040850190845b818110156132df578351835292840192918401916001016132c3565b50909695505050505050565b803580151581146132fb57600080fd5b919050565b60006020828403121561331257600080fd5b611df7826132eb565b6020808252825182820181905260009190848201906040850190845b818110156132df57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613337565b6000806040838503121561337c57600080fd5b82356133878161307f565b9150613395602084016132eb565b90509250929050565b600080600080608085870312156133b457600080fd5b84356133bf8161307f565b935060208501356133cf8161307f565b925060408501359150606085013567ffffffffffffffff8111156133f257600080fd5b6133fe87828801613190565b91505092959194509250565b60008083601f84011261341c57600080fd5b50813567ffffffffffffffff81111561343457600080fd5b6020830191508360208260051b850101111561344f57600080fd5b9250929050565b6000806000806040858703121561346c57600080fd5b843567ffffffffffffffff8082111561348457600080fd5b6134908883890161340a565b909650945060208701359150808211156134a957600080fd5b506134b68782880161340a565b95989497509550505050565b600080604083850312156134d557600080fd5b82356134e08161307f565b915060208301356134f08161307f565b809150509250929050565b6000806040838503121561350e57600080fd5b82359150602083013567ffffffffffffffff8111156131ea57600080fd5b600181811c9082168061354057607f821691505b6020821081141561357a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613610576136106135af565b5060010190565b6000821982111561362a5761362a6135af565b500190565b600082821015613641576136416135af565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561367e5761367e6135af565b500290565b60008351613695818460208801612fdd565b8351908301906136a9818360208801612fdd565b01949350505050565b6000602082840312156136c457600080fd5b8151611df78161307f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261370d5761370d6136cf565b500490565b600082613721576137216136cf565b500690565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526137656080830184613009565b9695505050505050565b60006020828403121561378157600080fd5b8151611df781612f9256fea26469706673582212201e8a8ab5b717d32ef48ab76170f593b2d69653b6d4ae510458eab8f9665b848864736f6c634300080a0033
Deployed Bytecode Sourcemap
1122:7586:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;191:301:3;;;;;;;;;;-1:-1:-1;191:301:3;;;;;:::i;:::-;;:::i;:::-;;;611:14:14;;604:22;586:41;;574:2;559:18;191:301:3;;;;;;;;2089:100:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2729:308::-;;;;;;;;;;-1:-1:-1;2729:308:4;;;;;:::i;:::-;;:::i;:::-;;;1809:42:14;1797:55;;;1779:74;;1767:2;1752:18;2729:308:4;1633:226:14;6783:116:13;;;;;;;;;;-1:-1:-1;6783:116:13;;;;;:::i;:::-;;:::i;:::-;;2309:412:4;;;;;;;;;;-1:-1:-1;2309:412:4;;;;;:::i;:::-;;:::i;7606:104:13:-;;;;;;;;;;-1:-1:-1;7681:21:13;7606:104;;;2489:25:14;;;2477:2;2462:18;7606:104:13;2343:177:14;1470:110:3;;;;;;;;;;-1:-1:-1;1558:7:3;:14;1470:110;;2861:364:13;;;;;;;;;;-1:-1:-1;2861:364:13;;;;;:::i;:::-;;:::i;6907:106::-;;;;;;;;;;-1:-1:-1;6907:106:13;;;;;:::i;:::-;;:::i;3602:376:4:-;;;;;;;;;;-1:-1:-1;3602:376:4;;;;;:::i;:::-;;:::i;500:504:3:-;;;;;;;;;;-1:-1:-1;500:504:3;;;;;:::i;:::-;;:::i;7929:273:13:-;;;:::i;1638:85::-;;;;;;;;;;;;1681:42;1638:85;;3986:185:4;;;;;;;;;;-1:-1:-1;3986:185:4;;;;;:::i;:::-;;:::i;1730:77:13:-;;;;;;;;;;;;;;;;1588:244:3;;;;;;;;;;-1:-1:-1;1588:244:3;;;;;:::i;:::-;;:::i;2425:120:13:-;;;;;;;;;;-1:-1:-1;1325:10:13;2499:15;:38;2425:120;;7021:104;;;;;;;;;;-1:-1:-1;7021:104:13;;;;;:::i;:::-;;:::i;1581:30::-;;;;;;;;;;-1:-1:-1;1581:30:13;;;;;;;;1844:53;;;;;;;;;;-1:-1:-1;1844:53:13;;;;;:::i;:::-;;;;;;;;;;;;;;1755:326:4;;;;;;;;;;-1:-1:-1;1755:326:4;;;;;:::i;:::-;;:::i;1223:21:13:-;;;;;;;;;;;;;:::i;1229:518:4:-;;;;;;;;;;-1:-1:-1;1229:518:4;;;;;:::i;:::-;;:::i;1661:101:10:-;;;;;;;;;;;;;:::i;1525:26:13:-;;;;;;;;;;;;;;;;1012:450:3;;;;;;;;;;-1:-1:-1;1012:450:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7499:99:13:-;;;;;;;;;;-1:-1:-1;7576:14:13;;7499:99;;7133:101;;;;;;;;;;-1:-1:-1;7133:101:13;;;;;:::i;:::-;;:::i;1029:85:10:-;;;;;;;;;;-1:-1:-1;1101:6:10;;;;1029:85;;7246:164:13;;;;;;;;;;-1:-1:-1;7246:164:13;;;;;:::i;:::-;;:::i;6685:90::-;;;;;;;;;;-1:-1:-1;6685:90:13;;;;;:::i;:::-;;:::i;3849:637::-;;;;;;:::i;:::-;;:::i;1278:57::-;;;;;;;;;;;;1325:10;1278:57;;2197:104:4;;;;;;;;;;;;;:::i;7718:121:13:-;;;;;;;;;;;;;:::i;1380:33::-;;;;;;;;;;;;;;;;763:95:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3045:327::-;;;;;;;;;;-1:-1:-1;3045:327:4;;;;;:::i;:::-;;:::i;4179:365::-;;;;;;;;;;-1:-1:-1;4179:365:4;;;;;:::i;:::-;;:::i;5466:864:13:-;;;;;;;;;;-1:-1:-1;5466:864:13;;;;;:::i;:::-;;:::i;6338:339::-;;;;;;;;;;-1:-1:-1;6338:339:13;;;;;:::i;:::-;;:::i;2069:80::-;;;;;;;;;;-1:-1:-1;2069:80:13;;;;;;;;1420:31;;;;;;;;;;;;;;;;8303:402;;;;;;;;;;-1:-1:-1;8303:402:13;;;;;:::i;:::-;;:::i;1911:198:10:-;;;;;;;;;;-1:-1:-1;1911:198:10;;;;;:::i;:::-;;:::i;2553:125:13:-;;;;;;;;;;-1:-1:-1;2645:25:13;;2627:15;:43;2553:125;;4520:898;;;;;;:::i;:::-;;:::i;2744:84::-;;;;;;;;;;-1:-1:-1;2815:5:13;;2744:84;;1458:29;;;;;;;;;;;;;;;;191:301:3;339:4;381:50;;;396:35;381:50;;:103;;;448:36;472:11;448:23;:36::i;:::-;361:123;191:301;-1:-1:-1;;191:301:3:o;2089:100:4:-;2143:13;2176:5;2169:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2089:100;:::o;2729:308::-;2850:7;2897:16;2905:7;2897;:16::i;:::-;2875:110;;;;-1:-1:-1;;;2875:110:4;;10505:2:14;2875:110:4;;;10487:21:14;10544:2;10524:18;;;10517:30;10583:34;10563:18;;;10556:62;10654:14;10634:18;;;10627:42;10686:19;;2875:110:4;;;;;;;;;-1:-1:-1;3005:24:4;;;;:15;:24;;;;;;;;;2729:308::o;6783:116:13:-;1101:6:10;;1241:23;1101:6;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;10918:2:14;1233:68:10;;;10900:21:14;;;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;11048:18;;1233:68:10;10716:356:14;1233:68:10;6864:7:13::1;:27:::0;6783:116::o;2309:412:4:-;2390:13;2406:24;2422:7;2406:15;:24::i;:::-;2390:40;;2455:5;2449:11;;:2;:11;;;;2441:57;;;;-1:-1:-1;;;2441:57:4;;11279:2:14;2441:57:4;;;11261:21:14;11318:2;11298:18;;;11291:30;11357:34;11337:18;;;11330:62;11428:3;11408:18;;;11401:31;11449:19;;2441:57:4;11077:397:14;2441:57:4;719:10:1;2533:21:4;;;;;:62;;-1:-1:-1;2558:37:4;2575:5;719:10:1;8303:402:13;:::i;2558:37:4:-;2511:168;;;;-1:-1:-1;;;2511:168:4;;11681:2:14;2511:168:4;;;11663:21:14;11720:2;11700:18;;;11693:30;11759:34;11739:18;;;11732:62;11830:26;11810:18;;;11803:54;11874:19;;2511:168:4;11479:420:14;2511:168:4;2692:21;2701:2;2705:7;2692:8;:21::i;:::-;2379:342;2309:412;;:::o;2861:364:13:-;2992:22;;;12066:66:14;12053:2;12049:15;;;12045:88;2992:22:13;;;;12033:101:14;;;;2992:22:13;;;;;;;;;12150:12:14;;;2992:22:13;;2982:33;;;;;;12415:66:14;3067:65:13;;;12403:79:14;12498:12;;;;12491:28;;;3067:65:13;;;;;;;;;;12535:12:14;;;;3067:65:13;;;3057:76;;;;;-1:-1:-1;;2982:33:13;1681:42;3151:46;3057:76;3187:9;3151:13;:46::i;:::-;:66;;;;2861:364;-1:-1:-1;;;;;2861:364:13:o;6907:106::-;1101:6:10;;1241:23;1101:6;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;10918:2:14;1233:68:10;;;10900:21:14;;;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;11048:18;;1233:68:10;10716:356:14;1233:68:10;6980:9:13::1;:25:::0;6907:106::o;3602:376:4:-;3811:41;719:10:1;3844:7:4;3811:18;:41::i;:::-;3789:140;;;;-1:-1:-1;;;3789:140:4;;12760:2:14;3789:140:4;;;12742:21:14;12799:2;12779:18;;;12772:30;12838:34;12818:18;;;12811:62;12909:19;12889:18;;;12882:47;12946:19;;3789:140:4;12558:413:14;3789:140:4;3942:28;3952:4;3958:2;3962:7;3942:9;:28::i;500:504:3:-;625:15;674:24;692:5;674:17;:24::i;:::-;666:5;:32;658:67;;;;-1:-1:-1;;;658:67:3;;13178:2:14;658:67:3;;;13160:21:14;13217:2;13197:18;;;13190:30;13256:24;13236:18;;;13229:52;13298:18;;658:67:3;12976:346:14;658:67:3;736:13;765:9;760:186;780:7;:14;776:18;;760:186;;;829:7;837:1;829:10;;;;;;;;:::i;:::-;;;;;;;;;;;;820:19;;;829:10;;820:19;816:119;;;873:5;864;:14;860:59;;;887:1;-1:-1:-1;880:8:3;;-1:-1:-1;880:8:3;860:59;912:7;;;:::i;:::-;;;860:59;796:3;;;:::i;:::-;;;760:186;;;-1:-1:-1;956:40:3;;-1:-1:-1;;;956:40:3;;13178:2:14;956:40:3;;;13160:21:14;13217:2;13197:18;;;13190:30;13256:24;13236:18;;;13229:52;13298:18;;956:40:3;12976:346:14;7929:273:13;1101:6:10;;1241:23;1101:6;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;10918:2:14;1233:68:10;;;10900:21:14;;;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;11048:18;;1233:68:10;10716:356:14;1233:68:10;8050:64:13::1;::::0;7999:21:::1;::::0;7985:11:::1;::::0;8058:10:::1;::::0;7999:21;;7985:11;8050:64;7985:11;8050:64;7999:21;8058:10;8050:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8031:83;;;8133:7;8125:16;;;::::0;::::1;;8170:3;8152:14;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;7929:273:13:o;3986:185:4:-;4124:39;4141:4;4147:2;4151:7;4124:39;;;;;;;;;;;;:16;:39::i;1588:244:3:-;1708:7;1749:24;1558:7;:14;;1470:110;1749:24;1741:5;:32;1733:68;;;;-1:-1:-1;;;1733:68:3;;14450:2:14;1733:68:3;;;14432:21:14;14489:2;14469:18;;;14462:30;14528:25;14508:18;;;14501:53;14571:18;;1733:68:3;14248:347:14;1733:68:3;-1:-1:-1;1819:5:3;1588:244::o;7021:104:13:-;1101:6:10;;1241:23;1101:6;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;10918:2:14;1233:68:10;;;10900:21:14;;;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;11048:18;;1233:68:10;10716:356:14;1233:68:10;7096:21:13;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;7021:104:::0;:::o;1755:326:4:-;1872:7;1897:13;1913:7;1921;1913:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;1962:19:4;1940:110;;;;-1:-1:-1;;;1940:110:4;;14802:2:14;1940:110:4;;;14784:21:14;14841:2;14821:18;;;14814:30;14880:34;14860:18;;;14853:62;14951:11;14931:18;;;14924:39;14980:19;;1940:110:4;14600:405:14;1223:21:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1229:518:4:-;1346:7;1393:19;;;1371:111;;;;-1:-1:-1;;;1371:111:4;;15212:2:14;1371:111:4;;;15194:21:14;15251:2;15231:18;;;15224:30;15290:34;15270:18;;;15263:62;15361:12;15341:18;;;15334:40;15391:19;;1371:111:4;15010:406:14;1371:111:4;1538:7;:14;1493:13;;;1563:130;1587:6;1583:1;:10;1563:130;;;1628:7;1636:1;1628:10;;;;;;;;:::i;:::-;;;;;;;;;;;;1619:19;;;1628:10;;1619:19;1615:67;;;1659:7;;;:::i;:::-;;;1615:67;1595:3;;;:::i;:::-;;;1563:130;;;-1:-1:-1;1734:5:4;;1229:518;-1:-1:-1;;;1229:518:4:o;1661:101:10:-;1101:6;;1241:23;1101:6;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;10918:2:14;1233:68:10;;;10900:21:14;;;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;11048:18;;1233:68:10;10716:356:14;1233:68:10;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1012:450:3:-;1098:16;1144:24;1162:5;1144:17;:24::i;:::-;1140:1;:28;1132:63;;;;-1:-1:-1;;;1132:63:3;;13178:2:14;1132:63:3;;;13160:21:14;13217:2;13197:18;;;13190:30;13256:24;13236:18;;;13229:52;13298:18;;1132:63:3;12976:346:14;1132:63:3;1206:18;1227:16;1237:5;1227:9;:16::i;:::-;1206:37;;1254:25;1296:10;1282:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1282:25:3;;1254:53;;1323:9;1318:111;1342:10;1338:1;:14;1318:111;;;1388:29;1408:5;1415:1;1388:19;:29::i;:::-;1374:8;1383:1;1374:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;1354:3;;;;:::i;:::-;;;;1318:111;;;-1:-1:-1;1446:8:3;1012:450;-1:-1:-1;;;1012:450:3:o;7133:101:13:-;1101:6:10;;1241:23;1101:6;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;10918:2:14;1233:68:10;;;10900:21:14;;;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;11048:18;;1233:68:10;10716:356:14;1233:68:10;7202:10:13::1;:24:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;7133:101::o;7246:164::-;1101:6:10;;1241:23;1101:6;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;10918:2:14;1233:68:10;;;10900:21:14;;;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;11048:18;;1233:68:10;10716:356:14;1233:68:10;7348:25:13::1;:54:::0;7246:164::o;6685:90::-;1101:6:10;;1241:23;1101:6;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;10918:2:14;1233:68:10;;;10900:21:14;;;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;11048:18;;1233:68:10;10716:356:14;1233:68:10;6750:5:13::1;:17:::0;6685:90::o;3849:637::-;1744:1:11;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:11;;15623:2:14;2317:63:11;;;15605:21:14;15662:2;15642:18;;;15635:30;15701:33;15681:18;;;15674:61;15752:18;;2317:63:11;15421:355:14;2317:63:11;1744:1;2455:7;:18;3953:25:13::1;::::0;3935:15:::1;:43;3927:83;;;::::0;-1:-1:-1;;;3927:83:13;;15983:2:14;3927:83:13::1;::::0;::::1;15965:21:14::0;16022:2;16002:18;;;15995:30;16061:29;16041:18;;;16034:57;16108:18;;3927:83:13::1;15781:351:14::0;3927:83:13::1;4033:7;:14:::0;4067:10:::1;::::0;::::1;;4066:11;4058:35;;;::::0;-1:-1:-1;;;4058:35:13;;16339:2:14;4058:35:13::1;::::0;::::1;16321:21:14::0;16378:2;16358:18;;;16351:30;16417:13;16397:18;;;16390:41;16448:18;;4058:35:13::1;16137:335:14::0;4058:35:13::1;4127:1;4112:12;:16;:43;;;;;4148:7;;4132:12;:23;;4112:43;4104:76;;;::::0;-1:-1:-1;;;4104:76:13;;16679:2:14;4104:76:13::1;::::0;::::1;16661:21:14::0;16718:2;16698:18;;;16691:30;16757:22;16737:18;;;16730:50;16797:18;;4104:76:13::1;16477:344:14::0;4104:76:13::1;4234:8;;4222:9;;:20;;;;:::i;:::-;4200:16;4204:12:::0;4200:1;:16:::1;:::i;:::-;4199:44;;4191:75;;;::::0;-1:-1:-1;;;4191:75:13;;17158:2:14;4191:75:13::1;::::0;::::1;17140:21:14::0;17197:2;17177:18;;;17170:30;17236:20;17216:18;;;17209:48;17274:18;;4191:75:13::1;16956:342:14::0;4191:75:13::1;4306:12;4298:5;;:20;;;;:::i;:::-;4285:9;:33;;4277:60;;;::::0;-1:-1:-1;;;4277:60:13;;17738:2:14;4277:60:13::1;::::0;::::1;17720:21:14::0;17777:2;17757:18;;;17750:30;17816:16;17796:18;;;17789:44;17850:18;;4277:60:13::1;17536:338:14::0;4277:60:13::1;4363:9;4358:102;4382:12;4378:1;:16;4358:102;;;4416:32;4426:10;4438:5;4442:1:::0;4438;:5:::1;:::i;:::-;4416:32;;;;;;;;;;;::::0;:9:::1;:32::i;:::-;4396:3;::::0;::::1;:::i;:::-;;;4358:102;;;-1:-1:-1::0;;1701:1:11;2628:7;:22;-1:-1:-1;3849:637:13:o;2197:104:4:-;2253:13;2286:7;2279:14;;;;;:::i;7718:121:13:-;7765:7;7681:21;7576:14;;7792:39;;;;:::i;:::-;7785:46;;7718:121;:::o;763:95:4:-;807:16;843:7;836:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;763:95;:::o;3045:327::-;3180:24;;;719:10:1;3180:24:4;;3172:62;;;;-1:-1:-1;;;3172:62:4;;18081:2:14;3172:62:4;;;18063:21:14;18120:2;18100:18;;;18093:30;18159:27;18139:18;;;18132:55;18204:18;;3172:62:4;17879:349:14;3172:62:4;719:10:1;3247:32:4;;;;:18;:32;;;;;;;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;3316:48;;586:41:14;;;3247:42:4;;719:10:1;3316:48:4;;559:18:14;3316:48:4;;;;;;;3045:327;;:::o;4179:365::-;4368:41;719:10:1;4401:7:4;4368:18;:41::i;:::-;4346:140;;;;-1:-1:-1;;;4346:140:4;;12760:2:14;4346:140:4;;;12742:21:14;12799:2;12779:18;;;12772:30;12838:34;12818:18;;;12811:62;12909:19;12889:18;;;12882:47;12946:19;;4346:140:4;12558:413:14;4346:140:4;4497:39;4511:4;4517:2;4521:7;4530:5;4497:13;:39::i;:::-;4179:365;;;;:::o;5466:864:13:-;1101:6:10;;1241:23;1101:6;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;10918:2:14;1233:68:10;;;10900:21:14;;;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;11048:18;;1233:68:10;10716:356:14;1233:68:10;5580:35:13;;::::1;5572:99;;;::::0;-1:-1:-1;;;5572:99:13;;18435:2:14;5572:99:13::1;::::0;::::1;18417:21:14::0;18474:2;18454:18;;;18447:30;18513:34;18493:18;;;18486:62;18584:21;18564:18;;;18557:49;18623:19;;5572:99:13::1;18233:415:14::0;5572:99:13::1;5730:7;:14:::0;5682:21:::1;::::0;;5755:101:::1;5775:19:::0;;::::1;5755:101;;;5833:8;;5842:1;5833:11;;;;;;;:::i;:::-;;;;;;;5816:28;;;;;:::i;:::-;::::0;-1:-1:-1;5796:3:13::1;::::0;::::1;:::i;:::-;;;5755:101;;;-1:-1:-1::0;5895:9:13::1;::::0;5874:17:::1;5878:13:::0;5874:1;:17:::1;:::i;:::-;:30;;5866:61;;;::::0;-1:-1:-1;;;5866:61:13;;17158:2:14;5866:61:13::1;::::0;::::1;17140:21:14::0;17197:2;17177:18;;;17170:30;17236:20;17216:18;;;17209:48;17274:18;;5866:61:13::1;16956:342:14::0;5866:61:13::1;5963:8;;5946:13;:25;;5938:58;;;::::0;-1:-1:-1;;;5938:58:13;;18855:2:14;5938:58:13::1;::::0;::::1;18837:21:14::0;18894:2;18874:18;;;18867:30;18933:22;18913:18;;;18906:50;18973:18;;5938:58:13::1;18653:344:14::0;5938:58:13::1;6065:13;6053:8;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;6091:20:13::1;::::0;-1:-1:-1;6091:20:13;;-1:-1:-1;6122:182:13::1;6142:20:::0;;::::1;6122:182;;;6189:9;6184:109;6208:8;;6217:1;6208:11;;;;;;;:::i;:::-;;;;;;;6204:1;:15;6184:109;;;6245:32;6255:9;;6265:1;6255:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6269:3:::0;::::1;::::0;::::1;:::i;:::-;;;6245:32;;;;;;;;;;;::::0;:9:::1;:32::i;:::-;6221:3;::::0;::::1;:::i;:::-;;;6184:109;;;-1:-1:-1::0;6164:3:13::1;::::0;::::1;:::i;:::-;;;6122:182;;;-1:-1:-1::0;;;;;;;5466:864:13:o;6338:339::-;6411:13;6445:16;6453:7;6445;:16::i;:::-;6437:62;;;;-1:-1:-1;;;6437:62:13;;19204:2:14;6437:62:13;;;19186:21:14;19243:2;19223:18;;;19216:30;19282:34;19262:18;;;19255:62;19353:3;19333:18;;;19326:31;19374:19;;6437:62:13;19002:397:14;6437:62:13;6510:28;6541:10;:8;:10::i;:::-;6510:41;;6600:1;6575:14;6569:28;:32;:100;;;;;;;;;;;;;;;;;6628:14;6644:18;:7;:16;:18::i;:::-;6611:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6569:100;6562:107;6338:339;-1:-1:-1;;;6338:339:13:o;8303:402::-;8516:20;;8560:28;;;;;8516:20;1797:55:14;;;8560:28:13;;;1779:74:14;8392:4:13;;8516:20;;;8552:49;;;;8516:20;;8560:21;;1752:18:14;;8560:28:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8552:49;;;8548:93;;;8625:4;8618:11;;;;;8548:93;3551:25:4;;;;3522:4;3551:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;8658:39:13;8651:46;8303:402;-1:-1:-1;;;;8303:402:13:o;1911:198:10:-;1101:6;;1241:23;1101:6;719:10:1;1241:23:10;1233:68;;;;-1:-1:-1;;;1233:68:10;;10918:2:14;1233:68:10;;;10900:21:14;;;10937:18;;;10930:30;10996:34;10976:18;;;10969:62;11048:18;;1233:68:10;10716:356:14;1233:68:10;1999:22:::1;::::0;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:10;;20366:2:14;1991:73:10::1;::::0;::::1;20348:21:14::0;20405:2;20385:18;;;20378:30;20444:34;20424:18;;;20417:62;20515:8;20495:18;;;20488:36;20541:19;;1991:73:10::1;20164:402:14::0;1991:73:10::1;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;4520:898:13:-;1744:1:11;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:11;;15623:2:14;2317:63:11;;;15605:21:14;15662:2;15642:18;;;15635:30;15701:33;15681:18;;;15674:61;15752:18;;2317:63:11;15421:355:14;2317:63:11;1744:1;2455:7;:18;1325:10:13::1;4639:15;:38;4631:71;;;::::0;-1:-1:-1;;;4631:71:13;;20773:2:14;4631:71:13::1;::::0;::::1;20755:21:14::0;20812:2;20792:18;;;20785:30;20851:22;20831:18;;;20824:50;20891:18;;4631:71:13::1;20571:344:14::0;4631:71:13::1;4725:7;:14:::0;4759:10:::1;::::0;::::1;;4758:11;4750:35;;;::::0;-1:-1:-1;;;4750:35:13;;16339:2:14;4750:35:13::1;::::0;::::1;16321:21:14::0;16378:2;16358:18;;;16351:30;16417:13;16397:18;;;16390:41;16448:18;;4750:35:13::1;16137:335:14::0;4750:35:13::1;4819:1;4804:12;:16;:43;;;;;4840:7;;4824:12;:23;;4804:43;4796:76;;;::::0;-1:-1:-1;;;4796:76:13;;16679:2:14;4796:76:13::1;::::0;::::1;16661:21:14::0;16718:2;16698:18;;;16691:30;16757:22;16737:18;;;16730:50;16797:18;;4796:76:13::1;16477:344:14::0;4796:76:13::1;4926:8;;4914:9;;:20;;;;:::i;:::-;4892:16;4896:12:::0;4892:1;:16:::1;:::i;:::-;4891:44;;4883:75;;;::::0;-1:-1:-1;;;4883:75:13;;17158:2:14;4883:75:13::1;::::0;::::1;17140:21:14::0;17197:2;17177:18;;;17170:30;17236:20;17216:18;;;17209:48;17274:18;;4883:75:13::1;16956:342:14::0;4883:75:13::1;4998:12;4990:5;;:20;;;;:::i;:::-;4977:9;:33;;4969:60;;;::::0;-1:-1:-1;;;4969:60:13;;17738:2:14;4969:60:13::1;::::0;::::1;17720:21:14::0;17777:2;17757:18;;;17750:30;17816:16;17796:18;;;17789:44;17850:18;;4969:60:13::1;17536:338:14::0;4969:60:13::1;5097:7;::::0;5067:10:::1;5048:30;::::0;;;:18:::1;:30;::::0;;;;;:45:::1;::::0;5081:12;;5048:45:::1;:::i;:::-;:56;;5040:97;;;::::0;-1:-1:-1;;;5040:97:13;;21122:2:14;5040:97:13::1;::::0;::::1;21104:21:14::0;21161:2;21141:18;;;21134:30;21200;21180:18;;;21173:58;21248:18;;5040:97:13::1;20920:352:14::0;5040:97:13::1;5156:36;5170:10;5182:9;5156:13;:36::i;:::-;5148:72;;;::::0;-1:-1:-1;;;5148:72:13;;21479:2:14;5148:72:13::1;::::0;::::1;21461:21:14::0;21518:2;21498:18;;;21491:30;21557:25;21537:18;;;21530:53;21600:18;;5148:72:13::1;21277:347:14::0;5148:72:13::1;5252:10;5233:30;::::0;;;:18:::1;:30;::::0;;;;:46;;5267:12;;5233:30;:46:::1;::::0;5267:12;;5233:46:::1;:::i;:::-;::::0;;;-1:-1:-1;5295:9:13::1;::::0;-1:-1:-1;5290:102:13::1;5314:12;5310:1;:16;5290:102;;;5348:32;5358:10;5370:5;5374:1:::0;5370;:5:::1;:::i;5348:32::-;5328:3;::::0;::::1;:::i;:::-;;;5290:102;;;-1:-1:-1::0;;1701:1:11;2628:7;:22;-1:-1:-1;;4520:898:13:o;866:355:4:-;1013:4;1055:40;;;1070:25;1055:40;;:105;;-1:-1:-1;1112:48:4;;;1127:33;1112:48;1055:105;:158;;;-1:-1:-1;952:25:2;937:40;;;;1177:36:4;829:155:2;4912::4;5011:7;:14;4977:4;;5001:24;;:58;;;;;5057:1;5029:30;;:7;5037;5029:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;:30;;4994:65;4912:155;-1:-1:-1;;4912:155:4:o;7240:175::-;7315:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;7369;7315;7369:15;:24::i;:::-;7360:47;;;;;;;;;;;;7240:175;;:::o;3237:248:13:-;3338:7;3359:9;3370;3381:7;3392:26;3407:10;3392:14;:26::i;:::-;3436:41;;;;;;;;;;;;21856:25:14;;;21929:4;21917:17;;21897:18;;;21890:45;;;;21951:18;;;21944:34;;;21994:18;;;21987:34;;;3358:60:13;;-1:-1:-1;3358:60:13;;-1:-1:-1;3358:60:13;-1:-1:-1;3436:41:13;;21828:19:14;;3436:41:13;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3436:41:13;;;;;;3237:248;-1:-1:-1;;;;;;;3237:248:13:o;5075:453:4:-;5204:4;5248:16;5256:7;5248;:16::i;:::-;5226:110;;;;-1:-1:-1;;;5226:110:4;;22234:2:14;5226:110:4;;;22216:21:14;22273:2;22253:18;;;22246:30;22312:34;22292:18;;;22285:62;22383:14;22363:18;;;22356:42;22415:19;;5226:110:4;22032:408:14;5226:110:4;5347:13;5363:24;5379:7;5363:15;:24::i;:::-;5347:40;;5417:5;5406:16;;:7;:16;;;:64;;;;5463:7;5439:31;;:20;5451:7;5439:11;:20::i;:::-;:31;;;5406:64;:113;;;;5487:32;5504:5;5511:7;5487:16;:32::i;6678:554::-;6852:4;6824:32;;:24;6840:7;6824:15;:24::i;:::-;:32;;;6802:123;;;;-1:-1:-1;;;6802:123:4;;22647:2:14;6802:123:4;;;22629:21:14;22686:2;22666:18;;;22659:30;22725:34;22705:18;;;22698:62;22796:11;22776:18;;;22769:39;22825:19;;6802:123:4;22445:405:14;6802:123:4;6944:16;;;6936:65;;;;-1:-1:-1;;;6936:65:4;;23057:2:14;6936:65:4;;;23039:21:14;23096:2;23076:18;;;23069:30;23135:34;23115:18;;;23108:62;23206:6;23186:18;;;23179:34;23230:19;;6936:65:4;22855:400:14;6936:65:4;7118:29;7135:1;7139:7;7118:8;:29::i;:::-;7177:2;7158:7;7166;7158:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;;;;;;;;;;7197:27;;7216:7;;7197:27;;;;;;;;;;7158:16;7197:27;6678:554;;;:::o;2263:187:10:-;2355:6;;;;2371:17;;;;;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;5654:321:4:-;5784:18;5790:2;5794:7;5784:5;:18::i;:::-;5835:54;5866:1;5870:2;5874:7;5883:5;5835:22;:54::i;:::-;5813:154;;;;-1:-1:-1;;;5813:154:4;;23462:2:14;5813:154:4;;;23444:21:14;23501:2;23481:18;;;23474:30;23540:34;23520:18;;;23513:62;23611:20;23591:18;;;23584:48;23649:19;;5813:154:4;23260:414:14;4552:352:4;4709:28;4719:4;4725:2;4729:7;4709:9;:28::i;:::-;4770:48;4793:4;4799:2;4803:7;4812:5;4770:22;:48::i;:::-;4748:148;;;;-1:-1:-1;;;4748:148:4;;23462:2:14;4748:148:4;;;23444:21:14;23501:2;23481:18;;;23474:30;23540:34;23520:18;;;23513:62;23611:20;23591:18;;;23584:48;23649:19;;4748:148:4;23260:414:14;2314:99:13;2365:13;2398:7;2391:14;;;;;:::i;328:703:12:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:12;;;;;;;;;;;;;;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:12;;-1:-1:-1;773:2:12;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:12;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:12;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;972:11:12;981:2;972:11;;:::i;:::-;;;844:150;;3497:321:13;3561:9;3572;3583:7;3611:3;:10;3625:2;3611:16;3603:53;;;;-1:-1:-1;;;3603:53:13;;24312:2:14;3603:53:13;;;24294:21:14;24351:2;24331:18;;;24324:30;24390:26;24370:18;;;24363:54;24434:18;;3603:53:13;24110:348:14;3603:53:13;-1:-1:-1;;;3711:2:13;3702:12;;3696:19;3749:2;3740:12;;3734:19;3795:2;3786:12;;;3780:19;3696;;3777:1;3772:28;;;;;3497:321::o;5983:346:4:-;6063:16;;;6055:61;;;;-1:-1:-1;;;6055:61:4;;24665:2:14;6055:61:4;;;24647:21:14;;;24684:18;;;24677:30;24743:34;24723:18;;;24716:62;24795:18;;6055:61:4;24463:356:14;6055:61:4;6136:16;6144:7;6136;:16::i;:::-;6135:17;6127:58;;;;-1:-1:-1;;;6127:58:4;;25026:2:14;6127:58:4;;;25008:21:14;25065:2;25045:18;;;25038:30;25104;25084:18;;;25077:58;25152:18;;6127:58:4;24824:352:14;6127:58:4;6254:7;:16;;;;;;;-1:-1:-1;6254:16:4;;;;;;;;;;;;;;;;;;6288:33;;6313:7;;-1:-1:-1;6288:33:4;;-1:-1:-1;;6288:33:4;5983:346;;:::o;7423:980::-;7578:4;7599:13;;;1087:20:0;1133:8;7595:801:4;;7652:175;;;;;:36;;;;;;:175;;719:10:1;;7746:4:4;;7773:7;;7803:5;;7652:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7652:175:4;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7631:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8010:13:4;;8006:320;;8053:108;;-1:-1:-1;;;8053:108:4;;23462:2:14;8053:108:4;;;23444:21:14;23501:2;23481:18;;;23474:30;23540:34;23520:18;;;23513:62;23611:20;23591:18;;;23584:48;23649:19;;8053:108:4;23260:414:14;8006:320:4;8276:6;8270:13;8261:6;8257:2;8253:15;8246:38;7631:710;7891:51;;7901:41;7891:51;;-1:-1:-1;7884:58:4;;7595:801;-1:-1:-1;8380:4:4;7423:980;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:177:14;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:258::-;710:1;720:113;734:6;731:1;728:13;720:113;;;810:11;;;804:18;791:11;;;784:39;756:2;749:10;720:113;;;851:6;848:1;845:13;842:48;;;-1:-1:-1;;886:1:14;868:16;;861:27;638:258::o;901:317::-;943:3;981:5;975:12;1008:6;1003:3;996:19;1024:63;1080:6;1073:4;1068:3;1064:14;1057:4;1050:5;1046:16;1024:63;:::i;:::-;1132:2;1120:15;1137:66;1116:88;1107:98;;;;1207:4;1103:109;;901:317;-1:-1:-1;;901:317:14:o;1223:220::-;1372:2;1361:9;1354:21;1335:4;1392:45;1433:2;1422:9;1418:18;1410:6;1392:45;:::i;1448:180::-;1507:6;1560:2;1548:9;1539:7;1535:23;1531:32;1528:52;;;1576:1;1573;1566:12;1528:52;-1:-1:-1;1599:23:14;;1448:180;-1:-1:-1;1448:180:14:o;1864:154::-;1950:42;1943:5;1939:54;1932:5;1929:65;1919:93;;2008:1;2005;1998:12;2023:315;2091:6;2099;2152:2;2140:9;2131:7;2127:23;2123:32;2120:52;;;2168:1;2165;2158:12;2120:52;2207:9;2194:23;2226:31;2251:5;2226:31;:::i;:::-;2276:5;2328:2;2313:18;;;;2300:32;;-1:-1:-1;;;2023:315:14:o;2525:184::-;2577:77;2574:1;2567:88;2674:4;2671:1;2664:15;2698:4;2695:1;2688:15;2714:690;2778:5;2808:18;2849:2;2841:6;2838:14;2835:40;;;2855:18;;:::i;:::-;2989:2;2983:9;3055:2;3043:15;;2894:66;3039:24;;;3065:2;3035:33;3031:42;3019:55;;;3089:18;;;3109:22;;;3086:46;3083:72;;;3135:18;;:::i;:::-;3175:10;3171:2;3164:22;3204:6;3195:15;;3234:6;3226;3219:22;3274:3;3265:6;3260:3;3256:16;3253:25;3250:45;;;3291:1;3288;3281:12;3250:45;3341:6;3336:3;3329:4;3321:6;3317:17;3304:44;3396:1;3389:4;3380:6;3372;3368:19;3364:30;3357:41;;;;2714:690;;;;;:::o;3409:220::-;3451:5;3504:3;3497:4;3489:6;3485:17;3481:27;3471:55;;3522:1;3519;3512:12;3471:55;3544:79;3619:3;3610:6;3597:20;3590:4;3582:6;3578:17;3544:79;:::i;3634:455::-;3711:6;3719;3772:2;3760:9;3751:7;3747:23;3743:32;3740:52;;;3788:1;3785;3778:12;3740:52;3827:9;3814:23;3846:31;3871:5;3846:31;:::i;:::-;3896:5;-1:-1:-1;3952:2:14;3937:18;;3924:32;3979:18;3968:30;;3965:50;;;4011:1;4008;4001:12;3965:50;4034:49;4075:7;4066:6;4055:9;4051:22;4034:49;:::i;:::-;4024:59;;;3634:455;;;;;:::o;4094:456::-;4171:6;4179;4187;4240:2;4228:9;4219:7;4215:23;4211:32;4208:52;;;4256:1;4253;4246:12;4208:52;4295:9;4282:23;4314:31;4339:5;4314:31;:::i;:::-;4364:5;-1:-1:-1;4421:2:14;4406:18;;4393:32;4434:33;4393:32;4434:33;:::i;:::-;4094:456;;4486:7;;-1:-1:-1;;;4540:2:14;4525:18;;;;4512:32;;4094:456::o;4555:450::-;4624:6;4677:2;4665:9;4656:7;4652:23;4648:32;4645:52;;;4693:1;4690;4683:12;4645:52;4733:9;4720:23;4766:18;4758:6;4755:30;4752:50;;;4798:1;4795;4788:12;4752:50;4821:22;;4874:4;4866:13;;4862:27;-1:-1:-1;4852:55:14;;4903:1;4900;4893:12;4852:55;4926:73;4991:7;4986:2;4973:16;4968:2;4964;4960:11;4926:73;:::i;5010:247::-;5069:6;5122:2;5110:9;5101:7;5097:23;5093:32;5090:52;;;5138:1;5135;5128:12;5090:52;5177:9;5164:23;5196:31;5221:5;5196:31;:::i;5262:632::-;5433:2;5485:21;;;5555:13;;5458:18;;;5577:22;;;5404:4;;5433:2;5656:15;;;;5630:2;5615:18;;;5404:4;5699:169;5713:6;5710:1;5707:13;5699:169;;;5774:13;;5762:26;;5843:15;;;;5808:12;;;;5735:1;5728:9;5699:169;;;-1:-1:-1;5885:3:14;;5262:632;-1:-1:-1;;;;;;5262:632:14:o;5899:160::-;5964:20;;6020:13;;6013:21;6003:32;;5993:60;;6049:1;6046;6039:12;5993:60;5899:160;;;:::o;6064:180::-;6120:6;6173:2;6161:9;6152:7;6148:23;6144:32;6141:52;;;6189:1;6186;6179:12;6141:52;6212:26;6228:9;6212:26;:::i;6249:681::-;6420:2;6472:21;;;6542:13;;6445:18;;;6564:22;;;6391:4;;6420:2;6643:15;;;;6617:2;6602:18;;;6391:4;6686:218;6700:6;6697:1;6694:13;6686:218;;;6765:13;;6780:42;6761:62;6749:75;;6879:15;;;;6844:12;;;;6722:1;6715:9;6686:218;;6935:315;7000:6;7008;7061:2;7049:9;7040:7;7036:23;7032:32;7029:52;;;7077:1;7074;7067:12;7029:52;7116:9;7103:23;7135:31;7160:5;7135:31;:::i;:::-;7185:5;-1:-1:-1;7209:35:14;7240:2;7225:18;;7209:35;:::i;:::-;7199:45;;6935:315;;;;;:::o;7255:665::-;7350:6;7358;7366;7374;7427:3;7415:9;7406:7;7402:23;7398:33;7395:53;;;7444:1;7441;7434:12;7395:53;7483:9;7470:23;7502:31;7527:5;7502:31;:::i;:::-;7552:5;-1:-1:-1;7609:2:14;7594:18;;7581:32;7622:33;7581:32;7622:33;:::i;:::-;7674:7;-1:-1:-1;7728:2:14;7713:18;;7700:32;;-1:-1:-1;7783:2:14;7768:18;;7755:32;7810:18;7799:30;;7796:50;;;7842:1;7839;7832:12;7796:50;7865:49;7906:7;7897:6;7886:9;7882:22;7865:49;:::i;:::-;7855:59;;;7255:665;;;;;;;:::o;7925:367::-;7988:8;7998:6;8052:3;8045:4;8037:6;8033:17;8029:27;8019:55;;8070:1;8067;8060:12;8019:55;-1:-1:-1;8093:20:14;;8136:18;8125:30;;8122:50;;;8168:1;8165;8158:12;8122:50;8205:4;8197:6;8193:17;8181:29;;8265:3;8258:4;8248:6;8245:1;8241:14;8233:6;8229:27;8225:38;8222:47;8219:67;;;8282:1;8279;8272:12;8219:67;7925:367;;;;;:::o;8297:773::-;8419:6;8427;8435;8443;8496:2;8484:9;8475:7;8471:23;8467:32;8464:52;;;8512:1;8509;8502:12;8464:52;8552:9;8539:23;8581:18;8622:2;8614:6;8611:14;8608:34;;;8638:1;8635;8628:12;8608:34;8677:70;8739:7;8730:6;8719:9;8715:22;8677:70;:::i;:::-;8766:8;;-1:-1:-1;8651:96:14;-1:-1:-1;8854:2:14;8839:18;;8826:32;;-1:-1:-1;8870:16:14;;;8867:36;;;8899:1;8896;8889:12;8867:36;;8938:72;9002:7;8991:8;8980:9;8976:24;8938:72;:::i;:::-;8297:773;;;;-1:-1:-1;9029:8:14;-1:-1:-1;;;;8297:773:14:o;9075:388::-;9143:6;9151;9204:2;9192:9;9183:7;9179:23;9175:32;9172:52;;;9220:1;9217;9210:12;9172:52;9259:9;9246:23;9278:31;9303:5;9278:31;:::i;:::-;9328:5;-1:-1:-1;9385:2:14;9370:18;;9357:32;9398:33;9357:32;9398:33;:::i;:::-;9450:7;9440:17;;;9075:388;;;;;:::o;9468:::-;9545:6;9553;9606:2;9594:9;9585:7;9581:23;9577:32;9574:52;;;9622:1;9619;9612:12;9574:52;9658:9;9645:23;9635:33;;9719:2;9708:9;9704:18;9691:32;9746:18;9738:6;9735:30;9732:50;;;9778:1;9775;9768:12;9861:437;9940:1;9936:12;;;;9983;;;10004:61;;10058:4;10050:6;10046:17;10036:27;;10004:61;10111:2;10103:6;10100:14;10080:18;10077:38;10074:218;;;10148:77;10145:1;10138:88;10249:4;10246:1;10239:15;10277:4;10274:1;10267:15;10074:218;;9861:437;;;:::o;13327:184::-;13379:77;13376:1;13369:88;13476:4;13473:1;13466:15;13500:4;13497:1;13490:15;13516:184;13568:77;13565:1;13558:88;13665:4;13662:1;13655:15;13689:4;13686:1;13679:15;13705:195;13744:3;13775:66;13768:5;13765:77;13762:103;;;13845:18;;:::i;:::-;-1:-1:-1;13892:1:14;13881:13;;13705:195::o;14115:128::-;14155:3;14186:1;14182:6;14179:1;14176:13;14173:39;;;14192:18;;:::i;:::-;-1:-1:-1;14228:9:14;;14115:128::o;16826:125::-;16866:4;16894:1;16891;16888:8;16885:34;;;16899:18;;:::i;:::-;-1:-1:-1;16936:9:14;;16826:125::o;17303:228::-;17343:7;17469:1;17401:66;17397:74;17394:1;17391:81;17386:1;17379:9;17372:17;17368:105;17365:131;;;17476:18;;:::i;:::-;-1:-1:-1;17516:9:14;;17303:228::o;19404:470::-;19583:3;19621:6;19615:13;19637:53;19683:6;19678:3;19671:4;19663:6;19659:17;19637:53;:::i;:::-;19753:13;;19712:16;;;;19775:57;19753:13;19712:16;19809:4;19797:17;;19775:57;:::i;:::-;19848:20;;19404:470;-1:-1:-1;;;;19404:470:14:o;19879:280::-;19978:6;20031:2;20019:9;20010:7;20006:23;20002:32;19999:52;;;20047:1;20044;20037:12;19999:52;20079:9;20073:16;20098:31;20123:5;20098:31;:::i;23679:184::-;23731:77;23728:1;23721:88;23828:4;23825:1;23818:15;23852:4;23849:1;23842:15;23868:120;23908:1;23934;23924:35;;23939:18;;:::i;:::-;-1:-1:-1;23973:9:14;;23868:120::o;23993:112::-;24025:1;24051;24041:35;;24056:18;;:::i;:::-;-1:-1:-1;24090:9:14;;23993:112::o;25181:512::-;25375:4;25404:42;25485:2;25477:6;25473:15;25462:9;25455:34;25537:2;25529:6;25525:15;25520:2;25509:9;25505:18;25498:43;;25577:6;25572:2;25561:9;25557:18;25550:34;25620:3;25615:2;25604:9;25600:18;25593:31;25641:46;25682:3;25671:9;25667:19;25659:6;25641:46;:::i;:::-;25633:54;25181:512;-1:-1:-1;;;;;;25181:512:14:o;25698:249::-;25767:6;25820:2;25808:9;25799:7;25795:23;25791:32;25788:52;;;25836:1;25833;25826:12;25788:52;25868:9;25862:16;25887:30;25911:5;25887:30;:::i
Swarm Source
ipfs://1e8a8ab5b717d32ef48ab76170f593b2d69653b6d4ae510458eab8f9665b8488
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.