Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0xc6fF1586F8Cb450aDC29Ea4de8B96286154f5b84
Balance 0 ETH
Nonce 1
Code Size 21547 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

21547 bytes
0x6080604052600436106102765760003560e01c8063715018a61161014f578063aecf9490116100c1578063d7c94efd1161007a578063d7c94efd14610993578063dd62ed3e146109be578063f02edbaf146109fb578063f242ab4114610a26578063f2fde38b14610a51578063f6794fdb14610a7a5761027d565b8063aecf949014610885578063b62496f5146108ae578063c0246668146108eb578063cbf2181f14610914578063d201b01e1461093f578063d4698016146109685761027d565b806395d89b411161011357806395d89b41146107515780639a7a23d61461077c5780639d0014b1146107a5578063a457c2d7146107ce578063a8a69b9d1461080b578063a9059cbb146108485761027d565b8063715018a614610694578063728d41c9146106ab578063781edb3c146106d45780638b5d5cab146106fd5780638da5cb5b146107265761027d565b8063313ce567116101e85780635295c8b8116101ac5780635295c8b81461058457806359927044146105ad57806366a88d96146105d85780636ad5612914610603578063704ce43e1461062c57806370a08231146106575761027d565b8063313ce5671461047957806339509351146104a45780633bb25ad4146104e157806342966c681461050a5780634fbee193146105475761027d565b80631525ff7d1161023a5780631525ff7d1461036b57806318160ddd14610394578063232fbda1146103bf57806323b872dd146103e8578063296f0a0c146104255780632b112e491461044e5761027d565b80630445b6671461028257806306fdde03146102ad5780630758d924146102d8578063095ea7b31461030357806313114a9d146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610aa3565b6040516102a4919061364f565b60405180910390f35b3480156102b957600080fd5b506102c2610aa9565b6040516102cf91906136fa565b60405180910390f35b3480156102e457600080fd5b506102ed610b3b565b6040516102fa919061379b565b60405180910390f35b34801561030f57600080fd5b5061032a6004803603810190610325919061382a565b610b61565b6040516103379190613885565b60405180910390f35b34801561034c57600080fd5b50610355610b84565b60405161036291906138bc565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190613915565b610b97565b005b3480156103a057600080fd5b506103a9610cef565b6040516103b6919061364f565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190613915565b610cf9565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190613942565b610e51565b60405161041c9190613885565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190613915565b610e80565b005b34801561045a57600080fd5b50610463610fd8565b604051610470919061364f565b60405180910390f35b34801561048557600080fd5b5061048e611010565b60405161049b91906138bc565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c6919061382a565b611019565b6040516104d89190613885565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190613995565b611050565b005b34801561051657600080fd5b50610531600480360381019061052c91906139c2565b6113b3565b60405161053e9190613885565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613995565b611409565b60405161057b9190613885565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190613a1b565b61145f565b005b3480156105b957600080fd5b506105c261147f565b6040516105cf9190613a6a565b60405180910390f35b3480156105e457600080fd5b506105ed6114a5565b6040516105fa919061364f565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190613a85565b6114ab565b005b34801561063857600080fd5b506106416116e1565b60405161064e91906138bc565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190613995565b6116f4565b60405161068b919061364f565b60405180910390f35b3480156106a057600080fd5b506106a961173c565b005b3480156106b757600080fd5b506106d260048036038101906106cd91906139c2565b611750565b005b3480156106e057600080fd5b506106fb60048036038101906106f69190613a1b565b611818565b005b34801561070957600080fd5b50610724600480360381019061071f91906139c2565b61195b565b005b34801561073257600080fd5b5061073b611a53565b6040516107489190613a6a565b60405180910390f35b34801561075d57600080fd5b50610766611a7d565b60405161077391906136fa565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e9190613a1b565b611b0f565b005b3480156107b157600080fd5b506107cc60048036038101906107c791906139c2565b611bb5565b005b3480156107da57600080fd5b506107f560048036038101906107f0919061382a565b611c7c565b6040516108029190613885565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190613995565b611cf3565b60405161083f9190613885565b60405180910390f35b34801561085457600080fd5b5061086f600480360381019061086a919061382a565b611d49565b60405161087c9190613885565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a79190613b80565b611d6c565b005b3480156108ba57600080fd5b506108d560048036038101906108d09190613995565b611e6d565b6040516108e29190613885565b60405180910390f35b3480156108f757600080fd5b50610912600480360381019061090d9190613a1b565b611e8d565b005b34801561092057600080fd5b50610929611fd0565b60405161093691906138bc565b60405180910390f35b34801561094b57600080fd5b5061096660048036038101906109619190613915565b611fe3565b005b34801561097457600080fd5b5061097d61205a565b60405161098a9190613a6a565b60405180910390f35b34801561099f57600080fd5b506109a8612080565b6040516109b591906138bc565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e09190613a85565b612093565b6040516109f2919061364f565b60405180910390f35b348015610a0757600080fd5b50610a1061211a565b604051610a1d9190613a6a565b60405180910390f35b348015610a3257600080fd5b50610a3b612140565b604051610a489190613a6a565b60405180910390f35b348015610a5d57600080fd5b50610a786004803603810190610a739190613995565b612166565b005b348015610a8657600080fd5b50610aa16004803603810190610a9c9190613c2d565b6121e9565b005b600a5481565b606060038054610ab890613caf565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae490613caf565b8015610b315780601f10610b0657610100808354040283529160200191610b31565b820191906000526020600020905b815481529060010190602001808311610b1457829003601f168201915b5050505050905090565b600860049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610b6c612300565b9050610b79818585612308565b600191505092915050565b600860039054906101000a900460ff1681565b610b9f6124d1565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2690613d52565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fd9a2a08302ed3220f4e646ff99d6780d87e27baddf1af05679dc930ce811309560405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b610d016124d1565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890613de4565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f96cdf1c58ade0147c4f974451881dbccdd65a5a33a2ac22b6d06bb03d1a1c6be60405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610e5c612300565b9050610e6985828561254f565b610e748585856125db565b60019150509392505050565b610e886124d1565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f90613e76565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fe460006116f4565b610fef61dead6116f4565b610ff7610cef565b6110019190613ec5565b61100b9190613ec5565b905090565b60006012905090565b600080611024612300565b90506110458185856110368589612093565b6110409190613ef9565b612308565b600191505092915050565b6110586124d1565b600860049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df90613f9f565b60405180910390fd5b600860049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa145fb42ba9c915d1526a0e1d321dcf2f90b1b286c2b5397620fc60fa642d66860405160405180910390a380600860046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112369190613fd4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600860049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e39190613fd4565b6040518363ffffffff1660e01b8152600401611300929190614001565b6020604051808303816000875af115801561131f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113439190613fd4565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506113b0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c70565b50565b60006113c96113c0612300565b61dead846125db565b7f4cd1cedac1faabaf2d2d626f6caa6a7df4cf69ec7ecc3bcae2f938bdedc86071826040516113f8919061364f565b60405180910390a160019050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114676124d1565b6114718282611e8d565b61147b8282611818565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6114b36124d1565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115189061409c565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161155c9190613a6a565b602060405180830381865afa158015611579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d91906140d1565b116115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614170565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116339190613a6a565b602060405180830381865afa158015611650573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167491906140d1565b6040518363ffffffff1660e01b8152600401611691929190614190565b6020604051808303816000875af11580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d491906141ce565b6116dd57600080fd5b5050565b600860009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117446124d1565b61174e6000612dfa565b565b6117586124d1565b670de0b6b3a76400006103e861176c610cef565b611776919061422a565b611780919061422a565b8110156117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b9906142cd565b60405180910390fd5b670de0b6b3a7640000816117d691906142ed565b600b819055507fe2e6151ed0b472c61401059745339ca42474813911b22d24023385def6377e1c600b5460405161180d919061364f565b60405180910390a150565b6118206124d1565b801515600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a9906143a1565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ff01d68aa882f9a2500bfa9e0523a3e3a1e18c356f49cd59048c618e949b608698260405161194f9190613885565b60405180910390a25050565b6119636124d1565b600960149054906101000a900460ff16156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90614433565b60405180910390fd5b600081116119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed906144c5565b60405180910390fd5b6000611a01306116f4565b905081811015611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90614531565b60405180910390fd5b611a4f82612ec0565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a8c90613caf565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab890613caf565b8015611b055780601f10611ada57610100808354040283529160200191611b05565b820191906000526020600020905b815481529060010190602001808311611ae857829003601f168201915b5050505050905090565b611b176124d1565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e906145e9565b60405180910390fd5b611bb18282612c70565b5050565b611bbd6124d1565b670de0b6b3a76400006064611bd0610cef565b611bda919061422a565b611be4919061422a565b811115611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d9061467b565b60405180910390fd5b670de0b6b3a764000081611c3a91906142ed565b600a819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476600a54604051611c71919061364f565b60405180910390a150565b600080611c87612300565b90506000611c958286612093565b905083811015611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd19061470d565b60405180910390fd5b611ce78286868403612308565b60019250505092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080611d54612300565b9050611d618185856125db565b600191505092915050565b611d746124d1565b60c8848490501115611d8557600080fd5b818190508484905014611d9757600080fd5b60005b84849050811015611e6657600073ffffffffffffffffffffffffffffffffffffffff16858583818110611dd057611dcf61472d565b5b9050602002016020810190611de59190613995565b73ffffffffffffffffffffffffffffffffffffffff1614611e5357611e52611e0b612300565b868684818110611e1e57611e1d61472d565b5b9050602002016020810190611e339190613995565b858585818110611e4657611e4561472d565b5b90506020020135612f7f565b5b8080611e5e9061475c565b915050611d9a565b5050505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b611e956124d1565b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e906143a1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fc49190613885565b60405180910390a25050565b600860029054906101000a900460ff1681565b611feb6124d1565b6000471161202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614816565b60405180910390fd5b612057478273ffffffffffffffffffffffffffffffffffffffff166131f590919063ffffffff16565b50565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860019054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61216e6124d1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d4906148a8565b60405180910390fd5b6121e681612dfa565b50565b6121f16124d1565b600081838561220091906148c8565b61220a91906148c8565b9050600a8160ff161115612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a9061496f565b60405180910390fd5b83600860006101000a81548160ff021916908360ff16021790555082600860016101000a81548160ff021916908360ff16021790555081600860026101000a81548160ff021916908360ff16021790555080600860036101000a81548160ff021916908360ff1602179055507fa1c9fbe8c0d8555912f12c313a10f55a09cc8f9105065c5abab44a7b837b49638484846040516122f29392919061498f565b60405180910390a150505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90614a38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd90614aca565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124c4919061364f565b60405180910390a3505050565b6124d9612300565b73ffffffffffffffffffffffffffffffffffffffff166124f7611a53565b73ffffffffffffffffffffffffffffffffffffffff161461254d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254490614b36565b60405180910390fd5b565b600061255b8484612093565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125d557818110156125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be90614ba2565b60405180910390fd5b6125d48484848403612308565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361264a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264190614c34565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b090614cc6565b60405180910390fd5b60008110156126fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f490614d58565b60405180910390fd5b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600960149054906101000a900460ff161580156127ba575080155b80156127c4575081155b801561281a5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128595750612829611a53565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156128b757600b548361286b866116f4565b6128759190613ef9565b11156128b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ad90614dea565b60405180910390fd5b5b6000600960149054906101000a900460ff161580156128db575082806128da5750815b5b9050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061297e5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561298857600090505b6000612993306116f4565b90506000600a5482101590508080156129b95750600960149054906101000a900460ff16155b8015612a0f5750600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a2057612a1f600a54612ec0565b5b60008690508315612c5a576064600860039054906101000a900460ff1660ff1688612a4b91906142ed565b612a55919061422a565b87612a609190613ec5565b90508515612b1357600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b1257600b5481612ac68a6116f4565b612ad09190613ef9565b1115612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0890614dea565b60405180910390fd5b5b5b6000600860009054906101000a900460ff1660ff161115612b695760006064600860009054906101000a900460ff1660ff1689612b5091906142ed565b612b5a919061422a565b9050612b678a3083612f7f565b505b6000600860019054906101000a900460ff1660ff161115612be15760006064600860019054906101000a900460ff1660ff1689612ba691906142ed565b612bb0919061422a565b9050612bdf8a600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f7f565b505b6000600860029054906101000a900460ff1660ff161115612c595760006064600860029054906101000a900460ff1660ff1689612c1e91906142ed565b612c28919061422a565b9050612c578a600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f7f565b505b5b612c65898983612f7f565b505050505050505050565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf990614e7c565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f1bcaa6366eec32169ce9336047c571e3dd32a46155660517fac9970fbef4f84760405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600960146101000a81548160ff02191690831515021790555060004790506000600283612eef919061422a565b905060008184612eff9190613ec5565b9050612f0a816132e9565b60008347612f189190613ec5565b9050612f24838261352c565b7f015fc8ee969fd902d9ebd12a31c54446400a2b512a405366fe14defd6081d2208582604051612f55929190614e9c565b60405180910390a1505050506000600960146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe590614f37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361305d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305490614fc9565b60405180910390fd5b61306883838361362c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e59061505b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131dc919061364f565b60405180910390a36131ef848484613631565b50505050565b80471015613238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322f906150c7565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161325e90615118565b60006040518083038185875af1925050503d806000811461329b576040519150601f19603f3d011682016040523d82523d6000602084013e6132a0565b606091505b50509050806132e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132db9061519f565b60405180910390fd5b505050565b6000600267ffffffffffffffff811115613306576133056151bf565b5b6040519080825280602002602001820160405280156133345781602001602082028036833780820191505090505b509050308160008151811061334c5761334b61472d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134179190613fd4565b8160018151811061342b5761342a61472d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061349230600860049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612308565b600860049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134f69594939291906152e7565b600060405180830381600087803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b505050505050565b61355930600860049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612308565b600860049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016135e296959493929190615341565b60606040518083038185885af1158015613600573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061362591906153a2565b5050505050565b505050565b505050565b6000819050919050565b61364981613636565b82525050565b60006020820190506136646000830184613640565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136a4578082015181840152602081019050613689565b60008484015250505050565b6000601f19601f8301169050919050565b60006136cc8261366a565b6136d68185613675565b93506136e6818560208601613686565b6136ef816136b0565b840191505092915050565b6000602082019050818103600083015261371481846136c1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061376161375c6137578461371c565b61373c565b61371c565b9050919050565b600061377382613746565b9050919050565b600061378582613768565b9050919050565b6137958161377a565b82525050565b60006020820190506137b0600083018461378c565b92915050565b600080fd5b600080fd5b60006137cb8261371c565b9050919050565b6137db816137c0565b81146137e657600080fd5b50565b6000813590506137f8816137d2565b92915050565b61380781613636565b811461381257600080fd5b50565b600081359050613824816137fe565b92915050565b60008060408385031215613841576138406137b6565b5b600061384f858286016137e9565b925050602061386085828601613815565b9150509250929050565b60008115159050919050565b61387f8161386a565b82525050565b600060208201905061389a6000830184613876565b92915050565b600060ff82169050919050565b6138b6816138a0565b82525050565b60006020820190506138d160008301846138ad565b92915050565b60006138e28261371c565b9050919050565b6138f2816138d7565b81146138fd57600080fd5b50565b60008135905061390f816138e9565b92915050565b60006020828403121561392b5761392a6137b6565b5b600061393984828501613900565b91505092915050565b60008060006060848603121561395b5761395a6137b6565b5b6000613969868287016137e9565b935050602061397a868287016137e9565b925050604061398b86828701613815565b9150509250925092565b6000602082840312156139ab576139aa6137b6565b5b60006139b9848285016137e9565b91505092915050565b6000602082840312156139d8576139d76137b6565b5b60006139e684828501613815565b91505092915050565b6139f88161386a565b8114613a0357600080fd5b50565b600081359050613a15816139ef565b92915050565b60008060408385031215613a3257613a316137b6565b5b6000613a40858286016137e9565b9250506020613a5185828601613a06565b9150509250929050565b613a64816137c0565b82525050565b6000602082019050613a7f6000830184613a5b565b92915050565b60008060408385031215613a9c57613a9b6137b6565b5b6000613aaa858286016137e9565b9250506020613abb858286016137e9565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112613aea57613ae9613ac5565b5b8235905067ffffffffffffffff811115613b0757613b06613aca565b5b602083019150836020820283011115613b2357613b22613acf565b5b9250929050565b60008083601f840112613b4057613b3f613ac5565b5b8235905067ffffffffffffffff811115613b5d57613b5c613aca565b5b602083019150836020820283011115613b7957613b78613acf565b5b9250929050565b60008060008060408587031215613b9a57613b996137b6565b5b600085013567ffffffffffffffff811115613bb857613bb76137bb565b5b613bc487828801613ad4565b9450945050602085013567ffffffffffffffff811115613be757613be66137bb565b5b613bf387828801613b2a565b925092505092959194509250565b613c0a816138a0565b8114613c1557600080fd5b50565b600081359050613c2781613c01565b92915050565b600080600060608486031215613c4657613c456137b6565b5b6000613c5486828701613c18565b9350506020613c6586828701613c18565b9250506040613c7686828701613c18565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cc757607f821691505b602082108103613cda57613cd9613c80565b5b50919050565b7f4d4554483a20546865207465616d2077616c6c65742068617320616c7265616460008201527f7920746869732061646472657373000000000000000000000000000000000000602082015250565b6000613d3c602e83613675565b9150613d4782613ce0565b604082019050919050565b60006020820190508181036000830152613d6b81613d2f565b9050919050565b7f4d4554483a20546865207072697a65506f6f6c2077616c6c657420686173206160008201527f6c72656164792074686973206164647265737300000000000000000000000000602082015250565b6000613dce603383613675565b9150613dd982613d72565b604082019050919050565b60006020820190508181036000830152613dfd81613dc1565b9050919050565b7f4d4554483a20546865206c69717569646974792077616c6c657420686173206160008201527f6c72656164792074686973206164647265737300000000000000000000000000602082015250565b6000613e60603383613675565b9150613e6b82613e04565b604082019050919050565b60006020820190508181036000830152613e8f81613e53565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ed082613636565b9150613edb83613636565b9250828203905081811115613ef357613ef2613e96565b5b92915050565b6000613f0482613636565b9150613f0f83613636565b9250828201905080821115613f2757613f26613e96565b5b92915050565b7f4d4554483a2054686520726f757465722068617320616c72656164792074686160008201527f7420616464726573730000000000000000000000000000000000000000000000602082015250565b6000613f89602983613675565b9150613f9482613f2d565b604082019050919050565b60006020820190508181036000830152613fb881613f7c565b9050919050565b600081519050613fce816137d2565b92915050565b600060208284031215613fea57613fe96137b6565b5b6000613ff884828501613fbf565b91505092915050565b60006040820190506140166000830185613a5b565b6140236020830184613a5b565b9392505050565b7f4d4554483a20596f7520617265206e6f7420616c6c6f77656420746f2067657460008201527f204d45544820746f6b656e732066726f6d2074686520636f6e74726163740000602082015250565b6000614086603e83613675565b91506140918261402a565b604082019050919050565b600060208201905081810360008301526140b581614079565b9050919050565b6000815190506140cb816137fe565b92915050565b6000602082840312156140e7576140e66137b6565b5b60006140f5848285016140bc565b91505092915050565b7f4d4554483a20546865726520617265206e6f20746f6b656e7320696e2074686560008201527f20636f6e74726163740000000000000000000000000000000000000000000000602082015250565b600061415a602983613675565b9150614165826140fe565b604082019050919050565b600060208201905081810360008301526141898161414d565b9050919050565b60006040820190506141a56000830185613a5b565b6141b26020830184613640565b9392505050565b6000815190506141c8816139ef565b92915050565b6000602082840312156141e4576141e36137b6565b5b60006141f2848285016141b9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061423582613636565b915061424083613636565b9250826142505761424f6141fb565b5b828204905092915050565b7f4d4554483a20416d6f756e74206d75737420626520677265617465722074686160008201527f6e20302e3125206f662074686520746f74616c20737570706c79000000000000602082015250565b60006142b7603a83613675565b91506142c28261425b565b604082019050919050565b600060208201905081810360008301526142e6816142aa565b9050919050565b60006142f882613636565b915061430383613636565b925082820261431181613636565b9150828204841483151761432857614327613e96565b5b5092915050565b7f4d4554483a204163636f756e742068617320616c72656164792074686520766160008201527f6c7565206f6620276578636c7564656427000000000000000000000000000000602082015250565b600061438b603183613675565b91506143968261432f565b604082019050919050565b600060208201905081810360008301526143ba8161437e565b9050919050565b7f4d4554483a20436f6e747261637420697320616c72656164792073776170706960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b600061441d602283613675565b9150614428826143c1565b604082019050919050565b6000602082019050818103600083015261444c81614410565b9050919050565b7f4d4554483a20416d6f756e74206d75737420626520677265617465722074686160008201527f6e20300000000000000000000000000000000000000000000000000000000000602082015250565b60006144af602383613675565b91506144ba82614453565b604082019050919050565b600060208201905081810360008301526144de816144a2565b9050919050565b7f4d4554483a204e6f7420656e6f75676820746f6b656e7320746f207377617000600082015250565b600061451b601f83613675565b9150614526826144e5565b602082019050919050565b6000602082019050818103600083015261454a8161450e565b9050919050565b7f4d4554483a20546865206d61696e20706169722063616e6e6f7420626520726560008201527f6d6f7665642066726f6d206175746f6d617465644d61726b65744d616b65725060208201527f6169727300000000000000000000000000000000000000000000000000000000604082015250565b60006145d3604483613675565b91506145de82614551565b606082019050919050565b60006020820190508181036000830152614602816145c6565b9050919050565b7f4d4554483a20416d6f756e74206d757374206265206c6f776572207468616e2060008201527f3125206f662074686520746f74616c20737570706c7900000000000000000000602082015250565b6000614665603683613675565b915061467082614609565b604082019050919050565b6000602082019050818103600083015261469481614658565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006146f7602583613675565b91506147028261469b565b604082019050919050565b60006020820190508181036000830152614726816146ea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061476782613636565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361479957614798613e96565b5b600182019050919050565b7f4d4554483a20546865726520617265206e6f2045544820696e2074686520636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614800602683613675565b915061480b826147a4565b604082019050919050565b6000602082019050818103600083015261482f816147f3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614892602683613675565b915061489d82614836565b604082019050919050565b600060208201905081810360008301526148c181614885565b9050919050565b60006148d3826138a0565b91506148de836138a0565b9250828201905060ff8111156148f7576148f6613e96565b5b92915050565b7f4d4554483a20546f74616c2066656573206d757374206265206c6f776572207460008201527f68616e2031302500000000000000000000000000000000000000000000000000602082015250565b6000614959602783613675565b9150614964826148fd565b604082019050919050565b600060208201905081810360008301526149888161494c565b9050919050565b60006060820190506149a460008301866138ad565b6149b160208301856138ad565b6149be60408301846138ad565b949350505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a22602483613675565b9150614a2d826149c6565b604082019050919050565b60006020820190508181036000830152614a5181614a15565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ab4602283613675565b9150614abf82614a58565b604082019050919050565b60006020820190508181036000830152614ae381614aa7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b20602083613675565b9150614b2b82614aea565b602082019050919050565b60006020820190508181036000830152614b4f81614b13565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614b8c601d83613675565b9150614b9782614b56565b602082019050919050565b60006020820190508181036000830152614bbb81614b7f565b9050919050565b7f4d4554483a205472616e736665722066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c1e602483613675565b9150614c2982614bc2565b604082019050919050565b60006020820190508181036000830152614c4d81614c11565b9050919050565b7f4d4554483a205472616e7366657220746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cb0602283613675565b9150614cbb82614c54565b604082019050919050565b60006020820190508181036000830152614cdf81614ca3565b9050919050565b7f4d4554483a205472616e7366657220616d6f756e74206d75737420626520677260008201527f6561746572206f7220657175616c7320746f207a65726f000000000000000000602082015250565b6000614d42603783613675565b9150614d4d82614ce6565b604082019050919050565b60006020820190508181036000830152614d7181614d35565b9050919050565b7f4d4554483a20416d6f756e74206578636565647320746865206d617857616c6c60008201527f65744c696d69742e000000000000000000000000000000000000000000000000602082015250565b6000614dd4602883613675565b9150614ddf82614d78565b604082019050919050565b60006020820190508181036000830152614e0381614dc7565b9050919050565b7f4d4554483a204175746f6d61746564206d61726b6574206d616b65722070616960008201527f7220697320616c72656164792073657420746f20746861742076616c75650000602082015250565b6000614e66603e83613675565b9150614e7182614e0a565b604082019050919050565b60006020820190508181036000830152614e9581614e59565b9050919050565b6000604082019050614eb16000830185613640565b614ebe6020830184613640565b9392505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f21602583613675565b9150614f2c82614ec5565b604082019050919050565b60006020820190508181036000830152614f5081614f14565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fb3602383613675565b9150614fbe82614f57565b604082019050919050565b60006020820190508181036000830152614fe281614fa6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615045602683613675565b915061505082614fe9565b604082019050919050565b6000602082019050818103600083015261507481615038565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006150b1601d83613675565b91506150bc8261507b565b602082019050919050565b600060208201905081810360008301526150e0816150a4565b9050919050565b600081905092915050565b50565b60006151026000836150e7565b915061510d826150f2565b600082019050919050565b6000615123826150f5565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000615189603a83613675565b91506151948261512d565b604082019050919050565b600060208201905081810360008301526151b88161517c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600061521361520e615209846151ee565b61373c565b613636565b9050919050565b615223816151f8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61525e816137c0565b82525050565b60006152708383615255565b60208301905092915050565b6000602082019050919050565b600061529482615229565b61529e8185615234565b93506152a983615245565b8060005b838110156152da5781516152c18882615264565b97506152cc8361527c565b9250506001810190506152ad565b5085935050505092915050565b600060a0820190506152fc6000830188613640565b615309602083018761521a565b818103604083015261531b8186615289565b905061532a6060830185613a5b565b6153376080830184613640565b9695505050505050565b600060c0820190506153566000830189613a5b565b6153636020830188613640565b615370604083018761521a565b61537d606083018661521a565b61538a6080830185613a5b565b61539760a0830184613640565b979650505050505050565b6000806000606084860312156153bb576153ba6137b6565b5b60006153c9868287016140bc565b93505060206153da868287016140bc565b92505060406153eb868287016140bc565b915050925092509256fea26469706673582212203f586f0649a26217e9db5324943de2e31a6c1e3f0b87418bb878aa13268ead7264736f6c63430008120033

