Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x15Fb0d51420D3259607c45D1f6F4Ae2fF730B6c7
Balance 0.050000 ETH
Nonce 2
Code Size 20686 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

20686 bytes
0x608060405260043610620003e75760003560e01c8063845610ee1162000203578063b62496f51162000117578063e0f8e24311620000ad578063f2fde38b1162000078578063f2fde38b1462000cc4578063f708a64f1462000ce9578063f887ea401462000d0e578063fe9fbb801462000d3057600080fd5b8063e0f8e2431462000c2f578063e91f214e1462000c54578063f0b37c041462000c7a578063f1f3bca31462000c9f57600080fd5b8063cd806f4311620000ee578063cd806f431462000b76578063d7c010321462000b9b578063dd62ed3e1462000bc0578063df20fd491462000c0a57600080fd5b8063b62496f51462000afb578063b6a5d7de1462000b2f578063ca33e64c1462000b5457600080fd5b80639a7a23d61162000199578063a9059cbb1162000164578063a9059cbb1462000a6a578063ad5c46481462000a8f578063add5df661462000ab1578063af06795a1462000ad657600080fd5b80639a7a23d614620009e95780639d64bf931462000a0e578063a51af4c51462000a26578063a8aa1b311462000a4857600080fd5b80638a8c523c11620001da5780638a8c523c146200095357806391950f30146200096b5780639571a07d146200098757806395d89b4114620009bb57600080fd5b8063845610ee14620008e9578063893d20e8146200090e57806389ef69f6146200092e57600080fd5b806338e9914411620002fb57806360733e8f11620002915780637088fb7f116200025c5780637088fb7f146200085a57806370a08231146200087257806382247ec014620008ac5780638366e79a14620008c457600080fd5b806360733e8f1462000798578063658d4b7f14620007d55780636d92e1a514620007fa5780636ddd1713146200083757600080fd5b80634ada218b11620002d25780634ada218b146200070d578063571ac8b014620007295780635881f3ef146200074e5780635d0044ca146200077357600080fd5b806338e9914414620006685780633f4218e014620006a55780634355855a14620006d957600080fd5b806326560be7116200037d5780632f54bf6e11620003485780632f54bf6e14620005cd578063313ce56714620006005780633425c001146200061e578063379fad9a146200064357600080fd5b806326560be7146200053a578063296020e7146200055f5780632af10fac14620005935780632b112e4914620005b557600080fd5b8063095ea7b311620003be578063095ea7b314620004a857806315d61a8214620004cd57806318160ddd14620004f457806323b872dd146200051557600080fd5b806303382cbb14620003f457806306fdde03146200043357806307c89fe8146200047257600080fd5b36620003ef57005b600080fd5b3480156200040157600080fd5b5060225462000416906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156200044057600080fd5b5060408051808201909152600a81526959656c6c6f7720426f6960b01b60208201525b6040516200042a919062002f4a565b3480156200047f57600080fd5b50620004976200049136600462002cae565b62000d55565b60405190151581526020016200042a565b348015620004b557600080fd5b5062000497620004c736600462002df7565b62000dab565b348015620004da57600080fd5b50620004f2620004ec36600462002e87565b62000e19565b005b3480156200050157600080fd5b506007545b6040519081526020016200042a565b3480156200052257600080fd5b50620004976200053436600462002d7e565b62000e48565b3480156200054757600080fd5b50620004f26200055936600462002e26565b62000f11565b3480156200056c57600080fd5b50620004976200057e36600462002cae565b600f6020526000908152604090205460ff1681565b348015620005a057600080fd5b5060235462000416906001600160a01b031681565b348015620005c257600080fd5b506200050662000f4e565b348015620005da57600080fd5b5062000497620005ec36600462002cae565b6000546001600160a01b0391821691161490565b3480156200060d57600080fd5b50604051600981526020016200042a565b3480156200062b57600080fd5b50620004f26200063d36600462002cae565b62000fa4565b3480156200065057600080fd5b50620004f26200066236600462002e26565b62000ff2565b3480156200067557600080fd5b50620004976200068736600462002cae565b6001600160a01b03166000908152600c602052604090205460ff1690565b348015620006b257600080fd5b5062000497620006c436600462002cae565b600d6020526000908152604090205460ff1681565b348015620006e657600080fd5b5062000497620006f836600462002cae565b600e6020526000908152604090205460ff1681565b3480156200071a57600080fd5b50602954620004979060ff1681565b3480156200073657600080fd5b50620004976200074836600462002cae565b6200102f565b3480156200075b57600080fd5b50620004166200076d36600462002cae565b6200103f565b3480156200078057600080fd5b50620004f26200079236600462002e87565b620013d0565b348015620007a557600080fd5b5062000497620007b736600462002cae565b6001600160a01b03166000908152600d602052604090205460ff1690565b348015620007e257600080fd5b50620004f2620007f436600462002dc4565b620013ff565b3480156200080757600080fd5b50620004976200081936600462002cae565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156200084457600080fd5b506027546200049790600160a01b900460ff1681565b3480156200086757600080fd5b50620004f262001454565b3480156200087f57600080fd5b50620005066200089136600462002cae565b6001600160a01b03166000908152600a602052604090205490565b348015620008b957600080fd5b506200050660085481565b348015620008d157600080fd5b5062000497620008e336600462002cee565b620014b5565b348015620008f657600080fd5b50620004f26200090836600462002cae565b620015f3565b3480156200091b57600080fd5b506000546001600160a01b031662000416565b3480156200093b57600080fd5b50620004f26200094d36600462002cae565b62001642565b3480156200096057600080fd5b50620004f262001693565b3480156200097857600080fd5b50601054620004979060ff1681565b3480156200099457600080fd5b5062000497620009a636600462002cae565b600c6020526000908152604090205460ff1681565b348015620009c857600080fd5b50604080518082019091526003815262424f4960e81b602082015262000463565b348015620009f657600080fd5b50620004f262000a0836600462002dc4565b620016d8565b34801562000a1b57600080fd5b506200050660095481565b34801562000a3357600080fd5b5060275462000416906001600160a01b031681565b34801562000a5557600080fd5b5060255462000416906001600160a01b031681565b34801562000a7757600080fd5b506200049762000a8936600462002df7565b62001711565b34801562000a9c57600080fd5b5060035462000416906001600160a01b031681565b34801562000abe57600080fd5b50620004f262000ad036600462002eea565b62001720565b34801562000ae357600080fd5b50620004f262000af536600462002dc4565b620017b2565b34801562000b0857600080fd5b506200049762000b1a36600462002cae565b60116020526000908152604090205460ff1681565b34801562000b3c57600080fd5b50620004f262000b4e36600462002cae565b62001807565b34801562000b6157600080fd5b5060215462000416906001600160a01b031681565b34801562000b8357600080fd5b50620004f262000b9536600462002dc4565b6200185b565b34801562000ba857600080fd5b50620004f262000bba36600462002d2c565b62001b07565b34801562000bcd57600080fd5b506200050662000bdf36600462002cee565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801562000c1757600080fd5b50620004f262000c2936600462002e66565b62001b70565b34801562000c3c57600080fd5b50620004f262000c4e36600462002cae565b62001bbc565b34801562000c6157600080fd5b50620005066fffffffffffffffffffffffffffffffff81565b34801562000c8757600080fd5b50620004f262000c9936600462002cae565b62001c0b565b34801562000cac57600080fd5b506200050662000cbe36600462002e26565b62001c59565b34801562000cd157600080fd5b50620004f262000ce336600462002cae565b62001c72565b34801562000cf657600080fd5b50620004f262000d0836600462002dc4565b62001d0b565b34801562000d1b57600080fd5b5060245462000416906001600160a01b031681565b34801562000d3d57600080fd5b506200049762000d4f36600462002cae565b62001e1a565b600080546001600160a01b0316331462000d8c5760405162461bcd60e51b815260040162000d839062002fa2565b60405180910390fd5b506001600160a01b03166000908152600f602052604090205460ff1690565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000e079086815260200190565b60405180910390a35060015b92915050565b62000e243362001e1a565b62000e435760405162461bcd60e51b815260040162000d839062002fc2565b600955565b6007546001600160a01b0384166000908152600b6020908152604080832033845290915281205490911462000efa576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b8252838120338252909152919091205462000ed591849062001e38565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b62000f0784848462001e67565b90505b9392505050565b62000f1c3362001e1a565b62000f3b5760405162461bcd60e51b815260040162000d839062002fc2565b6029805460ff1916911515919091179055565b6005546001600160a01b03166000908152600a602052604081205462000f9f906004546001600160a01b03166000908152600a602052604090205462000f98906007549062002276565b9062002276565b905090565b6000546001600160a01b0316331462000fd15760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b62000ffd3362001e1a565b6200101c5760405162461bcd60e51b815260040162000d839062002fc2565b6010805460ff1916911515919091179055565b600062000e138260075462000dab565b600080546001600160a01b031633146200106d5760405162461bcd60e51b815260040162000d839062002fa2565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620010ac57600080fd5b505afa158015620010c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010e7919062002cce565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200113057600080fd5b505afa15801562001145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200116b919062002cce565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015620011b257600080fd5b505afa158015620011c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011ed919062002cce565b91506001600160a01b0382166200137e57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200123857600080fd5b505afa1580156200124d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001273919062002cce565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620012bc57600080fd5b505afa158015620012d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012f7919062002cce565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200134057600080fd5b505af115801562001355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200137b919062002cce565b91505b602580546001600160a01b038085166001600160a01b0319928316179092556024805493909216921682179055600754306000908152600b602090815260408083209483529390529190912055919050565b620013db3362001e1a565b620013fa5760405162461bcd60e51b815260040162000d839062002fc2565b600855565b6200140a3362001e1a565b620014295760405162461bcd60e51b815260040162000d839062002fc2565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620014815760405162461bcd60e51b815260040162000d839062002fa2565b6040514790339082156108fc029083906000818181858888f19350505050158015620014b1573d6000803e3d6000fd5b5050565b600080546001600160a01b03163314620014e35760405162461bcd60e51b815260040162000d839062002fa2565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156200152657600080fd5b505afa1580156200153b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001561919062002ea1565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015620015b057600080fd5b505af1158015620015c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015eb919062002e46565b949350505050565b6000546001600160a01b03163314620016205760405162461bcd60e51b815260040162000d839062002fa2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146200166f5760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6200169e3362001e1a565b620016bd5760405162461bcd60e51b815260040162000d839062002fc2565b60295460ff16620016d6576029805460ff191660011790555b565b6000546001600160a01b03163314620017055760405162461bcd60e51b815260040162000d839062002fa2565b620014b1828262002284565b600062000f0a33848462001e67565b6200172b3362001e1a565b6200174a5760405162461bcd60e51b815260040162000d839062002fc2565b601289905560138890556014879055601586905562001778866200177189818d8d620022fe565b90620022fe565b601655601785905560188490556019839055601a829055620017a2826200177185818989620022fe565b601b55601c555050505050505050565b620017bd3362001e1a565b620017dc5760405162461bcd60e51b815260040162000d839062002fc2565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620018345760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b03163314620018885760405162461bcd60e51b815260040162000d839062002fa2565b602480546001600160a01b0319166001600160a01b0384169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620018dd57600080fd5b505afa158015620018f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001918919062002cce565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200196557600080fd5b505af11580156200197a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019a0919062002cce565b602580546001600160a01b0319166001600160a01b03928316179055600754306000908152600b6020908152604080832060245490951683529390529190912055801562001a9357602460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562001a3757600080fd5b505afa15801562001a4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a72919062002cce565b600380546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001aa39062002ca0565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562001ad7573d6000803e3d6000fd5b50602680546001600160a01b03929092166001600160a01b03199283168117909155602780549092161790555050565b62001b123362001e1a565b62001b315760405162461bcd60e51b815260040162000d839062002fc2565b602180546001600160a01b039485166001600160a01b031991821617909155602280549385169382169390931790925560238054919093169116179055565b62001b7b3362001e1a565b62001b9a5760405162461bcd60e51b815260040162000d839062002fc2565b60278054921515600160a01b0260ff60a01b1990931692909217909155602855565b6000546001600160a01b0316331462001be95760405162461bcd60e51b815260040162000d839062002fa2565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462001c385760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000811562001c6a575050601b5490565b505060165490565b6000546001600160a01b0316331462001c9f5760405162461bcd60e51b815260040162000d839062002fa2565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b62001d163362001e1a565b62001d355760405162461bcd60e51b815260040162000d839062002fc2565b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915562001dd057602654604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b15801562001db357600080fd5b505af115801562001dc8573d6000803e3d6000fd5b505050505050565b6026546001600160a01b038381166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca969060440162001d98565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818484111562001e5f5760405162461bcd60e51b815260040162000d83919062002f4a565b505050900390565b602954600090610100900460ff161562001e905762001e888484846200230c565b905062000f0a565b60295460ff168062001eba57506001600160a01b0384166000908152600c602052604090205460ff165b62001f085760405162461bcd60e51b815260206004820152601d60248201527f54726164696e672069732063757272656e746c792064697361626c6564000000604482015260640162000d83565b6024546001600160a01b0384811660009081526011602052604081205491909216919060ff168062001f4b5750816001600160a01b0316856001600160a01b0316145b90508015801562001f7557506001600160a01b0385166000908152600f602052604090205460ff16155b1562001ff3576008546001600160a01b0386166000908152600a602052604090205462001fa49086906200305a565b1062001ff35760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e20747269676765726564000000604482015260640162000d83565b8080156200200357506009548410155b15620020235762002013620023b3565b1562002023576200202362002413565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091526001600160a01b0389166000908152600a90915291909120546200207791869062001e38565b6001600160a01b0387166000908152600a60205260408120919091556200209f87876200282c565b620020ab5784620020b8565b620020b887878762002973565b6001600160a01b0387166000908152600a6020526040902054909150620020e09082620022fe565b6001600160a01b038088166000908152600a6020908152604080832094909455918a168152600e909152205460ff1662002187576026546001600160a01b038881166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200217357600080fd5b505af192505050801562002185575060015b505b6001600160a01b0386166000908152600e602052604090205460ff166200221b576026546001600160a01b038781166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200220757600080fd5b505af192505050801562002219575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200226191815260200190565b60405180910390a35060019695505050505050565b600062000f0a8284620030ba565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155620022d6576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b80620014b157506001600160a01b03166000908152600e60205260409020805460ff19169055565b600062000f0a82846200305a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a909152918220546200235f91849062001e38565b6001600160a01b038086166000908152600a60205260408082209390935590851681522054620023909083620022fe565b6001600160a01b0384166000908152600a60205260409020555060019392505050565b3360009081526011602052604081205460ff16158015620023dc5750602954610100900460ff16155b8015620023f25750602754600160a01b900460ff165b801562000f9f575050602854306000908152600a6020526040902054101590565b6029805461ff001916610100179055306000908152600a6020526040812054905060006200245d60205462001771601e5462001771601f54601d54620022fe90919063ffffffff16565b90506000620024796002601d5462002c8490919063ffffffff16565b9050600062002489848362002276565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110620024c657620024c6620030ea565b6001600160a01b039283166020918202929092010152600354825191169082906001908110620024fa57620024fa620030ea565b6001600160a01b03928316602091820292909201015260245460405163791ac94760e01b81524792919091169063791ac947906200254690869060009087903090429060040162002fe7565b600060405180830381600087803b1580156200256157600080fd5b505af115801562002576573d6000803e3d6000fd5b5050505060006200259182476200227690919063ffffffff16565b90506000620025be6002620025b789620025b7601d548762002c9290919063ffffffff16565b9062002c84565b90506000620025de88620025b7601e548662002c9290919063ffffffff16565b90506000620025fe89620025b7601f548762002c9290919063ffffffff16565b905060006200261e8a620025b76020548862002c9290919063ffffffff16565b6000601d819055601f819055601e81905560205590508215620026a157602660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200268c57600080fd5b505af1935050505080156200269f575060015b505b8115620026e5576022546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015620026e3573d6000803e3d6000fd5b505b801562002729576023546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801562002727573d6000803e3d6000fd5b505b881562002814576024805460215460405163f305d71960e01b81523060048201529283018c905260006044840181905260648401526001600160a01b0390811660848401524260a4840152169063f305d71990869060c4016060604051808303818588803b1580156200279b57600080fd5b505af1158015620027b0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620027d7919062002ebb565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506029805461ff0019169055505050505050505050565b60105460009060ff161562002886576001600160a01b0383166000908152600d602052604090205460ff161580156200287e57506001600160a01b0382166000908152600d602052604090205460ff16155b905062000e13565b6024546001600160a01b0384811660009081526011602052604081205491909216919060ff1680620028c95750816001600160a01b0316856001600160a01b0316145b6001600160a01b0385166000908152601160205260408120549192509060ff1680620029065750826001600160a01b0316856001600160a01b0316145b90508180620029125750805b1562002966576001600160a01b0386166000908152600d602052604090205460ff161580156200295b57506001600160a01b0385166000908152600d602052604090205460ff16155b935050505062000e13565b6000935050505062000e13565b6024546001600160a01b0383811660009081526011602052604081205490929190911690829060ff1680620029b95750816001600160a01b0316856001600160a01b0316145b90506000620029c88262001c59565b90506000620029e8601c54620025b7848962002c9290919063ffffffff16565b9050811562002bf657821562002afa576017541562002a3757816017548262002a12919062003098565b62002a1e919062003075565b601d600082825462002a3191906200305a565b90915550505b6019541562002a7657816019548262002a51919062003098565b62002a5d919062003075565b601f600082825462002a7091906200305a565b90915550505b6018541562002ab557816018548262002a90919062003098565b62002a9c919062003075565b601e600082825462002aaf91906200305a565b90915550505b601a541562002af45781601a548262002acf919062003098565b62002adb919062003075565b6020600082825462002aee91906200305a565b90915550505b62002bf6565b6012541562002b3957816012548262002b14919062003098565b62002b20919062003075565b601d600082825462002b3391906200305a565b90915550505b6014541562002b7857816014548262002b53919062003098565b62002b5f919062003075565b601f600082825462002b7291906200305a565b90915550505b6013541562002bb757816013548262002b92919062003098565b62002b9e919062003075565b601e600082825462002bb191906200305a565b90915550505b6015541562002bf657816015548262002bd1919062003098565b62002bdd919062003075565b6020600082825462002bf091906200305a565b90915550505b306000908152600a602052604090205462002c129082620022fe565b306000818152600a6020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002c649085815260200190565b60405180910390a362002c78868262002276565b98975050505050505050565b600062000f0a828462003075565b600062000f0a828462003098565b611f70806200312983390190565b60006020828403121562002cc157600080fd5b813562000f0a8162003100565b60006020828403121562002ce157600080fd5b815162000f0a8162003100565b6000806040838503121562002d0257600080fd5b823562002d0f8162003100565b9150602083013562002d218162003100565b809150509250929050565b60008060006060848603121562002d4257600080fd5b833562002d4f8162003100565b9250602084013562002d618162003100565b9150604084013562002d738162003100565b809150509250925092565b60008060006060848603121562002d9457600080fd5b833562002da18162003100565b9250602084013562002db38162003100565b929592945050506040919091013590565b6000806040838503121562002dd857600080fd5b823562002de58162003100565b9150602083013562002d218162003119565b6000806040838503121562002e0b57600080fd5b823562002e188162003100565b946020939093013593505050565b60006020828403121562002e3957600080fd5b813562000f0a8162003119565b60006020828403121562002e5957600080fd5b815162000f0a8162003119565b6000806040838503121562002e7a57600080fd5b823562002e188162003119565b60006020828403121562002e9a57600080fd5b5035919050565b60006020828403121562002eb457600080fd5b5051919050565b60008060006060848603121562002ed157600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060008060006101208a8c03121562002f0a57600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b600060208083528351808285015260005b8181101562002f795785810183015185820160400152820162002f5b565b8181111562002f8c576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015620030395784516001600160a01b03168352938301939183019160010162003012565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115620030705762003070620030d4565b500190565b6000826200309357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620030b557620030b5620030d4565b500290565b600082821015620030cf57620030cf620030d4565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146200311657600080fd5b50565b80151581146200311657600080fdfe60806040526003805473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031991821681179092556004805490911690911790556ec097ce7bc90715b34b9f10000000006015553480156200005a57600080fd5b5060405162001f7038038062001f708339810160408190526200007d91620001de565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000d857737a250d5630b4cf539739df2c5dacb4c659f2488d620000da565b815b600580546001600160a01b039283166001600160a01b03199182161790915560028054909116331790556004805482166000908152600e602052604090819020805460ff19166001179055600354905163095ea7b360e01b815292169163095ea7b3916200016291869160001991016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156200017d57600080fd5b505af115801562000192573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b8919062000216565b50505062000241565b80516001600160a01b0381168114620001d957600080fd5b919050565b60008060408385031215620001f257600080fd5b620001fd83620001c1565b91506200020d60208401620001c1565b90509250929050565b6000602082840312156200022957600080fd5b815180151581146200023a57600080fd5b9392505050565b611d1f80620002516000396000f3fe60806040526004361061024a5760003560e01c806387f681d811610139578063ca89b899116100b6578063e2d2e2191161007a578063e2d2e2191461083e578063efca2eed14610854578063f0b37c041461086a578063f2fde38b1461088a578063f854a27f146108aa578063fe9fbb80146108da57600080fd5b8063ca89b89914610762578063ce7c2ac21461078f578063d0e30db0146107e6578063d63a8e11146107ee578063e0f8e2431461081e57600080fd5b8063ad5c4648116100fd578063ad5c4648146106a9578063b6a5d7de146106c9578063bcd259a8146106e9578063c161357a14610709578063c238efd51461072957600080fd5b806387f681d8146105cf5780638e424175146105ef578063929925db14610638578063997664d714610673578063a995bb141461068957600080fd5b80632f54bf6e116101c757806363eabae91161018b57806363eabae9146105075780637088fb7f1461055a5780638366e79a1461056f57806383e845001461058f578063845610ee146105af57600080fd5b80632f54bf6e146104395780633333cfc3146104785780633a98ef39146104985780635881f3ef146104ae578063610035a4146104ce57600080fd5b806315f7e05e1161020e57806315f7e05e1461035d5780631b386a421461037d5780632870e95d146103c357806328fd3198146103e35780632bcf161c1461040357600080fd5b806302c4aede146102565780630300f925146102a9578063061ad62a146102ef57806311ce023d1461032557806314b6ca961461033b57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061028c610271366004611a63565b600d602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b557600080fd5b506102e16102c4366004611a80565b600a60209081526000928352604080842090915290825290205481565b6040519081526020016102a0565b3480156102fb57600080fd5b5061028c61030a366004611a63565b600f602052600090815260409020546001600160a01b031681565b34801561033157600080fd5b506102e160155481565b34801561034757600080fd5b5061035b610356366004611b28565b610913565b005b34801561036957600080fd5b5061035b610378366004611a63565b610af4565b34801561038957600080fd5b506102e1610398366004611a80565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b3480156103cf57600080fd5b5061035b6103de366004611a63565b610b01565b3480156103ef57600080fd5b506102e16103fe366004611a63565b610b55565b34801561040f57600080fd5b506102e161041e366004611a63565b6001600160a01b031660009081526009602052604090205490565b34801561044557600080fd5b50610468610454366004611a63565b6000546001600160a01b0391821691161490565b60405190151581526020016102a0565b34801561048457600080fd5b5061035b610493366004611afa565b610bde565b3480156104a457600080fd5b506102e160115481565b3480156104ba57600080fd5b5061035b6104c9366004611a63565b610c3c565b3480156104da57600080fd5b506104686104e9366004611a63565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561051357600080fd5b5061035b610522366004611afa565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b34801561056657600080fd5b5061035b610c88565b34801561057b57600080fd5b5061046861058a366004611a80565b610ce5565b34801561059b57600080fd5b5061035b6105aa366004611a80565b610e69565b3480156105bb57600080fd5b5061035b6105ca366004611a63565b610ec1565b3480156105db57600080fd5b5061035b6105ea366004611a63565b610f0d565b3480156105fb57600080fd5b5061046861060a366004611a80565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b34801561064457600080fd5b50610468610653366004611a80565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561067f57600080fd5b506102e160125481565b34801561069557600080fd5b5061035b6106a4366004611a80565b610f60565b3480156106b557600080fd5b5060045461028c906001600160a01b031681565b3480156106d557600080fd5b5061035b6106e4366004611a63565b611012565b3480156106f557600080fd5b5061035b610704366004611a80565b611063565b34801561071557600080fd5b5061035b610724366004611ab9565b6110d4565b34801561073557600080fd5b5061028c610744366004611a63565b6001600160a01b039081166000908152600d60205260409020541690565b34801561076e57600080fd5b506102e161077d366004611a63565b60096020526000908152604090205481565b34801561079b57600080fd5b506107cb6107aa366004611a63565b60106020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016102a0565b61035b611186565b3480156107fa57600080fd5b50610468610809366004611a63565b600e6020526000908152604090205460ff1681565b34801561082a57600080fd5b5061035b610839366004611a63565b6111dc565b34801561084a57600080fd5b506102e160145481565b34801561086057600080fd5b506102e160135481565b34801561087657600080fd5b5061035b610885366004611a63565b611228565b34801561089657600080fd5b5061035b6108a5366004611a63565b611273565b3480156108b657600080fd5b506104686108c5366004611a63565b600c6020526000908152604090205460ff1681565b3480156108e657600080fd5b506104686108f5366004611a63565b6001600160a01b031660009081526001602052604090205460ff1690565b6002546001600160a01b0316331461092a57600080fd5b6001600160a01b038216600090815260106020526040902054156109ba576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156109a3576001600160a01b038083166000908152600f602052604090205461099e91849116611309565b6109ba565b6004546109ba9083906001600160a01b0316611309565b6000811180156109e057506001600160a01b038216600090815260106020526040902054155b15610a4657600680546001600160a01b0384166000818152600760205260408120839055600183018455929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055610a79565b80158015610a6b57506001600160a01b03821660009081526010602052604090205415155b15610a7957610a79826118f4565b6001600160a01b038216600090815260106020526040902054601154610aaa918391610aa491611a09565b90611a1c565b6011556001600160a01b0382166000908152601060205260409020819055610ad181611a28565b6001600160a01b0390921660009081526010602052604090206001019190915550565b610afe3382611309565b50565b6001600160a01b0381166000908152600e602052604090205460ff16610b2657600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610b7a57506000919050565b6001600160a01b038216600090815260106020526040812054610b9c90611a28565b6001600160a01b038416600090815260106020526040902060010154909150808211610bcc575060009392505050565b610bd68282611a09565b949350505050565b6000546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c0890611bf4565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610c665760405162461bcd60e51b8152600401610c0890611bf4565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610cb25760405162461bcd60e51b8152600401610c0890611bf4565b6040514790339082156108fc029083906000818181858888f19350505050158015610ce1573d6000803e3d6000fd5b5050565b600080546001600160a01b03163314610d105760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b038316301415610d695760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c08565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015610dab57600080fd5b505afa158015610dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de39190611b71565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015610e3157600080fd5b505af1158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190611b54565b6000546001600160a01b03163314610e935760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610c0890611bf4565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610f375760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b6000546001600160a01b03163314610f8a5760405162461bcd60e51b8152600401610c0890611bf4565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b390604401602060405180830381600087803b158015610fd557600080fd5b505af1158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d9190611b54565b505050565b6000546001600160a01b0316331461103c5760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff166110ca5760405162461bcd60e51b8152602060048201526011602482015270165bdd4818d85b89dd08191bc81d1a185d607a1b6044820152606401610c08565b610ce18282611309565b6000546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610c0890611bf4565b60405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b390604401602060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611b54565b50505050565b6002546001600160a01b0316331461119d57600080fd5b60125434906111ac9082611a1c565b6012556011546015546111d6916111cd916111c79085611a4b565b90611a57565b60145490611a1c565b60145550565b6000546001600160a01b031633146112065760405162461bcd60e51b8152600401610c0890611bf4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112525760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b0316331461129d5760405162461bcd60e51b8152600401610c0890611bf4565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6001600160a01b0381166000908152600e602052604090205460ff166113715760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964207265776172642061646472657373210000000000000000006044820152606401610c08565b6001600160a01b038216600090815260106020526040902054611392575050565b600061139d83610b55565b9050801561100d576013546113b29082611a1c565b6013556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546113e89082611a1c565b6001600160a01b038416600090815260106020526040902060028101919091555461141290611a28565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611501576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611476573d6000803e3d6000fd5b506001600160a01b03821660009081526009602052604090205461149a9082611a1c565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546114d69082611a1c565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055505050565b6040516370a0823160e01b81526001600160a01b03848116600483015283916000918316906370a082319060240160206040518083038186803b15801561154757600080fd5b505afa15801561155b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157f9190611b71565b6001600160a01b038581166000908152600d60205260409020549192501661169457604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b0316918391506000906115e2576115e2611cb0565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061161657611616611cb0565b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061165c9060009086908c904290600401611b8a565b6000604051808303818588803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b5050505050506117c9565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b0316918391506000906116d7576116d7611cb0565b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061171b5761171b611cb0565b60200260200101906001600160a01b031690816001600160a01b031681525050848160028151811061174f5761174f611cb0565b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906117959060009086908c904290600401611b8a565b6000604051808303818588803b1580156117ae57600080fd5b505af11580156117c2573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a082319060240160206040518083038186803b15801561180e57600080fd5b505afa158015611822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118469190611b71565b90506118746118558284611a09565b6001600160a01b03871660009081526009602052604090205490611a1c565b6001600160a01b0386166000908152600960205260409020556118c661189a8284611a09565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611a1c565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b6006805461190490600190611c6d565b8154811061191457611914611cb0565b60009182526020808320909101546001600160a01b038481168452600790925260409092205460068054929093169291811061195257611952611cb0565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526007918290526040812054600680549193929161199e90600190611c6d565b815481106119ae576119ae611cb0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560068054806119e4576119e4611c9a565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611a158284611c6d565b9392505050565b6000611a158284611c14565b6000611a456015546111c760145485611a4b90919063ffffffff16565b92915050565b6000611a158284611c4e565b6000611a158284611c2c565b600060208284031215611a7557600080fd5b8135611a1581611cc6565b60008060408385031215611a9357600080fd5b8235611a9e81611cc6565b91506020830135611aae81611cc6565b809150509250929050565b600080600060608486031215611ace57600080fd5b8335611ad981611cc6565b92506020840135611ae981611cc6565b929592945050506040919091013590565b60008060408385031215611b0d57600080fd5b8235611b1881611cc6565b91506020830135611aae81611cdb565b60008060408385031215611b3b57600080fd5b8235611b4681611cc6565b946020939093013593505050565b600060208284031215611b6657600080fd5b8151611a1581611cdb565b600060208284031215611b8357600080fd5b5051919050565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611bd45784516001600160a01b031683529383019391830191600101611baf565b50506001600160a01b039690961660408501525050506060015292915050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60008219821115611c2757611c27611c84565b500190565b600082611c4957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c6857611c68611c84565b500290565b600082821015611c7f57611c7f611c84565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610afe57600080fd5b8015158114610afe57600080fdfea2646970667358221220a1c44a72f026b038d04989d822bceac7fd6ed1159979c6bbb017cd888f4c380864736f6c63430008070033a26469706673582212206a8489a53330ac60d0ed8a994d9bdccba787d65b7e260563626934aa55bee6a464736f6c63430008070033

