Address Contract Partially Verified
Address
0xd718Ad25285d65eF4D79262a6CD3AEA6A8e01023
Balance
0 ETH
Nonce
1
Code Size
22729 bytes
Creator
0x43a3f032...f230 at tx 0xe986714e...b0f70c
Indexed Transactions
0
Contract Bytecode
22729 bytes
0x608060405234801561001057600080fd5b50600436106103985760003560e01c8063808a5457116101e9578063b93833c31161010f578063dd62ed3e116100ad578063f7b2a7be1161007c578063f7b2a7be1461137e578063f9271fd31461139c578063fc50eef3146113e0578063fce589d8146113ea57610398565b8063dd62ed3e146111cf578063e6ec64ec14611247578063ec323bf114611275578063f2fde38b1461133a57610398565b8063d51fe9cb116100e9578063d51fe9cb146110f7578063d7c94efd1461114f578063dcc234551461116d578063dd467064146111a157610398565b8063b93833c314611089578063bab62f38146110b7578063c964ad45146110d757610398565b8063a2f0572511610187578063a86a226f11610156578063a86a226f14610f0b578063a9059cbb14610fc3578063a9b54bcd14611027578063b6c523241461106b57610398565b8063a2f0572514610e3b578063a457c2d714610e59578063a646c35d14610ebd578063a69df4b514610f0157610398565b806383a28894116101c357806383a2889414610cce57806395d89b4114610d325780639aa980f814610db55780639b1f9e7414610e0d57610398565b8063808a545714610c5c57806380dc067214610c905780638230af5a14610c9a57610398565b806340753a76116102ce578063687b5f5e1161026c578063700504e81161023b578063700504e814610bbe57806370a0823114610bdc578063746c8ae114610c345780637d1db4a514610c3e57610398565b8063687b5f5e14610a1f5780636e63cd9614610aee5780636f4e2c4714610b225780636feecb6814610b6657610398565b80634bf2c7c9116102a85780634bf2c7c9146109615780634f91e48c1461098f5780634f922a9e146109ad5780635e67fe14146109f157610398565b806340753a761461086c578063417b44151461089a578063428e78231461093357610398565b80631e89d5451161033b57806328f97b871161031557806328f97b8714610774578063313ce567146107b657806331c2273b146107d4578063395093511461080857610398565b80631e89d5451461057657806323b872dd146106c257806325c1a6951461074657610398565b80630eda7275116103775780630eda7275146104de578063119552a11461050c57806318160ddd1461052a578063186128381461054857610398565b8062f83cdf1461039d57806306fdde03146103f7578063095ea7b31461047a575b600080fd5b6103df600480360360208110156103b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611408565b60405180821515815260200191505060405180910390f35b6103ff611428565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561043f578082015181840152602081019050610424565b50505050905090810190601f16801561046c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104c66004803603604081101561049057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114ca565b60405180821515815260200191505060405180910390f35b61050a600480360360208110156104f457600080fd5b81019080803590602001909291905050506114e8565b005b610514611598565b6040518082815260200191505060405180910390f35b61053261159e565b6040518082815260200191505060405180910390f35b6105746004803603602081101561055e57600080fd5b81019080803590602001909291905050506115a8565b005b6106c06004803603604081101561058c57600080fd5b81019080803590602001906401000000008111156105a957600080fd5b8201836020820111156105bb57600080fd5b803590602001918460208302840111640100000000831117156105dd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561063d57600080fd5b82018360208201111561064f57600080fd5b8035906020019184602083028401116401000000008311171561067157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061173b565b005b61072e600480360360608110156106d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061185c565b60405180821515815260200191505060405180910390f35b6107726004803603602081101561075c57600080fd5b81019080803590602001909291905050506119ec565b005b6107a06004803603602081101561078a57600080fd5b8101908080359060200190929190505050611e10565b6040518082815260200191505060405180910390f35b6107be611e88565b6040518082815260200191505060405180910390f35b6107dc611e92565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108546004803603604081101561081e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611eb8565b60405180821515815260200191505060405180910390f35b6108986004803603602081101561088257600080fd5b8101908080359060200190929190505050611f6b565b005b6108dc600480360360208110156108b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061201e565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561091f578082015181840152602081019050610904565b505050509050019250505060405180910390f35b61095f6004803603602081101561094957600080fd5b8101908080359060200190929190505050612185565b005b61098d6004803603602081101561097757600080fd5b8101908080359060200190929190505050612235565b005b61099761235c565b6040518082815260200191505060405180910390f35b6109ef600480360360208110156109c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612362565b005b610a1d60048036036020811015610a0757600080fd5b810190808035906020019092919050505061244c565b005b610aec60048036036060811015610a3557600080fd5b8101908080359060200190640100000000811115610a5257600080fd5b820183602082011115610a6457600080fd5b80359060200191846001830284011164010000000083111715610a8657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050612724565b005b610af6612886565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b6460048036036020811015610b3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ac565b005b610ba860048036036020811015610b7c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a39565b6040518082815260200191505060405180910390f35b610bc6612b06565b6040518082815260200191505060405180910390f35b610c1e60048036036020811015610bf257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b0c565b6040518082815260200191505060405180910390f35b610c3c612b54565b005b610c46612ca1565b6040518082815260200191505060405180910390f35b610c64612ca7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c98612ccd565b005b610ca2612e12565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d1a60048036036040811015610ce457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e38565b60405180821515815260200191505060405180910390f35b610d3a612e67565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d7a578082015181840152602081019050610d5f565b50505050905090810190601f168015610da75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610de160048036036020811015610dcb57600080fd5b8101908080359060200190929190505050612f09565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e3960048036036020811015610e2357600080fd5b8101908080359060200190929190505050612f45565b005b610e43613138565b6040518082815260200191505060405180910390f35b610ea560048036036040811015610e6f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061313e565b60405180821515815260200191505060405180910390f35b610eff60048036036020811015610ed357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061320b565b005b610f0961330c565b005b610fc160048036036020811015610f2157600080fd5b8101908080359060200190640100000000811115610f3e57600080fd5b820183602082011115610f5057600080fd5b80359060200191846020830284011164010000000083111715610f7257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061352c565b005b61100f60048036036040811015610fd957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613822565b60405180821515815260200191505060405180910390f35b6110696004803603602081101561103d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613905565b005b611073613a05565b6040518082815260200191505060405180910390f35b6110b56004803603602081101561109f57600080fd5b8101908080359060200190929190505050613a0f565b005b6110bf613abf565b60405180821515815260200191505060405180910390f35b6110df613ad2565b60405180821515815260200191505060405180910390f35b6111236004803603602081101561110d57600080fd5b8101908080359060200190929190505050613ae5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611157613b9c565b6040518082815260200191505060405180910390f35b611175613ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111cd600480360360208110156111b757600080fd5b8101908080359060200190929190505050613bc8565b005b611231600480360360408110156111e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d9c565b6040518082815260200191505060405180910390f35b6112736004803603602081101561125d57600080fd5b8101908080359060200190929190505050613e23565b005b6112a16004803603602081101561128b57600080fd5b8101908080359060200190929190505050613f4a565b60405180868152602001806020018581526020018481526020018315158152602001828103825286818151815260200191508051906020019080838360005b838110156112fb5780820151818401526020810190506112e0565b50505050905090810190601f1680156113285780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b61137c6004803603602081101561135057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614025565b005b611386614211565b6040518082815260200191505060405180910390f35b6113de600480360360208110156113b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614217565b005b6113e8614301565b005b6113f26143d3565b6040518082815260200191505060405180910390f35b60016020528060005260406000206000915054906101000a900460ff1681565b606060088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c05780601f10611495576101008083540402835291602001916114c0565b820191906000526020600020905b8154815290600101906020018083116114a357829003601f168201915b5050505050905090565b60006114de6114d7614461565b8484614469565b6001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b8060138190555050565b60175481565b6000600454905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b601a60008281526020019081526020016000206000015481148015611674575060008114155b6116e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f496e76616c69642049440000000000000000000000000000000000000000000081525060200191505060405180910390fd5b601a600082815260200190815260200160002060040160009054906101000a900460ff1615601a600083815260200190815260200160002060040160006101000a81548160ff02191690831515021790555050565b6000825114156117b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f742050726f6363657373204e756c6c205472616e73616374696f6e81525060200191505060405180910390fd5b805182511461180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806156a1602c913960400191505060405180910390fd5b60005b82518110156118575761184983828151811061182857fe5b602002602001015183838151811061183c57fe5b6020026020010151613822565b508080600101915050611810565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118ff5750600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156119145761190f848484614660565b611920565b61191f848484614b3f565b5b6119e18461192c614461565b6119dc8560405180606001604052806028815260200161578f60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611992614461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150a29092919063ffffffff16565b614469565b600190509392505050565b601a60008281526020019081526020016000206000015481148015611a12575060008114155b611a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f496e76616c69642049440000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515601a600083815260200190815260200160002060040160009054906101000a900460ff16151514611b21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4368616c6c656e676520656e646564000000000000000000000000000000000081525060200191505060405180910390fd5b60011515601b600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806156f3602a913960400191505060405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c6557600080fd5b505afa158015611c79573d6000803e3d6000fd5b505050506040513d6020811015611c8f57600080fd5b8101908080519060200190929190505050601a6000838152602001908152602001600020600301541115611d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615800602b913960400191505060405180910390fd5b611d1733612b0c565b601a6000838152602001908152602001600020600201541115611d85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157456029913960400191505060405180910390fd5b611da4601a600083815260200190815260200160002060020154612f45565b6001601b600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600554600360008581526020019081526020016000205411611e3757600554611e4c565b60036000848152602001908152602001600020545b90506000611e686201518083420361516290919063ffffffff16565b9050611e7f600754826151ac90919063ffffffff16565b92505050919050565b6000600a54905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f61611ec5614461565b84611f5c8560026000611ed6614461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143d990919063ffffffff16565b614469565b6001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b61201b3382615232565b50565b6060601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663438b6300836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156120a957600080fd5b505afa1580156120bd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156120e757600080fd5b810190808051604051939291908464010000000082111561210757600080fd5b8382019150602082018581111561211d57600080fd5b825186602082028301116401000000008211171561213a57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015612171578082015181840152602081019050612156565b505050509050016040525050509050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b8060158190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b6105dc8110612352576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f204665652063616e27742065786365656420746f20313525000000000000000081525060200191505060405180910390fd5b8060118190555050565b60135481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900460ff166124ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f204461696c792052657761726473204172652053746f7070656420000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561255857600080fd5b505afa15801561256c573d6000803e3d6000fd5b505050506040513d602081101561258257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461261c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f596f75206172656e2774206f776e2074686973204e465420746f6b656e00000081525060200191505060405180910390fd5b600061262782611e10565b1161269a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5468657265206973206e6f20636c61696d61626c65207265776172640000000081525060200191505060405180910390fd5b6126ac336126a783611e10565b615232565b4260036000838152602001908152602001600020819055507f77c822939fccc95dc88c14c72b87df80b99db967c009bf8eaaf6f96b2c33cf9c813342604051808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b6040518060a00160405280600160195401815260200184815260200183815260200182815260200160011515815250601a60006001601954018152602001908152602001600020600082015181600001556020820151816001019080519060200190612837929190615576565b50604082015181600201556060820151816003015560808201518160040160006101000a81548160ff021916908315150217905550905050601960008154809291906001019190505550505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ac457600080fd5b505afa158015612ad8573d6000803e3d6000fd5b505050506040513d6020811015612aee57600080fd5b81019080805190602001909291905050509050919050565b60165481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b600660009054906101000a900460ff1615612c7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4461696c792052657761726420416c72656164792052756e6e696e670000000081525060200191505060405180910390fd5b6001600660006101000a81548160ff02191690831515021790555042600581905550565b60155481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b600660009054906101000a900460ff16612df5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4461696c792052657761726420416c72656164792053746f707065640000000081525060200191505060405180910390fd5b6000600660006101000a81548160ff021916908315150217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612eff5780601f10612ed457610100808354040283529160200191612eff565b820191906000526020600020905b815481529060010190602001808311612ee257829003601f168201915b5050505050905090565b60188181548110612f1657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612ff9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e73756666696369656e742062616c616e636521000000000000000000000081525060200191505060405180910390fd5b6130063361dead836153f9565b61307181604051806060016040528060228152602001615637602291396000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150a29092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130c8816004546153fe90919063ffffffff16565b60048190555061dead73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60195481565b600061320161314b614461565b846131fc8560405180606001604052806025815260200161586f6025913960026000613175614461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150a29092919063ffffffff16565b614469565b6001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061582b6023913960400191505060405180910390fd5b600b544211613429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900460ff166135ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f204461696c792052657761726473204172652053746f7070656420000000000081525060200191505060405180910390fd5b600080600090505b825181101561379d573373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e85848151811061362057fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561365c57600080fd5b505afa158015613670573d6000803e3d6000fd5b505050506040513d602081101561368657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614613720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f596f75206172656e2774206f776e2074686973204e465420746f6b656e00000081525060200191505060405180910390fd5b61373c83828151811061372f57fe5b6020026020010151611e10565b82019150600061375e84838151811061375157fe5b6020026020010151611e10565b111561379057426003600085848151811061377557fe5b60200260200101518152602001908152602001600020819055505b80806001019150506135b6565b5060008111613814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5468657265206973206e6f20636c61696d61626c65207265776172640000000081525060200191505060405180910390fd5b61381e3382615232565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138cc575060016000613883614461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138e8576138e36138dc614461565b8484614660565b6138fb565b6138fa6138f3614461565b8484614b3f565b5b6001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146139ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b54905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b8060078190555050565b601260009054906101000a900460ff1681565b600660009054906101000a900460ff1681565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613b5a57600080fd5b505afa158015613b6e573d6000803e3d6000fd5b505050506040513d6020811015613b8457600080fd5b81019080805190602001909291905050509050919050565b60105481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600b81905550600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613ec9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b6105dc8110613f40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f204665652063616e27742065786365656420746f20313525000000000000000081525060200191505060405180910390fd5b8060108190555050565b601a602052806000526040600020600091509050806000015490806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613ffc5780601f10613fd157610100808354040283529160200191613ffc565b820191906000526020600020905b815481529060010190602001808311613fdf57829003601f168201915b5050505050908060020154908060030154908060040160009054906101000a900460ff16905085565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146140cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156596026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146142bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146143a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584e6021913960400191505060405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b60115481565b600080828401905083811015614457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156144ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806157dc6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061567f6022913960400191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156146e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806157b76025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561476c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806156146023913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156148185750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561487957601554811115614878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061571d6028913960400191505060405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015614900575060006148fe600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612b0c565b115b80156149185750601260009054906101000a900460ff165b15614995576013548110614994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f742073656c6c206d6f7265207468616e2073656c6c4c696d69740081525060200191505060405180910390fd5b5b614a00816040518060600160405280602681526020016156cd602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150a29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a93816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143d990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614bc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806157b76025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614c4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806156146023913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015614cf75750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15614d5857601554811115614d57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061571d6028913960400191505060405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015614ddf57506000614ddd600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612b0c565b115b8015614df75750601260009054906101000a900460ff165b15614e74576013548110614e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f742073656c6c206d6f7265207468616e2073656c6c4c696d69740081525060200191505060405180910390fd5b5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015614f10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156cd6026913960400191505060405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000614f72614f6384615448565b846153fe90919063ffffffff16565b9050806000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550614fc98361547e565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b600083831115829061514f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156151145780820151818401526020810190506150f9565b50505050905090810190601f1680156151415780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60006151a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506154b0565b905092915050565b6000808314156151bf576000905061522c565b60008284029050828482816151d057fe5b0414615227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576e6021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156152d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6152e1600083836153f9565b6152f6816004546143d990919063ffffffff16565b60048190555061534d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143d990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600061544083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506150a2565b905092915050565b600061547761271061546960115460105401856151ac90919063ffffffff16565b61516290919063ffffffff16565b9050919050565b60006154a961271061549b601054856151ac90919063ffffffff16565b61516290919063ffffffff16565b9050919050565b6000808311829061555c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615521578082015181840152602081019050615506565b50505050905090810190601f16801561554e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161556857fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106155b757805160ff19168380011785556155e5565b828001600101855582156155e5579182015b828111156155e45782518255916020019190600101906155c9565b5b5090506155f291906155f6565b5090565b5b8082111561560f5760008160009055506001016155f7565b509056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734164647265737320616e6420416d6f756e74206172726179206c656e677468206d7573742062652073616d6545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365596f752061726520616c726561647920696e726f6c6c656420696e2074686973206368616c6c656e67655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e596f75206f776e206c65737320616d6f756e74206f6620524f4f54207468616e207265717569726564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373596f75206f776e206c65737320616d6f756e74206f66204265617258207468616e20726565717569726564596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b4f6e6c79204f776e65722043616e2043616c6c20546869732046756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ddee0a431e984e75c8f2a731c9365d4efd6166a2d54cdd95656bc49312921c9164736f6c634300060c0033
Verified Source Code Partial Match
Compiler: v0.6.12+commit.27d51765
EVM: istanbul
Optimization: No
ROOTx.sol 544 lines
/**
*Submitted for verification at Etherscan.io on 2021-11-16
*/
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
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 INFT {
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function walletOfOwner(address _owner) external view returns(uint256[] memory);
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
using Address for address;
mapping (address => uint256) private _balances;
mapping(address => bool) public feeExcludedAddress;
mapping (address => mapping (address => uint256)) private _allowances;
mapping (uint256 => uint256) lastReward;
uint256 private _totalSupply;
// Daily Rewards Distributions Start from
uint256 private rewardStartDate;
bool public dailyReward = true;
uint256 public rewardAmount = 10 ether;
// ends in a month;
string private _name;
string private _symbol;
uint private _decimals = 18;
uint private _lockTime;
address public _Owner;
address public _previousOwner;
address public _fundAddress;
address public liquidityPair;
uint public teamFee = 300; //0.2% divisor 100
uint public burnFee = 300; //0.2% divisor 100
bool public sellLimiter; //by default false
uint public sellLimit = 50000 * 10 ** 18; //sell limit if sellLimiter is true
INFT public NFTContract;
uint256 public _maxTxAmount = 5000000 * 10**18;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event claimedDailyReward(uint256 tokenID, address claimer, uint256 timestamp);
constructor (string memory _nm, string memory _sym, INFT _NFTContract) public {
_name = _nm;
_symbol = _sym;
_Owner = msg.sender;
rewardStartDate = block.timestamp - 1 days;
NFTContract = _NFTContract;
feeExcludedAddress[msg.sender] = true;
_fundAddress = address(0x43a3f032E34467e8f692244461CA1b422f9af230);
}
modifier onlyOwner{
require(msg.sender == _Owner, 'Only Owner Can Call This Function');
_;
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function calculateTeamBurn(uint256 _amount) internal view returns (uint256) {
return _amount.mul(teamFee+burnFee).div(
10**4
);
}
function calculateTeamFee(uint256 _amount) internal view returns (uint256) {
return _amount.mul(teamFee).div(
10**4
);
}
function setTeamFee(uint Tfee) public onlyOwner{
require(Tfee < 1500," Fee can't exceed to 15%");
teamFee = Tfee;
}
function setBurnFee(uint Tfee) public onlyOwner{
require(Tfee < 1500," Fee can't exceed to 15%");
burnFee = Tfee;
}
function toggleSellLimit() external onlyOwner() {
sellLimiter = !sellLimiter;
}
function stopReward() external onlyOwner() {
require(dailyReward, "Daily Reward Already Stopped");
dailyReward = false;
}
function startReward() public onlyOwner{
require(!dailyReward, "Daily Reward Already Running");
dailyReward = true;
rewardStartDate = block.timestamp;
}
function changeRewardAmount(uint256 _amount) public onlyOwner{
rewardAmount = _amount;
}
function setLiquidityPairAddress(address liquidityPairAddress) public onlyOwner{
liquidityPair = liquidityPairAddress;
}
function changeSellLimit(uint256 _sellLimit) public onlyOwner{
sellLimit = _sellLimit;
}
function changeMaxtx(uint256 _maxtx) public onlyOwner{
_maxTxAmount = _maxtx;
}
function changeFundAddress(address Taddress) public onlyOwner{
_fundAddress = Taddress;
}
function addExcludedAddress(address excludedA) public onlyOwner{
feeExcludedAddress[excludedA] = true;
}
function removeExcludedAddress(address excludedA) public onlyOwner{
feeExcludedAddress[excludedA] = false;
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_Owner, newOwner);
_Owner = newOwner;
}
function geUnlockTime() public view returns (uint256) {
return _lockTime;
}
//Locks the contract for owner for the amount of time provided
function lock(uint256 time) public virtual onlyOwner {
_previousOwner = _Owner;
_Owner = address(0);
_lockTime = block.timestamp + time;
emit OwnershipTransferred(_Owner, address(0));
}
//Unlocks the contract for owner when _lockTime is exceeds
function unlock() public virtual {
require(_previousOwner == msg.sender, "You don't have permission to unlock");
require(block.timestamp > _lockTime , "Contract is locked until 7 days");
emit OwnershipTransferred(_Owner, _previousOwner);
_Owner = _previousOwner;
}
function multiTransfer(address[] memory receivers, uint256[] memory amounts) public {
require(receivers.length != 0, 'Cannot Proccess Null Transaction');
require(receivers.length == amounts.length, 'Address and Amount array length must be same');
for (uint256 i = 0; i < receivers.length; i++) {
transfer(receivers[i], amounts[i]);
}
}
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
if(feeExcludedAddress[recipient] || feeExcludedAddress[_msgSender()]){
_transferExcluded(_msgSender(), recipient, amount);
}else{
_transfer(_msgSender(), recipient, 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) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
if(feeExcludedAddress[recipient] || feeExcludedAddress[sender]){
_transferExcluded(sender, recipient, amount);
}else{
_transfer(sender, recipient, amount);
}
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
function _transferExcluded(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
if(sender != _Owner && recipient != _Owner)
require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
if(recipient == liquidityPair && balanceOf(liquidityPair) > 0 && sellLimiter){
require(amount < sellLimit, 'Cannot sell more than sellLimit');
}
// if(holder[recipient] == false){
// holder[recipient] = true;
// holders.push(recipient);
// }
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
function _transfer( address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
if(sender != _Owner && recipient != _Owner)
require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
if(recipient == liquidityPair && balanceOf(liquidityPair) > 0 && sellLimiter){
require(amount < sellLimit, 'Cannot sell more than sellLimit');
}
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
_balances[sender] = senderBalance - amount;
uint256 tokenToTransfer = amount.sub(calculateTeamBurn(amount));
_balances[recipient] += tokenToTransfer;
_balances[_fundAddress] += calculateTeamFee(amount);
emit Transfer(sender, recipient, tokenToTransfer);
}
uint256 public total1;
uint256 public a1;
address[] public amount123;
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
function addSupply(uint256 amount) public onlyOwner{
_mint(msg.sender, amount);
}
function checkDailyReward(uint256 tokenID) public view returns (uint256){
uint256 lastdate = (lastReward[tokenID] > rewardStartDate) ? lastReward[tokenID] : rewardStartDate;
uint256 rewardDays = (block.timestamp - lastdate).div(1 days);
return rewardDays.mul(rewardAmount);
}
function claimDailyReward(uint256 tokenID) public {
require(dailyReward," Daily Rewards Are Stopped ");
require(NFTContract.ownerOf(tokenID) == msg.sender, "You aren't own this NFT token");
require(checkDailyReward(tokenID) > 0, "There is no claimable reward");
_mint(msg.sender, checkDailyReward(tokenID));
lastReward[tokenID] = block.timestamp;
emit claimedDailyReward(tokenID, msg.sender, block.timestamp);
}
function bulkClaimRewards(uint256[] memory tokenIDs) public {
require(dailyReward," Daily Rewards Are Stopped ");
uint256 total;
for (uint256 i = 0; i < tokenIDs.length; i++) {
require(NFTContract.ownerOf(tokenIDs[i]) == msg.sender, "You aren't own this NFT token");
total += checkDailyReward(tokenIDs[i]);
if(checkDailyReward(tokenIDs[i]) > 0){
lastReward[tokenIDs[i]] = block.timestamp;
}
}
require(total > 0, "There is no claimable reward");
_mint(msg.sender, total);
}
function _burn(uint256 amount) public virtual {
require(_balances[msg.sender] >= amount,'insufficient balance!');
_beforeTokenTransfer(msg.sender, address(0x000000000000000000000000000000000000dEaD), amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(msg.sender, address(0x000000000000000000000000000000000000dEaD), 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 _setupDecimals(uint8 decimals_) internal {
_decimals = decimals_;
}
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
function NFTBalance(address __address) public view returns(uint256) {
return NFTContract.balanceOf(__address);
}
function NFTOwner(uint256 __id) public view returns(address ) {
return NFTContract.ownerOf(__id);
}
function NFTWallet(address __address) public view returns(uint256[] memory) {
return NFTContract.walletOfOwner(__address);
}
struct challenge{
uint256 id;
string des;
uint256 roots;
uint256 nfts;
bool status;
}
uint256 public challengeCount = 0;
mapping (uint => challenge) public Challenges;
mapping(uint => mapping(address => bool)) public entry;
function startChallnge(string memory _des, uint256 _roots, uint256 _nfts) public onlyOwner{
Challenges[challengeCount+1] = challenge(challengeCount+1, _des, _roots, _nfts, true);
challengeCount++;
}
function enterChallenge(uint256 _id) public {
require(_id == Challenges[_id].id && _id != 0, "Invalid ID");
require(Challenges[_id].status == true, "Challenge ended");
require(entry[_id][msg.sender] != true, "You are already inrolled in this challenge");
require(Challenges[_id].nfts <= NFTContract.balanceOf(msg.sender), "You own less amount of BearX than reequired");
require(Challenges[_id].roots <= balanceOf(msg.sender), "You own less amount of ROOT than required");
_burn(Challenges[_id].roots);
entry[_id][msg.sender] = true;
}
function toggleChallengeStatus(uint256 _id) public onlyOwner {
require(_id == Challenges[_id].id && _id != 0, "Invalid ID");
Challenges[_id].status = !Challenges[_id].status;
}
function u_contract(address _contarct) public onlyOwner {
require(_contarct != address(0), "Invalid address");
NFTContract = INFT(_contarct);
}
}
contract ROOTx is ERC20 {
constructor(INFT NFTContract) public ERC20("ROOTx", "ROOTx", NFTContract) {
_mint(msg.sender, 6500 ether); //
// holder[msg.sender] = true;
// holders.push(msg.sender);
}
}
Read Contract
Challenges 0xec323bf1 → uint256, string, uint256, uint256, bool
NFTBalance 0x6feecb68 → uint256
NFTContract 0x31c2273b → address
NFTOwner 0xd51fe9cb → address
NFTWallet 0x417b4415 → uint256[]
_Owner 0xdcc23455 → address
_fundAddress 0x8230af5a → address
_maxTxAmount 0x7d1db4a5 → uint256
_previousOwner 0x6e63cd96 → address
a1 0x119552a1 → uint256
allowance 0xdd62ed3e → uint256
amount123 0x9aa980f8 → address
balanceOf 0x70a08231 → uint256
burnFee 0xfce589d8 → uint256
challengeCount 0xa2f05725 → uint256
checkDailyReward 0x28f97b87 → uint256
dailyReward 0xc964ad45 → bool
decimals 0x313ce567 → uint256
entry 0x83a28894 → bool
feeExcludedAddress 0x00f83cdf → bool
geUnlockTime 0xb6c52324 → uint256
liquidityPair 0x808a5457 → address
name 0x06fdde03 → string
rewardAmount 0xf7b2a7be → uint256
sellLimit 0x4f91e48c → uint256
sellLimiter 0xbab62f38 → bool
symbol 0x95d89b41 → string
teamFee 0xd7c94efd → uint256
total1 0x700504e8 → uint256
totalSupply 0x18160ddd → uint256
Write Contract 29 functions
These functions modify contract state and require a wallet transaction to execute.
_burn 0x9b1f9e74
uint256 amount
addExcludedAddress 0xa9b54bcd
address excludedA
addSupply 0x40753a76
uint256 amount
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
bulkClaimRewards 0xa86a226f
uint256[] tokenIDs
changeFundAddress 0xf9271fd3
address Taddress
changeMaxtx 0x428e7823
uint256 _maxtx
changeRewardAmount 0xb93833c3
uint256 _amount
changeSellLimit 0x0eda7275
uint256 _sellLimit
claimDailyReward 0x5e67fe14
uint256 tokenID
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
enterChallenge 0x25c1a695
uint256 _id
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
lock 0xdd467064
uint256 time
multiTransfer 0x1e89d545
address[] receivers
uint256[] amounts
removeExcludedAddress 0xa646c35d
address excludedA
setBurnFee 0x4bf2c7c9
uint256 Tfee
setLiquidityPairAddress 0x4f922a9e
address liquidityPairAddress
setTeamFee 0xe6ec64ec
uint256 Tfee
startChallnge 0x687b5f5e
string _des
uint256 _roots
uint256 _nfts
startReward 0x746c8ae1
No parameters
stopReward 0x80dc0672
No parameters
toggleChallengeStatus 0x18612838
uint256 _id
toggleSellLimit 0xfc50eef3
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
u_contract 0x6f4e2c47
address _contarct
unlock 0xa69df4b5
No parameters
Recent Transactions
No transactions found for this address