Contract Address Details
0xd2E295a42667854B22a1e2B2507d08056E35AC08
- Creator
- 0xc890a0–ee8ac5 at 0x88b0a7–ddb697
- Balance
- 41.201986985217906854 Doge
- Tokens
-
Fetching tokens...
- Transactions
- 2,457 Transactions
- Transfers
- 0 Transfers
- Gas Used
- 146,146,062
- Last Balance Update
- 25378551
- Contract name:
- BourbonDoge
- Optimization enabled
- true
- Compiler version
- v0.8.9+commit.e5eed63a
- Optimization runs
- 999999
- EVM Version
- default
- Verified at
- 2022-08-17T01:46:57.765095Z
Contract source code
/** *Submitted for verification at BscScan.com on 2022-04-09 */ // SPDX-License-Identifier: MIT library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } pragma solidity 0.8.9; /** * @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; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract BourbonDoge is Context, Ownable { using SafeMath for uint256; uint256 private EGGS_TO_HATCH_1MINERS = 1080000;//for final version should be seconds in a day uint256 private PSN = 10000; uint256 private PSNH = 5000; uint256 private devFeeVal = 6; bool private initialized = false; address payable private recAdd; mapping (address => uint256) private hatcheryMiners; mapping (address => uint256) private claimedEggs; mapping (address => uint256) private lastHatch; mapping (address => address) private referrals; uint256 private marketEggs; constructor() { recAdd = payable(msg.sender); } function hatchEggs(address ref) public { require(initialized); if(ref == msg.sender) { ref = address(0); } if(referrals[msg.sender] == address(0) && referrals[msg.sender] != msg.sender) { referrals[msg.sender] = ref; } uint256 eggsUsed = getMyEggs(msg.sender); uint256 newMiners = SafeMath.div(eggsUsed,EGGS_TO_HATCH_1MINERS); hatcheryMiners[msg.sender] = SafeMath.add(hatcheryMiners[msg.sender],newMiners); claimedEggs[msg.sender] = 0; lastHatch[msg.sender] = block.timestamp; //send referral eggs claimedEggs[referrals[msg.sender]] = SafeMath.add(claimedEggs[referrals[msg.sender]],SafeMath.div(eggsUsed,20)); //boost market to nerf miners hoarding marketEggs=SafeMath.add(marketEggs,SafeMath.div(eggsUsed,5)); } function sellEggs() public { require(initialized); uint256 hasEggs = getMyEggs(msg.sender); uint256 eggValue = calculateEggSell(hasEggs); uint256 fee = devFee(eggValue); claimedEggs[msg.sender] = 0; lastHatch[msg.sender] = block.timestamp; marketEggs = SafeMath.add(marketEggs,hasEggs); recAdd.transfer(fee); payable (msg.sender).transfer(SafeMath.sub(eggValue,fee)); } function beanRewards(address adr) public view returns(uint256) { uint256 hasEggs = getMyEggs(adr); uint256 eggValue = calculateEggSell(hasEggs); return eggValue; } function buyEggs(address ref) public payable { require(initialized); uint256 eggsBought = calculateEggBuy(msg.value,SafeMath.sub(address(this).balance,msg.value)); eggsBought = SafeMath.sub(eggsBought,devFee(eggsBought)); uint256 fee = devFee(msg.value); recAdd.transfer(fee); claimedEggs[msg.sender] = SafeMath.add(claimedEggs[msg.sender],eggsBought); hatchEggs(ref); } function calculateTrade(uint256 rt,uint256 rs, uint256 bs) private view returns(uint256) { return SafeMath.div(SafeMath.mul(PSN,bs),SafeMath.add(PSNH,SafeMath.div(SafeMath.add(SafeMath.mul(PSN,rs),SafeMath.mul(PSNH,rt)),rt))); } function calculateEggSell(uint256 eggs) public view returns(uint256) { return calculateTrade(eggs,marketEggs,address(this).balance); } function calculateEggBuy(uint256 eth,uint256 contractBalance) public view returns(uint256) { return calculateTrade(eth,contractBalance,marketEggs); } function calculateEggBuySimple(uint256 eth) public view returns(uint256) { return calculateEggBuy(eth,address(this).balance); } function devFee(uint256 amount) private view returns(uint256) { return SafeMath.div(SafeMath.mul(amount,devFeeVal),100); } function seedMarket() public payable onlyOwner { require(marketEggs == 0); initialized = true; marketEggs = 108000000000; } function getBalance() public view returns(uint256) { return address(this).balance; } function getMyMiners(address adr) public view returns(uint256) { return hatcheryMiners[adr]; } function getMyEggs(address adr) public view returns(uint256) { return SafeMath.add(claimedEggs[adr],getEggsSinceLastHatch(adr)); } function getEggsSinceLastHatch(address adr) public view returns(uint256) { uint256 secondsPassed=min(EGGS_TO_HATCH_1MINERS,SafeMath.sub(block.timestamp,lastHatch[adr])); return SafeMath.mul(secondsPassed,hatcheryMiners[adr]); } function min(uint256 a, uint256 b) private pure returns (uint256) { return a < b ? a : b; } }
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"beanRewards","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"buyEggs","inputs":[{"type":"address","name":"ref","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"calculateEggBuy","inputs":[{"type":"uint256","name":"eth","internalType":"uint256"},{"type":"uint256","name":"contractBalance","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"calculateEggBuySimple","inputs":[{"type":"uint256","name":"eth","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"calculateEggSell","inputs":[{"type":"uint256","name":"eggs","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getBalance","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getEggsSinceLastHatch","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getMyEggs","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getMyMiners","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"hatchEggs","inputs":[{"type":"address","name":"ref","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"seedMarket","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"sellEggs","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
Contract Creation Code
0x608060405262107ac060015561271060025561138860035560066004556005805460ff1916905534801561003257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060058054610100600160a81b0319163361010002179055610cec8061009a6000396000f3fe6080604052600436106100e85760003560e01c8063715018a61161008a578063a507abee11610059578063a507abee1461025b578063d7c8843b1461027b578063db6638651461029b578063f2fde38b146102ae57600080fd5b8063715018a6146101d15780637e56fde5146101e65780638da5cb5b146102065780638e3163271461023b57600080fd5b80633955f0fe116100c65780633955f0fe1461014f5780633c5f07cb146101665780633ec862a81461016e5780634b634b061461018e57600080fd5b806312065fe0146100ed57806326fd84221461010f5780632ef6a7431461012f575b600080fd5b3480156100f957600080fd5b50475b6040519081526020015b60405180910390f35b34801561011b57600080fd5b506100fc61012a366004610b6f565b6102ce565b34801561013b57600080fd5b506100fc61014a366004610b91565b6102e4565b34801561015b57600080fd5b50610164610322565b005b610164610410565b34801561017a57600080fd5b50610164610189366004610b91565b6104d9565b34801561019a57600080fd5b506100fc6101a9366004610b91565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b3480156101dd57600080fd5b50610164610697565b3480156101f257600080fd5b506100fc610201366004610bc7565b610787565b34801561021257600080fd5b5060005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610106565b34801561024757600080fd5b506100fc610256366004610bc7565b610793565b34801561026757600080fd5b506100fc610276366004610b91565b6107a2565b34801561028757600080fd5b506100fc610296366004610b91565b6107c3565b6101646102a9366004610b91565b61084e565b3480156102ba57600080fd5b506101646102c9366004610b91565b610914565b60006102dd8383600a546109a1565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526007602052604081205461031c90610317846107c3565b6109e1565b92915050565b60055460ff1661033157600080fd5b600061033c336102e4565b9050600061034982610793565b90506000610356826109ed565b33600090815260076020908152604080832083905560089091529020429055600a5490915061038590846109e1565b600a5560055460405161010090910473ffffffffffffffffffffffffffffffffffffffff16906108fc8315029083906000818181858888f193505050501580156103d3573d6000803e3d6000fd5b50336108fc6103e28484610a05565b6040518115909202916000818181858888f1935050505015801561040a573d6000803e3d6000fd5b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600a54156104a357600080fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556419254d3800600a55565b60055460ff166104e857600080fd5b73ffffffffffffffffffffffffffffffffffffffff811633141561050a575060005b3360009081526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561056157503360008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1614155b156105b45733600090815260096020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b60006105bf336102e4565b905060006105cf82600154610a11565b336000908152600660205260409020549091506105ec90826109e1565b33600090815260066020908152604080832093909355600780825283832083905560088252838320429055600982528383205473ffffffffffffffffffffffffffffffffffffffff1683529052205461064a90610317846014610a11565b3360009081526009602090815260408083205473ffffffffffffffffffffffffffffffffffffffff1683526007909152902055600a5461068f90610317846005610a11565b600a55505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048d565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600061031c82476102ce565b600061031c82600a54476109a1565b6000806107ae836102e4565b905060006107bb82610793565b949350505050565b60008061081a60015461081542600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a05565b610a1d565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600660205260409020549091506102dd908290610a33565b60055460ff1661085d57600080fd5b600061086d3461012a4734610a05565b90506108818161087c836109ed565b610a05565b9050600061088e346109ed565b600554604051919250610100900473ffffffffffffffffffffffffffffffffffffffff16906108fc8315029083906000818181858888f193505050501580156108db573d6000803e3d6000fd5b50336000908152600760205260409020546108f690836109e1565b3360009081526007602052604090205561090f836104d9565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048d565b61099e81610a3f565b50565b60006107bb6109b260025484610a33565b6109dc6003546103176109d66109ca6002548a610a33565b6103176003548c610a33565b89610a11565b610a11565b60006102dd8284610c0f565b600061031c6109fe83600454610a33565b6064610a11565b60006102dd8284610c27565b60006102dd8284610c3e565b6000818310610a2c57816102dd565b5090919050565b60006102dd8284610c79565b73ffffffffffffffffffffffffffffffffffffffff8116610ae2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161048d565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060408385031215610b8257600080fd5b50508035926020909101359150565b600060208284031215610ba357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146102dd57600080fd5b600060208284031215610bd957600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610c2257610c22610be0565b500190565b600082821015610c3957610c39610be0565b500390565b600082610c74577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610cb157610cb1610be0565b50029056fea2646970667358221220480dc2dd666fc5de5c20a973d24d82b3da70fc3f14d9da6848db1635ac389fd964736f6c63430008090033
Deployed ByteCode
0x6080604052600436106100e85760003560e01c8063715018a61161008a578063a507abee11610059578063a507abee1461025b578063d7c8843b1461027b578063db6638651461029b578063f2fde38b146102ae57600080fd5b8063715018a6146101d15780637e56fde5146101e65780638da5cb5b146102065780638e3163271461023b57600080fd5b80633955f0fe116100c65780633955f0fe1461014f5780633c5f07cb146101665780633ec862a81461016e5780634b634b061461018e57600080fd5b806312065fe0146100ed57806326fd84221461010f5780632ef6a7431461012f575b600080fd5b3480156100f957600080fd5b50475b6040519081526020015b60405180910390f35b34801561011b57600080fd5b506100fc61012a366004610b6f565b6102ce565b34801561013b57600080fd5b506100fc61014a366004610b91565b6102e4565b34801561015b57600080fd5b50610164610322565b005b610164610410565b34801561017a57600080fd5b50610164610189366004610b91565b6104d9565b34801561019a57600080fd5b506100fc6101a9366004610b91565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b3480156101dd57600080fd5b50610164610697565b3480156101f257600080fd5b506100fc610201366004610bc7565b610787565b34801561021257600080fd5b5060005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610106565b34801561024757600080fd5b506100fc610256366004610bc7565b610793565b34801561026757600080fd5b506100fc610276366004610b91565b6107a2565b34801561028757600080fd5b506100fc610296366004610b91565b6107c3565b6101646102a9366004610b91565b61084e565b3480156102ba57600080fd5b506101646102c9366004610b91565b610914565b60006102dd8383600a546109a1565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526007602052604081205461031c90610317846107c3565b6109e1565b92915050565b60055460ff1661033157600080fd5b600061033c336102e4565b9050600061034982610793565b90506000610356826109ed565b33600090815260076020908152604080832083905560089091529020429055600a5490915061038590846109e1565b600a5560055460405161010090910473ffffffffffffffffffffffffffffffffffffffff16906108fc8315029083906000818181858888f193505050501580156103d3573d6000803e3d6000fd5b50336108fc6103e28484610a05565b6040518115909202916000818181858888f1935050505015801561040a573d6000803e3d6000fd5b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600a54156104a357600080fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556419254d3800600a55565b60055460ff166104e857600080fd5b73ffffffffffffffffffffffffffffffffffffffff811633141561050a575060005b3360009081526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561056157503360008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1614155b156105b45733600090815260096020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b60006105bf336102e4565b905060006105cf82600154610a11565b336000908152600660205260409020549091506105ec90826109e1565b33600090815260066020908152604080832093909355600780825283832083905560088252838320429055600982528383205473ffffffffffffffffffffffffffffffffffffffff1683529052205461064a90610317846014610a11565b3360009081526009602090815260408083205473ffffffffffffffffffffffffffffffffffffffff1683526007909152902055600a5461068f90610317846005610a11565b600a55505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048d565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600061031c82476102ce565b600061031c82600a54476109a1565b6000806107ae836102e4565b905060006107bb82610793565b949350505050565b60008061081a60015461081542600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a05565b610a1d565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600660205260409020549091506102dd908290610a33565b60055460ff1661085d57600080fd5b600061086d3461012a4734610a05565b90506108818161087c836109ed565b610a05565b9050600061088e346109ed565b600554604051919250610100900473ffffffffffffffffffffffffffffffffffffffff16906108fc8315029083906000818181858888f193505050501580156108db573d6000803e3d6000fd5b50336000908152600760205260409020546108f690836109e1565b3360009081526007602052604090205561090f836104d9565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048d565b61099e81610a3f565b50565b60006107bb6109b260025484610a33565b6109dc6003546103176109d66109ca6002548a610a33565b6103176003548c610a33565b89610a11565b610a11565b60006102dd8284610c0f565b600061031c6109fe83600454610a33565b6064610a11565b60006102dd8284610c27565b60006102dd8284610c3e565b6000818310610a2c57816102dd565b5090919050565b60006102dd8284610c79565b73ffffffffffffffffffffffffffffffffffffffff8116610ae2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161048d565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060408385031215610b8257600080fd5b50508035926020909101359150565b600060208284031215610ba357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146102dd57600080fd5b600060208284031215610bd957600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610c2257610c22610be0565b500190565b600082821015610c3957610c39610be0565b500390565b600082610c74577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610cb157610cb1610be0565b50029056fea2646970667358221220480dc2dd666fc5de5c20a973d24d82b3da70fc3f14d9da6848db1635ac389fd964736f6c63430008090033