More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,591 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Listing | 17800527 | 553 days ago | IN | 0 ETH | 0.00366797 | ||||
Create Listing | 16860068 | 686 days ago | IN | 0 ETH | 0.00176779 | ||||
Create Listing | 16850092 | 687 days ago | IN | 0 ETH | 0.00394377 | ||||
Set Min Offer Pe... | 16821690 | 691 days ago | IN | 0 ETH | 0.00085192 | ||||
Set Min List Pri... | 16821689 | 691 days ago | IN | 0 ETH | 0.00075753 | ||||
Create Listing | 16610940 | 721 days ago | IN | 0 ETH | 0.00213926 | ||||
Create Listing | 16604532 | 722 days ago | IN | 0 ETH | 0.00256416 | ||||
Create Listing | 16604522 | 722 days ago | IN | 0 ETH | 0.0023794 | ||||
Create Listing | 16550500 | 729 days ago | IN | 0 ETH | 0.0058659 | ||||
Create Listing | 16537031 | 731 days ago | IN | 0 ETH | 0.00501666 | ||||
Claim Refund On ... | 16535957 | 731 days ago | IN | 0 ETH | 0.00266731 | ||||
Claim Refund On ... | 16482414 | 739 days ago | IN | 0 ETH | 0.00124447 | ||||
Create Listing | 16413605 | 748 days ago | IN | 0 ETH | 0.0028923 | ||||
Create Listing | 16401286 | 750 days ago | IN | 0 ETH | 0.00264221 | ||||
Create Listing | 16377988 | 753 days ago | IN | 0 ETH | 0.00412678 | ||||
Create Listing | 16357667 | 756 days ago | IN | 0 ETH | 0.00225722 | ||||
Claim Refund On ... | 16348011 | 757 days ago | IN | 0 ETH | 0.00141864 | ||||
Cancel Listing | 16328049 | 760 days ago | IN | 0 ETH | 0.00176202 | ||||
Create Listing | 16328023 | 760 days ago | IN | 0 ETH | 0.0032165 | ||||
Claim Refund On ... | 16327681 | 760 days ago | IN | 0 ETH | 0.00206085 | ||||
Create Listing | 16327587 | 760 days ago | IN | 0 ETH | 0.00302195 | ||||
Create Listing | 16327420 | 760 days ago | IN | 0 ETH | 0.00338674 | ||||
Claim Refund On ... | 16326416 | 760 days ago | IN | 0 ETH | 0.00131014 | ||||
Create Listing | 16308367 | 763 days ago | IN | 0 ETH | 0.00198928 | ||||
Claim Refund On ... | 16308360 | 763 days ago | IN | 0 ETH | 0.00133066 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15955105 | 812 days ago | 0.1425 ETH | ||||
15955105 | 812 days ago | 0.0075 ETH | ||||
15950091 | 813 days ago | 0.03166666 ETH | ||||
15950091 | 813 days ago | 0.00166666 ETH | ||||
15944906 | 814 days ago | 0.2375 ETH | ||||
15944906 | 814 days ago | 0.0125 ETH | ||||
15944898 | 814 days ago | 0.2375 ETH | ||||
15944898 | 814 days ago | 0.0125 ETH | ||||
15944842 | 814 days ago | 0.25 ETH | ||||
15943704 | 814 days ago | 0.39 ETH | ||||
15942686 | 814 days ago | 0.1425 ETH | ||||
15942686 | 814 days ago | 0.0075 ETH | ||||
15942686 | 814 days ago | 0.15 ETH | ||||
15908104 | 819 days ago | 0.26125 ETH | ||||
15908104 | 819 days ago | 0.01375 ETH | ||||
15906711 | 819 days ago | 0.323 ETH | ||||
15906711 | 819 days ago | 0.017 ETH | ||||
15836270 | 829 days ago | 0.0391875 ETH | ||||
15836270 | 829 days ago | 0.0020625 ETH | ||||
15828123 | 830 days ago | 0.23674 ETH | ||||
15828123 | 830 days ago | 0.01246 ETH | ||||
15812937 | 832 days ago | 0.0608 ETH | ||||
15812937 | 832 days ago | 0.0032 ETH | ||||
15812930 | 832 days ago | 0.07 ETH | ||||
15801696 | 834 days ago | 0.07125 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
DustPeerExchange
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 999999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.16; import '@openzeppelin/contracts/security/ReentrancyGuard.sol'; import '@openzeppelin/contracts/access/Ownable.sol'; import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol'; import './interfaces/INFT.sol'; import './interfaces/IWETH.sol'; contract DustPeerExchange is ReentrancyGuard, Ownable { using SafeERC20 for IERC20; // The Metadust ERC721 token contracts INFT public SWEEPERS; // The address of the WETH contract address public WETH; // The address of the DUST contract IERC20 public DUST; // The minimum percentage difference between the last offer amount and the current offer uint16 public minOfferIncrementPercentage; // The minimum listing and offer variables uint256 private MinListPrice; uint16 public minOfferPercent; // Restriction Bools bool public isPaused; bool public allListersAllowed = true; bool public allBuyersAllowed = true; bool public allOfferersAllowed = true; // The listing info struct Listing { // The address of the Lister address payable lister; // The time that the listing started uint32 startTime; // The time that the listing is scheduled to end uint32 endTime; // The current highest offer amount uint256 dustAmount; // The Requested ETH for the listing uint256 requestedEth; // The current offer below the requested ETH amount uint256 currentOffer; // The previous offer uint256 previousOffer; // The active offerId uint32 activeOfferId; // The address of the current highest offer address payable offerer; // The number of offers placed uint16 numberOffers; // The statuses of the listing bool settled; bool canceled; bool failed; } mapping(uint32 => Listing) public listingId; uint32 private currentId = 1; uint32 private currentOfferId = 1; mapping(uint32 => uint32[]) public allListingOfferIds; struct Offers { address offerer; uint8 offerStatus; // 1 = active, 2 = outoffer, 3 = canceled, 4 = accepted uint32 listingId; uint256 offerAmount; } mapping(uint32 => Offers) public offerId; mapping(address => uint32[]) userOffers; uint32 public activeListingCount; uint16 public tax; address payable public taxWallet; modifier holdsNFTLister() { require(allListersAllowed || SWEEPERS.balanceOf(msg.sender) > 0, "Must hold a Metadust NFT"); _; } modifier holdsNFTBuyer() { require(allBuyersAllowed || SWEEPERS.balanceOf(msg.sender) > 0, "Must hold a Metadust NFT"); _; } modifier holdsNFTOfferer() { require(allOfferersAllowed || SWEEPERS.balanceOf(msg.sender) > 0, "Must hold a Metadust NFT"); _; } modifier notPaused() { require(!isPaused, "Contract is Paused to new listings"); _; } event ListingCreated(uint256 indexed ListingId, uint256 startTime, uint256 endTime, uint256 DustAmount, uint256 EthPrice); event ListingEdited(uint256 indexed ListingId, uint256 EthPrice, uint256 endTime); event OfferPlaced(uint256 indexed OfferId, uint256 indexed ListingId, address sender, uint256 value); event OfferCanceled(uint256 indexed OfferId, uint256 indexed ListingId, uint256 TimeStamp); event ListingSettled(uint256 indexed ListingId, address Buyer, address Seller, uint256 FinalAmount, uint256 TaxAmount, bool wasOffer, uint256 listedAmount); event ListingTimeBufferUpdated(uint256 timeBuffer); event ListingMinOfferIncrementPercentageUpdated(uint256 minOfferIncrementPercentage); event ListingRefunded(uint256 indexed ListingId, address Lister, uint256 DustRefundAmount, address Offerer, uint256 OffererRefundAmount, address Caller); event ListingCanceled(uint256 indexed ListingId, address Lister, uint256 DustAmount, uint256 TimeStamp); event Received(address indexed From, uint256 Amount); /** * @notice Initialize the listing house and base contracts, * populate configuration values, and pause the contract. * @dev This function can only be called once. */ constructor( address _dust, address _weth, address _sweepers, uint16 _minOfferIncrementPercentage, uint256 _minListPrice, uint16 _minOfferPercent, address payable _taxWallet, uint16 _tax ) { DUST = IERC20(_dust); WETH = _weth; SWEEPERS = INFT(_sweepers); minOfferIncrementPercentage = _minOfferIncrementPercentage; MinListPrice = _minListPrice; minOfferPercent = _minOfferPercent; taxWallet = _taxWallet; tax = _tax; } /** * @notice Set the listing minimum offer increment percentage. * @dev Only callable by the owner. */ function setMinOfferIncrementPercentage(uint16 _minOfferIncrementPercentage) external onlyOwner { minOfferIncrementPercentage = _minOfferIncrementPercentage; emit ListingMinOfferIncrementPercentageUpdated(_minOfferIncrementPercentage); } function setPaused(bool _flag) external onlyOwner { isPaused = _flag; } function setListersAllowed(bool _flag) external onlyOwner { allListersAllowed = _flag; } function setBuyersAllowed(bool _flag) external onlyOwner { allBuyersAllowed = _flag; } function setOfferersAllowed(bool _flag) external onlyOwner { allOfferersAllowed = _flag; } function setTax(address payable _taxWallet, uint16 _tax) external onlyOwner { taxWallet = _taxWallet; tax = _tax; } function setMinListPrice(uint256 _minListPrice) external onlyOwner { MinListPrice = _minListPrice; } function setMinOfferPercent(uint16 _percent) external onlyOwner { minOfferPercent = _percent; } function createListing(uint256 _dustAmount, uint256 _requestedEth, uint32 _endTime) external notPaused holdsNFTLister nonReentrant { require((_requestedEth * 10**9) / _dustAmount >= minListPrice(), "Listing Price too low"); uint32 startTime = uint32(block.timestamp); uint32 _listingId = currentId++; listingId[_listingId].lister = payable(msg.sender); listingId[_listingId].dustAmount = _dustAmount; listingId[_listingId].requestedEth = _requestedEth; listingId[_listingId].startTime = startTime; listingId[_listingId].endTime = _endTime; activeListingCount++; DUST.safeTransferFrom(msg.sender, address(this), _dustAmount); emit ListingCreated(_listingId, startTime, _endTime, _dustAmount, _requestedEth); } function cancelListing(uint32 _id) external nonReentrant { require(msg.sender == listingId[_id].lister, "Only Lister can cancel"); require(listingStatus(_id) == 1, "Listing is not active"); listingId[_id].canceled = true; if(listingId[_id].offerer != address(0) && listingId[_id].currentOffer > 0) { _safeTransferETHWithFallback(listingId[_id].offerer, listingId[_id].currentOffer); listingId[_id].offerer = payable(address(0)); listingId[_id].currentOffer = 0; offerId[listingId[_id].activeOfferId].offerStatus = 3; } activeListingCount--; DUST.safeTransfer(listingId[_id].lister, listingId[_id].dustAmount); emit ListingCanceled(_id, listingId[_id].lister, listingId[_id].dustAmount, block.timestamp); emit ListingRefunded(_id, listingId[_id].lister, listingId[_id].dustAmount, listingId[_id].offerer, listingId[_id].currentOffer, msg.sender); } function editListingPrice(uint32 _id, uint256 _requestedEth) external notPaused nonReentrant { require(msg.sender == listingId[_id].lister, "Only Lister can edit"); require(listingStatus(_id) == 1, "Listing is not active"); require((_requestedEth * 10**9) / listingId[_id].dustAmount >= minListPrice(), "Listing Price too low"); require(_requestedEth > listingId[_id].currentOffer, "Has offer higher than new price"); listingId[_id].requestedEth = _requestedEth; emit ListingEdited(_id, _requestedEth, listingId[_id].endTime); } function editListingEndTime(uint32 _id, uint32 _newEndTime) external notPaused nonReentrant { require(msg.sender == listingId[_id].lister, "Only Lister can edit"); require(listingStatus(_id) == 1, "Listing is not active"); require(_newEndTime > block.timestamp, "End time already passed"); listingId[_id].endTime = _newEndTime; emit ListingEdited(_id, listingId[_id].requestedEth, _newEndTime); } /** * @notice Create a offer for DUST, with a given ETH amount. * @dev This contract only accepts payment in ETH. */ function createOffer(uint32 _id) external payable holdsNFTOfferer nonReentrant { require(listingStatus(_id) == 1, 'Dust Listing is not Active'); require(block.timestamp < listingId[_id].endTime, 'Listing expired'); require(msg.value <= listingId[_id].requestedEth, 'Must offer less than requestedEth'); require(msg.value >= listingId[_id].requestedEth * minOfferPercent / 10000, 'Must offer more than minimum offer amount'); require( msg.value >= listingId[_id].currentOffer + ((listingId[_id].currentOffer * minOfferIncrementPercentage) / 10000), 'Must send more than last offer by minOfferIncrementPercentage amount' ); require(msg.sender != listingId[_id].lister, 'Lister not allowed to Offer'); address payable lastOfferer = listingId[_id].offerer; uint32 _offerId = currentOfferId++; // Refund the last offerer, if applicable if (lastOfferer != address(0)) { _safeTransferETHWithFallback(lastOfferer, listingId[_id].currentOffer); offerId[listingId[_id].activeOfferId].offerStatus = 2; listingId[_id].previousOffer = listingId[_id].currentOffer; } listingId[_id].currentOffer = msg.value; listingId[_id].offerer = payable(msg.sender); listingId[_id].activeOfferId = _offerId; listingId[_id].numberOffers++; allListingOfferIds[_id].push(_offerId); offerId[_offerId].offerer = msg.sender; offerId[_offerId].offerAmount = msg.value; offerId[_offerId].listingId = _id; offerId[_offerId].offerStatus = 1; userOffers[msg.sender].push(_offerId); emit OfferPlaced(_offerId, _id, msg.sender, msg.value); } function cancelOffer(uint32 _id, uint32 _offerId) external nonReentrant { require(offerId[_offerId].offerer == msg.sender, "Caller is not Offerer"); require(offerId[_offerId].listingId == _id && listingId[_id].activeOfferId == _offerId, "IDs do not match"); require(listingStatus(_id) == 1, "Dust Listing is not Active"); require(offerId[_offerId].offerStatus == 1, "Offer is not active"); _safeTransferETHWithFallback(payable(msg.sender), offerId[_offerId].offerAmount); offerId[listingId[_id].activeOfferId].offerStatus = 3; listingId[_id].currentOffer = listingId[_id].previousOffer; listingId[_id].offerer = payable(address(0)); listingId[_id].activeOfferId = 0; emit OfferCanceled(_offerId, _id, block.timestamp); } /** * @notice Settle a listing to high offerer and paying out to the lister. */ function acceptOffer(uint32 _id) external nonReentrant { require(msg.sender == listingId[_id].lister, "Only Lister can accept offer"); require(listingStatus(_id) == 1 && !listingId[_id].settled, "Listing has already been settled or canceled"); require(block.timestamp <= listingId[_id].endTime, "Listing has expired"); require(listingId[_id].offerer != address(0), "No active Offerer"); require(offerId[listingId[_id].activeOfferId].offerStatus == 1, "Offer is not active"); listingId[_id].settled = true; activeListingCount--; uint256 taxAmount = listingId[_id].currentOffer * tax / 10000; uint256 finalEthAmount = listingId[_id].currentOffer - taxAmount; DUST.safeTransfer(listingId[_id].offerer, listingId[_id].dustAmount); _safeTransferETHWithFallback(taxWallet, taxAmount); _safeTransferETHWithFallback(listingId[_id].lister, finalEthAmount); offerId[listingId[_id].activeOfferId].offerStatus = 4; emit ListingSettled(_id, listingId[_id].offerer, listingId[_id].lister, listingId[_id].currentOffer, taxAmount, true, listingId[_id].requestedEth); } function buyNow(uint32 _id) external payable holdsNFTBuyer nonReentrant { require(listingStatus(_id) == 1 && !listingId[_id].settled, 'Listing has already been settled or canceled'); require(block.timestamp <= listingId[_id].endTime, 'Listing has expired'); require(msg.value == listingId[_id].requestedEth, 'ETH Value must be equal to listing price'); listingId[_id].settled = true; activeListingCount--; if(listingId[_id].offerer != address(0) && listingId[_id].currentOffer > 0) { _safeTransferETHWithFallback(listingId[_id].offerer, listingId[_id].currentOffer); offerId[listingId[_id].activeOfferId].offerStatus = 2; } uint256 taxAmount = listingId[_id].requestedEth * tax / 10000; uint256 finalEthAmount = listingId[_id].requestedEth - taxAmount; DUST.safeTransfer(msg.sender, listingId[_id].dustAmount); _safeTransferETHWithFallback(taxWallet, taxAmount); _safeTransferETHWithFallback(listingId[_id].lister, finalEthAmount); emit ListingSettled(_id, listingId[_id].offerer, listingId[_id].lister, listingId[_id].requestedEth, taxAmount, false, listingId[_id].requestedEth); } function claimRefundOnExpire(uint32 _id) external nonReentrant { require(msg.sender == listingId[_id].lister || msg.sender == listingId[_id].offerer || msg.sender == owner(), 'Only Lister can accept offer'); require(listingStatus(_id) == 3, 'Listing has not expired'); require(!listingId[_id].failed && !listingId[_id].canceled, 'Refund already claimed'); listingId[_id].failed = true; activeListingCount--; if(listingId[_id].offerer != address(0) && listingId[_id].currentOffer > 0) { _safeTransferETHWithFallback(listingId[_id].offerer, listingId[_id].currentOffer); listingId[_id].offerer = payable(address(0)); listingId[_id].currentOffer = 0; } DUST.safeTransfer(listingId[_id].lister, listingId[_id].dustAmount); emit ListingRefunded(_id, listingId[_id].lister, listingId[_id].dustAmount, listingId[_id].offerer, listingId[_id].currentOffer, msg.sender); } function emergencyCancelListing(uint32 _id) external nonReentrant onlyOwner { require(listingStatus(_id) == 1, "Listing is not active"); listingId[_id].canceled = true; if(listingId[_id].offerer != address(0) && listingId[_id].currentOffer > 0) { _safeTransferETHWithFallback(listingId[_id].offerer, listingId[_id].currentOffer); listingId[_id].offerer = payable(address(0)); listingId[_id].currentOffer = 0; offerId[listingId[_id].activeOfferId].offerStatus = 3; } activeListingCount--; DUST.safeTransfer(listingId[_id].lister, listingId[_id].dustAmount); emit ListingCanceled(_id, listingId[_id].lister, listingId[_id].dustAmount, block.timestamp); emit ListingRefunded(_id, listingId[_id].lister, listingId[_id].dustAmount, listingId[_id].offerer, listingId[_id].currentOffer, msg.sender); } function listingStatus(uint32 _id) public view returns (uint8) { if (listingId[_id].canceled) { return 3; // CANCELED - Lister canceled } if ((block.timestamp > listingId[_id].endTime) && !listingId[_id].settled) { return 3; // FAILED - not sold by end time } if (listingId[_id].settled) { return 2; // SUCCESS - hardcap met } if ((block.timestamp <= listingId[_id].endTime) && !listingId[_id].settled) { return 1; // ACTIVE - deposits enabled } return 0; // QUEUED - awaiting start time } function getOffersByListingId(uint32 _id) external view returns (uint32[] memory offerIds) { uint256 length = allListingOfferIds[_id].length; offerIds = new uint32[](length); for(uint i = 0; i < length; i++) { offerIds[i] = allListingOfferIds[_id][i]; } } function getOffersByUser(address _user) external view returns (uint32[] memory offerIds) { uint256 length = userOffers[_user].length; offerIds = new uint32[](length); for(uint i = 0; i < length; i++) { offerIds[i] = userOffers[_user][i]; } } function getTotalOffersLength() external view returns (uint32) { return currentOfferId; } function getOffersLengthForListing(uint32 _id) external view returns (uint256) { return allListingOfferIds[_id].length; } function getOffersLengthForUser(address _user) external view returns (uint256) { return userOffers[_user].length; } function getOfferInfoByIndex(uint32 _offerId) external view returns (address _offerer, uint256 _offerAmount, uint32 _listingId, string memory _offerStatus) { _offerer = offerId[_offerId].offerer; _offerAmount = offerId[_offerId].offerAmount; _listingId = offerId[_offerId].listingId; if(offerId[_offerId].offerStatus == 1) { _offerStatus = 'active'; } else if(offerId[_offerId].offerStatus == 2) { _offerStatus = 'outOffered'; } else if(offerId[_offerId].offerStatus == 3) { _offerStatus = 'canceled'; } else if(offerId[_offerId].offerStatus == 4) { _offerStatus = 'accepted'; } else { _offerStatus = 'invalid OfferID'; } } function getOfferStatus(uint32 _offerId) external view returns (string memory _offerStatus) { if(offerId[_offerId].offerStatus == 1) { _offerStatus = 'active'; } else if(offerId[_offerId].offerStatus == 2) { _offerStatus = 'outoffer'; } else if(offerId[_offerId].offerStatus == 3) { _offerStatus = 'canceled'; } else if(offerId[_offerId].offerStatus == 4) { _offerStatus = 'accepted'; } else { _offerStatus = 'invalid OfferID'; } } function getAllActiveListings() external view returns (uint32[] memory _activeListings) { uint256 length = activeListingCount; _activeListings = new uint32[](length); uint32 z = 0; for(uint32 i = 1; i <= currentId; i++) { if(listingStatus(i) == 1) { _activeListings[z] = i; z++; } else { continue; } } } function getAllListings() external view returns (uint32[] memory listings, uint8[] memory status) { listings = new uint32[](currentId); status = new uint8[](currentId); for(uint32 i = 1; i < currentId; i++) { listings[i - 1] = i; status[i - 1] = listingStatus(i); } } function minListPrice() public view returns (uint256) { return MinListPrice; } /** * @notice Transfer ETH. If the ETH transfer fails, wrap the ETH and try send it as WETH. */ function _safeTransferETHWithFallback(address to, uint256 amount) internal { if (!_safeTransferETH(to, amount)) { IWETH(WETH).deposit{ value: amount }(); IERC20(WETH).transfer(to, amount); } } /** * @notice Transfer ETH and return the success status. * @dev This function only forwards 30,000 gas to the callee. */ function _safeTransferETH(address to, uint256 value) internal returns (bool) { (bool success, ) = to.call{ value: value, gas: 30_000 }(new bytes(0)); return success; } receive() external payable { emit Received(msg.sender, msg.value); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.6; interface IWETH { function deposit() external payable; function withdraw(uint256 wad) external; function transfer(address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; interface INFT is IERC721Enumerable { }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; import "../extensions/draft-IERC20Permit.sol"; import "../../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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.1 (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 (last updated v4.5.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); /** * @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 (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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 (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/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`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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); }
{ "optimizer": { "enabled": true, "runs": 999999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_dust","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_sweepers","type":"address"},{"internalType":"uint16","name":"_minOfferIncrementPercentage","type":"uint16"},{"internalType":"uint256","name":"_minListPrice","type":"uint256"},{"internalType":"uint16","name":"_minOfferPercent","type":"uint16"},{"internalType":"address payable","name":"_taxWallet","type":"address"},{"internalType":"uint16","name":"_tax","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"address","name":"Lister","type":"address"},{"indexed":false,"internalType":"uint256","name":"DustAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TimeStamp","type":"uint256"}],"name":"ListingCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"DustAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"EthPrice","type":"uint256"}],"name":"ListingCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"EthPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"ListingEdited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minOfferIncrementPercentage","type":"uint256"}],"name":"ListingMinOfferIncrementPercentageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"address","name":"Lister","type":"address"},{"indexed":false,"internalType":"uint256","name":"DustRefundAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"Offerer","type":"address"},{"indexed":false,"internalType":"uint256","name":"OffererRefundAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"Caller","type":"address"}],"name":"ListingRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"address","name":"Buyer","type":"address"},{"indexed":false,"internalType":"address","name":"Seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"FinalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TaxAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"wasOffer","type":"bool"},{"indexed":false,"internalType":"uint256","name":"listedAmount","type":"uint256"}],"name":"ListingSettled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timeBuffer","type":"uint256"}],"name":"ListingTimeBufferUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"OfferId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TimeStamp","type":"uint256"}],"name":"OfferCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"OfferId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ListingId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"OfferPlaced","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":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"Received","type":"event"},{"inputs":[],"name":"DUST","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWEEPERS","outputs":[{"internalType":"contract INFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"acceptOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeListingCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allBuyersAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allListersAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"allListingOfferIds","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allOfferersAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"buyNow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"cancelListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"},{"internalType":"uint32","name":"_offerId","type":"uint32"}],"name":"cancelOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"claimRefundOnExpire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dustAmount","type":"uint256"},{"internalType":"uint256","name":"_requestedEth","type":"uint256"},{"internalType":"uint32","name":"_endTime","type":"uint32"}],"name":"createListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"createOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"},{"internalType":"uint32","name":"_newEndTime","type":"uint32"}],"name":"editListingEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"},{"internalType":"uint256","name":"_requestedEth","type":"uint256"}],"name":"editListingPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"emergencyCancelListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllActiveListings","outputs":[{"internalType":"uint32[]","name":"_activeListings","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllListings","outputs":[{"internalType":"uint32[]","name":"listings","type":"uint32[]"},{"internalType":"uint8[]","name":"status","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_offerId","type":"uint32"}],"name":"getOfferInfoByIndex","outputs":[{"internalType":"address","name":"_offerer","type":"address"},{"internalType":"uint256","name":"_offerAmount","type":"uint256"},{"internalType":"uint32","name":"_listingId","type":"uint32"},{"internalType":"string","name":"_offerStatus","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_offerId","type":"uint32"}],"name":"getOfferStatus","outputs":[{"internalType":"string","name":"_offerStatus","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"getOffersByListingId","outputs":[{"internalType":"uint32[]","name":"offerIds","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getOffersByUser","outputs":[{"internalType":"uint32[]","name":"offerIds","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"getOffersLengthForListing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getOffersLengthForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalOffersLength","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"listingId","outputs":[{"internalType":"address payable","name":"lister","type":"address"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"dustAmount","type":"uint256"},{"internalType":"uint256","name":"requestedEth","type":"uint256"},{"internalType":"uint256","name":"currentOffer","type":"uint256"},{"internalType":"uint256","name":"previousOffer","type":"uint256"},{"internalType":"uint32","name":"activeOfferId","type":"uint32"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"uint16","name":"numberOffers","type":"uint16"},{"internalType":"bool","name":"settled","type":"bool"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"failed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_id","type":"uint32"}],"name":"listingStatus","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minListPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minOfferIncrementPercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minOfferPercent","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"offerId","outputs":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"uint8","name":"offerStatus","type":"uint8"},{"internalType":"uint32","name":"listingId","type":"uint32"},{"internalType":"uint256","name":"offerAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBuyersAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setListersAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minListPrice","type":"uint256"}],"name":"setMinListPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_minOfferIncrementPercentage","type":"uint16"}],"name":"setMinOfferIncrementPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_percent","type":"uint16"}],"name":"setMinOfferPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setOfferersAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_taxWallet","type":"address"},{"internalType":"uint16","name":"_tax","type":"uint16"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526006805465ffffff000000191665010101000000179055600880546001600160401b0319166401000000011790553480156200003f57600080fd5b50604051620058e4380380620058e48339810160408190526200006291620001a5565b6001600055620000723362000122565b60048054600380546001600160a01b03199081166001600160a01b039b8c161790915560028054909116988a16989098179097559787166001600160b01b031990961695909517600160a01b61ffff95861602179096556005919091556006805461ffff1916918316919091179055600c8054600160201b600160d01b0319166601000000000000959094169490940261ffff60201b19169290921764010000000091909216021790556200024e565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146200018a57600080fd5b50565b805161ffff81168114620001a057600080fd5b919050565b600080600080600080600080610100898b031215620001c357600080fd5b8851620001d08162000174565b60208a0151909850620001e38162000174565b60408a0151909750620001f68162000174565b95506200020660608a016200018d565b9450608089015193506200021d60a08a016200018d565b925060c08901516200022f8162000174565b91506200023f60e08a016200018d565b90509295985092959890939650565b615686806200025e6000396000f3fe60806040526004361061030c5760003560e01c8063715018a61161019a5780639a9b84e0116100e1578063b187bd261161008a578063e3a76f7911610064578063e3a76f7914610bb0578063e59e974314610bc3578063f2fde38b14610be357600080fd5b8063b187bd2614610aa3578063c9419fe314610ac3578063e37c7d8314610ae357600080fd5b8063ad5c4648116100bb578063ad5c464814610a20578063ae73ccec14610a4d578063afbd4f3f14610a7057600080fd5b80639a9b84e0146109be578063a18072ca146109de578063a92d730f146109fe57600080fd5b80638da5cb5b116101435780639618b3331161011d5780639618b3331461095b57806398a650f01461097b57806399c8d5561461099b57600080fd5b80638da5cb5b146108da57806390337f2a1461090557806392dbd5e71461093857600080fd5b806382d225b31161017457806382d225b31461087a578063837b26351461089a57806385d930ae146108ba57600080fd5b8063715018a6146108255780637274e4ff1461083a57806377c729841461085a57600080fd5b80632dc0562d1161025e5780634e0cd799116102075780636cbde206116101e15780636cbde206146107b65780636f360041146107e3578063701e50841461080357600080fd5b80634e0cd799146107465780635388024914610773578063588fa0c6146107a357600080fd5b80634280aa63116102385780634280aa63146105a557806344155829146106e65780634681a7c61461072957600080fd5b80632dc0562d1461052e5780633822d30d146105655780633cbaf2151461058557600080fd5b80631bf7265c116102c057806321ec19f91161029a57806321ec19f9146104c05780632a19a406146104e05780632c7cd9571461050e57600080fd5b80631bf7265c1461044d5780631da68baf146104805780631ea7762f1461049f57600080fd5b8063166b253d116102f1578063166b253d146103d657806316c38b3c146103f85780631777244a1461041857600080fd5b806301ace7301461034d5780630737b90e146103a457600080fd5b366103485760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b600080fd5b34801561035957600080fd5b5060025461037a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156103b057600080fd5b506103c46103bf36600461506d565b610c03565b60405160ff909116815260200161039b565b3480156103e257600080fd5b506103f66103f1366004615096565b610da7565b005b34801561040457600080fd5b506103f6610413366004615096565b610de9565b34801561042457600080fd5b506104386104333660046150b3565b610e29565b60405163ffffffff909116815260200161039b565b34801561045957600080fd5b506006546104709065010000000000900460ff1681565b604051901515815260200161039b565b34801561048c57600080fd5b506005545b60405190815260200161039b565b3480156104ab57600080fd5b50600654610470906301000000900460ff1681565b3480156104cc57600080fd5b506103f66104db366004615111565b610e72565b3480156104ec57600080fd5b506006546104fb9061ffff1681565b60405161ffff909116815260200161039b565b34801561051a57600080fd5b506103f6610529366004615146565b610f01565b34801561053a57600080fd5b50600c5461037a906601000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561057157600080fd5b506103f6610580366004615170565b61122f565b34801561059157600080fd5b506103f66105a036600461506d565b61126c565b3480156105b157600080fd5b506106cd6105c036600461506d565b60076020526000908152604090208054600182015460028301546003840154600485015460059095015473ffffffffffffffffffffffffffffffffffffffff8086169674010000000000000000000000000000000000000000870463ffffffff9081169778010000000000000000000000000000000000000000000000009081900482169796959492939183169264010000000081049092169190810461ffff16907a010000000000000000000000000000000000000000000000000000810460ff908116917b0100000000000000000000000000000000000000000000000000000081048216917c0100000000000000000000000000000000000000000000000000000000909104168d565b60405161039b9d9c9b9a9998979695949392919061518b565b3480156106f257600080fd5b50610491610701366004615240565b73ffffffffffffffffffffffffffffffffffffffff166000908152600b602052604090205490565b34801561073557600080fd5b50600c546104389063ffffffff1681565b34801561075257600080fd5b5060045461037a9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561077f57600080fd5b5061079361078e36600461506d565b611792565b60405161039b94939291906152cb565b6103f66107b136600461506d565b6119d9565b3480156107c257600080fd5b506107d66107d136600461506d565b6120cb565b60405161039b9190615316565b3480156107ef57600080fd5b506103f66107fe366004615329565b6122cd565b34801561080f57600080fd5b506108186122da565b60405161039b9190615383565b34801561083157600080fd5b506103f66123aa565b34801561084657600080fd5b506103f6610855366004615146565b6123be565b34801561086657600080fd5b506103f66108753660046150b3565b612799565b34801561088657600080fd5b506103f6610895366004615096565b612b3d565b3480156108a657600080fd5b506103f66108b5366004615396565b612b80565b3480156108c657600080fd5b506103f66108d536600461506d565b612fd6565b3480156108e657600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff1661037a565b34801561091157600080fd5b506004546104fb9074010000000000000000000000000000000000000000900461ffff1681565b34801561094457600080fd5b50600854640100000000900463ffffffff16610438565b34801561096757600080fd5b50610818610976366004615240565b613652565b34801561098757600080fd5b506103f661099636600461506d565b613768565b3480156109a757600080fd5b50600c546104fb90640100000000900461ffff1681565b3480156109ca57600080fd5b506103f66109d9366004615170565b613b5c565b3480156109ea57600080fd5b506108186109f936600461506d565b613be5565b348015610a0a57600080fd5b5060065461047090640100000000900460ff1681565b348015610a2c57600080fd5b5060035461037a9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a5957600080fd5b50610a62613cd4565b60405161039b9291906153cb565b348015610a7c57600080fd5b50610491610a8b36600461506d565b63ffffffff1660009081526009602052604090205490565b348015610aaf57600080fd5b506006546104709062010000900460ff1681565b348015610acf57600080fd5b506103f6610ade36600461506d565b613e1c565b348015610aef57600080fd5b50610b6c610afe36600461506d565b600a602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff82169174010000000000000000000000000000000000000000810460ff1691750100000000000000000000000000000000000000000090910463ffffffff169084565b6040805173ffffffffffffffffffffffffffffffffffffffff909516855260ff909316602085015263ffffffff90911691830191909152606082015260800161039b565b6103f6610bbe36600461506d565b613f20565b348015610bcf57600080fd5b506103f6610bde366004615096565b614861565b348015610bef57600080fd5b506103f6610bfe366004615240565b6148a2565b63ffffffff81166000908152600760205260408120600501547b01000000000000000000000000000000000000000000000000000000900460ff1615610c4b57506003919050565b63ffffffff808316600090815260076020526040902054780100000000000000000000000000000000000000000000000090041642118015610cc4575063ffffffff82166000908152600760205260409020600501547a010000000000000000000000000000000000000000000000000000900460ff16155b15610cd157506003919050565b63ffffffff82166000908152600760205260409020600501547a010000000000000000000000000000000000000000000000000000900460ff1615610d1857506002919050565b63ffffffff80831660009081526007602052604090205478010000000000000000000000000000000000000000000000009004164211801590610d92575063ffffffff82166000908152600760205260409020600501547a010000000000000000000000000000000000000000000000000000900460ff16155b15610d9f57506001919050565b506000919050565b610daf614959565b60068054911515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909216919091179055565b610df1614959565b6006805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60096020528160005260406000208181548110610e4557600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b610e7a614959565b600c805461ffff909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff73ffffffffffffffffffffffffffffffffffffffff909416660100000000000002939093167fffffffffffff00000000000000000000000000000000000000000000ffffffff90921691909117919091179055565b60065462010000900460ff1615610f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f436f6e74726163742069732050617573656420746f206e6577206c697374696e60448201527f677300000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60026000540361100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff831681526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4f6e6c79204c69737465722063616e20656469740000000000000000000000006044820152606401610f96565b6110ac82610c03565b60ff16600114611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e67206973206e6f742061637469766500000000000000000000006044820152606401610f96565b428163ffffffff1611611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f456e642074696d6520616c7265616479207061737365640000000000000000006044820152606401610f96565b63ffffffff82811660008181526007602090815260409182902080547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009587169586021781556002015482519081529081019390935290917fd943474c63c070d3b7d0ed9a3046d9ac93b895196392744b4df78c5a6bd0b22491015b60405180910390a250506001600055565b611237614959565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff92909216919091179055565b6002600054036112d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff821681526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1633148061134a575063ffffffff8116600090815260076020526040902060050154640100000000900473ffffffffffffffffffffffffffffffffffffffff1633145b8061136c575060015473ffffffffffffffffffffffffffffffffffffffff1633145b6113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f6e6c79204c69737465722063616e20616363657074206f66666572000000006044820152606401610f96565b6113db81610c03565b60ff16600314611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4c697374696e6720686173206e6f7420657870697265640000000000000000006044820152606401610f96565b63ffffffff81166000908152600760205260409020600501547c0100000000000000000000000000000000000000000000000000000000900460ff161580156114c8575063ffffffff81166000908152600760205260409020600501547b01000000000000000000000000000000000000000000000000000000900460ff16155b61152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f526566756e6420616c726561647920636c61696d6564000000000000000000006044820152606401610f96565b63ffffffff808216600090815260076020526040812060050180547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c0100000000000000000000000000000000000000000000000000000000179055600c8054909216919061159e83615454565b82546101009290920a63ffffffff818102199093169183160217909155821660009081526007602052604090206005015473ffffffffffffffffffffffffffffffffffffffff640100000000909104161580159150611614575063ffffffff811660009081526007602052604090206003015415155b156116a55763ffffffff81166000908152600760205260409020600581015460039091015461166191640100000000900473ffffffffffffffffffffffffffffffffffffffff16906149da565b63ffffffff811660009081526007602052604081206005810180547fffffffffffffffff0000000000000000000000000000000000000000ffffffff169055600301555b63ffffffff808216600090815260076020526040902080546001909101546004546116ef9373ffffffffffffffffffffffffffffffffffffffff91821693919091169190614b0f16565b63ffffffff8116600081815260076020908152604091829020805460018201546005830154600390930154855173ffffffffffffffffffffffffffffffffffffffff938416815294850191909152640100000000909204169282019290925260608101919091523360808201527fb2933fd366fdf472c542cf71d26fbcf42ae6e9a0313f60ca2734c889a1ea1aff9060a0015b60405180910390a2506001600055565b63ffffffff8181166000908152600a60205260409020805460019182015473ffffffffffffffffffffffffffffffffffffffff821693909275010000000000000000000000000000000000000000008304909116916060917401000000000000000000000000000000000000000090910460ff169003611846575060408051808201909152600681527f616374697665000000000000000000000000000000000000000000000000000060208201526119d2565b63ffffffff85166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff166002036118b8575060408051808201909152600a81527f6f75744f6666657265640000000000000000000000000000000000000000000060208201526119d2565b63ffffffff85166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff1660030361192a575060408051808201909152600881527f63616e63656c656400000000000000000000000000000000000000000000000060208201526119d2565b63ffffffff85166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff1660040361199c575060408051808201909152600881527f616363657074656400000000000000000000000000000000000000000000000060208201526119d2565b5060408051808201909152600f81527f696e76616c6964204f666665724944000000000000000000000000000000000060208201525b9193509193565b600654640100000000900460ff1680611a8257506002546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a809190615492565b115b611ae8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d75737420686f6c642061204d65746164757374204e465400000000000000006044820152606401610f96565b600260005403611b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600055611b6281610c03565b60ff166001148015611bab575063ffffffff81166000908152600760205260409020600501547a010000000000000000000000000000000000000000000000000000900460ff16155b611c37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c697374696e672068617320616c7265616479206265656e20736574746c656460448201527f206f722063616e63656c656400000000000000000000000000000000000000006064820152608401610f96565b63ffffffff8082166000908152600760205260409020547801000000000000000000000000000000000000000000000000900416421115611cd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c697374696e67206861732065787069726564000000000000000000000000006044820152606401610f96565b63ffffffff81166000908152600760205260409020600201543414611d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4554482056616c7565206d75737420626520657175616c20746f206c6973746960448201527f6e672070726963650000000000000000000000000000000000000000000000006064820152608401610f96565b63ffffffff808216600090815260076020526040812060050180547fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff167a010000000000000000000000000000000000000000000000000000179055600c80549092169190611de983615454565b82546101009290920a63ffffffff818102199093169183160217909155821660009081526007602052604090206005015473ffffffffffffffffffffffffffffffffffffffff640100000000909104161580159150611e5f575063ffffffff811660009081526007602052604090206003015415155b15611f115763ffffffff811660009081526007602052604090206005810154600390910154611eac91640100000000900473ffffffffffffffffffffffffffffffffffffffff16906149da565b63ffffffff8181166000908152600760209081526040808320600501549093168252600a90522080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790555b600c5463ffffffff8216600090815260076020526040812060020154909161271091611f4991640100000000900461ffff16906154ab565b611f5391906154c2565b63ffffffff831660009081526007602052604081206002015491925090611f7b9083906154fd565b63ffffffff808516600090815260076020526040902060010154600454929350611fbf9273ffffffffffffffffffffffffffffffffffffffff1691339190614b0f16565b600c54611fec906601000000000000900473ffffffffffffffffffffffffffffffffffffffff16836149da565b63ffffffff83166000908152600760205260409020546120229073ffffffffffffffffffffffffffffffffffffffff16826149da565b63ffffffff8316600081815260076020908152604080832060058101548154600290920154835164010000000090920473ffffffffffffffffffffffffffffffffffffffff90811683529092169381019390935290820181905260608201869052608082019290925260a08101919091527fd972ee7b1a13e217eb515ce7f71416b4a86b4f52c0f446d5327b3a160810b1639060c0015b60405180910390a25050600160005550565b63ffffffff81166000908152600a602052604090205460609074010000000000000000000000000000000000000000900460ff1660010361213f57505060408051808201909152600681527f6163746976650000000000000000000000000000000000000000000000000000602082015290565b63ffffffff82166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff166002036121b057505060408051808201909152600881527f6f75746f66666572000000000000000000000000000000000000000000000000602082015290565b63ffffffff82166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff1660030361222157505060408051808201909152600881527f63616e63656c6564000000000000000000000000000000000000000000000000602082015290565b63ffffffff82166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff1660040361229257505060408051808201909152600881527f6163636570746564000000000000000000000000000000000000000000000000602082015290565b5060408051808201909152600f81527f696e76616c6964204f666665724944000000000000000000000000000000000060208201525b919050565b6122d5614959565b600555565b600c5460609063ffffffff168067ffffffffffffffff8111156122ff576122ff615510565b604051908082528060200260200182016040528015612328578160200160208202803683370190505b509150600060015b60085463ffffffff908116908216116123a45761234c81610c03565b60ff166001036123925780848363ffffffff168151811061236f5761236f61553f565b63ffffffff909216602092830291909101909101528161238e8161556e565b9250505b8061239c8161556e565b915050612330565b50505090565b6123b2614959565b6123bc6000614be3565b565b60026000540361242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff82168152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146124c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f43616c6c6572206973206e6f74204f66666572657200000000000000000000006044820152606401610f96565b63ffffffff8181166000908152600a6020526040902054750100000000000000000000000000000000000000000090048116908316148015612520575063ffffffff8281166000908152600760205260409020600501548116908216145b612586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f49447320646f206e6f74206d61746368000000000000000000000000000000006044820152606401610f96565b61258f82610c03565b60ff166001146125fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f44757374204c697374696e67206973206e6f74204163746976650000000000006044820152606401610f96565b63ffffffff81166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff16600114612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f66666572206973206e6f7420616374697665000000000000000000000000006044820152606401610f96565b63ffffffff81166000908152600a60205260409020600101546126b99033906149da565b63ffffffff828116600081815260076020818152604080842060058101805488168652600a845282862080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167403000000000000000000000000000000000000000017905594869052928252600483015460039093019290925582547fffffffffffffffff000000000000000000000000000000000000000000000000169092555142815291928416917f249b2345400f7e0ba24bddfab725b2c04e94901fd6e0215688cd135f10e79ce9910160405180910390a350506001600055565b60065462010000900460ff1615612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f436f6e74726163742069732050617573656420746f206e6577206c697374696e60448201527f67730000000000000000000000000000000000000000000000000000000000006064820152608401610f96565b60026000540361289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff831681526007602052604090205473ffffffffffffffffffffffffffffffffffffffff163314612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4f6e6c79204c69737465722063616e20656469740000000000000000000000006044820152606401610f96565b61293f82610c03565b60ff166001146129ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e67206973206e6f742061637469766500000000000000000000006044820152606401610f96565b60055463ffffffff83166000908152600760205260409020600101546129d583633b9aca006154ab565b6129df91906154c2565b1015612a47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e6720507269636520746f6f206c6f7700000000000000000000006044820152606401610f96565b63ffffffff82166000908152600760205260409020600301548111612ac8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f486173206f6666657220686967686572207468616e206e6577207072696365006044820152606401610f96565b63ffffffff8281166000818152600760209081526040918290206002810186905554825186815278010000000000000000000000000000000000000000000000009091049094169084015290917fd943474c63c070d3b7d0ed9a3046d9ac93b895196392744b4df78c5a6bd0b224910161121e565b612b45614959565b6006805491151565010000000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff909216919091179055565b60065462010000900460ff1615612c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f436f6e74726163742069732050617573656420746f206e6577206c697374696e60448201527f67730000000000000000000000000000000000000000000000000000000000006064820152608401610f96565b6006546301000000900460ff1680612cc157506002546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbf9190615492565b115b612d27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d75737420686f6c642061204d65746164757374204e465400000000000000006044820152606401610f96565b600260005403612d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b600260005560055483612daa84633b9aca006154ab565b612db491906154c2565b1015612e1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e6720507269636520746f6f206c6f7700000000000000000000006044820152606401610f96565b60088054429160009163ffffffff169082612e368361556e565b82546101009290920a63ffffffff81810219909316918316021790915581811660009081526007602052604081208054600182018a9055600282018990557fffffffffffffffff00000000000000000000000000000000000000000000000016337fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000087851602177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000088851602179055600c8054939450929091169190612f2e8361556e565b82546101009290920a63ffffffff818102199093169183160217909155600454612f76925073ffffffffffffffffffffffffffffffffffffffff1690339030908990614c5a16565b6040805163ffffffff8481168252858116602083015291810187905260608101869052908216907fb87af400f8510716c8da0bd7992d41218e2f0cd4d129f5d1427b13ead04935d69060800160405180910390a250506001600055505050565b600260005403613042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff821681526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146130da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f6e6c79204c69737465722063616e20616363657074206f66666572000000006044820152606401610f96565b6130e381610c03565b60ff16600114801561312c575063ffffffff81166000908152600760205260409020600501547a010000000000000000000000000000000000000000000000000000900460ff16155b6131b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c697374696e672068617320616c7265616479206265656e20736574746c656460448201527f206f722063616e63656c656400000000000000000000000000000000000000006064820152608401610f96565b63ffffffff8082166000908152600760205260409020547801000000000000000000000000000000000000000000000000900416421115613255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c697374696e67206861732065787069726564000000000000000000000000006044820152606401610f96565b63ffffffff8116600090815260076020526040902060050154640100000000900473ffffffffffffffffffffffffffffffffffffffff166132f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e6f20616374697665204f6666657265720000000000000000000000000000006044820152606401610f96565b63ffffffff8082166000908152600760209081526040808320600501549093168252600a9052205460ff740100000000000000000000000000000000000000009091041660011461339f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f66666572206973206e6f7420616374697665000000000000000000000000006044820152606401610f96565b63ffffffff808216600090815260076020526040812060050180547fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff167a010000000000000000000000000000000000000000000000000000179055600c8054909216919061340d83615454565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000612710600c60049054906101000a900461ffff1661ffff16600760008563ffffffff1663ffffffff1681526020019081526020016000206003015461347391906154ab565b61347d91906154c2565b63ffffffff8316600090815260076020526040812060030154919250906134a59083906154fd565b63ffffffff808516600090815260076020526040902060058101546001909101546004549394506134fa9373ffffffffffffffffffffffffffffffffffffffff908116936401000000009093041691614b0f16565b600c54613527906601000000000000900473ffffffffffffffffffffffffffffffffffffffff16836149da565b63ffffffff831660009081526007602052604090205461355d9073ffffffffffffffffffffffffffffffffffffffff16826149da565b63ffffffff83811660008181526007602081815260408084206005810180549097168552600a835281852080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167404000000000000000000000000000000000000000017905593859052918152935482546003840154600290940154835164010000000090930473ffffffffffffffffffffffffffffffffffffffff90811684529091169582019590955290810191909152606081018590526001608082015260a0810192909252907fd972ee7b1a13e217eb515ce7f71416b4a86b4f52c0f446d5327b3a160810b1639060c0016120b9565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b60205260409020546060908067ffffffffffffffff81111561369457613694615510565b6040519080825280602002602001820160405280156136bd578160200160208202803683370190505b50915060005b818110156137615773ffffffffffffffffffffffffffffffffffffffff84166000908152600b602052604090208054829081106137025761370261553f565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1683828151811061373a5761373a61553f565b63ffffffff909216602092830291909101909101528061375981615591565b9150506136c3565b5050919050565b6002600054036137d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b60026000556137e1614959565b6137ea81610c03565b60ff16600114613856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e67206973206e6f742061637469766500000000000000000000006044820152606401610f96565b63ffffffff8116600090815260076020526040902060050180547fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff167b010000000000000000000000000000000000000000000000000000001790819055640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015906138f7575063ffffffff811660009081526007602052604090206003015415155b156139d95763ffffffff81166000908152600760205260409020600581015460039091015461394491640100000000900473ffffffffffffffffffffffffffffffffffffffff16906149da565b63ffffffff81811660009081526007602090815260408083206005810180547fffffffffffffffff0000000000000000000000000000000000000000ffffffff811690915560039091018490559093168252600a90522080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740300000000000000000000000000000000000000001790555b600c805463ffffffff169060006139ef83615454565b82546101009290920a63ffffffff8181021990931691831602179091558281166000908152600760205260409020805460019190910154600454613a50945073ffffffffffffffffffffffffffffffffffffffff90811693921691614b0f16565b63ffffffff81166000818152600760209081526040918290208054600190910154835173ffffffffffffffffffffffffffffffffffffffff909216825291810191909152428183015290517f08e1c3692993684b95c785b759d11ce9cbcf361a6a39ffaa4d9f1d4df29db8949181900360600190a263ffffffff8116600081815260076020908152604091829020805460018201546005830154600390930154855173ffffffffffffffffffffffffffffffffffffffff938416815294850191909152640100000000909204169282019290925260608101919091523360808201527fb2933fd366fdf472c542cf71d26fbcf42ae6e9a0313f60ca2734c889a1ea1aff9060a001611782565b613b64614959565b600480547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8416908102919091179091556040519081527f422c80ee4bc9013fbd94d768bd52864c5def5975108e758ce1694107dc88dd869060200160405180910390a150565b63ffffffff81166000908152600960205260409020546060908067ffffffffffffffff811115613c1757613c17615510565b604051908082528060200260200182016040528015613c40578160200160208202803683370190505b50915060005b818110156137615763ffffffff84166000908152600960205260409020805482908110613c7557613c7561553f565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16838281518110613cad57613cad61553f565b63ffffffff9092166020928302919091019091015280613ccc81615591565b915050613c46565b600854606090819063ffffffff1667ffffffffffffffff811115613cfa57613cfa615510565b604051908082528060200260200182016040528015613d23578160200160208202803683370190505b5060085490925063ffffffff1667ffffffffffffffff811115613d4857613d48615510565b604051908082528060200260200182016040528015613d71578160200160208202803683370190505b50905060015b60085463ffffffff9081169082161015613e17578083613d986001836155c9565b63ffffffff1681518110613dae57613dae61553f565b602002602001019063ffffffff16908163ffffffff1681525050613dd181610c03565b82613ddd6001846155c9565b63ffffffff1681518110613df357613df361553f565b60ff9092166020928302919091019091015280613e0f8161556e565b915050613d77565b509091565b600260005403613e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff821681526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146137e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c79204c69737465722063616e2063616e63656c000000000000000000006044820152606401610f96565b60065465010000000000900460ff1680613fca57506002546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015613fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc89190615492565b115b614030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d75737420686f6c642061204d65746164757374204e465400000000000000006044820152606401610f96565b60026000540361409c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b60026000556140aa81610c03565b60ff16600114614116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f44757374204c697374696e67206973206e6f74204163746976650000000000006044820152606401610f96565b63ffffffff808216600090815260076020526040902054780100000000000000000000000000000000000000000000000090041642106141b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c697374696e67206578706972656400000000000000000000000000000000006044820152606401610f96565b63ffffffff811660009081526007602052604090206002015434111561425a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4d757374206f66666572206c657373207468616e20726571756573746564457460448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610f96565b60065463ffffffff82166000908152600760205260409020600201546127109161428a9161ffff909116906154ab565b61429491906154c2565b341015614323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4d757374206f66666572206d6f7265207468616e206d696e696d756d206f666660448201527f657220616d6f756e7400000000000000000000000000000000000000000000006064820152608401610f96565b60045463ffffffff82166000908152600760205260409020600301546127109161436a917401000000000000000000000000000000000000000090910461ffff16906154ab565b61437491906154c2565b63ffffffff821660009081526007602052604090206003015461439791906155ed565b34101561444d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4d7573742073656e64206d6f7265207468616e206c617374206f666665722062908201527f79206d696e4f66666572496e6372656d656e7450657263656e7461676520616d60648201527f6f756e7400000000000000000000000000000000000000000000000000000000608482015260a401610f96565b63ffffffff811660009081526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1633036144e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c6973746572206e6f7420616c6c6f77656420746f204f6666657200000000006044820152606401610f96565b63ffffffff8082166000908152600760205260408120600501546008805473ffffffffffffffffffffffffffffffffffffffff6401000000009384900416949290049091169060046145328361556e565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146146225763ffffffff83166000908152600760205260409020600301546145aa9083906149da565b63ffffffff838116600081815260076020818152604080842060058101549096168452600a8252832080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167402000000000000000000000000000000000000000017905592909152905260038101546004909101555b63ffffffff838116600090815260076020526040902034600382015560050180547fffffffffffffffff0000000000000000000000000000000000000000000000001633640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001617918316919091178082557801000000000000000000000000000000000000000000000000900461ffff169060186146c683615600565b825461ffff91821661010093840a908102920219161790915563ffffffff8581166000818152600960209081526040808320805460018181018355918552838520600880830490910180548c8a166004600795861681028d0a828102908d021990931692909217909255818852600a87528588208054348288018190557fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff75010000000000000000000000000000000000000000008d027fffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff339081167fffffffffffffff00000000ff00000000000000000000000000000000000000009095169490941717167401000000000000000000000000000000000000000017909255808a52600b8952878a20805497880181558a52988890209386049093018054959094160290990a808a02980219909216969096179095558051928352908201939093529093507f3f7c2cdea5021ba3a44bd1f2eb0670e2c25f5ee8f4f44abfcb0564a28bdfb342910160405180910390a35050600160005550565b614869614959565b600680549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b6148aa614959565b73ffffffffffffffffffffffffffffffffffffffff811661494d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f96565b61495681614be3565b50565b60015473ffffffffffffffffffffffffffffffffffffffff1633146123bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f96565b6149e48282614cbe565b614b0b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015614a5257600080fd5b505af1158015614a66573d6000803e3d6000fd5b50506003546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015260248201879052909116935063a9059cbb925060440190506020604051808303816000875af1158015614ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b099190615617565b505b5050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052614b099084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614d4b565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052614cb89085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401614b61565b50505050565b60408051600080825260208201909252819073ffffffffffffffffffffffffffffffffffffffff851690617530908590604051614cfb9190615634565b600060405180830381858888f193505050503d8060008114614d39576040519150601f19603f3d011682016040523d82523d6000602084013e614d3e565b606091505b5090925050505b92915050565b6000614dad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614e579092919063ffffffff16565b805190915015614b095780806020019051810190614dcb9190615617565b614b09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610f96565b6060614e668484600085614e70565b90505b9392505050565b606082471015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610f96565b73ffffffffffffffffffffffffffffffffffffffff85163b614f80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f96565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051614fa99190615634565b60006040518083038185875af1925050503d8060008114614fe6576040519150601f19603f3d011682016040523d82523d6000602084013e614feb565b606091505b5091509150614ffb828286615006565b979650505050505050565b60608315615015575081614e69565b8251156150255782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f969190615316565b803563ffffffff811681146122c857600080fd5b60006020828403121561507f57600080fd5b614e6982615059565b801515811461495657600080fd5b6000602082840312156150a857600080fd5b8135614e6981615088565b600080604083850312156150c657600080fd5b6150cf83615059565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461495657600080fd5b803561ffff811681146122c857600080fd5b6000806040838503121561512457600080fd5b823561512f816150dd565b915061513d602084016150ff565b90509250929050565b6000806040838503121561515957600080fd5b61516283615059565b915061513d60208401615059565b60006020828403121561518257600080fd5b614e69826150ff565b60006101a08201905073ffffffffffffffffffffffffffffffffffffffff8f16825263ffffffff8e16602083015263ffffffff8d1660408301528b60608301528a60808301528960a08301528860c083015263ffffffff881660e083015273ffffffffffffffffffffffffffffffffffffffff871661010083015261521761012083018761ffff169052565b9315156101408201529115156101608301521515610180909101529a9950505050505050505050565b60006020828403121561525257600080fd5b8135614e69816150dd565b60005b83811015615278578181015183820152602001615260565b50506000910152565b6000815180845261529981602086016020860161525d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015263ffffffff8316604082015260806060820152600061530c6080830184615281565b9695505050505050565b602081526000614e696020830184615281565b60006020828403121561533b57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561537857815163ffffffff1687529582019590820190600101615356565b509495945050505050565b602081526000614e696020830184615342565b6000806000606084860312156153ab57600080fd5b83359250602084013591506153c260408501615059565b90509250925092565b6040815260006153de6040830185615342565b82810360208481019190915284518083528582019282019060005b8181101561541857845160ff16835293830193918301916001016153f9565b5090979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff82168061546a5761546a615425565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b6000602082840312156154a457600080fd5b5051919050565b8082028115828204841417614d4557614d45615425565b6000826154f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81810381811115614d4557614d45615425565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff80831681810361558757615587615425565b6001019392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155c2576155c2615425565b5060010190565b63ffffffff8281168282160390808211156155e6576155e6615425565b5092915050565b80820180821115614d4557614d45615425565b600061ffff80831681810361558757615587615425565b60006020828403121561562957600080fd5b8151614e6981615088565b6000825161564681846020870161525d565b919091019291505056fea26469706673582212205b0ce5f7d1ff4ab0bbb6340a68fe6324ac777bbb12f7812066b3ac3aedbfe8c364736f6c6343000811003300000000000000000000000068baba24ee60933c6e22ea7701d9771285dde27a000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000002276c60f53c9a807e182d112f9b37d7277463fec0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d0717faddb61c48e3fce46abc2b2dcaa43d125500000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode
0x60806040526004361061030c5760003560e01c8063715018a61161019a5780639a9b84e0116100e1578063b187bd261161008a578063e3a76f7911610064578063e3a76f7914610bb0578063e59e974314610bc3578063f2fde38b14610be357600080fd5b8063b187bd2614610aa3578063c9419fe314610ac3578063e37c7d8314610ae357600080fd5b8063ad5c4648116100bb578063ad5c464814610a20578063ae73ccec14610a4d578063afbd4f3f14610a7057600080fd5b80639a9b84e0146109be578063a18072ca146109de578063a92d730f146109fe57600080fd5b80638da5cb5b116101435780639618b3331161011d5780639618b3331461095b57806398a650f01461097b57806399c8d5561461099b57600080fd5b80638da5cb5b146108da57806390337f2a1461090557806392dbd5e71461093857600080fd5b806382d225b31161017457806382d225b31461087a578063837b26351461089a57806385d930ae146108ba57600080fd5b8063715018a6146108255780637274e4ff1461083a57806377c729841461085a57600080fd5b80632dc0562d1161025e5780634e0cd799116102075780636cbde206116101e15780636cbde206146107b65780636f360041146107e3578063701e50841461080357600080fd5b80634e0cd799146107465780635388024914610773578063588fa0c6146107a357600080fd5b80634280aa63116102385780634280aa63146105a557806344155829146106e65780634681a7c61461072957600080fd5b80632dc0562d1461052e5780633822d30d146105655780633cbaf2151461058557600080fd5b80631bf7265c116102c057806321ec19f91161029a57806321ec19f9146104c05780632a19a406146104e05780632c7cd9571461050e57600080fd5b80631bf7265c1461044d5780631da68baf146104805780631ea7762f1461049f57600080fd5b8063166b253d116102f1578063166b253d146103d657806316c38b3c146103f85780631777244a1461041857600080fd5b806301ace7301461034d5780630737b90e146103a457600080fd5b366103485760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b600080fd5b34801561035957600080fd5b5060025461037a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156103b057600080fd5b506103c46103bf36600461506d565b610c03565b60405160ff909116815260200161039b565b3480156103e257600080fd5b506103f66103f1366004615096565b610da7565b005b34801561040457600080fd5b506103f6610413366004615096565b610de9565b34801561042457600080fd5b506104386104333660046150b3565b610e29565b60405163ffffffff909116815260200161039b565b34801561045957600080fd5b506006546104709065010000000000900460ff1681565b604051901515815260200161039b565b34801561048c57600080fd5b506005545b60405190815260200161039b565b3480156104ab57600080fd5b50600654610470906301000000900460ff1681565b3480156104cc57600080fd5b506103f66104db366004615111565b610e72565b3480156104ec57600080fd5b506006546104fb9061ffff1681565b60405161ffff909116815260200161039b565b34801561051a57600080fd5b506103f6610529366004615146565b610f01565b34801561053a57600080fd5b50600c5461037a906601000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561057157600080fd5b506103f6610580366004615170565b61122f565b34801561059157600080fd5b506103f66105a036600461506d565b61126c565b3480156105b157600080fd5b506106cd6105c036600461506d565b60076020526000908152604090208054600182015460028301546003840154600485015460059095015473ffffffffffffffffffffffffffffffffffffffff8086169674010000000000000000000000000000000000000000870463ffffffff9081169778010000000000000000000000000000000000000000000000009081900482169796959492939183169264010000000081049092169190810461ffff16907a010000000000000000000000000000000000000000000000000000810460ff908116917b0100000000000000000000000000000000000000000000000000000081048216917c0100000000000000000000000000000000000000000000000000000000909104168d565b60405161039b9d9c9b9a9998979695949392919061518b565b3480156106f257600080fd5b50610491610701366004615240565b73ffffffffffffffffffffffffffffffffffffffff166000908152600b602052604090205490565b34801561073557600080fd5b50600c546104389063ffffffff1681565b34801561075257600080fd5b5060045461037a9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561077f57600080fd5b5061079361078e36600461506d565b611792565b60405161039b94939291906152cb565b6103f66107b136600461506d565b6119d9565b3480156107c257600080fd5b506107d66107d136600461506d565b6120cb565b60405161039b9190615316565b3480156107ef57600080fd5b506103f66107fe366004615329565b6122cd565b34801561080f57600080fd5b506108186122da565b60405161039b9190615383565b34801561083157600080fd5b506103f66123aa565b34801561084657600080fd5b506103f6610855366004615146565b6123be565b34801561086657600080fd5b506103f66108753660046150b3565b612799565b34801561088657600080fd5b506103f6610895366004615096565b612b3d565b3480156108a657600080fd5b506103f66108b5366004615396565b612b80565b3480156108c657600080fd5b506103f66108d536600461506d565b612fd6565b3480156108e657600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff1661037a565b34801561091157600080fd5b506004546104fb9074010000000000000000000000000000000000000000900461ffff1681565b34801561094457600080fd5b50600854640100000000900463ffffffff16610438565b34801561096757600080fd5b50610818610976366004615240565b613652565b34801561098757600080fd5b506103f661099636600461506d565b613768565b3480156109a757600080fd5b50600c546104fb90640100000000900461ffff1681565b3480156109ca57600080fd5b506103f66109d9366004615170565b613b5c565b3480156109ea57600080fd5b506108186109f936600461506d565b613be5565b348015610a0a57600080fd5b5060065461047090640100000000900460ff1681565b348015610a2c57600080fd5b5060035461037a9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a5957600080fd5b50610a62613cd4565b60405161039b9291906153cb565b348015610a7c57600080fd5b50610491610a8b36600461506d565b63ffffffff1660009081526009602052604090205490565b348015610aaf57600080fd5b506006546104709062010000900460ff1681565b348015610acf57600080fd5b506103f6610ade36600461506d565b613e1c565b348015610aef57600080fd5b50610b6c610afe36600461506d565b600a602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff82169174010000000000000000000000000000000000000000810460ff1691750100000000000000000000000000000000000000000090910463ffffffff169084565b6040805173ffffffffffffffffffffffffffffffffffffffff909516855260ff909316602085015263ffffffff90911691830191909152606082015260800161039b565b6103f6610bbe36600461506d565b613f20565b348015610bcf57600080fd5b506103f6610bde366004615096565b614861565b348015610bef57600080fd5b506103f6610bfe366004615240565b6148a2565b63ffffffff81166000908152600760205260408120600501547b01000000000000000000000000000000000000000000000000000000900460ff1615610c4b57506003919050565b63ffffffff808316600090815260076020526040902054780100000000000000000000000000000000000000000000000090041642118015610cc4575063ffffffff82166000908152600760205260409020600501547a010000000000000000000000000000000000000000000000000000900460ff16155b15610cd157506003919050565b63ffffffff82166000908152600760205260409020600501547a010000000000000000000000000000000000000000000000000000900460ff1615610d1857506002919050565b63ffffffff80831660009081526007602052604090205478010000000000000000000000000000000000000000000000009004164211801590610d92575063ffffffff82166000908152600760205260409020600501547a010000000000000000000000000000000000000000000000000000900460ff16155b15610d9f57506001919050565b506000919050565b610daf614959565b60068054911515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909216919091179055565b610df1614959565b6006805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60096020528160005260406000208181548110610e4557600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b610e7a614959565b600c805461ffff909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff73ffffffffffffffffffffffffffffffffffffffff909416660100000000000002939093167fffffffffffff00000000000000000000000000000000000000000000ffffffff90921691909117919091179055565b60065462010000900460ff1615610f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f436f6e74726163742069732050617573656420746f206e6577206c697374696e60448201527f677300000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60026000540361100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff831681526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4f6e6c79204c69737465722063616e20656469740000000000000000000000006044820152606401610f96565b6110ac82610c03565b60ff16600114611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e67206973206e6f742061637469766500000000000000000000006044820152606401610f96565b428163ffffffff1611611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f456e642074696d6520616c7265616479207061737365640000000000000000006044820152606401610f96565b63ffffffff82811660008181526007602090815260409182902080547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009587169586021781556002015482519081529081019390935290917fd943474c63c070d3b7d0ed9a3046d9ac93b895196392744b4df78c5a6bd0b22491015b60405180910390a250506001600055565b611237614959565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff92909216919091179055565b6002600054036112d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff821681526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1633148061134a575063ffffffff8116600090815260076020526040902060050154640100000000900473ffffffffffffffffffffffffffffffffffffffff1633145b8061136c575060015473ffffffffffffffffffffffffffffffffffffffff1633145b6113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f6e6c79204c69737465722063616e20616363657074206f66666572000000006044820152606401610f96565b6113db81610c03565b60ff16600314611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4c697374696e6720686173206e6f7420657870697265640000000000000000006044820152606401610f96565b63ffffffff81166000908152600760205260409020600501547c0100000000000000000000000000000000000000000000000000000000900460ff161580156114c8575063ffffffff81166000908152600760205260409020600501547b01000000000000000000000000000000000000000000000000000000900460ff16155b61152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f526566756e6420616c726561647920636c61696d6564000000000000000000006044820152606401610f96565b63ffffffff808216600090815260076020526040812060050180547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c0100000000000000000000000000000000000000000000000000000000179055600c8054909216919061159e83615454565b82546101009290920a63ffffffff818102199093169183160217909155821660009081526007602052604090206005015473ffffffffffffffffffffffffffffffffffffffff640100000000909104161580159150611614575063ffffffff811660009081526007602052604090206003015415155b156116a55763ffffffff81166000908152600760205260409020600581015460039091015461166191640100000000900473ffffffffffffffffffffffffffffffffffffffff16906149da565b63ffffffff811660009081526007602052604081206005810180547fffffffffffffffff0000000000000000000000000000000000000000ffffffff169055600301555b63ffffffff808216600090815260076020526040902080546001909101546004546116ef9373ffffffffffffffffffffffffffffffffffffffff91821693919091169190614b0f16565b63ffffffff8116600081815260076020908152604091829020805460018201546005830154600390930154855173ffffffffffffffffffffffffffffffffffffffff938416815294850191909152640100000000909204169282019290925260608101919091523360808201527fb2933fd366fdf472c542cf71d26fbcf42ae6e9a0313f60ca2734c889a1ea1aff9060a0015b60405180910390a2506001600055565b63ffffffff8181166000908152600a60205260409020805460019182015473ffffffffffffffffffffffffffffffffffffffff821693909275010000000000000000000000000000000000000000008304909116916060917401000000000000000000000000000000000000000090910460ff169003611846575060408051808201909152600681527f616374697665000000000000000000000000000000000000000000000000000060208201526119d2565b63ffffffff85166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff166002036118b8575060408051808201909152600a81527f6f75744f6666657265640000000000000000000000000000000000000000000060208201526119d2565b63ffffffff85166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff1660030361192a575060408051808201909152600881527f63616e63656c656400000000000000000000000000000000000000000000000060208201526119d2565b63ffffffff85166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff1660040361199c575060408051808201909152600881527f616363657074656400000000000000000000000000000000000000000000000060208201526119d2565b5060408051808201909152600f81527f696e76616c6964204f666665724944000000000000000000000000000000000060208201525b9193509193565b600654640100000000900460ff1680611a8257506002546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a809190615492565b115b611ae8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d75737420686f6c642061204d65746164757374204e465400000000000000006044820152606401610f96565b600260005403611b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600055611b6281610c03565b60ff166001148015611bab575063ffffffff81166000908152600760205260409020600501547a010000000000000000000000000000000000000000000000000000900460ff16155b611c37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c697374696e672068617320616c7265616479206265656e20736574746c656460448201527f206f722063616e63656c656400000000000000000000000000000000000000006064820152608401610f96565b63ffffffff8082166000908152600760205260409020547801000000000000000000000000000000000000000000000000900416421115611cd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c697374696e67206861732065787069726564000000000000000000000000006044820152606401610f96565b63ffffffff81166000908152600760205260409020600201543414611d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4554482056616c7565206d75737420626520657175616c20746f206c6973746960448201527f6e672070726963650000000000000000000000000000000000000000000000006064820152608401610f96565b63ffffffff808216600090815260076020526040812060050180547fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff167a010000000000000000000000000000000000000000000000000000179055600c80549092169190611de983615454565b82546101009290920a63ffffffff818102199093169183160217909155821660009081526007602052604090206005015473ffffffffffffffffffffffffffffffffffffffff640100000000909104161580159150611e5f575063ffffffff811660009081526007602052604090206003015415155b15611f115763ffffffff811660009081526007602052604090206005810154600390910154611eac91640100000000900473ffffffffffffffffffffffffffffffffffffffff16906149da565b63ffffffff8181166000908152600760209081526040808320600501549093168252600a90522080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790555b600c5463ffffffff8216600090815260076020526040812060020154909161271091611f4991640100000000900461ffff16906154ab565b611f5391906154c2565b63ffffffff831660009081526007602052604081206002015491925090611f7b9083906154fd565b63ffffffff808516600090815260076020526040902060010154600454929350611fbf9273ffffffffffffffffffffffffffffffffffffffff1691339190614b0f16565b600c54611fec906601000000000000900473ffffffffffffffffffffffffffffffffffffffff16836149da565b63ffffffff83166000908152600760205260409020546120229073ffffffffffffffffffffffffffffffffffffffff16826149da565b63ffffffff8316600081815260076020908152604080832060058101548154600290920154835164010000000090920473ffffffffffffffffffffffffffffffffffffffff90811683529092169381019390935290820181905260608201869052608082019290925260a08101919091527fd972ee7b1a13e217eb515ce7f71416b4a86b4f52c0f446d5327b3a160810b1639060c0015b60405180910390a25050600160005550565b63ffffffff81166000908152600a602052604090205460609074010000000000000000000000000000000000000000900460ff1660010361213f57505060408051808201909152600681527f6163746976650000000000000000000000000000000000000000000000000000602082015290565b63ffffffff82166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff166002036121b057505060408051808201909152600881527f6f75746f66666572000000000000000000000000000000000000000000000000602082015290565b63ffffffff82166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff1660030361222157505060408051808201909152600881527f63616e63656c6564000000000000000000000000000000000000000000000000602082015290565b63ffffffff82166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff1660040361229257505060408051808201909152600881527f6163636570746564000000000000000000000000000000000000000000000000602082015290565b5060408051808201909152600f81527f696e76616c6964204f666665724944000000000000000000000000000000000060208201525b919050565b6122d5614959565b600555565b600c5460609063ffffffff168067ffffffffffffffff8111156122ff576122ff615510565b604051908082528060200260200182016040528015612328578160200160208202803683370190505b509150600060015b60085463ffffffff908116908216116123a45761234c81610c03565b60ff166001036123925780848363ffffffff168151811061236f5761236f61553f565b63ffffffff909216602092830291909101909101528161238e8161556e565b9250505b8061239c8161556e565b915050612330565b50505090565b6123b2614959565b6123bc6000614be3565b565b60026000540361242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff82168152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146124c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f43616c6c6572206973206e6f74204f66666572657200000000000000000000006044820152606401610f96565b63ffffffff8181166000908152600a6020526040902054750100000000000000000000000000000000000000000090048116908316148015612520575063ffffffff8281166000908152600760205260409020600501548116908216145b612586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f49447320646f206e6f74206d61746368000000000000000000000000000000006044820152606401610f96565b61258f82610c03565b60ff166001146125fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f44757374204c697374696e67206973206e6f74204163746976650000000000006044820152606401610f96565b63ffffffff81166000908152600a602052604090205474010000000000000000000000000000000000000000900460ff16600114612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f66666572206973206e6f7420616374697665000000000000000000000000006044820152606401610f96565b63ffffffff81166000908152600a60205260409020600101546126b99033906149da565b63ffffffff828116600081815260076020818152604080842060058101805488168652600a845282862080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167403000000000000000000000000000000000000000017905594869052928252600483015460039093019290925582547fffffffffffffffff000000000000000000000000000000000000000000000000169092555142815291928416917f249b2345400f7e0ba24bddfab725b2c04e94901fd6e0215688cd135f10e79ce9910160405180910390a350506001600055565b60065462010000900460ff1615612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f436f6e74726163742069732050617573656420746f206e6577206c697374696e60448201527f67730000000000000000000000000000000000000000000000000000000000006064820152608401610f96565b60026000540361289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff831681526007602052604090205473ffffffffffffffffffffffffffffffffffffffff163314612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4f6e6c79204c69737465722063616e20656469740000000000000000000000006044820152606401610f96565b61293f82610c03565b60ff166001146129ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e67206973206e6f742061637469766500000000000000000000006044820152606401610f96565b60055463ffffffff83166000908152600760205260409020600101546129d583633b9aca006154ab565b6129df91906154c2565b1015612a47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e6720507269636520746f6f206c6f7700000000000000000000006044820152606401610f96565b63ffffffff82166000908152600760205260409020600301548111612ac8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f486173206f6666657220686967686572207468616e206e6577207072696365006044820152606401610f96565b63ffffffff8281166000818152600760209081526040918290206002810186905554825186815278010000000000000000000000000000000000000000000000009091049094169084015290917fd943474c63c070d3b7d0ed9a3046d9ac93b895196392744b4df78c5a6bd0b224910161121e565b612b45614959565b6006805491151565010000000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff909216919091179055565b60065462010000900460ff1615612c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f436f6e74726163742069732050617573656420746f206e6577206c697374696e60448201527f67730000000000000000000000000000000000000000000000000000000000006064820152608401610f96565b6006546301000000900460ff1680612cc157506002546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbf9190615492565b115b612d27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d75737420686f6c642061204d65746164757374204e465400000000000000006044820152606401610f96565b600260005403612d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b600260005560055483612daa84633b9aca006154ab565b612db491906154c2565b1015612e1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e6720507269636520746f6f206c6f7700000000000000000000006044820152606401610f96565b60088054429160009163ffffffff169082612e368361556e565b82546101009290920a63ffffffff81810219909316918316021790915581811660009081526007602052604081208054600182018a9055600282018990557fffffffffffffffff00000000000000000000000000000000000000000000000016337fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000087851602177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000088851602179055600c8054939450929091169190612f2e8361556e565b82546101009290920a63ffffffff818102199093169183160217909155600454612f76925073ffffffffffffffffffffffffffffffffffffffff1690339030908990614c5a16565b6040805163ffffffff8481168252858116602083015291810187905260608101869052908216907fb87af400f8510716c8da0bd7992d41218e2f0cd4d129f5d1427b13ead04935d69060800160405180910390a250506001600055505050565b600260005403613042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff821681526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146130da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f6e6c79204c69737465722063616e20616363657074206f66666572000000006044820152606401610f96565b6130e381610c03565b60ff16600114801561312c575063ffffffff81166000908152600760205260409020600501547a010000000000000000000000000000000000000000000000000000900460ff16155b6131b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c697374696e672068617320616c7265616479206265656e20736574746c656460448201527f206f722063616e63656c656400000000000000000000000000000000000000006064820152608401610f96565b63ffffffff8082166000908152600760205260409020547801000000000000000000000000000000000000000000000000900416421115613255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c697374696e67206861732065787069726564000000000000000000000000006044820152606401610f96565b63ffffffff8116600090815260076020526040902060050154640100000000900473ffffffffffffffffffffffffffffffffffffffff166132f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e6f20616374697665204f6666657265720000000000000000000000000000006044820152606401610f96565b63ffffffff8082166000908152600760209081526040808320600501549093168252600a9052205460ff740100000000000000000000000000000000000000009091041660011461339f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f66666572206973206e6f7420616374697665000000000000000000000000006044820152606401610f96565b63ffffffff808216600090815260076020526040812060050180547fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff167a010000000000000000000000000000000000000000000000000000179055600c8054909216919061340d83615454565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000612710600c60049054906101000a900461ffff1661ffff16600760008563ffffffff1663ffffffff1681526020019081526020016000206003015461347391906154ab565b61347d91906154c2565b63ffffffff8316600090815260076020526040812060030154919250906134a59083906154fd565b63ffffffff808516600090815260076020526040902060058101546001909101546004549394506134fa9373ffffffffffffffffffffffffffffffffffffffff908116936401000000009093041691614b0f16565b600c54613527906601000000000000900473ffffffffffffffffffffffffffffffffffffffff16836149da565b63ffffffff831660009081526007602052604090205461355d9073ffffffffffffffffffffffffffffffffffffffff16826149da565b63ffffffff83811660008181526007602081815260408084206005810180549097168552600a835281852080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167404000000000000000000000000000000000000000017905593859052918152935482546003840154600290940154835164010000000090930473ffffffffffffffffffffffffffffffffffffffff90811684529091169582019590955290810191909152606081018590526001608082015260a0810192909252907fd972ee7b1a13e217eb515ce7f71416b4a86b4f52c0f446d5327b3a160810b1639060c0016120b9565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b60205260409020546060908067ffffffffffffffff81111561369457613694615510565b6040519080825280602002602001820160405280156136bd578160200160208202803683370190505b50915060005b818110156137615773ffffffffffffffffffffffffffffffffffffffff84166000908152600b602052604090208054829081106137025761370261553f565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1683828151811061373a5761373a61553f565b63ffffffff909216602092830291909101909101528061375981615591565b9150506136c3565b5050919050565b6002600054036137d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b60026000556137e1614959565b6137ea81610c03565b60ff16600114613856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c697374696e67206973206e6f742061637469766500000000000000000000006044820152606401610f96565b63ffffffff8116600090815260076020526040902060050180547fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff167b010000000000000000000000000000000000000000000000000000001790819055640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015906138f7575063ffffffff811660009081526007602052604090206003015415155b156139d95763ffffffff81166000908152600760205260409020600581015460039091015461394491640100000000900473ffffffffffffffffffffffffffffffffffffffff16906149da565b63ffffffff81811660009081526007602090815260408083206005810180547fffffffffffffffff0000000000000000000000000000000000000000ffffffff811690915560039091018490559093168252600a90522080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740300000000000000000000000000000000000000001790555b600c805463ffffffff169060006139ef83615454565b82546101009290920a63ffffffff8181021990931691831602179091558281166000908152600760205260409020805460019190910154600454613a50945073ffffffffffffffffffffffffffffffffffffffff90811693921691614b0f16565b63ffffffff81166000818152600760209081526040918290208054600190910154835173ffffffffffffffffffffffffffffffffffffffff909216825291810191909152428183015290517f08e1c3692993684b95c785b759d11ce9cbcf361a6a39ffaa4d9f1d4df29db8949181900360600190a263ffffffff8116600081815260076020908152604091829020805460018201546005830154600390930154855173ffffffffffffffffffffffffffffffffffffffff938416815294850191909152640100000000909204169282019290925260608101919091523360808201527fb2933fd366fdf472c542cf71d26fbcf42ae6e9a0313f60ca2734c889a1ea1aff9060a001611782565b613b64614959565b600480547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8416908102919091179091556040519081527f422c80ee4bc9013fbd94d768bd52864c5def5975108e758ce1694107dc88dd869060200160405180910390a150565b63ffffffff81166000908152600960205260409020546060908067ffffffffffffffff811115613c1757613c17615510565b604051908082528060200260200182016040528015613c40578160200160208202803683370190505b50915060005b818110156137615763ffffffff84166000908152600960205260409020805482908110613c7557613c7561553f565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16838281518110613cad57613cad61553f565b63ffffffff9092166020928302919091019091015280613ccc81615591565b915050613c46565b600854606090819063ffffffff1667ffffffffffffffff811115613cfa57613cfa615510565b604051908082528060200260200182016040528015613d23578160200160208202803683370190505b5060085490925063ffffffff1667ffffffffffffffff811115613d4857613d48615510565b604051908082528060200260200182016040528015613d71578160200160208202803683370190505b50905060015b60085463ffffffff9081169082161015613e17578083613d986001836155c9565b63ffffffff1681518110613dae57613dae61553f565b602002602001019063ffffffff16908163ffffffff1681525050613dd181610c03565b82613ddd6001846155c9565b63ffffffff1681518110613df357613df361553f565b60ff9092166020928302919091019091015280613e0f8161556e565b915050613d77565b509091565b600260005403613e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b6002600090815563ffffffff821681526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146137e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c79204c69737465722063616e2063616e63656c000000000000000000006044820152606401610f96565b60065465010000000000900460ff1680613fca57506002546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015613fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc89190615492565b115b614030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d75737420686f6c642061204d65746164757374204e465400000000000000006044820152606401610f96565b60026000540361409c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f96565b60026000556140aa81610c03565b60ff16600114614116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f44757374204c697374696e67206973206e6f74204163746976650000000000006044820152606401610f96565b63ffffffff808216600090815260076020526040902054780100000000000000000000000000000000000000000000000090041642106141b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c697374696e67206578706972656400000000000000000000000000000000006044820152606401610f96565b63ffffffff811660009081526007602052604090206002015434111561425a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4d757374206f66666572206c657373207468616e20726571756573746564457460448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610f96565b60065463ffffffff82166000908152600760205260409020600201546127109161428a9161ffff909116906154ab565b61429491906154c2565b341015614323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4d757374206f66666572206d6f7265207468616e206d696e696d756d206f666660448201527f657220616d6f756e7400000000000000000000000000000000000000000000006064820152608401610f96565b60045463ffffffff82166000908152600760205260409020600301546127109161436a917401000000000000000000000000000000000000000090910461ffff16906154ab565b61437491906154c2565b63ffffffff821660009081526007602052604090206003015461439791906155ed565b34101561444d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4d7573742073656e64206d6f7265207468616e206c617374206f666665722062908201527f79206d696e4f66666572496e6372656d656e7450657263656e7461676520616d60648201527f6f756e7400000000000000000000000000000000000000000000000000000000608482015260a401610f96565b63ffffffff811660009081526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1633036144e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c6973746572206e6f7420616c6c6f77656420746f204f6666657200000000006044820152606401610f96565b63ffffffff8082166000908152600760205260408120600501546008805473ffffffffffffffffffffffffffffffffffffffff6401000000009384900416949290049091169060046145328361556e565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146146225763ffffffff83166000908152600760205260409020600301546145aa9083906149da565b63ffffffff838116600081815260076020818152604080842060058101549096168452600a8252832080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167402000000000000000000000000000000000000000017905592909152905260038101546004909101555b63ffffffff838116600090815260076020526040902034600382015560050180547fffffffffffffffff0000000000000000000000000000000000000000000000001633640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001617918316919091178082557801000000000000000000000000000000000000000000000000900461ffff169060186146c683615600565b825461ffff91821661010093840a908102920219161790915563ffffffff8581166000818152600960209081526040808320805460018181018355918552838520600880830490910180548c8a166004600795861681028d0a828102908d021990931692909217909255818852600a87528588208054348288018190557fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff75010000000000000000000000000000000000000000008d027fffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff339081167fffffffffffffff00000000ff00000000000000000000000000000000000000009095169490941717167401000000000000000000000000000000000000000017909255808a52600b8952878a20805497880181558a52988890209386049093018054959094160290990a808a02980219909216969096179095558051928352908201939093529093507f3f7c2cdea5021ba3a44bd1f2eb0670e2c25f5ee8f4f44abfcb0564a28bdfb342910160405180910390a35050600160005550565b614869614959565b600680549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b6148aa614959565b73ffffffffffffffffffffffffffffffffffffffff811661494d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f96565b61495681614be3565b50565b60015473ffffffffffffffffffffffffffffffffffffffff1633146123bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f96565b6149e48282614cbe565b614b0b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015614a5257600080fd5b505af1158015614a66573d6000803e3d6000fd5b50506003546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015260248201879052909116935063a9059cbb925060440190506020604051808303816000875af1158015614ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b099190615617565b505b5050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052614b099084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614d4b565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052614cb89085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401614b61565b50505050565b60408051600080825260208201909252819073ffffffffffffffffffffffffffffffffffffffff851690617530908590604051614cfb9190615634565b600060405180830381858888f193505050503d8060008114614d39576040519150601f19603f3d011682016040523d82523d6000602084013e614d3e565b606091505b5090925050505b92915050565b6000614dad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614e579092919063ffffffff16565b805190915015614b095780806020019051810190614dcb9190615617565b614b09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610f96565b6060614e668484600085614e70565b90505b9392505050565b606082471015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610f96565b73ffffffffffffffffffffffffffffffffffffffff85163b614f80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f96565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051614fa99190615634565b60006040518083038185875af1925050503d8060008114614fe6576040519150601f19603f3d011682016040523d82523d6000602084013e614feb565b606091505b5091509150614ffb828286615006565b979650505050505050565b60608315615015575081614e69565b8251156150255782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f969190615316565b803563ffffffff811681146122c857600080fd5b60006020828403121561507f57600080fd5b614e6982615059565b801515811461495657600080fd5b6000602082840312156150a857600080fd5b8135614e6981615088565b600080604083850312156150c657600080fd5b6150cf83615059565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461495657600080fd5b803561ffff811681146122c857600080fd5b6000806040838503121561512457600080fd5b823561512f816150dd565b915061513d602084016150ff565b90509250929050565b6000806040838503121561515957600080fd5b61516283615059565b915061513d60208401615059565b60006020828403121561518257600080fd5b614e69826150ff565b60006101a08201905073ffffffffffffffffffffffffffffffffffffffff8f16825263ffffffff8e16602083015263ffffffff8d1660408301528b60608301528a60808301528960a08301528860c083015263ffffffff881660e083015273ffffffffffffffffffffffffffffffffffffffff871661010083015261521761012083018761ffff169052565b9315156101408201529115156101608301521515610180909101529a9950505050505050505050565b60006020828403121561525257600080fd5b8135614e69816150dd565b60005b83811015615278578181015183820152602001615260565b50506000910152565b6000815180845261529981602086016020860161525d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015263ffffffff8316604082015260806060820152600061530c6080830184615281565b9695505050505050565b602081526000614e696020830184615281565b60006020828403121561533b57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561537857815163ffffffff1687529582019590820190600101615356565b509495945050505050565b602081526000614e696020830184615342565b6000806000606084860312156153ab57600080fd5b83359250602084013591506153c260408501615059565b90509250925092565b6040815260006153de6040830185615342565b82810360208481019190915284518083528582019282019060005b8181101561541857845160ff16835293830193918301916001016153f9565b5090979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff82168061546a5761546a615425565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b6000602082840312156154a457600080fd5b5051919050565b8082028115828204841417614d4557614d45615425565b6000826154f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81810381811115614d4557614d45615425565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff80831681810361558757615587615425565b6001019392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155c2576155c2615425565b5060010190565b63ffffffff8281168282160390808211156155e6576155e6615425565b5092915050565b80820180821115614d4557614d45615425565b600061ffff80831681810361558757615587615425565b60006020828403121561562957600080fd5b8151614e6981615088565b6000825161564681846020870161525d565b919091019291505056fea26469706673582212205b0ce5f7d1ff4ab0bbb6340a68fe6324ac777bbb12f7812066b3ac3aedbfe8c364736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000068baba24ee60933c6e22ea7701d9771285dde27a000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000002276c60f53c9a807e182d112f9b37d7277463fec0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d0717faddb61c48e3fce46abc2b2dcaa43d125500000000000000000000000000000000000000000000000000000000000001f4
-----Decoded View---------------
Arg [0] : _dust (address): 0x68bABA24ee60933c6E22Ea7701D9771285DDE27a
Arg [1] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : _sweepers (address): 0x2276C60F53c9a807e182d112f9b37D7277463Fec
Arg [3] : _minOfferIncrementPercentage (uint16): 100
Arg [4] : _minListPrice (uint256): 0
Arg [5] : _minOfferPercent (uint16): 0
Arg [6] : _taxWallet (address): 0x9D0717fAdDb61c48e3fCE46ABC2B2DCAA43D1255
Arg [7] : _tax (uint16): 500
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000068baba24ee60933c6e22ea7701d9771285dde27a
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 0000000000000000000000002276c60f53c9a807e182d112f9b37d7277463fec
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000009d0717faddb61c48e3fce46abc2b2dcaa43d1255
Arg [7] : 00000000000000000000000000000000000000000000000000000000000001f4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,070.39 | 0.225 | $690.84 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.