Verified Source Code Partial Match

Compiler: v0.8.7+commit.e28d00a7 EVM: london Optimization: Yes (200 runs)
BOI.sol 1107 lines
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.0;

/**
 * SAFEMATH LIBRARY
 */
library SafeMath {
    
    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);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    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);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

interface IDEXFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IDividendDistributor {
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
}

contract DividendDistributor is IDividendDistributor, Auth {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IERC20 BASE = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => uint256) public totalRewardsDistributed;
    mapping (address => mapping (address => uint256)) public totalRewardsToUser;

    mapping (address => mapping (address => bool)) public canClaimDividendOfUser;

    mapping (address => bool) public availableRewards;
    mapping (address => address) public pathRewards;

    mapping (address => bool) public allowed;
    mapping (address => address) public choice;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (
        address _router,
        address _owner
    ) Auth(_owner) {
        router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;

        allowed[WETH] = true;

        IERC20(BASE).approve(_router, 2**256 - 1);
    }

    receive() external payable {}

    function getTotalRewards(address token) public view returns (uint256) {
        return totalRewardsDistributed[token];
    }

    function getTotalRewardsToUser(address token, address user) public view returns (uint256) {
        return totalRewardsToUser[token][user];
    }

    function checkCanClaimDividendOfUser(address user, address claimer) public view returns (bool) {
        return canClaimDividendOfUser[user][claimer];
    }

    function setReward(
        address _reward,
        bool status
    ) public onlyOwner {
        availableRewards[_reward] = status;
    }

    function setPathReward(
        address _reward,
        address _path
    ) public onlyOwner {
        pathRewards[_reward] = _path;
    }

    function getPathReward(
        address _reward
    ) public view returns (address) {
        return pathRewards[_reward];
    }

    function changeRouterVersion(
        address _router
    ) external onlyOwner {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);
        router = _uniswapV2Router;
    }

    function setShare(
        address shareholder,
        uint256 amount
    ) external override onlyToken {

        if (shares[shareholder].amount > 0) {
            if (allowed[choice[shareholder]]) {
                distributeDividend(shareholder, choice[shareholder]);
            } else {
                distributeDividend(shareholder, WETH);
            }
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 amount = msg.value;

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function distributeDividend(
        address shareholder,
        address rewardAddress
    ) internal {
        require(allowed[rewardAddress], "Invalid reward address!");

        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);

            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);

            if (rewardAddress == address(BASE)) {

                payable(shareholder).transfer(amount);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(amount);  
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(amount);

            } else {

                IERC20 rewardToken = IERC20(rewardAddress);

                uint256 beforeBalance = rewardToken.balanceOf(shareholder);

                if (pathRewards[rewardAddress] == address(0)) {
                    address[] memory path = new address[](2);
                    path[0] = address(BASE);
                    path[1] = rewardAddress;

                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
                        0,
                        path,
                        shareholder,
                        block.timestamp
                    );                 
                } else {
                    address[] memory path = new address[](3);
                    path[0] = address(BASE);
                    path[1] = pathRewards[rewardAddress];
                    path[2] = rewardAddress;

                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
                        0,
                        path,
                        shareholder,
                        block.timestamp
                    );

                }

                uint256 afterBalance = rewardToken.balanceOf(shareholder);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(afterBalance.sub(beforeBalance));
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(afterBalance.sub(beforeBalance));

            }

        }
    }

    function makeApprove(
        address token,
        address spender,
        uint256 amount
    ) public onlyOwner {
        IERC20(token).approve(spender, amount);
    }

    function claimDividend(
        address rewardAddress
    ) external {
        distributeDividend(msg.sender, rewardAddress);
    }

    function setChoice(
        address _choice
    ) external {
        require(allowed[_choice]);
        choice[msg.sender] = _choice;
    }

    function toggleChoice(
        address _choice
    ) public onlyOwner {
        allowed[_choice] = !allowed[_choice];
    }

    function getChoice(
        address _choice
    ) public view returns (bool) {
        return allowed[_choice];
    }

    function claimDividendOfUser(
        address user,
        address rewardAddress
    ) external {
        require(canClaimDividendOfUser[user][msg.sender], "You can't do that");

        distributeDividend(user, rewardAddress);
    }

    function setClaimDividendOfUser(
        address claimer,
        bool status
    ) external {
        canClaimDividendOfUser[msg.sender][claimer] = status;
    }

    function getUnpaidEarnings(
        address shareholder
    ) public view returns (uint256) {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(
        uint256 share
    ) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(
        address shareholder
    ) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(
        address shareholder
    ) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1];
        shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function changeBASE(
        address _BASE
    ) external onlyOwner {
        BASE = IERC20(_BASE);
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function newApproval(
        address token,
        address _contract
    ) external onlyOwner {
        IERC20(token).approve(_contract, 2**256 - 1);
    }

    function transferForeignToken(
        address token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        require(token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(token).balanceOf(address(this));
        _sent = IERC20(token).transfer(_to, _contractBalance);
    }

}

contract BOI is IERC20, Auth {
    using SafeMath for uint256;

    uint256 public constant MASK = type(uint128).max;
    address BASE = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEAD_NON_CHECKSUM = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "Yellow Boi";
    string constant _symbol = "BOI";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000 * (10 ** _decimals);
    uint256 public _maxWallet = 15_000 * (10 ** _decimals);

    uint256 public minAmountToTriggerSwap = 0;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) public isDisabledExempt;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) public _isFree;

    bool public isFeeOnTransferEnabled = false;

    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 buyLiquidityFee = 0;
    uint256 buyReflectionFee = 0;
    uint256 buyOperationsFee = 0;
    uint256 buyTreasuryFee = 0;
    uint256 buyTotalFee = 0;

    uint256 sellLiquidityFee = 0;
    uint256 sellReflectionFee = 0;
    uint256 sellOperationsFee = 0;
    uint256 sellTreasuryFee = 0;
    uint256 sellTotalFee = 0;

    uint256 feeDenominator = 10000;

    uint256 _liquidityTokensToSwap;
    uint256 _reflectionTokensToSwap;
    uint256 _operationsTokensToSwap;
    uint256 _treasuryTokensToSwap;

    address public autoLiquidityReceiver = 0xdF52768ca8cE88b64Ae1519061711d86186F6eeF;
    address public operationsFeeReceiver = 0xdF52768ca8cE88b64Ae1519061711d86186F6eeF;
    address public treasuryFeeReceiver = msg.sender;

    IDEXRouter public router;
    address public pair;

    DividendDistributor distributor;
    address public distributorAddress;

    bool public swapEnabled = true;
    uint256 private swapMinimumTokens = _totalSupply / 5000; // 0.0025%

    bool public tradingEnabled = false;

    bool inSwap;
    modifier swapping() {
        inSwap = true; _;
        inSwap = false;
    }

    constructor () Auth(msg.sender) {
        address _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WETH = router.WETH();
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);

        isDisabledExempt[msg.sender] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;

        _setAutomatedMarketMakerPair(pair, true);

        approve(_router, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
    

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(
        address spender
    ) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    function transfer(
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != _totalSupply) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        require(tradingEnabled || isDisabledExempt[sender], "Trading is currently disabled");

        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[recipient] || recipient == routerAddress;

        if (!isSell && !_isFree[recipient]) {
            require((_balances[recipient] + amount) < _maxWallet, "Max wallet has been triggered");
        }

        if (isSell && amount >= minAmountToTriggerSwap) {
            if (shouldSwapBack()) {
                swapBack();
            }
        }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient balance");

        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;

        _balances[recipient] = _balances[recipient].add(amountReceived);

        if (!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }
        if (!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {}
        }

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        return true;
    }

    function shouldTakeFee(
        address sender,
        address recipient
    ) internal view returns (bool) {

        if (isFeeOnTransferEnabled) {
            return !isFeeExempt[sender] && !isFeeExempt[recipient];
        } else {
            address routerAddress = address(router);
            bool isBuy = automatedMarketMakerPairs[sender] || sender == routerAddress;
            bool isSell =  automatedMarketMakerPairs[recipient]|| recipient == routerAddress;

            if (isBuy || isSell) {
                return !isFeeExempt[sender] && !isFeeExempt[recipient];
            } else {
                return false;
            }
        }

    }

    function getTotalFee(
        bool selling
    ) public view returns (uint256) {
        if (selling) {
            return sellTotalFee;
        }
        return buyTotalFee;
    }

    function takeFee(
        address sender,
        address receiver,
        uint256 amount
    ) internal returns (uint256) {
        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[receiver] || receiver == routerAddress;

        uint256 totalFee = getTotalFee(isSell);
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

        if (totalFee > 0) {
            if (isSell) {
                if (sellLiquidityFee > 0) {
                    _liquidityTokensToSwap += feeAmount * sellLiquidityFee / totalFee;
                }
                if (sellOperationsFee > 0) {
                    _operationsTokensToSwap += feeAmount * sellOperationsFee / totalFee;
                }
                if (sellReflectionFee > 0) {
                    _reflectionTokensToSwap += feeAmount * sellReflectionFee / totalFee;
                }
                if (sellTreasuryFee > 0) {
                    _treasuryTokensToSwap += feeAmount * sellTreasuryFee / totalFee;
                }
            } else {
                if (buyLiquidityFee > 0) {
                    _liquidityTokensToSwap += feeAmount * buyLiquidityFee / totalFee;
                }
                if (buyOperationsFee > 0) {
                    _operationsTokensToSwap += feeAmount * buyOperationsFee / totalFee;
                }
                if (buyReflectionFee > 0) {
                    _reflectionTokensToSwap += feeAmount * buyReflectionFee / totalFee;
                }
                if (buyTreasuryFee > 0) {
                    _treasuryTokensToSwap += feeAmount * buyTreasuryFee / totalFee;
                }
            }
        }

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return !automatedMarketMakerPairs[msg.sender] && !inSwap && swapEnabled && _balances[address(this)] >= swapMinimumTokens;
    }

    function setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) public onlyOwner {
        _setAutomatedMarketMakerPair(_pair, value);
    }

    function _setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) private {
        automatedMarketMakerPairs[_pair] = value;
        if (value) {
            isDividendExempt[_pair] = true;
        }
        if (!value) {
            isDividendExempt[_pair] = false;
        }
    }

    function swapBack() internal swapping {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_operationsTokensToSwap).add(_reflectionTokensToSwap).add(_treasuryTokensToSwap);
        
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwap = contractBalance.sub(tokensForLiquidity);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 amountETHLiquidity = amountETH.mul(_liquidityTokensToSwap).div(totalTokensToSwap).div(2);
        uint256 amountETHReflection = amountETH.mul(_reflectionTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHOperations = amountETH.mul(_operationsTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHTreasury = amountETH.mul(_treasuryTokensToSwap).div(totalTokensToSwap);
        
        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;
        _reflectionTokensToSwap = 0;
        _treasuryTokensToSwap = 0;

        if (amountETHReflection > 0) {
            try distributor.deposit{value: amountETHReflection}() {} catch {}
        }
        if (amountETHOperations > 0) {
            payable(operationsFeeReceiver).transfer(amountETHOperations);
        }
        if (amountETHTreasury > 0) {
            payable(treasuryFeeReceiver).transfer(amountETHTreasury);
        }

        if (tokensForLiquidity > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                tokensForLiquidity,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, tokensForLiquidity);
        }
    }

    function buyTokens(
        uint256 amount,
        address to
    ) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }
    
    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function changeBASE(
        address _BASE
    ) external onlyOwner {
        BASE = _BASE;
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function changeRouterPairDistributor(
        address _router,
        bool _setWETH
    ) external onlyOwner {
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        if (_setWETH) {
            WETH = router.WETH();
        }
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);
    }

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    function setMaxWallet(
        uint256 amount
    ) external authorized {
        _maxWallet = amount;
    }

    function setMinAmountToTriggerSwap(
        uint256 amount
    ) external authorized {
        minAmountToTriggerSwap = amount;
    }

    function setIsFeeOnTransferEnabled(
        bool status
    ) external authorized {
        isFeeOnTransferEnabled = status;
    }

    function setIsDividendExempt(
        address holder,
        bool exempt
    ) external authorized {
        isDividendExempt[holder] = exempt;
        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function checkIsDividendExempt(
        address holder
    ) public view returns (bool) {
        return isDividendExempt[holder];
    }

    function setIsDisabledExempt(
        address holder,
        bool exempt
    ) external authorized {
        isDisabledExempt[holder] = exempt;
    }

    function checkIsDisabledExempt(
        address holder
    ) public view returns (bool) {
        return isDisabledExempt[holder];
    }

    function setIsFeeExempt(
        address holder,
        bool exempt
    ) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function checkIsFeeExempt(
        address holder
    ) public view returns (bool) {
        return isFeeExempt[holder];
    }

    function setFree(
        address holder
    ) public onlyOwner {
        _isFree[holder] = true;
    }
    
    function unSetFree(
        address holder
    ) public onlyOwner {
        _isFree[holder] = false;
    }

    function checkFree(
        address holder
    ) public view onlyOwner returns (bool) {
        return _isFree[holder];
    }

    function setFees(
        uint256 _buyLiquidityFee,
        uint256 _buyReflectionFee,
        uint256 _buyOperationsFee,
        uint256 _buyTreasuryFee,
        uint256 _sellLiquidityFee,
        uint256 _sellReflectionFee,
        uint256 _sellOperationsFee,
        uint256 _sellTreasuryFee,
        uint256 _feeDenominator
    ) external authorized {
        buyLiquidityFee = _buyLiquidityFee;
        buyReflectionFee = _buyReflectionFee;
        buyOperationsFee = _buyOperationsFee;
        buyTreasuryFee = _buyTreasuryFee;
        buyTotalFee = _buyLiquidityFee.add(_buyReflectionFee).add(_buyOperationsFee).add(_buyTreasuryFee);

        sellLiquidityFee = _sellLiquidityFee;
        sellReflectionFee = _sellReflectionFee;
        sellOperationsFee = _sellOperationsFee;
        sellTreasuryFee = _sellTreasuryFee;
        sellTotalFee = _sellLiquidityFee.add(_sellReflectionFee).add(_sellOperationsFee).add(_sellTreasuryFee);

        feeDenominator = _feeDenominator;
    }

    function setFeeReceivers(
        address _autoLiquidityReceiver,
        address _operationsFeeReceiver,
        address _treasuryFeeReceiver
    ) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        operationsFeeReceiver = _operationsFeeReceiver;
        treasuryFeeReceiver = _treasuryFeeReceiver;
    }

    function enableTrading() external authorized {
        if (!tradingEnabled) {
            tradingEnabled = true;
        }
    }

    function toggleTrading(
        bool _enabled
    ) external authorized {
        tradingEnabled = _enabled;
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _amount
    ) external authorized {
        swapEnabled = _enabled;
        swapMinimumTokens = _amount;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }
    
    function changeRouterVersion(
        address _router
    ) external onlyOwner returns (address _pair) {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);

        _pair = IDEXFactory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if (_pair == address(0)) {
            _pair = IDEXFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        }
        pair = _pair;

        router = _uniswapV2Router;
        _allowances[address(this)][address(router)] = _totalSupply;
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
}