Verified Source Code Partial Match

Compiler: v0.8.18+commit.87f61d96 EVM: paris Optimization: No
Methereum.sol 618 lines
// SPDX-License-Identifier: MIT

pragma solidity 0.8.18;

library Address{
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    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);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}


abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}


interface IFactory02 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IPair02 {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    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 swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

contract Methereum is ERC20, Ownable {
   
    using Address for address payable;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromMaxWalletLimit;

    uint8 public lpFee = 4;
    uint8 public teamFee = 2;
    uint8 public prizePoolFee = 2;
    uint8 public totalFees;


    IRouter02 public dexRouter;
    address public dexPair;
    
    bool private _inSwapAndLiquify;
    
    uint256 public swapThreshold =  12_000 *10**18; // 0.01%
    uint256 public maxWalletLimit = 2_400_000 *10**18; // 2%

    // All known liquidity pools 
    mapping (address => bool) public automatedMarketMakerPairs;

    address public prizePoolWallet = 0xD88fa3050bC1c536f94aA8aF4aa9940d92Ae4648;
    address public teamWallet = 0x8Ea22a7E7e6DB4CB1B4727038E3a5459308A65AC;
    address public liquidityWallet;
    address constant private  DEAD = 0x000000000000000000000000000000000000dEaD;

    modifier lockTheSwap {
        _inSwapAndLiquify = true;
        _;
        _inSwapAndLiquify = false;
    }

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromMaxWalletLimit(address indexed account, bool isExcluded);

    event AddAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event Router02Updated(address indexed newAddress, address indexed oldAddress);

    event TeamWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event PrizePoolWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event LiquidityWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event Burnt(uint256 amount);

    event FeesUpdated(uint8 newLpFee, uint8 newTeamfee, uint8 newPrizePoolFee);
    event SwapThresholdUpdated(uint256 amount);
    event MaxWalletLimitUpdated(uint256 amount);

    event Swap(
        uint256 tokensSwapped,
        uint256 ethReceived
    );

    constructor() ERC20("Methereum", "METH") {

        _mint(_msgSender(), 120_000_000 * 10**18);
        totalFees = lpFee + teamFee + prizePoolFee;
        liquidityWallet = _msgSender();

        dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexPair = IFactory02(dexRouter.factory())
            .createPair(address(this), dexRouter.WETH());

        _setAutomatedMarketMakerPair(dexPair, true);
        excludeFromAllFeesAndLimits(owner(),true);
        excludeFromAllFeesAndLimits(address(this),true);
        excludeFromAllFeesAndLimits(DEAD,true);

    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "METH: Account has already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function excludeFromAllFeesAndLimits(address account, bool excluded) public onlyOwner {
        excludeFromFees(account,excluded);
        excludeFromMaxWalletLimit(account,excluded);
    }

    function excludeFromMaxWalletLimit(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromMaxWalletLimit[account] != excluded, "METH: Account has already the value of 'excluded'");
        _isExcludedFromMaxWalletLimit[account] = excluded;

        emit ExcludeFromMaxWalletLimit(account, excluded);
    }


    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != dexPair, "METH: The main pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "METH: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        _isExcludedFromMaxWalletLimit[pair] = value;

