Address Contract Partially Verified
Address
0xF9B987f3e8ced5E4ac2F2804419890b20Ce587D1
Balance
0.027000 ETH
Nonce
2
Code Size
17864 bytes
Creator
0xa25f660C...4c06 at tx 0xa78452c2...173962
Indexed Transactions
0
Contract Bytecode
17864 bytes
0x6080604052600436106102975760003560e01c8063893d20e81161015a578063b6a5d7de116100c1578063f0b37c041161007a578063f0b37c0414610a83578063f1f3bca314610aac578063f2fde38b14610ae9578063f708a64f14610b12578063f887ea4014610b3b578063fe9fbb8014610b665761029e565b8063b6a5d7de14610975578063ca33e64c1461099e578063da2e3bad146109c9578063dd62ed3e146109f2578063df20fd4914610a2f578063e91f214e14610a585761029e565b8063a4b45c0011610113578063a4b45c0014610851578063a51af4c51461087a578063a8aa1b31146108a5578063a9059cbb146108d0578063ad5c46481461090d578063b62496f5146109385761029e565b8063893d20e81461075357806389ef69f61461077e57806391950f30146107a757806395d89b41146107d25780639a7a23d6146107fd5780639d64bf93146108265761029e565b8063379fad9a116101fe578063658d4b7f116101b7578063658d4b7f146106435780636ddd17131461066c5780637088fb7f1461069757806370a08231146106ae57806382247ec0146106eb5780638366e79a146107165761029e565b8063379fad9a146104fd5780633f4218e0146105265780634355855a14610563578063571ac8b0146105a05780635881f3ef146105dd5780635d0044ca1461061a5761029e565b806323b872dd1161025057806323b872dd146103c7578063296020e7146104045780632b112e49146104415780632f54bf6e1461046c578063313ce567146104a95780633425c001146104d45761029e565b806303382cbb146102a357806306fdde03146102ce57806307c89fe8146102f9578063095ea7b31461033657806315d61a821461037357806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610ba3565b6040516102c59190613fd4565b60405180910390f35b3480156102da57600080fd5b506102e3610bc9565b6040516102f0919061411c565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b9190613aa2565b610c06565b60405161032d91906140e6565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190613be4565b610ca4565b60405161036a91906140e6565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190613cae565b610d96565b005b3480156103a857600080fd5b506103b1610de8565b6040516103be919061419e565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613b59565b610df2565b6040516103fb91906140e6565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190613aa2565b610fd4565b60405161043891906140e6565b60405180910390f35b34801561044d57600080fd5b50610456610ff4565b604051610463919061419e565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613aa2565b611076565b6040516104a091906140e6565b60405180910390f35b3480156104b557600080fd5b506104be6110cf565b6040516104cb919061423c565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190613aa2565b6110d8565b005b34801561050957600080fd5b50610524600480360381019061051f9190613c20565b61117b565b005b34801561053257600080fd5b5061054d60048036038101906105489190613aa2565b6111e0565b60405161055a91906140e6565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190613aa2565b611200565b60405161059791906140e6565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613aa2565b611220565b6040516105d491906140e6565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190613aa2565b611235565b6040516106119190613fd4565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190613cae565b6116f7565b005b34801561064f57600080fd5b5061066a60048036038101906106659190613ba8565b611749565b005b34801561067857600080fd5b506106816117ec565b60405161068e91906140e6565b60405180910390f35b3480156106a357600080fd5b506106ac6117ff565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190613aa2565b611896565b6040516106e2919061419e565b60405180910390f35b3480156106f757600080fd5b506107006118df565b60405161070d919061419e565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613b1d565b6118e5565b60405161074a91906140e6565b60405180910390f35b34801561075f57600080fd5b50610768611a52565b6040516107759190613fd4565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190613aa2565b611a7b565b005b3480156107b357600080fd5b506107bc611b1e565b6040516107c991906140e6565b60405180910390f35b3480156107de57600080fd5b506107e7611b31565b6040516107f4919061411c565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190613ba8565b611b6e565b005b34801561083257600080fd5b5061083b611bc4565b604051610848919061419e565b60405180910390f35b34801561085d57600080fd5b5061087860048036038101906108739190613b1d565b611bca565b005b34801561088657600080fd5b5061088f611c98565b60405161089c9190613fd4565b60405180910390f35b3480156108b157600080fd5b506108ba611cbe565b6040516108c79190613fd4565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613be4565b611ce4565b60405161090491906140e6565b60405180910390f35b34801561091957600080fd5b50610922611cf9565b60405161092f9190613fd4565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613aa2565b611d1f565b60405161096c91906140e6565b60405180910390f35b34801561098157600080fd5b5061099c60048036038101906109979190613aa2565b611d3f565b005b3480156109aa57600080fd5b506109b3611de1565b6040516109c09190613fd4565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb9190613d4f565b611e07565b005b3480156109fe57600080fd5b50610a196004803603810190610a149190613b1d565b611edf565b604051610a26919061419e565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a519190613c72565b611f66565b005b348015610a6457600080fd5b50610a6d611fd3565b604051610a7a919061419e565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613aa2565b611fe9565b005b348015610ab857600080fd5b50610ad36004803603810190610ace9190613c20565b61208c565b604051610ae0919061419e565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b9190613af4565b6120a9565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190613ba8565b6121c2565b005b348015610b4757600080fd5b50610b506123cf565b604051610b5d9190614101565b60405180910390f35b348015610b7257600080fd5b50610b8d6004803603810190610b889190613aa2565b6123f5565b604051610b9a91906140e6565b60405180910390f35b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600a81526020017f426f626f204275636b7300000000000000000000000000000000000000000000815250905090565b6000610c1133611076565b610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c479061415e565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d84919061419e565b60405180910390a36001905092915050565b610d9f336123f5565b610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd59061417e565b60405180910390fd5b8060098190555050565b6000600754905090565b6000600754600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610fc057610f3f826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124619092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610fcb8484846124b6565b90509392505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000611071611024600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611896565b611063611052600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611896565b600754612ae390919063ffffffff16565b612ae390919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b6110e133611076565b611120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111179061415e565b60405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611184336123f5565b6111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba9061417e565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b600061122e82600754610ca4565b9050919050565b600061124033611076565b61127f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112769061415e565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112ca57600080fd5b505afa1580156112de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113029190613acb565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561136457600080fd5b505afa158015611378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139c9190613acb565b6040518363ffffffff1660e01b81526004016113b992919061400a565b60206040518083038186803b1580156113d157600080fd5b505afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114099190613acb565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ca578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114be9190613acb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561152057600080fd5b505afa158015611534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115589190613acb565b6040518363ffffffff1660e01b815260040161157592919061400a565b602060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c79190613acb565b91505b81602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050919050565b611700336123f5565b61173f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117369061417e565b60405180910390fd5b8060088190555050565b611752336123f5565b611791576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117889061417e565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602260149054906101000a900460ff1681565b61180833611076565b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e9061415e565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611892573d6000803e3d6000fd5b5050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60006118f033611076565b61192f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119269061415e565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161196a9190613fd4565b60206040518083038186803b15801561198257600080fd5b505afa158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190613cd7565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016119f792919061405c565b602060405180830381600087803b158015611a1157600080fd5b505af1158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a499190613c49565b91505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a8433611076565b611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba9061415e565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f60009054906101000a900460ff1681565b60606040518060400160405280600481526020017f424f424f00000000000000000000000000000000000000000000000000000000815250905090565b611b7733611076565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad9061415e565b60405180910390fd5b611bc08282612af9565b5050565b60095481565b611bd3336123f5565b611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c099061417e565b60405180910390fd5b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cf13384846124b6565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b611d4833611076565b611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e9061415e565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e10336123f5565b611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e469061417e565b60405180910390fd5b866011819055508560128190555084601381905550611e8985611e7b888a612c1190919063ffffffff16565b612c1190919063ffffffff16565b601481905550836015819055508260168190555081601781905550611ec982611ebb8587612c1190919063ffffffff16565b612c1190919063ffffffff16565b6018819055508060198190555050505050505050565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f6f336123f5565b611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa59061417e565b60405180910390fd5b81602260146101000a81548160ff021916908315150217905550806023819055505050565b6fffffffffffffffffffffffffffffffff801681565b611ff233611076565b612031576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120289061415e565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000811561209e5760185490506120a4565b60145490505b919050565b6120b233611076565b6120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e89061415e565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516121b79190613fef565b60405180910390a150565b6121cb336123f5565b61220a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122019061417e565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156122fc57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016122c5929190614033565b600060405180830381600087803b1580156122df57600080fd5b505af11580156122f3573d6000803e3d6000fd5b505050506123cb565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161239892919061405c565b600060405180830381600087803b1580156123b257600080fd5b505af11580156123c6573d6000803e3d6000fd5b505050505b5050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081836124599190614302565b905092915050565b60008383111582906124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0919061411c565b60405180910390fd5b5082840390509392505050565b6000602460009054906101000a900460ff16156124df576124d8848484612c27565b9050612adc565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061258b57508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b9050801580156125e55750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126795760085484600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263891906142ac565b10612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f9061413e565b60405180910390fd5b5b80801561268857506009548410155b156126a457612695612d95565b156126a3576126a2612e68565b5b5b61272d846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124619092919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061277c8787613405565b6127865784612792565b6127918787876136c6565b5b90506127e681600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1190919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661294c57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161291692919061405c565b600060405180830381600087803b15801561293057600080fd5b505af1925050508015612941575060015b61294a5761294b565b5b5b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a6f57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a3992919061405c565b600060405180830381600087803b158015612a5357600080fd5b505af1925050508015612a64575060015b612a6d57612a6e565b5b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612acc919061419e565b60405180910390a3600193505050505b9392505050565b60008183612af1919061438d565b905092915050565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612baf576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80612c0d576000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60008183612c1f91906142ac565b905092915050565b6000612cb2826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124619092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d4782600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1190919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dfe5750602460009054906101000a900460ff16155b8015612e165750602260149054906101000a900460ff165b8015612e635750602354600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602460006101000a81548160ff0219169083151502179055506000612e8e30611896565b90506000612ebd601b54612eaf601c54601a54612c1190919063ffffffff16565b612c1190919063ffffffff16565b90506000612ed76002601a5461244b90919063ffffffff16565b90506000612eee8285612ae390919063ffffffff16565b90506000600267ffffffffffffffff811115612f33577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612f615781602001602082028036833780820191505090505b5090503081600081518110612f9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613036577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016130d99594939291906141b9565b600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b5050505060006131208247612ae390919063ffffffff16565b9050600061315e600261315089613142601a54876139f990919063ffffffff16565b61244b90919063ffffffff16565b61244b90919063ffffffff16565b905060006131898861317b601b54866139f990919063ffffffff16565b61244b90919063ffffffff16565b905060006131b4896131a6601c54876139f990919063ffffffff16565b61244b90919063ffffffff16565b90506000601a819055506000601c819055506000601b81905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561323857600080fd5b505af19350505050801561324a575060015b61325357613254565b5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156132bc573d6000803e3d6000fd5b5060008811156133de57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308b600080601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161334f96959493929190614085565b6060604051808303818588803b15801561336857600080fd5b505af115801561337c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133a19190613d00565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450683896040516133d5929190614213565b60405180910390a15b505050505050505050506000602460006101000a81548160ff021916908315150217905550565b6000600f60009054906101000a900460ff16156134c757600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134c05750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506136c0565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061357357508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b90506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135fa57508273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b905081806136055750805b156136b857600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136ae5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b93505050506136c0565b600093505050505b92915050565b600080601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061377357508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b905060006137808261208c565b905060006137ab60195461379d84896139f990919063ffffffff16565b61244b90919063ffffffff16565b9050821561384b5781601554826137c29190614333565b6137cc9190614302565b601a60008282546137dd91906142ac565b9250508190555081601754826137f39190614333565b6137fd9190614302565b601c600082825461380e91906142ac565b9250508190555081601654826138249190614333565b61382e9190614302565b601b600082825461383f91906142ac565b925050819055506138df565b816011548261385a9190614333565b6138649190614302565b601a600082825461387591906142ac565b92505081905550816013548261388b9190614333565b6138959190614302565b601c60008282546138a691906142ac565b9250508190555081601254826138bc9190614333565b6138c69190614302565b601b60008282546138d791906142ac565b925050819055505b61393181600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1190919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139d1919061419e565b60405180910390a36139ec8187612ae390919063ffffffff16565b9450505050509392505050565b60008183613a079190614333565b905092915050565b600081359050613a1e81614536565b92915050565b600081519050613a3381614536565b92915050565b600081359050613a488161454d565b92915050565b600081359050613a5d81614564565b92915050565b600081519050613a7281614564565b92915050565b600081359050613a878161457b565b92915050565b600081519050613a9c8161457b565b92915050565b600060208284031215613ab457600080fd5b6000613ac284828501613a0f565b91505092915050565b600060208284031215613add57600080fd5b6000613aeb84828501613a24565b91505092915050565b600060208284031215613b0657600080fd5b6000613b1484828501613a39565b91505092915050565b60008060408385031215613b3057600080fd5b6000613b3e85828601613a0f565b9250506020613b4f85828601613a0f565b9150509250929050565b600080600060608486031215613b6e57600080fd5b6000613b7c86828701613a0f565b9350506020613b8d86828701613a0f565b9250506040613b9e86828701613a78565b9150509250925092565b60008060408385031215613bbb57600080fd5b6000613bc985828601613a0f565b9250506020613bda85828601613a4e565b9150509250929050565b60008060408385031215613bf757600080fd5b6000613c0585828601613a0f565b9250506020613c1685828601613a78565b9150509250929050565b600060208284031215613c3257600080fd5b6000613c4084828501613a4e565b91505092915050565b600060208284031215613c5b57600080fd5b6000613c6984828501613a63565b91505092915050565b60008060408385031215613c8557600080fd5b6000613c9385828601613a4e565b9250506020613ca485828601613a78565b9150509250929050565b600060208284031215613cc057600080fd5b6000613cce84828501613a78565b91505092915050565b600060208284031215613ce957600080fd5b6000613cf784828501613a8d565b91505092915050565b600080600060608486031215613d1557600080fd5b6000613d2386828701613a8d565b9350506020613d3486828701613a8d565b9250506040613d4586828701613a8d565b9150509250925092565b600080600080600080600060e0888a031215613d6a57600080fd5b6000613d788a828b01613a78565b9750506020613d898a828b01613a78565b9650506040613d9a8a828b01613a78565b9550506060613dab8a828b01613a78565b9450506080613dbc8a828b01613a78565b93505060a0613dcd8a828b01613a78565b92505060c0613dde8a828b01613a78565b91505092959891949750929550565b6000613df98383613e14565b60208301905092915050565b613e0e81614428565b82525050565b613e1d816143c1565b82525050565b613e2c816143c1565b82525050565b6000613e3d82614267565b613e47818561428a565b9350613e5283614257565b8060005b83811015613e83578151613e6a8882613ded565b9750613e758361427d565b925050600181019050613e56565b5085935050505092915050565b613e99816143e5565b82525050565b613ea88161443a565b82525050565b613eb78161445e565b82525050565b6000613ec882614272565b613ed2818561429b565b9350613ee2818560208601614494565b613eeb81614525565b840191505092915050565b6000613f03601d8361429b565b91507f4d61782077616c6c657420686173206265656e207472696767657265640000006000830152602082019050919050565b6000613f4360068361429b565b91507f214f574e455200000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613f83600b8361429b565b91507f21415554484f52495a45440000000000000000000000000000000000000000006000830152602082019050919050565b613fbf81614411565b82525050565b613fce8161441b565b82525050565b6000602082019050613fe96000830184613e23565b92915050565b60006020820190506140046000830184613e05565b92915050565b600060408201905061401f6000830185613e23565b61402c6020830184613e23565b9392505050565b60006040820190506140486000830185613e23565b6140556020830184613eae565b9392505050565b60006040820190506140716000830185613e23565b61407e6020830184613fb6565b9392505050565b600060c08201905061409a6000830189613e23565b6140a76020830188613fb6565b6140b46040830187613eae565b6140c16060830186613eae565b6140ce6080830185613e23565b6140db60a0830184613fb6565b979650505050505050565b60006020820190506140fb6000830184613e90565b92915050565b60006020820190506141166000830184613e9f565b92915050565b600060208201905081810360008301526141368184613ebd565b905092915050565b6000602082019050818103600083015261415781613ef6565b9050919050565b6000602082019050818103600083015261417781613f36565b9050919050565b6000602082019050818103600083015261419781613f76565b9050919050565b60006020820190506141b36000830184613fb6565b92915050565b600060a0820190506141ce6000830188613fb6565b6141db6020830187613eae565b81810360408301526141ed8186613e32565b90506141fc6060830185613e23565b6142096080830184613fb6565b9695505050505050565b60006040820190506142286000830185613fb6565b6142356020830184613fb6565b9392505050565b60006020820190506142516000830184613fc5565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006142b782614411565b91506142c283614411565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142f7576142f66144c7565b5b828201905092915050565b600061430d82614411565b915061431883614411565b925082614328576143276144f6565b5b828204905092915050565b600061433e82614411565b915061434983614411565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614382576143816144c7565b5b828202905092915050565b600061439882614411565b91506143a383614411565b9250828210156143b6576143b56144c7565b5b828203905092915050565b60006143cc826143f1565b9050919050565b60006143de826143f1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061443382614470565b9050919050565b60006144458261444c565b9050919050565b6000614457826143f1565b9050919050565b600061446982614411565b9050919050565b600061447b82614482565b9050919050565b600061448d826143f1565b9050919050565b60005b838110156144b2578082015181840152602081019050614497565b838111156144c1576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b61453f816143c1565b811461454a57600080fd5b50565b614556816143d3565b811461456157600080fd5b50565b61456d816143e5565b811461457857600080fd5b50565b61458481614411565b811461458f57600080fd5b5056fea264697066735822122076295d3ba1919ac642075de1e7c1ddcdfcfd75ffbc77436770512592b238341964736f6c63430008000033
Verified Source Code Partial Match
Compiler: v0.8.0+commit.c7dfd78e
EVM: istanbul
Optimization: No
BOBO.sol 995 lines
/**
* BOBOBUCKS.COM T.ME/BOBO_BUCKS
*/
// 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(0xc778417E063141139Fce010982780140Aa0cD5Ab);
address WETH = 0xc778417E063141139Fce010982780140Aa0cD5Ab;
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;
//bool public blacklistMode = true;
address public constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
address public constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
uint256 public totalShares;
uint256 public totalDividends;
uint256 public totalDistributed; // to be shown in UI
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[USDT] = true;
allowed[USDC] = true;
allowed[DAI] = 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, USDT);
}
}
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 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 BOBO 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 = "Bobo Bucks";
string constant _symbol = "BOBO";
uint8 constant _decimals = 9;
uint256 _totalSupply = 1000000000 * (10 ** _decimals);
uint256 public _maxWallet = _totalSupply.div(50);
uint256 public minAmountToTriggerSwap = 0;
mapping (address => uint256) _balances;
mapping (address => mapping (address => uint256)) _allowances;
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 = 500;
uint256 buyOperationsFee = 500;
uint256 buyTotalFee = 1000;
uint256 sellLiquidityFee = 250;
uint256 sellReflectionFee = 1750;
uint256 sellOperationsFee = 0;
uint256 sellTotalFee = 2000;
uint256 feeDenominator = 10000;
uint256 _liquidityTokensToSwap;
uint256 _reflectionTokensToSwap;
uint256 _operationsTokensToSwap;
address public autoLiquidityReceiver = msg.sender;
address public operationsFeeReceiver = 0xa25f660C32de73C7F5973Af7a9Fa43994F764c06;
IDEXRouter public router;
address public pair;
DividendDistributor distributor;
address public distributorAddress;
bool public swapEnabled = true;
uint256 private swapMinimumTokens = _totalSupply / 5000; // 0.0025%
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);
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);
}
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(isSell) {
_liquidityTokensToSwap += feeAmount * sellLiquidityFee / totalFee;
_operationsTokensToSwap += feeAmount * sellOperationsFee / totalFee;
_reflectionTokensToSwap += feeAmount * sellReflectionFee / totalFee;
} else {
_liquidityTokensToSwap += feeAmount * buyLiquidityFee / totalFee;
_operationsTokensToSwap += feeAmount * buyOperationsFee / totalFee;
_reflectionTokensToSwap += feeAmount * buyReflectionFee / 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);
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);
_liquidityTokensToSwap = 0;
_operationsTokensToSwap = 0;
_reflectionTokensToSwap = 0;
try distributor.deposit{value: amountETHReflection}() {} catch {}
payable(operationsFeeReceiver).transfer(amountETHOperations);
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 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 setIsFeeExempt(
address holder,
bool exempt
) external authorized {
isFeeExempt[holder] = exempt;
}
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 _sellLiquidityFee,
uint256 _sellReflectionFee,
uint256 _sellOperationsFee,
uint256 _feeDenominator
) external authorized {
buyLiquidityFee = _buyLiquidityFee;
buyReflectionFee = _buyReflectionFee;
buyOperationsFee = _buyOperationsFee;
buyTotalFee = _buyLiquidityFee.add(_buyReflectionFee).add(_buyOperationsFee);
sellLiquidityFee = _sellLiquidityFee;
sellReflectionFee = _sellReflectionFee;
sellOperationsFee = _sellOperationsFee;
sellTotalFee = _sellLiquidityFee.add(_sellReflectionFee).add(_sellOperationsFee);
feeDenominator = _feeDenominator;
}
function setFeeReceivers(
address _autoLiquidityReceiver,
address _operationsFeeReceiver
) external authorized {
autoLiquidityReceiver = _autoLiquidityReceiver;
operationsFeeReceiver = _operationsFeeReceiver;
}
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
decimals 0x313ce567 → uint8
distributorAddress 0xa51af4c5 → address
getCirculatingSupply 0x2b112e49 → uint256
getOwner 0x893d20e8 → address
getTotalFee 0xf1f3bca3 → uint256
isAuthorized 0xfe9fbb80 → 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
Write Contract 21 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
changeRouterVersion 0x5881f3ef
address _router
returns: address
setAutomatedMarketMakerPair 0x9a7a23d6
address _pair
bool value
setFeeReceivers 0xa4b45c00
address _autoLiquidityReceiver
address _operationsFeeReceiver
setFees 0xda2e3bad
uint256 _buyLiquidityFee
uint256 _buyReflectionFee
uint256 _buyOperationsFee
uint256 _sellLiquidityFee
uint256 _sellReflectionFee
uint256 _sellOperationsFee
uint256 _feeDenominator
setFree 0x89ef69f6
address holder
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
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