Read Contract

MASK 0xe91f214e → uint256
WETH 0xad5c4648 → address
_isFree 0x296020e7 → bool
_maxWallet 0x82247ec0 → uint256
allowance 0xdd62ed3e → uint256
autoLiquidityReceiver 0xca33e64c → address
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
checkFree 0x07c89fe8 → bool
checkIsDisabledExempt 0x38e99144 → bool
checkIsDividendExempt 0x6d92e1a5 → bool
checkIsFeeExempt 0x60733e8f → bool
decimals 0x313ce567 → uint8
distributorAddress 0xa51af4c5 → address
getCirculatingSupply 0x2b112e49 → uint256
getOwner 0x893d20e8 → address
getTotalFee 0xf1f3bca3 → uint256
isAuthorized 0xfe9fbb80 → bool
isDisabledExempt 0x9571a07d → bool
isDividendExempt 0x4355855a → bool
isFeeExempt 0x3f4218e0 → bool
isFeeOnTransferEnabled 0x91950f30 → bool
isOwner 0x2f54bf6e → bool
minAmountToTriggerSwap 0x9d64bf93 → uint256
name 0x06fdde03 → string
operationsFeeReceiver 0x03382cbb → address
pair 0xa8aa1b31 → address
router 0xf887ea40 → address
swapEnabled 0x6ddd1713 → bool
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tradingEnabled 0x4ada218b → bool
treasuryFeeReceiver 0x2af10fac → address