        emit AddAutomatedMarketMakerPair(pair, value);
    }

    function updateV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(dexRouter), "METH: The router has already that address");
        emit Router02Updated(newAddress, address(dexRouter));
        dexRouter = IRouter02(newAddress);
        dexPair = IFactory02(dexRouter.factory())
            .createPair(address(this), dexRouter.WETH());

        _setAutomatedMarketMakerPair(dexPair, true);
    }

    function setFees(uint8 newLpFee, uint8 newTeamFee, uint8 newPrizePoolFee) external onlyOwner {
        uint8 newTotalFees = newLpFee + newTeamFee + newPrizePoolFee;
        require(newTotalFees <= 10 ,"METH: Total fees must be lower than 10%");
        lpFee = newLpFee;
        teamFee = newTeamFee;
        prizePoolFee = newPrizePoolFee;
        totalFees = newTotalFees;
        emit FeesUpdated(newLpFee,newTeamFee,newPrizePoolFee);
    }

    function setMaxWalletLimit(uint256 amount) external onlyOwner {
        require(amount >= totalSupply()/1000/10**18, "METH: Amount must be greater than 0.1% of the total supply"); 
        maxWalletLimit = amount *10**18;
        emit MaxWalletLimitUpdated(maxWalletLimit);
    }

    function setSwapThreshold(uint256 amount) external onlyOwner {
        require(amount <= totalSupply()/100/10**18, "METH: Amount must be lower than 1% of the total supply");
        swapThreshold = amount *10**18;
        emit SwapThresholdUpdated(swapThreshold);
    }

    function setTeamWallet(address payable newWallet) external onlyOwner {
        require(newWallet != teamWallet, "METH: The team wallet has already this address");
        emit TeamWalletUpdated(newWallet,teamWallet);
        teamWallet = newWallet;
    }

    function setLiquidityWallet(address payable newWallet) external onlyOwner {
        require(newWallet != liquidityWallet, "METH: The liquidity wallet has already this address");
        emit LiquidityWalletUpdated(newWallet,liquidityWallet);
        liquidityWallet = newWallet;
    }

    function setPrizePoolWallet(address payable newWallet) external onlyOwner {
        require(newWallet != prizePoolWallet, "METH: The prizePool wallet has already this address");
        emit PrizePoolWalletUpdated(newWallet,prizePoolWallet);
        prizePoolWallet = newWallet;
    }

    function burn(uint256 amount) external returns (bool) {
        _transfer(_msgSender(), DEAD, amount);
        emit Burnt(amount);
        return true;
    }

    receive() external payable {

    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "METH: Transfer from the zero address");
        require(to != address(0), "METH: Transfer to the zero address");
        require(amount >= 0, "METH: Transfer amount must be greater or equals to zero");

        bool isBuyTransfer = automatedMarketMakerPairs[from];
        bool isSellTransfer = automatedMarketMakerPairs[to];
        // Check max wallet limit for "normal" transfers
        if(!_inSwapAndLiquify && !isSellTransfer && !isBuyTransfer && !_isExcludedFromMaxWalletLimit[to] && from != owner()) {
            require(balanceOf(to) + amount <= maxWalletLimit, "METH: Amount exceeds the maxWalletLimit.");
        }

        bool takeFee = !_inSwapAndLiquify && (isBuyTransfer || isSellTransfer);
        // All transfers submitted to the tax, are subject to the cooldown system as well
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) takeFee = false;


        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapThreshold;

        if (
            canSwap &&
            !_inSwapAndLiquify&&
            !automatedMarketMakerPairs[from] // not during buying
        ) {
            _swapAndDistribute(swapThreshold);
        }

        uint256 amountWithoutFees = amount;
        if(takeFee) {
            amountWithoutFees = amount - amount * totalFees / 100;
            if(isBuyTransfer){
                if(!_isExcludedFromMaxWalletLimit[to]) require(balanceOf(to) + amountWithoutFees <= maxWalletLimit, "METH: Amount exceeds the maxWalletLimit.");
            }
            if(lpFee > 0) {
                uint256 lpAmount = amount * lpFee / 100;
                super._transfer(from,address(this),lpAmount);
            }
            if(teamFee > 0) {
                uint256 teamAmount = amount * teamFee / 100;
                super._transfer(from,teamWallet,teamAmount);
            }
            if(prizePoolFee > 0) {
                uint256 prizePoolAmount = amount * prizePoolFee / 100;
                super._transfer(from,prizePoolWallet,prizePoolAmount);
            }

        }
        super._transfer(from, to, amountWithoutFees);

    }

    function _swapAndDistribute(uint256 totalTokens) private lockTheSwap {
        uint256 initialBalance = address(this).balance;
        uint256 tokensToNotSwap = totalTokens / 2;
        uint256 tokensToSwap =  totalTokens - tokensToNotSwap;
        // Swap tokens for ETH
        _swapTokensForETH(tokensToSwap);

        uint256 newBalance = address(this).balance - initialBalance;
        addLiquidity(tokensToNotSwap,newBalance);

        emit Swap(totalTokens, newBalance);
        
    }

    function _swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.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(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
        
    }

    function swapAndDistribute(uint256 amount) public onlyOwner {
        require(!_inSwapAndLiquify, "METH: Contract is already swapping");
        require(amount > 0, "METH: Amount must be greater than 0");
        uint256 contractTokenBalance = balanceOf(address(this));
        require(contractTokenBalance >= amount, "METH: Not enough tokens to swap");

        _swapAndDistribute(amount);
        
    } 
    // To distribute airdrops easily
    function batchTokensTransfer(address[] calldata _holders, uint256[] calldata _amounts) external onlyOwner {
        require(_holders.length <= 200);
        require(_holders.length == _amounts.length);
            for (uint i = 0; i < _holders.length; i++) {
              if (_holders[i] != address(0)) {
                super._transfer(_msgSender(), _holders[i], _amounts[i]);
            }
        }
    }

    function withdrawStuckETH(address payable to) external onlyOwner {
        require(address(this).balance > 0, "METH: There are no ETH in the contract");
        to.sendValue(address(this).balance);
    } 

    function withdrawStuckERC20Tokens(address token, address to) external onlyOwner {
        require(token != address(this), "METH: You are not allowed to get METH tokens from the contract");
        require(IERC20(token).balanceOf(address(this)) > 0, "METH: There are no tokens in the contract");
        require(IERC20(token).transfer(to, IERC20(token).balanceOf(address(this))));
    }

    function getCirculatingSupply() external view returns (uint256) {
        return totalSupply() - balanceOf(DEAD) - balanceOf(address(0));
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }
  
}

