Contract Address Details
contract
0xdCc1dD0BC399fbd6c8b9Fbe5d2c5AF998C66d6ed
- Contract Name
- Etherboard
- Creator
- 0x88a80d–7fcc6e at 0x4718bc–67344f
- Balance
- 19.61640625 xDai ( )
- Tokens
-
Fetching tokens...
- Transactions
- 56 Transactions
- Transfers
- 0 Transfers
- Gas Used
- 7,964,572
- Last Balance Update
- 27112086
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- Etherboard
- Optimization enabled
- true
- Compiler version
- v0.8.7+commit.e28d00a7
- Optimization runs
- 200
- EVM Version
- london
- Verified at
- 2022-03-06T22:32:01.865575Z
contracts/etherboard.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; contract Etherboard { // @dev Data model for every slot without owner. struct Slot { string img; string caption; string link; uint minSalePrice; uint totalSales; } mapping (uint => Slot) private slots; // @dev In some cases, we need to check only the owner of the slot. // Slot owners are stored separately to avoid retrieving the whole slot // to make ownership checks. mapping (uint256 => address) public slotOwners; mapping (address => bool) private managerLookup; mapping (address => uint256) private managerBalances; address[] managers; uint256 public firstMinSalePrice; uint256 public numOfSlots = 10; uint256 public commissionPercent = 20; uint256 public autoPriceIncreasePercent = 50; bool public pricesAreLocked = false; function isManager(address _address) public view returns (bool) { return managerLookup[_address]; } modifier onlyManagers() { require( isManager(msg.sender) == true, "Only managers can run this operation." ); _; } modifier onlyNonManagers() { require( isManager(msg.sender) == false, "Managers can not run this operation." ); _; } modifier onlySlotOwnerOrManager(uint256 index) { require( slotOwners[index] == msg.sender || isManager(msg.sender) == true, "Only owner of the slot can run this operation." ); _; } function setFirstMinSalePrice( uint _firstMinSalePrice ) public payable onlyManagers { firstMinSalePrice = _firstMinSalePrice; } function setCommissionPercent( uint _commissionPercent ) public payable onlyManagers { commissionPercent = _commissionPercent; } function setAutoPriceIncreasePercent( uint _autoPriceIncreasePercent ) public payable onlyManagers { autoPriceIncreasePercent = _autoPriceIncreasePercent; } function setPricesAreLocked( bool _pricesAreLocked ) public payable onlyManagers { pricesAreLocked = _pricesAreLocked; } // TODO: private or internal? function shareManagerProfits( uint256 totalProfit ) private { uint256 share = totalProfit / managers.length; for(uint i = 0; i < managers.length; i++){ address manager = managers[i]; managerBalances[manager] += share; } } // Function that allow managers to withdraw their money. function managerWithdraw() public onlyManagers { uint256 balance = managerBalances[msg.sender]; require(balance > 0, "You don't have any balance to withdraw."); payable(msg.sender).transfer(balance); } function getManagerBalance(address _manager) public view onlyManagers returns (uint256 balance) { return managerBalances[_manager]; } constructor( uint _firstMinSalePrice, address[] memory _managers ) payable { for(uint i = 0; i < _managers.length; i++){ address manager = _managers[i]; managers.push(manager); managerLookup[manager] = true; } firstMinSalePrice = _firstMinSalePrice; } function getSlot(uint256 index) public view returns ( string memory caption, string memory link, string memory img, uint256 minSalePrice, uint256 totalSales ) { Slot storage slot = slots[index]; return ( slot.caption, slot.link, slot.img, slot.totalSales > 0 ? slot.minSalePrice : firstMinSalePrice, slot.totalSales ); } function processPayment( uint256 index, string memory caption, string memory link, string memory img ) public payable onlyNonManagers { // TODO: Why this?? require(msg.sender != address(0), "Invalid address for operation"); require(index <= numOfSlots, "Invalid slot index."); Slot storage slot = slots[index]; uint256 buyerPrice = msg.value; uint256 slotPrice = slot.totalSales == 0 ? firstMinSalePrice : slot.minSalePrice; require(buyerPrice >= slotPrice, "Insufficient fund"); uint newMinSalePrice = buyerPrice + (buyerPrice * autoPriceIncreasePercent / 100); address slotOwner = slotOwners[index]; if(slotOwner == address(0)) { // First sale. shareManagerProfits(buyerPrice); if (index >= numOfSlots) {numOfSlots = index + 1;} } else { uint managersProfit = buyerPrice * commissionPercent / 100; uint ownerProfit = buyerPrice - managersProfit; shareManagerProfits(managersProfit); payable(slotOwners[index]).transfer(ownerProfit); } slotOwners[index] = msg.sender; slot.minSalePrice = newMinSalePrice; slot.img = img; slot.caption = caption; slot.link = link; slot.totalSales += 1; } function setSlotProperties( uint256 index, string memory caption, string memory link, string memory img, uint minSalePrice ) public onlySlotOwnerOrManager(index) { Slot storage slot = slots[index]; if (pricesAreLocked) { require( slot.minSalePrice == minSalePrice, "Slot price must be same as before." ); } slot.img = img; slot.caption = caption; slot.link = link; slot.minSalePrice = minSalePrice; } }
Contract ABI
[{"type":"constructor","stateMutability":"payable","inputs":[{"type":"uint256","name":"_firstMinSalePrice","internalType":"uint256"},{"type":"address[]","name":"_managers","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"autoPriceIncreasePercent","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"commissionPercent","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"firstMinSalePrice","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"getManagerBalance","inputs":[{"type":"address","name":"_manager","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"caption","internalType":"string"},{"type":"string","name":"link","internalType":"string"},{"type":"string","name":"img","internalType":"string"},{"type":"uint256","name":"minSalePrice","internalType":"uint256"},{"type":"uint256","name":"totalSales","internalType":"uint256"}],"name":"getSlot","inputs":[{"type":"uint256","name":"index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isManager","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"managerWithdraw","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"numOfSlots","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"pricesAreLocked","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"processPayment","inputs":[{"type":"uint256","name":"index","internalType":"uint256"},{"type":"string","name":"caption","internalType":"string"},{"type":"string","name":"link","internalType":"string"},{"type":"string","name":"img","internalType":"string"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"setAutoPriceIncreasePercent","inputs":[{"type":"uint256","name":"_autoPriceIncreasePercent","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"setCommissionPercent","inputs":[{"type":"uint256","name":"_commissionPercent","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"setFirstMinSalePrice","inputs":[{"type":"uint256","name":"_firstMinSalePrice","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"setPricesAreLocked","inputs":[{"type":"bool","name":"_pricesAreLocked","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSlotProperties","inputs":[{"type":"uint256","name":"index","internalType":"uint256"},{"type":"string","name":"caption","internalType":"string"},{"type":"string","name":"link","internalType":"string"},{"type":"string","name":"img","internalType":"string"},{"type":"uint256","name":"minSalePrice","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"slotOwners","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]}]
Contract Creation Code
0x60806040819052600a600655601460075560326008556009805460ff19169055620012cf388190039081908339810160408190526200003e916200010f565b60005b8151811015620000e757600082828151811062000062576200006262000220565b6020908102919091018101516004805460018082019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0390931692831790556000918252600290925260409020805460ff191690911790555080620000de81620001f6565b91505062000041565b50506005556200024c565b80516001600160a01b03811681146200010a57600080fd5b919050565b600080604083850312156200012357600080fd5b8251602080850151919350906001600160401b03808211156200014557600080fd5b818601915086601f8301126200015a57600080fd5b8151818111156200016f576200016f62000236565b8060051b604051601f19603f8301168101818110858211171562000197576200019762000236565b604052828152858101935084860182860187018b1015620001b757600080fd5b600095505b83861015620001e557620001d081620000f2565b855260019590950194938601938601620001bc565b508096505050505050509250929050565b60006000198214156200021957634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b611073806200025c6000396000f3fe6080604052600436106100f35760003560e01c806377d3550b1161008a578063b4f5b37f11610059578063b4f5b37f14610237578063ce16097e1461024a578063ddc963c514610298578063f3ae2415146102c257600080fd5b806377d3550b146101bd5780637eba7ba6146101d357806390a9f3ea14610204578063969ec5181461022457600080fd5b8063404a9ab8116100c6578063404a9ab814610161578063442f8dd0146101745780634894d533146101875780634e39bcf4146101a757600080fd5b8063066de3e3146100f857806315e16a181461010f57806319cfc36a146101385780633c2240ff1461014b575b600080fd5b34801561010457600080fd5b5061010d6102e2565b005b34801561011b57600080fd5b5061012560085481565b6040519081526020015b60405180910390f35b61010d610146366004610d29565b6103b3565b34801561015757600080fd5b5061012560065481565b61010d61016f366004610d10565b61068e565b61010d610182366004610d10565b6106bd565b34801561019357600080fd5b5061010d6101a2366004610dbb565b6106ec565b3480156101b357600080fd5b5061012560055481565b3480156101c957600080fd5b5061012560075481565b3480156101df57600080fd5b506101f36101ee366004610d10565b610844565b60405161012f959493929190610ea2565b34801561021057600080fd5b5061012561021f366004610cbe565b610a3c565b61010d610232366004610d10565b610a84565b61010d610245366004610cee565b610ab3565b34801561025657600080fd5b50610280610265366004610d10565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161012f565b3480156102a457600080fd5b506009546102b29060ff1681565b604051901515815260200161012f565b3480156102ce57600080fd5b506102b26102dd366004610cbe565b610af0565b6102eb33610af0565b15156001146103155760405162461bcd60e51b815260040161030c90610ef0565b60405180910390fd5b33600090815260036020526040902054806103825760405162461bcd60e51b815260206004820152602760248201527f596f7520646f6e2774206861766520616e792062616c616e636520746f2077696044820152663a34323930bb9760c91b606482015260840161030c565b604051339082156108fc029083906000818181858888f193505050501580156103af573d6000803e3d6000fd5b5050565b6103bc33610af0565b156104155760405162461bcd60e51b8152602060048201526024808201527f4d616e61676572732063616e206e6f742072756e2074686973206f706572617460448201526334b7b71760e11b606482015260840161030c565b336104625760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206164647265737320666f72206f7065726174696f6e000000604482015260640161030c565b6006548411156104aa5760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b21039b637ba1034b73232bc1760691b604482015260640161030c565b6000848152602081905260408120600481015490913491156104d05782600301546104d4565b6005545b90508082101561051a5760405162461bcd60e51b8152602060048201526011602482015270125b9cdd59999a58da595b9d08199d5b99607a1b604482015260640161030c565b600060646008548461052c9190610f6f565b6105369190610f4d565b6105409084610f35565b6000898152600160205260409020549091506001600160a01b0316806105865761056984610b0e565b60065489106105815761057d896001610f35565b6006555b610603565b60006064600754866105989190610f6f565b6105a29190610f4d565b905060006105b08287610f8e565b90506105bb82610b0e565b60008b8152600160205260408082205490516001600160a01b039091169183156108fc02918491818181858888f193505050501580156105ff573d6000803e3d6000fd5b5050505b600089815260016020908152604090912080546001600160a01b0319163317905560038601839055865161063c91879190890190610b98565b50875161065290600187019060208b0190610b98565b50865161066890600287019060208a0190610b98565b50600185600401600082825461067e9190610f35565b9091555050505050505050505050565b61069733610af0565b15156001146106b85760405162461bcd60e51b815260040161030c90610ef0565b600755565b6106c633610af0565b15156001146106e75760405162461bcd60e51b815260040161030c90610ef0565b600555565b60008581526001602052604090205485906001600160a01b031633148061071d575061071733610af0565b15156001145b6107805760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206f776e6572206f662074686520736c6f742063616e2072756e207460448201526d3434b99037b832b930ba34b7b71760911b606482015260840161030c565b600086815260208190526040902060095460ff16156107f757828160030154146107f75760405162461bcd60e51b815260206004820152602260248201527f536c6f74207072696365206d7573742062652073616d65206173206265666f72604482015261329760f11b606482015260840161030c565b83516108099082906020870190610b98565b50855161081f9060018301906020890190610b98565b5084516108359060028301906020880190610b98565b50600301919091555050505050565b60008181526020819052604081206004810154606092839283928291906001820190600283019083906108795760055461087f565b83600301545b846004015484805461089090610fa5565b80601f01602080910402602001604051908101604052809291908181526020018280546108bc90610fa5565b80156109095780601f106108de57610100808354040283529160200191610909565b820191906000526020600020905b8154815290600101906020018083116108ec57829003601f168201915b5050505050945083805461091c90610fa5565b80601f016020809104026020016040519081016040528092919081815260200182805461094890610fa5565b80156109955780601f1061096a57610100808354040283529160200191610995565b820191906000526020600020905b81548152906001019060200180831161097857829003601f168201915b505050505093508280546109a890610fa5565b80601f01602080910402602001604051908101604052809291908181526020018280546109d490610fa5565b8015610a215780601f106109f657610100808354040283529160200191610a21565b820191906000526020600020905b815481529060010190602001808311610a0457829003601f168201915b50505050509250955095509550955095505091939590929450565b6000610a4733610af0565b1515600114610a685760405162461bcd60e51b815260040161030c90610ef0565b506001600160a01b031660009081526003602052604090205490565b610a8d33610af0565b1515600114610aae5760405162461bcd60e51b815260040161030c90610ef0565b600855565b610abc33610af0565b1515600114610add5760405162461bcd60e51b815260040161030c90610ef0565b6009805460ff1916911515919091179055565b6001600160a01b031660009081526002602052604090205460ff1690565b600454600090610b1e9083610f4d565b905060005b600454811015610b9357600060048281548110610b4257610b42611011565b60009182526020808320909101546001600160a01b0316808352600390915260408220805491935085929091610b79908490610f35565b90915550829150610b8b905081610fe0565b915050610b23565b505050565b828054610ba490610fa5565b90600052602060002090601f016020900481019282610bc65760008555610c0c565b82601f10610bdf57805160ff1916838001178555610c0c565b82800160010185558215610c0c579182015b82811115610c0c578251825591602001919060010190610bf1565b50610c18929150610c1c565b5090565b5b80821115610c185760008155600101610c1d565b600082601f830112610c4257600080fd5b813567ffffffffffffffff80821115610c5d57610c5d611027565b604051601f8301601f19908116603f01168101908282118183101715610c8557610c85611027565b81604052838152866020858801011115610c9e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215610cd057600080fd5b81356001600160a01b0381168114610ce757600080fd5b9392505050565b600060208284031215610d0057600080fd5b81358015158114610ce757600080fd5b600060208284031215610d2257600080fd5b5035919050565b60008060008060808587031215610d3f57600080fd5b84359350602085013567ffffffffffffffff80821115610d5e57600080fd5b610d6a88838901610c31565b94506040870135915080821115610d8057600080fd5b610d8c88838901610c31565b93506060870135915080821115610da257600080fd5b50610daf87828801610c31565b91505092959194509250565b600080600080600060a08688031215610dd357600080fd5b85359450602086013567ffffffffffffffff80821115610df257600080fd5b610dfe89838a01610c31565b95506040880135915080821115610e1457600080fd5b610e2089838a01610c31565b94506060880135915080821115610e3657600080fd5b50610e4388828901610c31565b95989497509295608001359392505050565b6000815180845260005b81811015610e7b57602081850181015186830182015201610e5f565b81811115610e8d576000602083870101525b50601f01601f19169290920160200192915050565b60a081526000610eb560a0830188610e55565b8281036020840152610ec78188610e55565b90508281036040840152610edb8187610e55565b60608401959095525050608001529392505050565b60208082526025908201527f4f6e6c79206d616e61676572732063616e2072756e2074686973206f706572616040820152643a34b7b71760d91b606082015260800190565b60008219821115610f4857610f48610ffb565b500190565b600082610f6a57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610f8957610f89610ffb565b500290565b600082821015610fa057610fa0610ffb565b500390565b600181811c90821680610fb957607f821691505b60208210811415610fda57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415610ff457610ff4610ffb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220325e6eae5c7d93327fe7edb508c374f2b9e919bf5f9b68891d2637dfde8e76a864736f6c634300080700330000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000088a80d61b6edb30cbd468b009a6df4a8f77fcc6e000000000000000000000000fe1bd6b67f2018bbaf389e613a3a1b0fff8c8380
Deployed ByteCode
0x6080604052600436106100f35760003560e01c806377d3550b1161008a578063b4f5b37f11610059578063b4f5b37f14610237578063ce16097e1461024a578063ddc963c514610298578063f3ae2415146102c257600080fd5b806377d3550b146101bd5780637eba7ba6146101d357806390a9f3ea14610204578063969ec5181461022457600080fd5b8063404a9ab8116100c6578063404a9ab814610161578063442f8dd0146101745780634894d533146101875780634e39bcf4146101a757600080fd5b8063066de3e3146100f857806315e16a181461010f57806319cfc36a146101385780633c2240ff1461014b575b600080fd5b34801561010457600080fd5b5061010d6102e2565b005b34801561011b57600080fd5b5061012560085481565b6040519081526020015b60405180910390f35b61010d610146366004610d29565b6103b3565b34801561015757600080fd5b5061012560065481565b61010d61016f366004610d10565b61068e565b61010d610182366004610d10565b6106bd565b34801561019357600080fd5b5061010d6101a2366004610dbb565b6106ec565b3480156101b357600080fd5b5061012560055481565b3480156101c957600080fd5b5061012560075481565b3480156101df57600080fd5b506101f36101ee366004610d10565b610844565b60405161012f959493929190610ea2565b34801561021057600080fd5b5061012561021f366004610cbe565b610a3c565b61010d610232366004610d10565b610a84565b61010d610245366004610cee565b610ab3565b34801561025657600080fd5b50610280610265366004610d10565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161012f565b3480156102a457600080fd5b506009546102b29060ff1681565b604051901515815260200161012f565b3480156102ce57600080fd5b506102b26102dd366004610cbe565b610af0565b6102eb33610af0565b15156001146103155760405162461bcd60e51b815260040161030c90610ef0565b60405180910390fd5b33600090815260036020526040902054806103825760405162461bcd60e51b815260206004820152602760248201527f596f7520646f6e2774206861766520616e792062616c616e636520746f2077696044820152663a34323930bb9760c91b606482015260840161030c565b604051339082156108fc029083906000818181858888f193505050501580156103af573d6000803e3d6000fd5b5050565b6103bc33610af0565b156104155760405162461bcd60e51b8152602060048201526024808201527f4d616e61676572732063616e206e6f742072756e2074686973206f706572617460448201526334b7b71760e11b606482015260840161030c565b336104625760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206164647265737320666f72206f7065726174696f6e000000604482015260640161030c565b6006548411156104aa5760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b21039b637ba1034b73232bc1760691b604482015260640161030c565b6000848152602081905260408120600481015490913491156104d05782600301546104d4565b6005545b90508082101561051a5760405162461bcd60e51b8152602060048201526011602482015270125b9cdd59999a58da595b9d08199d5b99607a1b604482015260640161030c565b600060646008548461052c9190610f6f565b6105369190610f4d565b6105409084610f35565b6000898152600160205260409020549091506001600160a01b0316806105865761056984610b0e565b60065489106105815761057d896001610f35565b6006555b610603565b60006064600754866105989190610f6f565b6105a29190610f4d565b905060006105b08287610f8e565b90506105bb82610b0e565b60008b8152600160205260408082205490516001600160a01b039091169183156108fc02918491818181858888f193505050501580156105ff573d6000803e3d6000fd5b5050505b600089815260016020908152604090912080546001600160a01b0319163317905560038601839055865161063c91879190890190610b98565b50875161065290600187019060208b0190610b98565b50865161066890600287019060208a0190610b98565b50600185600401600082825461067e9190610f35565b9091555050505050505050505050565b61069733610af0565b15156001146106b85760405162461bcd60e51b815260040161030c90610ef0565b600755565b6106c633610af0565b15156001146106e75760405162461bcd60e51b815260040161030c90610ef0565b600555565b60008581526001602052604090205485906001600160a01b031633148061071d575061071733610af0565b15156001145b6107805760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206f776e6572206f662074686520736c6f742063616e2072756e207460448201526d3434b99037b832b930ba34b7b71760911b606482015260840161030c565b600086815260208190526040902060095460ff16156107f757828160030154146107f75760405162461bcd60e51b815260206004820152602260248201527f536c6f74207072696365206d7573742062652073616d65206173206265666f72604482015261329760f11b606482015260840161030c565b83516108099082906020870190610b98565b50855161081f9060018301906020890190610b98565b5084516108359060028301906020880190610b98565b50600301919091555050505050565b60008181526020819052604081206004810154606092839283928291906001820190600283019083906108795760055461087f565b83600301545b846004015484805461089090610fa5565b80601f01602080910402602001604051908101604052809291908181526020018280546108bc90610fa5565b80156109095780601f106108de57610100808354040283529160200191610909565b820191906000526020600020905b8154815290600101906020018083116108ec57829003601f168201915b5050505050945083805461091c90610fa5565b80601f016020809104026020016040519081016040528092919081815260200182805461094890610fa5565b80156109955780601f1061096a57610100808354040283529160200191610995565b820191906000526020600020905b81548152906001019060200180831161097857829003601f168201915b505050505093508280546109a890610fa5565b80601f01602080910402602001604051908101604052809291908181526020018280546109d490610fa5565b8015610a215780601f106109f657610100808354040283529160200191610a21565b820191906000526020600020905b815481529060010190602001808311610a0457829003601f168201915b50505050509250955095509550955095505091939590929450565b6000610a4733610af0565b1515600114610a685760405162461bcd60e51b815260040161030c90610ef0565b506001600160a01b031660009081526003602052604090205490565b610a8d33610af0565b1515600114610aae5760405162461bcd60e51b815260040161030c90610ef0565b600855565b610abc33610af0565b1515600114610add5760405162461bcd60e51b815260040161030c90610ef0565b6009805460ff1916911515919091179055565b6001600160a01b031660009081526002602052604090205460ff1690565b600454600090610b1e9083610f4d565b905060005b600454811015610b9357600060048281548110610b4257610b42611011565b60009182526020808320909101546001600160a01b0316808352600390915260408220805491935085929091610b79908490610f35565b90915550829150610b8b905081610fe0565b915050610b23565b505050565b828054610ba490610fa5565b90600052602060002090601f016020900481019282610bc65760008555610c0c565b82601f10610bdf57805160ff1916838001178555610c0c565b82800160010185558215610c0c579182015b82811115610c0c578251825591602001919060010190610bf1565b50610c18929150610c1c565b5090565b5b80821115610c185760008155600101610c1d565b600082601f830112610c4257600080fd5b813567ffffffffffffffff80821115610c5d57610c5d611027565b604051601f8301601f19908116603f01168101908282118183101715610c8557610c85611027565b81604052838152866020858801011115610c9e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215610cd057600080fd5b81356001600160a01b0381168114610ce757600080fd5b9392505050565b600060208284031215610d0057600080fd5b81358015158114610ce757600080fd5b600060208284031215610d2257600080fd5b5035919050565b60008060008060808587031215610d3f57600080fd5b84359350602085013567ffffffffffffffff80821115610d5e57600080fd5b610d6a88838901610c31565b94506040870135915080821115610d8057600080fd5b610d8c88838901610c31565b93506060870135915080821115610da257600080fd5b50610daf87828801610c31565b91505092959194509250565b600080600080600060a08688031215610dd357600080fd5b85359450602086013567ffffffffffffffff80821115610df257600080fd5b610dfe89838a01610c31565b95506040880135915080821115610e1457600080fd5b610e2089838a01610c31565b94506060880135915080821115610e3657600080fd5b50610e4388828901610c31565b95989497509295608001359392505050565b6000815180845260005b81811015610e7b57602081850181015186830182015201610e5f565b81811115610e8d576000602083870101525b50601f01601f19169290920160200192915050565b60a081526000610eb560a0830188610e55565b8281036020840152610ec78188610e55565b90508281036040840152610edb8187610e55565b60608401959095525050608001529392505050565b60208082526025908201527f4f6e6c79206d616e61676572732063616e2072756e2074686973206f706572616040820152643a34b7b71760d91b606082015260800190565b60008219821115610f4857610f48610ffb565b500190565b600082610f6a57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610f8957610f89610ffb565b500290565b600082821015610fa057610fa0610ffb565b500390565b600181811c90821680610fb957607f821691505b60208210811415610fda57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415610ff457610ff4610ffb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220325e6eae5c7d93327fe7edb508c374f2b9e919bf5f9b68891d2637dfde8e76a864736f6c63430008070033