Write Contract 27 functions

These functions modify contract state and require a wallet transaction to execute.

Sweep 0x7088fb7f
No parameters
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
approveMax 0x571ac8b0
address spender
returns: bool
authorize 0xb6a5d7de
address adr
changeBASE 0x845610ee
address _BASE
changeRouterPairDistributor 0xcd806f43
address _router
bool _setWETH
changeRouterVersion 0x5881f3ef
address _router
returns: address
changeWETH 0xe0f8e243
address _WETH
enableTrading 0x8a8c523c
No parameters
setAutomatedMarketMakerPair 0x9a7a23d6
address _pair
bool value
setFeeReceivers 0xd7c01032
address _autoLiquidityReceiver
address _operationsFeeReceiver
address _treasuryFeeReceiver
setFees 0xadd5df66
uint256 _buyLiquidityFee
uint256 _buyReflectionFee
uint256 _buyOperationsFee
uint256 _buyTreasuryFee
uint256 _sellLiquidityFee
uint256 _sellReflectionFee
uint256 _sellOperationsFee
uint256 _sellTreasuryFee
uint256 _feeDenominator
setFree 0x89ef69f6
address holder
setIsDisabledExempt 0xaf06795a
address holder
bool exempt
setIsDividendExempt 0xf708a64f
address holder
bool exempt
setIsFeeExempt 0x658d4b7f
address holder
bool exempt
setIsFeeOnTransferEnabled 0x379fad9a
bool status
setMaxWallet 0x5d0044ca
uint256 amount
setMinAmountToTriggerSwap 0x15d61a82
uint256 amount
setSwapBackSettings 0xdf20fd49
bool _enabled
uint256 _amount
toggleTrading 0x26560be7
bool _enabled
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferForeignToken 0x8366e79a
address _token
address _to
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address adr
unSetFree 0x3425c001
address holder
unauthorize 0xf0b37c04
address adr

Recent Transactions

No transactions found for this address