Address Contract Partially Verified
Address
0x1372746317caCc09fbbe7feCB51096D3d56F53a2
Balance
0 ETH
Nonce
1
Code Size
19737 bytes
Creator
0x11De48b8...Ee17 at tx 0xd96f0be4...92a60d
Indexed Transactions
0
Contract Bytecode
19737 bytes
0x6080604052600436106103905760003560e01c80637bce5a04116101dc578063aacebbe311610102578063c8c8ebe4116100a0578063e2f456051161006f578063e2f4560514610d4f578063e884f26014610d7a578063f2fde38b14610da5578063f8b45b0514610dce57610397565b8063c8c8ebe414610c7f578063d257b34f14610caa578063d85ba06314610ce7578063dd62ed3e14610d1257610397565b8063c0246668116100dc578063c024666814610beb578063c18bc19514610c14578063c3c8cd8014610c3d578063c876d0b914610c5457610397565b8063aacebbe314610b5a578063b62496f514610b83578063bbc0c74214610bc057610397565b80639a7a23d61161017a578063a0d82dc511610149578063a0d82dc514610a8a578063a457c2d714610ab5578063a4c82a0014610af2578063a9059cbb14610b1d57610397565b80639a7a23d6146109e05780639c3b4fdc14610a095780639ec22c0e14610a345780639fccce3214610a5f57610397565b80638ea5220f116101b65780638ea5220f146109365780639213691314610961578063924de9b71461098c57806395d89b41146109b557610397565b80637bce5a04146108c95780638a8c523c146108f45780638da5cb5b1461090b57610397565b80632c3e486c116102c157806366ca9b831161025f578063715018a61161022e578063715018a614610833578063751039fc1461084a5780637571336a1461087557806375f0a8741461089e57610397565b806366ca9b83146107775780636a486a8e146107a05780636ddd1713146107cb57806370a08231146107f657610397565b8063395093511161029b57806339509351146106a757806349bd5a5e146106e45780634a62bb651461070f5780634fbee1931461073a57610397565b80632c3e486c146106265780632e82f1a014610651578063313ce5671461067c57610397565b8063184c16c51161032e5780631f3fed8f116103085780631f3fed8f1461056a578063203e727e1461059557806323b872dd146105be57806327c8f835146105fb57610397565b8063184c16c5146104e9578063199ffc72146105145780631a8145bb1461053f57610397565b806310d5de531161036a57806310d5de531461042d5780631694505e1461046a57806318160ddd146104955780631816467f146104c057610397565b806302dbd8f81461039c57806306fdde03146103c5578063095ea7b3146103f057610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103c360048036038101906103be9190613924565b610df9565b005b3480156103d157600080fd5b506103da610ee3565b6040516103e791906139fd565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613a7d565b610f75565b6040516104249190613ad8565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613af3565b610f93565b6040516104619190613ad8565b60405180910390f35b34801561047657600080fd5b5061047f610fb3565b60405161048c9190613b7f565b60405180910390f35b3480156104a157600080fd5b506104aa610fd7565b6040516104b79190613ba9565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613af3565b610fe1565b005b3480156104f557600080fd5b506104fe61111d565b60405161050b9190613ba9565b60405180910390f35b34801561052057600080fd5b50610529611123565b6040516105369190613ba9565b60405180910390f35b34801561054b57600080fd5b50610554611129565b6040516105619190613ba9565b60405180910390f35b34801561057657600080fd5b5061057f61112f565b60405161058c9190613ba9565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613bc4565b611135565b005b3480156105ca57600080fd5b506105e560048036038101906105e09190613bf1565b611244565b6040516105f29190613ad8565b60405180910390f35b34801561060757600080fd5b5061061061133c565b60405161061d9190613c53565b60405180910390f35b34801561063257600080fd5b5061063b611342565b6040516106489190613ba9565b60405180910390f35b34801561065d57600080fd5b50610666611348565b6040516106739190613ad8565b60405180910390f35b34801561068857600080fd5b5061069161135b565b60405161069e9190613c8a565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613a7d565b611364565b6040516106db9190613ad8565b60405180910390f35b3480156106f057600080fd5b506106f9611410565b6040516107069190613c53565b60405180910390f35b34801561071b57600080fd5b50610724611434565b6040516107319190613ad8565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c9190613af3565b611447565b60405161076e9190613ad8565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613924565b61149d565b005b3480156107ac57600080fd5b506107b5611587565b6040516107c29190613ba9565b60405180910390f35b3480156107d757600080fd5b506107e061158d565b6040516107ed9190613ad8565b60405180910390f35b34801561080257600080fd5b5061081d60048036038101906108189190613af3565b6115a0565b60405161082a9190613ba9565b60405180910390f35b34801561083f57600080fd5b506108486115e8565b005b34801561085657600080fd5b5061085f611670565b60405161086c9190613ad8565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190613cd1565b611710565b005b3480156108aa57600080fd5b506108b36117e7565b6040516108c09190613d32565b60405180910390f35b3480156108d557600080fd5b506108de61180d565b6040516108eb9190613ba9565b60405180910390f35b34801561090057600080fd5b50610909611813565b005b34801561091757600080fd5b506109206118ce565b60405161092d9190613c53565b60405180910390f35b34801561094257600080fd5b5061094b6118f8565b6040516109589190613d32565b60405180910390f35b34801561096d57600080fd5b5061097661191e565b6040516109839190613ba9565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae9190613d4d565b611924565b005b3480156109c157600080fd5b506109ca6119bd565b6040516109d791906139fd565b60405180910390f35b3480156109ec57600080fd5b50610a076004803603810190610a029190613cd1565b611a4f565b005b348015610a1557600080fd5b50610a1e611b68565b604051610a2b9190613ba9565b60405180910390f35b348015610a4057600080fd5b50610a49611b6e565b604051610a569190613ba9565b60405180910390f35b348015610a6b57600080fd5b50610a74611b74565b604051610a819190613ba9565b60405180910390f35b348015610a9657600080fd5b50610a9f611b7a565b604051610aac9190613ba9565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190613a7d565b611b80565b604051610ae99190613ad8565b60405180910390f35b348015610afe57600080fd5b50610b07611c6b565b604051610b149190613ba9565b60405180910390f35b348015610b2957600080fd5b50610b446004803603810190610b3f9190613a7d565b611c71565b604051610b519190613ad8565b60405180910390f35b348015610b6657600080fd5b50610b816004803603810190610b7c9190613af3565b611c8f565b005b348015610b8f57600080fd5b50610baa6004803603810190610ba59190613af3565b611dcb565b604051610bb79190613ad8565b60405180910390f35b348015610bcc57600080fd5b50610bd5611deb565b604051610be29190613ad8565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d9190613cd1565b611dfe565b005b348015610c2057600080fd5b50610c3b6004803603810190610c369190613bc4565b611f23565b005b348015610c4957600080fd5b50610c52612032565b005b348015610c6057600080fd5b50610c696120ac565b604051610c769190613ad8565b60405180910390f35b348015610c8b57600080fd5b50610c946120bf565b604051610ca19190613ba9565b60405180910390f35b348015610cb657600080fd5b50610cd16004803603810190610ccc9190613bc4565b6120c5565b604051610cde9190613ad8565b60405180910390f35b348015610cf357600080fd5b50610cfc61221a565b604051610d099190613ba9565b60405180910390f35b348015610d1e57600080fd5b50610d396004803603810190610d349190613d7a565b612220565b604051610d469190613ba9565b60405180910390f35b348015610d5b57600080fd5b50610d646122a7565b604051610d719190613ba9565b60405180910390f35b348015610d8657600080fd5b50610d8f6122ad565b604051610d9c9190613ad8565b60405180910390f35b348015610db157600080fd5b50610dcc6004803603810190610dc79190613af3565b61234d565b005b348015610dda57600080fd5b50610de3612445565b604051610df09190613ba9565b60405180910390f35b610e0161244b565b73ffffffffffffffffffffffffffffffffffffffff16610e1f6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614610e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6c90613e06565b60405180910390fd5b8160188190555080601981905550601954601854610e939190613e55565b60178190555060146017541115610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690613ef7565b60405180910390fd5b5050565b606060038054610ef290613f46565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1e90613f46565b8015610f6b5780601f10610f4057610100808354040283529160200191610f6b565b820191906000526020600020905b815481529060010190602001808311610f4e57829003601f168201915b5050505050905090565b6000610f89610f8261244b565b8484612453565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610fe961244b565b73ffffffffffffffffffffffffffffffffffffffff166110076118ce565b73ffffffffffffffffffffffffffffffffffffffff161461105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613e06565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601b5481565b601a5481565b61113d61244b565b73ffffffffffffffffffffffffffffffffffffffff1661115b6118ce565b73ffffffffffffffffffffffffffffffffffffffff16146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890613e06565b60405180910390fd5b670de0b6b3a76400006103e860016111c7610fd7565b6111d19190613f78565b6111db9190614001565b6111e59190614001565b811015611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e906140a4565b60405180910390fd5b670de0b6b3a76400008161123b9190613f78565b60088190555050565b600061125184848461261e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061129c61244b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390614136565b60405180910390fd5b6113308561132861244b565b858403612453565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061140661137161244b565b84846001600061137f61244b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114019190613e55565b612453565b6001905092915050565b7f000000000000000000000000a844646387f768de9ea9fd6bb86f008ef4af681c81565b601160009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114a561244b565b73ffffffffffffffffffffffffffffffffffffffff166114c36118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090613e06565b60405180910390fd5b81601581905550806016819055506016546015546115379190613e55565b601481905550600f6014541115611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a906141a2565b60405180910390fd5b5050565b60175481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115f061244b565b73ffffffffffffffffffffffffffffffffffffffff1661160e6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90613e06565b60405180910390fd5b61166e6000613222565b565b600061167a61244b565b73ffffffffffffffffffffffffffffffffffffffff166116986118ce565b73ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613e06565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61171861244b565b73ffffffffffffffffffffffffffffffffffffffff166117366118ce565b73ffffffffffffffffffffffffffffffffffffffff161461178c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178390613e06565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61181b61244b565b73ffffffffffffffffffffffffffffffffffffffff166118396118ce565b73ffffffffffffffffffffffffffffffffffffffff161461188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690613e06565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b61192c61244b565b73ffffffffffffffffffffffffffffffffffffffff1661194a6118ce565b73ffffffffffffffffffffffffffffffffffffffff16146119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790613e06565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546119cc90613f46565b80601f01602080910402602001604051908101604052809291908181526020018280546119f890613f46565b8015611a455780601f10611a1a57610100808354040283529160200191611a45565b820191906000526020600020905b815481529060010190602001808311611a2857829003601f168201915b5050505050905090565b611a5761244b565b73ffffffffffffffffffffffffffffffffffffffff16611a756118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac290613e06565b60405180910390fd5b7f000000000000000000000000a844646387f768de9ea9fd6bb86f008ef4af681c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5190614234565b60405180910390fd5b611b6482826132e8565b5050565b60165481565b60105481565b601c5481565b60195481565b60008060016000611b8f61244b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906142c6565b60405180910390fd5b611c60611c5761244b565b85858403612453565b600191505092915050565b600e5481565b6000611c85611c7e61244b565b848461261e565b6001905092915050565b611c9761244b565b73ffffffffffffffffffffffffffffffffffffffff16611cb56118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0290613e06565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f6020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611e0661244b565b73ffffffffffffffffffffffffffffffffffffffff16611e246118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7190613e06565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f179190613ad8565b60405180910390a25050565b611f2b61244b565b73ffffffffffffffffffffffffffffffffffffffff16611f496118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690613e06565b60405180910390fd5b670de0b6b3a76400006103e86005611fb5610fd7565b611fbf9190613f78565b611fc99190614001565b611fd39190614001565b811015612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90614358565b60405180910390fd5b670de0b6b3a7640000816120299190613f78565b600a8190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661207361244b565b73ffffffffffffffffffffffffffffffffffffffff161461209357600080fd5b600061209e306115a0565b90506120a981613389565b50565b601360009054906101000a900460ff1681565b60085481565b60006120cf61244b565b73ffffffffffffffffffffffffffffffffffffffff166120ed6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213a90613e06565b60405180910390fd5b620186a06001612151610fd7565b61215b9190613f78565b6121659190614001565b8210156121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e906143ea565b60405180910390fd5b6103e860056121b4610fd7565b6121be9190613f78565b6121c89190614001565b82111561220a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122019061447c565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006122b761244b565b73ffffffffffffffffffffffffffffffffffffffff166122d56118ce565b73ffffffffffffffffffffffffffffffffffffffff161461232b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232290613e06565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61235561244b565b73ffffffffffffffffffffffffffffffffffffffff166123736118ce565b73ffffffffffffffffffffffffffffffffffffffff16146123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090613e06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612439576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124309061450e565b60405180910390fd5b61244281613222565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ba906145a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a90614632565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126119190613ba9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561268e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612685906146c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f590614756565b60405180910390fd5b600081141561271857612713838360006135c6565b61321d565b601160009054906101000a900460ff1615612ddb576127356118ce565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127a357506127736118ce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127dc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612816575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561282f5750600560149054906101000a900460ff16155b15612dda57601160019054906101000a900460ff1661292957601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e95750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f906147c2565b60405180910390fd5b5b601360009054906101000a900460ff1615612af1576129466118ce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156129cd57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a2557507f000000000000000000000000a844646387f768de9ea9fd6bb86f008ef4af681c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612af05743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa29061487a565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b945750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3b57600854811115612bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd59061490c565b60405180910390fd5b600a54612bea836115a0565b82612bf59190613e55565b1115612c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2d90614978565b60405180910390fd5b612dd9565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cde5750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2d57600854811115612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614a0a565b60405180910390fd5b612dd8565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612dd757600a54612d8a836115a0565b82612d959190613e55565b1115612dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcd90614978565b60405180910390fd5b5b5b5b5b5b6000612de6306115a0565b9050601160029054906101000a900460ff168015612e115750600560149054906101000a900460ff16155b8015612e675750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ebd5750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f135750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f3b57612f2181613389565b60004790506000811115612f3957612f3847613847565b5b505b6000600560149054906101000a900460ff16159050601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ff15750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ffb57600090505b6000811561320e57601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561305e57506000601754115b156130f85761308b606461307d601754876138b390919063ffffffff16565b6138c990919063ffffffff16565b90506017546019548261309e9190613f78565b6130a89190614001565b601c60008282546130b99190613e55565b92505081905550601754601854826130d19190613f78565b6130db9190614001565b601a60008282546130ec9190613e55565b925050819055506131ea565b601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561315357506000601454115b156131e9576131806064613172601454876138b390919063ffffffff16565b6138c990919063ffffffff16565b9050601454601654826131939190613f78565b61319d9190614001565b601c60008282546131ae9190613e55565b92505081905550601454601554826131c69190613f78565b6131d09190614001565b601a60008282546131e19190613e55565b925050819055505b5b60008111156131ff576131fe8630836135c6565b5b808461320b9190614a2a565b93505b6132198686866135c6565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff8111156133a6576133a5614a5e565b5b6040519080825280602002602001820160405280156133d45781602001602082028036833780820191505090505b50905030816000815181106133ec576133eb614a8d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b59190614ad1565b816001815181106134c9576134c8614a8d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061352e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612453565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613590959493929190614bf7565b600060405180830381600087803b1580156135aa57600080fd5b505af11580156135be573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362d906146c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369d90614756565b60405180910390fd5b6136b18383836138df565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372e90614cc3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137ca9190613e55565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161382e9190613ba9565b60405180910390a36138418484846138e4565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156138af573d6000803e3d6000fd5b5050565b600081836138c19190613f78565b905092915050565b600081836138d79190614001565b905092915050565b505050565b505050565b600080fd5b6000819050919050565b613901816138ee565b811461390c57600080fd5b50565b60008135905061391e816138f8565b92915050565b6000806040838503121561393b5761393a6138e9565b5b60006139498582860161390f565b925050602061395a8582860161390f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561399e578082015181840152602081019050613983565b838111156139ad576000848401525b50505050565b6000601f19601f8301169050919050565b60006139cf82613964565b6139d9818561396f565b93506139e9818560208601613980565b6139f2816139b3565b840191505092915050565b60006020820190508181036000830152613a1781846139c4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a4a82613a1f565b9050919050565b613a5a81613a3f565b8114613a6557600080fd5b50565b600081359050613a7781613a51565b92915050565b60008060408385031215613a9457613a936138e9565b5b6000613aa285828601613a68565b9250506020613ab38582860161390f565b9150509250929050565b60008115159050919050565b613ad281613abd565b82525050565b6000602082019050613aed6000830184613ac9565b92915050565b600060208284031215613b0957613b086138e9565b5b6000613b1784828501613a68565b91505092915050565b6000819050919050565b6000613b45613b40613b3b84613a1f565b613b20565b613a1f565b9050919050565b6000613b5782613b2a565b9050919050565b6000613b6982613b4c565b9050919050565b613b7981613b5e565b82525050565b6000602082019050613b946000830184613b70565b92915050565b613ba3816138ee565b82525050565b6000602082019050613bbe6000830184613b9a565b92915050565b600060208284031215613bda57613bd96138e9565b5b6000613be88482850161390f565b91505092915050565b600080600060608486031215613c0a57613c096138e9565b5b6000613c1886828701613a68565b9350506020613c2986828701613a68565b9250506040613c3a8682870161390f565b9150509250925092565b613c4d81613a3f565b82525050565b6000602082019050613c686000830184613c44565b92915050565b600060ff82169050919050565b613c8481613c6e565b82525050565b6000602082019050613c9f6000830184613c7b565b92915050565b613cae81613abd565b8114613cb957600080fd5b50565b600081359050613ccb81613ca5565b92915050565b60008060408385031215613ce857613ce76138e9565b5b6000613cf685828601613a68565b9250506020613d0785828601613cbc565b9150509250929050565b6000613d1c82613a1f565b9050919050565b613d2c81613d11565b82525050565b6000602082019050613d476000830184613d23565b92915050565b600060208284031215613d6357613d626138e9565b5b6000613d7184828501613cbc565b91505092915050565b60008060408385031215613d9157613d906138e9565b5b6000613d9f85828601613a68565b9250506020613db085828601613a68565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613df060208361396f565b9150613dfb82613dba565b602082019050919050565b60006020820190508181036000830152613e1f81613de3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e60826138ee565b9150613e6b836138ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ea057613e9f613e26565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613ee1601d8361396f565b9150613eec82613eab565b602082019050919050565b60006020820190508181036000830152613f1081613ed4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f5e57607f821691505b60208210811415613f7257613f71613f17565b5b50919050565b6000613f83826138ee565b9150613f8e836138ee565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fc757613fc6613e26565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061400c826138ee565b9150614017836138ee565b92508261402757614026613fd2565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061408e602f8361396f565b915061409982614032565b604082019050919050565b600060208201905081810360008301526140bd81614081565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061412060288361396f565b915061412b826140c4565b604082019050919050565b6000602082019050818103600083015261414f81614113565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061418c601d8361396f565b915061419782614156565b602082019050919050565b600060208201905081810360008301526141bb8161417f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061421e60398361396f565b9150614229826141c2565b604082019050919050565b6000602082019050818103600083015261424d81614211565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142b060258361396f565b91506142bb82614254565b604082019050919050565b600060208201905081810360008301526142df816142a3565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061434260248361396f565b915061434d826142e6565b604082019050919050565b6000602082019050818103600083015261437181614335565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143d460358361396f565b91506143df82614378565b604082019050919050565b60006020820190508181036000830152614403816143c7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061446660348361396f565b91506144718261440a565b604082019050919050565b6000602082019050818103600083015261449581614459565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144f860268361396f565b91506145038261449c565b604082019050919050565b60006020820190508181036000830152614527816144eb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061458a60248361396f565b91506145958261452e565b604082019050919050565b600060208201905081810360008301526145b98161457d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061461c60228361396f565b9150614627826145c0565b604082019050919050565b6000602082019050818103600083015261464b8161460f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006146ae60258361396f565b91506146b982614652565b604082019050919050565b600060208201905081810360008301526146dd816146a1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061474060238361396f565b915061474b826146e4565b604082019050919050565b6000602082019050818103600083015261476f81614733565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006147ac60168361396f565b91506147b782614776565b602082019050919050565b600060208201905081810360008301526147db8161479f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061486460498361396f565b915061486f826147e2565b606082019050919050565b6000602082019050818103600083015261489381614857565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006148f660358361396f565b91506149018261489a565b604082019050919050565b60006020820190508181036000830152614925816148e9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061496260138361396f565b915061496d8261492c565b602082019050919050565b6000602082019050818103600083015261499181614955565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006149f460368361396f565b91506149ff82614998565b604082019050919050565b60006020820190508181036000830152614a23816149e7565b9050919050565b6000614a35826138ee565b9150614a40836138ee565b925082821015614a5357614a52613e26565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614acb81613a51565b92915050565b600060208284031215614ae757614ae66138e9565b5b6000614af584828501614abc565b91505092915050565b6000819050919050565b6000614b23614b1e614b1984614afe565b613b20565b6138ee565b9050919050565b614b3381614b08565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b6e81613a3f565b82525050565b6000614b808383614b65565b60208301905092915050565b6000602082019050919050565b6000614ba482614b39565b614bae8185614b44565b9350614bb983614b55565b8060005b83811015614bea578151614bd18882614b74565b9750614bdc83614b8c565b925050600181019050614bbd565b5085935050505092915050565b600060a082019050614c0c6000830188613b9a565b614c196020830187614b2a565b8181036040830152614c2b8186614b99565b9050614c3a6060830185613c44565b614c476080830184613b9a565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614cad60268361396f565b9150614cb882614c51565b604082019050919050565b60006020820190508181036000830152614cdc81614ca0565b905091905056fea26469706673582212201e5167c6da8728c9369887b8d26714382b610bf3aa65bf081da6de11d86dca7864736f6c634300080a0033
Verified Source Code Partial Match
Compiler: v0.8.10+commit.fc410830
EVM: london
Optimization: No
InuTheReturn.sol 1461 lines
/*
https://t.me/inuentryportal
https://twitter.com/inuthereturn?s=21
*/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;
////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)
/* pragma solidity ^0.8.0; */
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)
/* pragma solidity ^0.8.0; */
/* import "../utils/Context.sol"; */
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)
/* pragma solidity ^0.8.0; */
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)
/* pragma solidity ^0.8.0; */
/* import "../IERC20.sol"; */
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)
/* pragma solidity ^0.8.0; */
/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)
/* pragma solidity ^0.8.0; */
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */
interface IUniswapV2Router02 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
/* pragma solidity >=0.8.10; */
/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */
contract InuTheReturn is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
address public constant deadAddress = address(0xdead);
bool private swapping;
address payable public marketingWallet;
address payable public devWallet;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public maxWallet;
uint256 public percentForLPBurn = 25; // 25 = .25%
bool public lpBurnEnabled = false;
uint256 public lpBurnFrequency = 3600 seconds;
uint256 public lastLpBurnTime;
uint256 public manualBurnFrequency = 30 minutes;
uint256 public lastManualLpBurnTime;
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = false;
// Anti-bot and anti-whale mappings and variables
mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
bool public transferDelayEnabled = true;
uint256 public buyTotalFees;
uint256 public buyMarketingFee;
uint256 public buyDevFee;
uint256 public sellTotalFees;
uint256 public sellMarketingFee;
uint256 public sellDevFee;
uint256 public tokensForMarketing;
uint256 public tokensForLiquidity;
uint256 public tokensForDev;
/******************/
// exlcude from fees and max transaction amount
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public _isExcludedMaxTransactionAmount;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping(address => bool) public automatedMarketMakerPairs;
event UpdateUniswapV2Router(
address indexed newAddress,
address indexed oldAddress
);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event marketingWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
event devWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiquidity
);
event AutoNukeLP();
event ManualNukeLP();
constructor() ERC20("The Return", "INU") {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
excludeFromMaxTransaction(address(_uniswapV2Router), true);
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
excludeFromMaxTransaction(address(uniswapV2Pair), true);
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
uint256 _buyMarketingFee = 10;
uint256 _buyDevFee = 0;
uint256 _sellMarketingFee = 25;
uint256 _sellDevFee = 0;
uint256 totalSupply = 1_000_000 * 1e18;
maxTransactionAmount = 10_001 * 1e18; // 1% from total supply maxTransactionAmountTxn
maxWallet = 20_001 * 1e18; // 2% from total supply maxWallet
swapTokensAtAmount = (totalSupply * 10) / 10000;
buyMarketingFee = _buyMarketingFee;
buyDevFee = _buyDevFee;
buyTotalFees = buyMarketingFee + buyDevFee;
sellMarketingFee = _sellMarketingFee;
sellDevFee = _sellDevFee;
sellTotalFees = sellMarketingFee + sellDevFee;
marketingWallet = payable(0x517cf9ED4b1534418390bB37184d7602e9A86800); // set as marketing wallet
devWallet = payable(0x11De48b8F596dEEb5b5F0913C4BbbF1Db999Ee17); // set as dev wallet
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromMaxTransaction(owner(), true);
excludeFromMaxTransaction(address(this), true);
excludeFromMaxTransaction(address(0xdead), true);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(msg.sender, totalSupply);
}
receive() external payable {}
function sendETHToFee(uint256 amount) private {
devWallet.transfer(amount);
}
// once enabled, can never be turned off
function enableTrading() external onlyOwner {
tradingActive = true;
swapEnabled = true;
lastLpBurnTime = block.timestamp;
}
function manualswap() external {
require(_msgSender() == marketingWallet);
uint256 contractBalance = balanceOf(address(this));
swapTokensForEth(contractBalance);
}
// remove limits after token is stable
function removeLimits() external onlyOwner returns (bool) {
limitsInEffect = false;
return true;
}
// disable Transfer delay - cannot be reenabled
function disableTransferDelay() external onlyOwner returns (bool) {
transferDelayEnabled = false;
return true;
}
// change the minimum amount of tokens to sell from fees
function updateSwapTokensAtAmount(uint256 newAmount)
external
onlyOwner
returns (bool)
{
require(
newAmount >= (totalSupply() * 1) / 100000,
"Swap amount cannot be lower than 0.001% total supply."
);
require(
newAmount <= (totalSupply() * 5) / 1000,
"Swap amount cannot be higher than 0.5% total supply."
);
swapTokensAtAmount = newAmount;
return true;
}
function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
require(
newNum >= ((totalSupply() * 1) / 1000) / 1e18,
"Cannot set maxTransactionAmount lower than 0.1%"
);
maxTransactionAmount = newNum * (10**18);
}
function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
require(
newNum >= ((totalSupply() * 5) / 1000) / 1e18,
"Cannot set maxWallet lower than 0.5%"
);
maxWallet = newNum * (10**18);
}
function excludeFromMaxTransaction(address updAds, bool isEx)
public
onlyOwner
{
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
// only use to disable contract sales if absolutely necessary (emergency use only)
function updateSwapEnabled(bool enabled) external onlyOwner {
swapEnabled = enabled;
}
function updateBuyFees(
uint256 _marketingFee,
uint256 _devFee
) external onlyOwner {
buyMarketingFee = _marketingFee;
buyDevFee = _devFee;
buyTotalFees = buyMarketingFee + buyDevFee;
require(buyTotalFees <= 15, "Must keep fees at 15% or less");
}
function updateSellFees(
uint256 _marketingFee,
uint256 _devFee
) external onlyOwner {
sellMarketingFee = _marketingFee;
sellDevFee = _devFee;
sellTotalFees = sellMarketingFee + sellDevFee;
require(sellTotalFees <= 20, "Must keep fees at 20% or less");
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function setAutomatedMarketMakerPair(address pair, bool value)
public
onlyOwner
{
require(
pair != uniswapV2Pair,
"The pair cannot be removed from automatedMarketMakerPairs"
);
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
function updateMarketingWallet(address newMarketingWallet)
external
onlyOwner
{
emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
marketingWallet = payable(newMarketingWallet);
}
function updateDevWallet(address newWallet) external onlyOwner {
emit devWalletUpdated(newWallet, devWallet);
devWallet = payable(newWallet);
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
if (limitsInEffect) {
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!swapping
) {
if (!tradingActive) {
require(
_isExcludedFromFees[from] || _isExcludedFromFees[to],
"Trading is not active."
);
}
// at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
if (transferDelayEnabled) {
if (
to != owner() &&
to != address(uniswapV2Router) &&
to != address(uniswapV2Pair)
) {
require(
_holderLastTransferTimestamp[tx.origin] <
block.number,
"_transfer:: Transfer Delay enabled. Only one purchase per block allowed."
);
_holderLastTransferTimestamp[tx.origin] = block.number;
}
}
//when buy
if (
automatedMarketMakerPairs[from] &&
!_isExcludedMaxTransactionAmount[to]
) {
require(
amount <= maxTransactionAmount,
"Buy transfer amount exceeds the maxTransactionAmount."
);
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
//when sell
else if (
automatedMarketMakerPairs[to] &&
!_isExcludedMaxTransactionAmount[from]
) {
require(
amount <= maxTransactionAmount,
"Sell transfer amount exceeds the maxTransactionAmount."
);
} else if (!_isExcludedMaxTransactionAmount[to]) {
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
if (
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapTokensForEth(contractTokenBalance);
uint256 contractETHBalance = address(this).balance;
if(contractETHBalance > 0) {
sendETHToFee(address(this).balance);
}
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if (takeFee) {
// on sell
if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
fees = amount.mul(sellTotalFees).div(100);
tokensForDev += (fees * sellDevFee) / sellTotalFees;
tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
}
// on buy
else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fees = amount.mul(buyTotalFees).div(100);
tokensForDev += (fees * buyDevFee) / buyTotalFees;
tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
deadAddress,
block.timestamp
);
}
}
Read Contract
_isExcludedMaxTransactionAmount 0x10d5de53 → bool
allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
buyDevFee 0x9c3b4fdc → uint256
buyMarketingFee 0x7bce5a04 → uint256
buyTotalFees 0xd85ba063 → uint256
deadAddress 0x27c8f835 → address
decimals 0x313ce567 → uint8
devWallet 0x8ea5220f → address
isExcludedFromFees 0x4fbee193 → bool
lastLpBurnTime 0xa4c82a00 → uint256
lastManualLpBurnTime 0x9ec22c0e → uint256
limitsInEffect 0x4a62bb65 → bool
lpBurnEnabled 0x2e82f1a0 → bool
lpBurnFrequency 0x2c3e486c → uint256
manualBurnFrequency 0x184c16c5 → uint256
marketingWallet 0x75f0a874 → address
maxTransactionAmount 0xc8c8ebe4 → uint256
maxWallet 0xf8b45b05 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
percentForLPBurn 0x199ffc72 → uint256
sellDevFee 0xa0d82dc5 → uint256
sellMarketingFee 0x92136913 → uint256
sellTotalFees 0x6a486a8e → uint256
swapEnabled 0x6ddd1713 → bool
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
tokensForDev 0x9fccce32 → uint256
tokensForLiquidity 0x1a8145bb → uint256
tokensForMarketing 0x1f3fed8f → uint256
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
transferDelayEnabled 0xc876d0b9 → bool
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address
Write Contract 22 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
disableTransferDelay 0xe884f260
No parameters
returns: bool
enableTrading 0x8a8c523c
No parameters
excludeFromFees 0xc0246668
address account
bool excluded
excludeFromMaxTransaction 0x7571336a
address updAds
bool isEx
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
manualswap 0xc3c8cd80
No parameters
removeLimits 0x751039fc
No parameters
returns: bool
renounceOwnership 0x715018a6
No parameters
setAutomatedMarketMakerPair 0x9a7a23d6
address pair
bool value
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateBuyFees 0x66ca9b83
uint256 _marketingFee
uint256 _devFee
updateDevWallet 0x1816467f
address newWallet
updateMarketingWallet 0xaacebbe3
address newMarketingWallet
updateMaxTxnAmount 0x203e727e
uint256 newNum
updateMaxWalletAmount 0xc18bc195
uint256 newNum
updateSellFees 0x02dbd8f8
uint256 _marketingFee
uint256 _devFee
updateSwapEnabled 0x924de9b7
bool enabled
updateSwapTokensAtAmount 0xd257b34f
uint256 newAmount
returns: bool
Recent Transactions
No transactions found for this address