Read Contract

allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
dexPair 0xf242ab41 → address
dexRouter 0x0758d924 → address
getCirculatingSupply 0x2b112e49 → uint256
isExcludedFromFees 0x4fbee193 → bool
isExcludedFromMaxWalletLimit 0xa8a69b9d → bool
liquidityWallet 0xd4698016 → address
lpFee 0x704ce43e → uint8
maxWalletLimit 0x66a88d96 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
prizePoolFee 0xcbf2181f → uint8
prizePoolWallet 0xf02edbaf → address
swapThreshold 0x0445b667 → uint256
symbol 0x95d89b41 → string
teamFee 0xd7c94efd → uint8
teamWallet 0x59927044 → address
totalFees 0x13114a9d → uint8
totalSupply 0x18160ddd → uint256

Write Contract 23 functions

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

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
batchTokensTransfer 0xaecf9490
address[] _holders
uint256[] _amounts
burn 0x42966c68
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
excludeFromAllFeesAndLimits 0x5295c8b8
address account
bool excluded
excludeFromFees 0xc0246668
address account
bool excluded
excludeFromMaxWalletLimit 0x781edb3c
address account
bool excluded
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceOwnership 0x715018a6
No parameters
setAutomatedMarketMakerPair 0x9a7a23d6
address pair
bool value
setFees 0xf6794fdb
uint8 newLpFee
uint8 newTeamFee
uint8 newPrizePoolFee
setLiquidityWallet 0x296f0a0c
address newWallet
setMaxWalletLimit 0x728d41c9
uint256 amount
setPrizePoolWallet 0x232fbda1
address newWallet
setSwapThreshold 0x9d0014b1
uint256 amount
setTeamWallet 0x1525ff7d
address newWallet
swapAndDistribute 0x8b5d5cab
uint256 amount
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateV2Router 0x3bb25ad4
address newAddress
withdrawStuckERC20Tokens 0x6ad56129
address token
address to
withdrawStuckETH 0xd201b01e
address to

Recent Transactions

No transactions found for this address