Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x32C868F6318D6334B2250F323D914Bc2239E4EeE
Balance 0 ETH
Nonce 1
Code Size 16487 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

16487 bytes
0x6080604052600436106104515760003560e01c806370af56471161023f578063b4594fa311610139578063ccfc2e8d116100b6578063e7a324dc1161007a578063e7a324dc14610e55578063f1127ed814610e6a578063f2fde38b14610ec9578063f96f5b3514610efc578063fec7f83014610f2f57610451565b8063ccfc2e8d14610da8578063ce687a3014610ddb578063d052023e14610df0578063da3ca81d14610e05578063dd62ed3e14610e1a57610451565b8063bf0a07bd116100fd578063bf0a07bd14610ce2578063c0f4783d14610cf7578063c3cda52014610d2a578063c461810114610d7e578063c83fc86a14610d9357610451565b8063b4594fa314610c5b578063b480f6ad14610c70578063b4b5ea5714610c85578063bb96e90c14610cb8578063be1716a414610ccd57610451565b80638e8e2925116101c7578063a457c2d71161018b578063a457c2d714610baa578063a9059cbb14610be3578063ad0cd7d014610c1c578063b041e27214610c31578063b2aef26b14610c4657610451565b80638e8e292514610b055780639348ac9d14610b1a57806393555dfd14610b4d57806395d89b4114610b625780639cb8dc8514610b7757610451565b806375b208bc1161020e57806375b208bc14610a5a578063782d6fe114610a6f5780637ecebe0014610aa85780638bdb2afa14610adb5780638da5cb5b14610af057610451565b806370af5647146109c3578063715018a6146109f7578063741a1f4e14610a0c5780637433e2e714610a4557610451565b8063378dc3dc11610350578063596fa9e3116102d857806360a025901161029c57806360a0259014610905578063652f4e911461091a5780636a2f796c1461092f5780636fcfff451461094457806370a082311461099057610451565b8063596fa9e31461084b57806359c99ef5146108605780635b5f3e87146108755780635c19a95c1461088a5780635cbe03d1146108bd57610451565b8063444820fb1161031f578063444820fb146107c45780634d332457146107d95780634f1a0f7d146107ee5780635873aaa314610803578063587cde1e1461081857610451565b8063378dc3dc14610742578063395093511461075757806339e041c8146107905780633e6dfa36146107af57610451565b806318160ddd116103de57806323399434116103a2578063233994341461069557806323b872dd146106aa5780632a615cb1146106ed578063313ce5671461070257806331a22a201461072d57610451565b806318160ddd1461062c5780631c9c52ab146106415780631ed00a7e1461065657806320606b701461066b57806320988cef1461068057610451565b806310a7a6591161042557806310a7a6591461058557806312c44999146105ba57806314b8fecc146105cf57806317908e77146105e457806317f27c801461061757610451565b80622b13291461045657806306fdde031461047d578063095ea7b3146105075780630d43e8ad14610554575b600080fd5b34801561046257600080fd5b5061046b610f44565b60408051918252519081900360200190f35b34801561048957600080fd5b50610492610f4a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104cc5781810151838201526020016104b4565b50505050905090810190601f1680156104f95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561051357600080fd5b506105406004803603604081101561052a57600080fd5b506001600160a01b038135169060200135610fe1565b604080519115158252519081900360200190f35b34801561056057600080fd5b50610569610fff565b604080516001600160a01b039092168252519081900360200190f35b34801561059157600080fd5b506105b8600480360360208110156105a857600080fd5b50356001600160a01b031661100e565b005b3480156105c657600080fd5b5061046b61108e565b3480156105db57600080fd5b5061054061109b565b3480156105f057600080fd5b5061046b6004803603602081101561060757600080fd5b50356001600160a01b03166110a4565b34801561062357600080fd5b5061046b6110f4565b34801561063857600080fd5b5061046b6110fb565b34801561064d57600080fd5b506105b8611101565b34801561066257600080fd5b50610569611187565b34801561067757600080fd5b5061046b611196565b34801561068c57600080fd5b5061046b6111ba565b3480156106a157600080fd5b5061046b6111c1565b3480156106b657600080fd5b50610540600480360360608110156106cd57600080fd5b506001600160a01b038135811691602081013590911690604001356111c7565b3480156106f957600080fd5b506105b861124e565b34801561070e57600080fd5b5061071761179b565b6040805160ff9092168252519081900360200190f35b34801561073957600080fd5b5061046b6117a4565b34801561074e57600080fd5b5061046b6117aa565b34801561076357600080fd5b506105406004803603604081101561077a57600080fd5b506001600160a01b0381351690602001356117b8565b6105b8600480360360208110156107a657600080fd5b50351515611806565b3480156107bb57600080fd5b50610569611959565b3480156107d057600080fd5b50610569611968565b3480156107e557600080fd5b50610569611977565b3480156107fa57600080fd5b506105b8611986565b34801561080f57600080fd5b50610569611ae0565b34801561082457600080fd5b506105696004803603602081101561083b57600080fd5b50356001600160a01b0316611aef565b34801561085757600080fd5b50610569611b0d565b34801561086c57600080fd5b506105b8611b1c565b34801561088157600080fd5b5061046b611b57565b34801561089657600080fd5b506105b8600480360360208110156108ad57600080fd5b50356001600160a01b0316611c0d565b3480156108c957600080fd5b50610540600480360360808110156108e057600080fd5b5080356001600160a01b0316906020810135906040810135906060013560ff16611c17565b34801561091157600080fd5b50610540611d26565b34801561092657600080fd5b5061046b611ded565b34801561093b57600080fd5b5061046b611df3565b34801561095057600080fd5b506109776004803603602081101561096757600080fd5b50356001600160a01b0316611df9565b6040805163ffffffff9092168252519081900360200190f35b34801561099c57600080fd5b5061046b600480360360208110156109b357600080fd5b50356001600160a01b0316611e11565b6105b8600480360360808110156109d957600080fd5b5080351515906020810135906040810135906060013560ff16611e2c565b348015610a0357600080fd5b506105b8611f94565b348015610a1857600080fd5b506105b860048036036060811015610a2f57600080fd5b508035906020810135906040013560ff16612036565b348015610a5157600080fd5b5061046b61209f565b348015610a6657600080fd5b506105696120a5565b348015610a7b57600080fd5b5061046b60048036036040811015610a9257600080fd5b506001600160a01b03813516906020013561221e565b348015610ab457600080fd5b5061046b60048036036020811015610acb57600080fd5b50356001600160a01b0316612426565b348015610ae757600080fd5b50610569612438565b348015610afc57600080fd5b50610569612447565b348015610b1157600080fd5b50610492612456565b348015610b2657600080fd5b5061054060048036036020811015610b3d57600080fd5b50356001600160a01b03166124e4565b348015610b5957600080fd5b5061046b612524565b348015610b6e57600080fd5b5061049261252a565b348015610b8357600080fd5b5061054060048036036020811015610b9a57600080fd5b50356001600160a01b031661258b565b348015610bb657600080fd5b5061054060048036036040811015610bcd57600080fd5b506001600160a01b0381351690602001356125a0565b348015610bef57600080fd5b5061054060048036036040811015610c0657600080fd5b506001600160a01b038135169060200135612608565b348015610c2857600080fd5b5061046b61261c565b348015610c3d57600080fd5b5061046b61264a565b348015610c5257600080fd5b50610569612650565b348015610c6757600080fd5b5061046b612664565b348015610c7c57600080fd5b50610569612669565b348015610c9157600080fd5b5061046b60048036036020811015610ca857600080fd5b50356001600160a01b0316612678565b348015610cc457600080fd5b506105696126dc565b348015610cd957600080fd5b5061046b6126eb565b348015610cee57600080fd5b5061046b6126f1565b348015610d0357600080fd5b506105b860048036036020811015610d1a57600080fd5b50356001600160a01b03166126fe565b348015610d3657600080fd5b506105b8600480360360c0811015610d4d57600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a00135612775565b348015610d8a57600080fd5b5061046b6129e8565b348015610d9f57600080fd5b5061046b6129ed565b348015610db457600080fd5b506105b860048036036020811015610dcb57600080fd5b50356001600160a01b0316612a94565b348015610de757600080fd5b5061046b612b6e565b348015610dfc57600080fd5b5061046b612b74565b348015610e1157600080fd5b50610540612b79565b348015610e2657600080fd5b5061046b60048036036040811015610e3d57600080fd5b506001600160a01b0381358116916020013516612b82565b348015610e6157600080fd5b5061046b612bad565b348015610e7657600080fd5b50610ea960048036036040811015610e8d57600080fd5b5080356001600160a01b0316906020013563ffffffff16612bd1565b6040805163ffffffff909316835260208301919091528051918290030190f35b348015610ed557600080fd5b506105b860048036036020811015610eec57600080fd5b50356001600160a01b0316612bfe565b348015610f0857600080fd5b5061046b60048036036020811015610f1f57600080fd5b50356001600160a01b0316612cf6565b348015610f3b57600080fd5b5061046b612d08565b60035481565b600a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b505050505090505b90565b6000610ff5610fee612e45565b8484612e49565b5060015b92915050565b601a546001600160a01b031681565b611016612e45565b6000546001600160a01b03908116911614611066576040805162461bcd60e51b81526020600482018190526024820152600080516020613f35833981519152604482015290519081900360640190fd5b601980546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b682b5e3af16b1880000081565b60195460ff1681565b6000610ff9670de0b6b3a76400006110ee6064816110c3826028612da9565b6005546001600160a01b0389166000908152600660205260409020546110e891612d50565b90612d50565b90612d0e565b6224ea0081565b60095490565b6010546001600160a01b03163314611160576040805162461bcd60e51b815260206004820152601860248201527f6e6f742074656e74617469766544657641646472657373210000000000000000604482015290519081900360640190fd5b60108054600f80546001600160a01b03199081166001600160a01b03841617909155169055565b6014546001600160a01b031681565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b62278d0081565b60045481565b60006111d4848484612f35565b611244846111e0612e45565b61123f85604051806060016040528060288152602001613f0d602891396001600160a01b038a1660009081526008602052604081209061121e612e45565b6001600160a01b031681526020810191909152604001600020549190613305565b612e49565b5060019392505050565b611256611d26565b156112a8576040805162461bcd60e51b815260206004820152601b60248201527f4c69717569646974792067656e65726174696f6e206f6e67696e670000000000604482015290519081900360640190fd5b60195460ff16156112ea5760405162461bcd60e51b815260040180806020018281038252602581526020018061400d6025913960400191505060405180910390fd5b47600481905560025460408051808201909152600f81526e42616c616e6365206f66207468697360881b60208201526001600160a01b039091169161133a9190670de0b6b3a7640000900461339c565b601654604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561137f57600080fd5b505afa158015611393573d6000803e3d6000fd5b505050506040513d60208110156113a957600080fd5b50516004805460408051630d0e30db60e41b815290519394506001600160a01b0385169363d0e30db09382810192600092919082900301818588803b1580156113f157600080fd5b505af1158015611405573d6000803e3d6000fd5b505050505047600014611451576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b806001600160a01b031663a9059cbb836004546040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156114aa57600080fd5b505af11580156114be573d6000803e3d6000fd5b505050506040513d60208110156114d457600080fd5b505030600081815260076020908152604080832080546001600160a01b038816808652838620919091558585529084905581516335313c2160e11b8152600481019590955290519093636a6278429360248083019493928390030190829087803b15801561154157600080fd5b505af1158015611555573d6000803e3d6000fd5b505050506040513d602081101561156b57600080fd5b5050604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156115b357600080fd5b505afa1580156115c7573d6000803e3d6000fd5b505050506040513d60208110156115dd57600080fd5b50516003819055604080518082019091526013815272151bdd185b081d1bdad95b9cc81b5a5b9d1959606a1b60208201526116179161339c565b600354611660576040805162461bcd60e51b815260206004820152601260248201527113140818dc99585d1a5bdb8819985a5b195960721b604482015290519081900360640190fd5b6116836004546110ee670de0b6b3a7640000600354612d5090919063ffffffff16565b60058190556040805180820190915260128152712a37ba30b6103832b9102628103a37b5b2b760711b60208201526116ba9161339c565b600554611703576040805162461bcd60e51b815260206004820152601260248201527113140818dc99585d1a5bdb8819985a5b195960721b604482015290519081900360640190fd5b6019805460ff1916600117905542600e556016546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290519183169163095ea7b3916044808201926020929091908290030181600087803b15801561176b57600080fd5b505af115801561177f573d6000803e3d6000fd5b505050506040513d602081101561179557600080fd5b50505050565b600c5460ff1690565b60055481565b690472698b413b4320000081565b6000610ff56117c5612e45565b8461123f85600860006117d6612e45565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612deb565b8061180f611d26565b611860576040805162461bcd60e51b815260206004820152601f60248201527f4c69717569646974792047656e65726174696f6e204576656e74206f76657200604482015290519081900360640190fd5b806118aa576040805162461bcd60e51b8152602060048201526015602482015274139bc81859dc99595b595b9d081c1c9bdd9a591959605a1b604482015290519081900360640190fd5b682b5e3af16b18800000600454106118f35760405162461bcd60e51b8152600401808060200182810382526033815260200180613e8a6033913960400191505060405180910390fd5b6118fc336124e4565b61194d576040805162461bcd60e51b815260206004820152601a60248201527f596f7520686176656e7420706c61796564207468652067616d65000000000000604482015290519081900360640190fd5b61195561344a565b5050565b6017546001600160a01b031690565b6010546001600160a01b031681565b6002546001600160a01b031681565b61198e612e45565b6000546001600160a01b039081169116146119de576040805162461bcd60e51b81526020600482018190526024820152600080516020613f35833981519152604482015290519081900360640190fd5b600d5442906119f090620a8c00612deb565b10611a2c5760405162461bcd60e51b815260040180806020018281038252602f815260200180613ebd602f913960400191505060405180910390fd5b604051600090339047908381818185875af1925050503d8060008114611a6e576040519150601f19603f3d011682016040523d82523d6000602084013e611a73565b606091505b5050905080611abc576040805162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015290519081900360640190fd5b50306000818152600760205260408082208054338452918320919091559181529055565b6016546001600160a01b031690565b6001600160a01b039081166000908152601b60205260409020541690565b6016546001600160a01b031681565b6000611b266129ed565b90508015611b5457601254611b3b9082612deb565b601255600f54611b54906001600160a01b031682613536565b50565b6000611b61611d26565b611b6d57506000610fde565b611be76040518060400160405280601b81526020017f4c47455f4455524154494f4e2073696e63652073746172742069730000000000815250611bbd600154600d54612deb90919063ffffffff16565b6040518060400160405280600b81526020016a54696d65206e6f7720697360a81b81525042613628565b611c0842611c02600154600d54612deb90919063ffffffff16565b90612da9565b905090565b611b543382613745565b60408051606086901b6bffffffffffffffffffffffff191660208083019190915282516014818403810182526034840185528151918301919091207f19457468657265756d205369676e6564204d6573736167653a0a333200000000605485015260708085018290528551808603909101815260908501808752815191850191909120925460009182905260b0860180885284905260ff881660d087015260f086018a9052610110860189905295519095919492936001600160a01b0390921692600192610130808301939192601f198301929081900390910190855afa158015611d06573d6000803e3d6000fd5b505050602060405103516001600160a01b03161492505050949350505050565b6000611d786040518060400160405280601b81526020017f4c47455f4455524154494f4e2073696e63652073746172742069730000000000815250611bbd600154600d54612deb90919063ffffffff16565b611dcf6040518060400160405280601c81526020017f6c69717569646974792067656e65726174696f6e206f6e676f696e670000000081525042611dc9600154600d54612deb90919063ffffffff16565b106137d4565b42611de7600154600d54612deb90919063ffffffff16565b11905090565b60015481565b600d5481565b601d6020526000908152604090205463ffffffff1681565b6001600160a01b031660009081526007602052604090205490565b83611e35611d26565b611e86576040805162461bcd60e51b815260206004820152601f60248201527f4c69717569646974792047656e65726174696f6e204576656e74206f76657200604482015290519081900360640190fd5b80611ed0576040805162461bcd60e51b8152602060048201526015602482015274139bc81859dc99595b595b9d081c1c9bdd9a591959605a1b604482015290519081900360640190fd5b682b5e3af16b1880000060045410611f195760405162461bcd60e51b8152600401808060200182810382526033815260200180613e8a6033913960400191505060405180910390fd5b611f22336124e4565b80611f345750611f3433858585611c17565b611f85576040805162461bcd60e51b815260206004820152601a60248201527f596f7520686176656e7420706c61796564207468652067616d65000000000000604482015290519081900360640190fd5b611f8d61344a565b5050505050565b611f9c612e45565b6000546001600160a01b03908116911614611fec576040805162461bcd60e51b81526020600482018190526024820152600080516020613f35833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61204233848484611c17565b612080576040805162461bcd60e51b815260206004820152600a602482015269217369676e617475726560b01b604482015290519081900360640190fd5b5050336000908152601560205260409020805460ff1916600117905550565b60115481565b6002546000906001600160a01b031615612106576040805162461bcd60e51b815260206004820152601b60248201527f546f6b656e3a20706f6f6c20616c726561647920637265617465640000000000604482015290519081900360640190fd5b601754601654604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b15801561215557600080fd5b505afa158015612169573d6000803e3d6000fd5b505050506040513d602081101561217f57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b1580156121ce57600080fd5b505af11580156121e2573d6000803e3d6000fd5b505050506040513d60208110156121f857600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179081905516919050565b600043821061225e5760405162461bcd60e51b8152600401808060200182810382526027815260200180613dad6027913960400191505060405180910390fd5b6001600160a01b0383166000908152601d602052604090205463ffffffff168061228c576000915050610ff9565b6001600160a01b0384166000908152601c6020908152604080832063ffffffff6000198601811685529252909120541683106122fb576001600160a01b0384166000908152601c602090815260408083206000199490940163ffffffff16835292905220600101549050610ff9565b6001600160a01b0384166000908152601c6020908152604080832083805290915290205463ffffffff16831015612336576000915050610ff9565b600060001982015b8163ffffffff168163ffffffff1611156123ef57600282820363ffffffff16048103612368613d3e565b506001600160a01b0387166000908152601c6020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152908714156123ca57602001519450610ff99350505050565b805163ffffffff168711156123e1578193506123e8565b6001820392505b505061233e565b506001600160a01b0385166000908152601c6020908152604080832063ffffffff9094168352929052206001015491505092915050565b601e6020526000908152604090205481565b6017546001600160a01b031681565b6000546001600160a01b031690565b6018805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156124dc5780601f106124b1576101008083540402835291602001916124dc565b820191906000526020600020905b8154815290600101906020018083116124bf57829003601f168201915b505050505081565b6001600160a01b038116600090815260066020526040812054151580610ff95750506001600160a01b031660009081526015602052604090205460ff1690565b60135481565b600b8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fd65780601f10610fab57610100808354040283529160200191610fd6565b60156020526000908152604090205460ff1681565b6000610ff56125ad612e45565b8461123f85604051806060016040528060258152602001613fe860259139600860006125d7612e45565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613305565b6000610ff5612615612e45565b8484612f35565b6000611c08670de0b6b3a76400006110ee60648161263b826028612da9565b6005546004546110e891612d50565b60125481565b60195461010090046001600160a01b031681565b602881565b600f546001600160a01b031681565b6001600160a01b0381166000908152601d602052604081205463ffffffff16806126a35760006126d5565b6001600160a01b0383166000908152601c6020908152604080832063ffffffff60001986011684529091529020600101545b9392505050565b6002546001600160a01b031690565b60035490565b682b5e3af16b1880000090565b600f546001600160a01b03163314612753576040805162461bcd60e51b81526020600482015260136024820152726f6e6c79206465762063616e206368616e676560681b604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666127a0610f4a565b805190602001206127af613884565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a9052825180850390910181526101408401835280519085012061190160f01b6101608501526101628401829052610182808501829052835180860390910181526101a285018085528151918701919091206000918290526101c2860180865281905260ff8b166101e287015261020286018a90526102228601899052935192965090949293909260019261024280840193601f198301929081900390910190855afa1580156128e2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129345760405162461bcd60e51b8152600401808060200182810382526026815260200180613e426026913960400191505060405180910390fd5b6001600160a01b0381166000908152601e6020526040902080546001810190915589146129925760405162461bcd60e51b8152600401808060200182810382526022815260200180613e686022913960400191505060405180910390fd5b874211156129d15760405162461bcd60e51b8152600401808060200182810382526026815260200180613fc26026913960400191505060405180910390fd5b6129db818b613745565b505050505b505050505050565b600681565b6000600e5460001480612a03575060195460ff16155b15612a1057506000610fde565b6000612a2e62278d006110ee600e5442612da990919063ffffffff16565b9050612a3b816001612deb565b90506000612a5960066110ee60115485612d5090919063ffffffff16565b9050601154811115612a6a57506011545b601254811115612a8b57601254612a82908290612da9565b92505050610fde565b60009250505090565b612a9c612e45565b6000546001600160a01b03908116911614612aec576040805162461bcd60e51b81526020600482018190526024820152600080516020613f35833981519152604482015290519081900360640190fd5b601a80546001600160a01b0319166001600160a01b038316179055612b143082600019612e49565b6002546040805163095ea7b360e01b81526001600160a01b038481166004830152600019602483015291519190921691829163095ea7b3916044808201926020929091908290030181600087803b15801561176b57600080fd5b600e5481565b600981565b60195460ff1690565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b601c6020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b612c06612e45565b6000546001600160a01b03908116911614612c56576040805162461bcd60e51b81526020600482018190526024820152600080516020613f35833981519152604482015290519081900360640190fd5b6001600160a01b038116612c9b5760405162461bcd60e51b8152600401808060200182810382526026815260200180613dd46026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60066020526000908152604090205481565b60135490565b60006126d583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613888565b600082612d5f57506000610ff9565b82820282848281612d6c57fe5b04146126d55760405162461bcd60e51b8152600401808060200182810382526021815260200180613eec6021913960400191505060405180910390fd5b60006126d583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613305565b6000828201838110156126d5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b038316612e8e5760405162461bcd60e51b8152600401808060200182810382526024815260200180613f9e6024913960400191505060405180910390fd5b6001600160a01b038216612ed35760405162461bcd60e51b8152600401808060200182810382526022815260200180613dfa6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316612f7a5760405162461bcd60e51b8152600401808060200182810382526025815260200180613f556025913960400191505060405180910390fd5b6001600160a01b038216612fbf5760405162461bcd60e51b8152600401808060200182810382526023815260200180613d566023913960400191505060405180910390fd5b612fca8383836138ed565b61300781604051806060016040528060268152602001613e1c602691396001600160a01b0386166000908152600760205260409020549190613305565b6001600160a01b0380851660008181526007602052604080822094909455601954845163301a580160e01b815260048101939093528684166024840152604483018690528451919485946101009092049091169263301a5801926064808301939282900301818787803b15801561307d57600080fd5b505af1158015613091573d6000803e3d6000fd5b505050506040513d60408110156130a757600080fd5b508051602091820151604080518082018252600b81526a29b2b73232b91034b9901d60a91b818601528151808301909252600d82526c2932b1b4b832b73a1034b9901d60991b94820194909452919450925061310691908790876138f2565b6131326040518060400160405280600a815260200169030b6b7bab73a1034b9960b51b8152508461339c565b8261313d8383612deb565b146131795760405162461bcd60e51b8152600401808060200182810382526024815260200180613f7a6024913960400191505060405180910390fd5b6001600160a01b03841660009081526007602052604090205461319c9083612deb565b6001600160a01b0380861660008181526007602090815260409182902094909455805186815290519193928916927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a360008111801561320d5750601a546001600160a01b031615155b15611f8d57601a546001600160a01b03166000908152600760205260409020546132379082612deb565b601a80546001600160a01b039081166000908152600760209081526040918290209490945591548251858152925190821693918916927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92908290030190a3601a60009054906101000a90046001600160a01b03166001600160a01b031663faa1809e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132e657600080fd5b505af11580156132fa573d6000803e3d6000fd5b505050505050505050565b600081848411156133945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613359578181015183820152602001613341565b50505050905090810190601f1680156133865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61195582826040516024018080602001838152602001828103825284818151815260200191508051906020019080838360005b838110156133e75781810151838201526020016133cf565b50505050905090810190601f1680156134145780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b1790529350613a2192505050565b6004546134579034612deb565b6004819055600090682b5e3af16b1880000010156134955760045461348590682b5e3af16b18800000612da9565b682b5e3af16b1880000060045590505b6134b86134a23483612da9565b3360009081526006602052604090205490612deb565b3360009081526006602052604090205580156134fd57604051339082156108fc029083906000818181858888f193505050501580156134fb573d6000803e3d6000fd5b505b60408051348152905133917f20b711375edba008429d2f91787c68aa13aab7f267c346bf91be1a104d8b7b8b919081900360200190a250565b6001600160a01b038216613591576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61359d600083836138ed565b6009546135aa9082612deb565b6009556001600160a01b0382166000908152600760205260409020546135d09082612deb565b6001600160a01b03831660008181526007602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b61179584848484604051602401808060200185815260200180602001848152602001838103835287818151815260200191508051906020019080838360005b8381101561367f578181015183820152602001613667565b50505050905090810190601f1680156136ac5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156136df5781810151838201526020016136c7565b50505050905090810190601f16801561370c5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b031663a0c4b22560e01b1790529650613a2195505050505050565b6001600160a01b038083166000908152601b60205260408120549091169061376c84611e11565b6001600160a01b038581166000818152601b602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611795828483613a42565b611955828260405160240180806020018315158152602001828103825284818151815260200191508051906020019080838360005b83811015613821578181015183820152602001613809565b50505050905090810190601f16801561384e5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b031663c3b5563560e01b1790529350613a2192505050565b4690565b600081836138d75760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613359578181015183820152602001613341565b5060008385816138e357fe5b0495945050505050565b505050565b611795848484846040516024018080602001856001600160a01b0316815260200180602001846001600160a01b03168152602001838103835287818151815260200191508051906020019080838360005b8381101561395b578181015183820152602001613943565b50505050905090810190601f1680156139885780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156139bb5781810151838201526020016139a3565b50505050905090810190601f1680156139e85780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b031663aabc9a3160e01b1790529650613a2195505050505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b816001600160a01b0316836001600160a01b031614158015613a645750600081115b156138ed576001600160a01b03831615613af6576001600160a01b0383166000908152601d602052604081205463ffffffff169081613aa4576000613ad6565b6001600160a01b0385166000908152601c6020908152604080832063ffffffff60001987011684529091529020600101545b90506000613ae48285612da9565b9050613af286848484613b7b565b5050505b6001600160a01b038216156138ed576001600160a01b0382166000908152601d602052604081205463ffffffff169081613b31576000613b63565b6001600160a01b0384166000908152601c6020908152604080832063ffffffff60001987011684529091529020600101545b90506000613b718285612deb565b90506129e0858484845b6000613b9f43604051806060016040528060348152602001613d7960349139613ce0565b905060008463ffffffff16118015613be857506001600160a01b0385166000908152601c6020908152604080832063ffffffff6000198901811685529252909120548282169116145b15613c25576001600160a01b0385166000908152601c6020908152604080832063ffffffff60001989011684529091529020600101829055613c96565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152601c84528681208b8616825284528681209551865490861663ffffffff199182161787559251600196870155908152601d9092529390208054928801909116919092161790555b604080518481526020810184905281516001600160a01b038816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b6000816401000000008410613d365760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613359578181015183820152602001613341565b509192915050565b60408051808201909152600080825260208201529056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734e4552443a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734e4552443a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e4552443a3a64656c656761746542795369673a20696e76616c6964207369676e61747572654e4552443a3a64656c656761746542795369673a20696e76616c6964206e6f6e63654c69717569646974792067656e65726174696f6e206576656e20686172642063617020616c72656164792072656163686564214c69717569646974792067656e65726174696f6e20677261636520706572696f64207374696c6c206f6e676f696e67536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734d6174682062726f6b652c20646f65732067726176697479207374696c6c20776f726b3f45524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734e4552443a3a64656c656761746542795369673a207369676e6174757265206578706972656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4c69717569646974792067656e65726174696f6e20616c72656164792066696e6973686564a26469706673582212208a66aa9220bbdeaf3502450ae22b7996ab7702f34943ff4ba075feb297176ba264736f6c634300060c0033

Verified Source Code Partial Match

Compiler: v0.6.12+commit.27d51765 EVM: istanbul Optimization: Yes (200 runs)
Nerd.sol 7142 lines
// File: @openzeppelin/contracts/GSN/Context.sol

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal virtual view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal virtual view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: contracts/INerdBaseToken.sol

pragma solidity 0.6.12;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface INerdBaseToken {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    event Log(string log);
}

interface INerdBaseTokenLGE is INerdBaseToken {
    function getAllocatedLP(address _user) external view returns (uint256);

    function getLpReleaseStart() external view returns (uint256);

    function getTokenUniswapPair() external view returns (address);

    function getTotalLPTokensMinted() external view returns (uint256);

    function getReleasableLPTokensMinted() external view returns (uint256);

    function isLPGenerationCompleted() external view returns (bool);

    function tokenUniswapPair() external view returns (address);

    function getUniswapRouterV2() external view returns (address);

    function getUniswapFactory() external view returns (address);

    function devFundAddress() external view returns (address);

    function transferCheckerAddress() external view returns (address);

    function feeDistributor() external view returns (address);
}

// File: @openzeppelin/contracts/math/SafeMath.sol

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/utils/Address.sol

pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
            }
        }
    }
}

// File: contracts/IFeeApprover.sol

pragma solidity 0.6.12;

interface IFeeApprover {
    function check(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    function setFeeMultiplier(uint256 _feeMultiplier) external;

    function feePercentX100() external view returns (uint256);

    function setTokenUniswapPair(address _tokenUniswapPair) external;

    function setNerdTokenAddress(address _nerdTokenAddress) external;

    function updateTxState() external;

    function calculateAmountsAfterFee(
        address sender,
        address recipient,
        uint256 amount
    )
        external
        returns (uint256 transferToAmount, uint256 transferToFeeBearerAmount);

    function setPaused() external;
}

// File: contracts/INerdVault.sol

pragma solidity 0.6.12;

interface INerdVault {
    function updatePendingRewards() external;

    function depositFor(
        address _depositFor,
        uint256 _pid,
        uint256 _amount
    ) external;

    function poolInfo(uint256 _pid)
        external
        view
        returns (
            address,
            uint256,
            uint256,
            uint256,
            bool,
            uint256,
            uint256,
            uint256,
            uint256
        );
}

// File: @nomiclabs/buidler/console.sol

pragma solidity >=0.4.22 <0.8.0;

library console {
    address constant CONSOLE_ADDRESS = address(
        0x000000000000000000636F6e736F6c652e6c6f67
    );

    function _sendLogPayload(bytes memory payload) private view {
        uint256 payloadLength = payload.length;
        address consoleAddress = CONSOLE_ADDRESS;
        assembly {
            let payloadStart := add(payload, 32)
            let r := staticcall(
                gas(),
                consoleAddress,
                payloadStart,
                payloadLength,
                0,
                0
            )
        }
    }

    function log() internal view {
        _sendLogPayload(abi.encodeWithSignature("log()"));
    }

    function logInt(int256 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(int)", p0));
    }

    function logUint(uint256 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
    }

    function logString(string memory p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string)", p0));
    }

    function logBool(bool p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
    }

    function logAddress(address p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(address)", p0));
    }

    function logBytes(bytes memory p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
    }

    function logByte(bytes1 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(byte)", p0));
    }

    function logBytes1(bytes1 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
    }

    function logBytes2(bytes2 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
    }

    function logBytes3(bytes3 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
    }

    function logBytes4(bytes4 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
    }

    function logBytes5(bytes5 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
    }

    function logBytes6(bytes6 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
    }

    function logBytes7(bytes7 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
    }

    function logBytes8(bytes8 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
    }

    function logBytes9(bytes9 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
    }

    function logBytes10(bytes10 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
    }

    function logBytes11(bytes11 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
    }

    function logBytes12(bytes12 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
    }

    function logBytes13(bytes13 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
    }

    function logBytes14(bytes14 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
    }

    function logBytes15(bytes15 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
    }

    function logBytes16(bytes16 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
    }

    function logBytes17(bytes17 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
    }

    function logBytes18(bytes18 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
    }

    function logBytes19(bytes19 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
    }

    function logBytes20(bytes20 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
    }

    function logBytes21(bytes21 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
    }

    function logBytes22(bytes22 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
    }

    function logBytes23(bytes23 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
    }

    function logBytes24(bytes24 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
    }

    function logBytes25(bytes25 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
    }

    function logBytes26(bytes26 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
    }

    function logBytes27(bytes27 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
    }

    function logBytes28(bytes28 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
    }

    function logBytes29(bytes29 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
    }

    function logBytes30(bytes30 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
    }

    function logBytes31(bytes31 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
    }

    function logBytes32(bytes32 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
    }

    function log(uint256 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
    }

    function log(string memory p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string)", p0));
    }

    function log(bool p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
    }

    function log(address p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(address)", p0));
    }

    function log(uint256 p0, uint256 p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
    }

    function log(uint256 p0, string memory p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
    }

    function log(uint256 p0, bool p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
    }

    function log(uint256 p0, address p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
    }

    function log(string memory p0, uint256 p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
    }

    function log(string memory p0, string memory p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
    }

    function log(string memory p0, bool p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
    }

    function log(string memory p0, address p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
    }

    function log(bool p0, uint256 p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
    }

    function log(bool p0, string memory p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
    }

    function log(bool p0, bool p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
    }

    function log(bool p0, address p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
    }

    function log(address p0, uint256 p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
    }

    function log(address p0, string memory p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
    }

    function log(address p0, bool p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
    }

    function log(address p0, address p1) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,address)", p0, p1)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        address p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        address p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        address p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        address p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        string memory p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        string memory p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        string memory p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        string memory p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        bool p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        bool p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        bool p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        bool p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        address p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        address p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        address p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        address p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        string memory p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        string memory p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        string memory p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        string memory p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        bool p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        bool p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        bool p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        bool p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        address p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        address p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        address p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        address p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        uint256 p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        uint256 p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        uint256 p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        uint256 p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        string memory p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        string memory p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        string memory p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        string memory p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        bool p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        bool p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        bool p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        bool p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        address p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        address p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        address p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        address p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload...

// [truncated — 177127 bytes total]

Read Contract

DELEGATION_TYPEHASH 0xe7a324dc → bytes32
DEV_FUND_LOCKED_MONTHS 0xc4618101 → uint256
DEV_FUND_RESERVE_PERCENT 0xd052023e → uint256
DOMAIN_TYPEHASH 0x20606b70 → bytes32
HARD_CAP_LIQUIDITY_EVENT 0x12c44999 → uint256
LGE_DURATION 0x652f4e91 → uint256
LPGenerationCompleted 0x14b8fecc → bool
LP_INITIAL_LOCKED_PERIOD 0x17f27c80 → uint256
LP_LOCK_FOREVER_PERCENT 0xb4594fa3 → uint256
LPperETHUnit 0x31a22a20 → uint256
ONE_MONTH 0x20988cef → uint256
allowance 0xdd62ed3e → uint256
alreadyPlayGameUsers 0x9cb8dc85 → bool
balanceOf 0x70a08231 → uint256
checkpoints 0xf1127ed8 → uint32, uint256
contractStartTimestamp 0x6a2f796c → uint256
decimals 0x313ce567 → uint8
delegates 0x587cde1e → address
devFundAddress 0xb480f6ad → address
devFundTotal 0x7433e2e7 → uint256
ethContributed 0xf96f5b35 → uint256
feeDistributor 0x0d43e8ad → address
getAllocatedLP 0x17908e77 → uint256
getCurrentVotes 0xb4b5ea57 → uint256
getHardCap 0xbf0a07bd → uint256
getLpReleaseStart 0xfec7f830 → uint256
getPriorVotes 0x782d6fe1 → uint256
getReleasableLPTokensMinted 0xad0cd7d0 → uint256
getSecondsLeftInLiquidityGenerationEvent 0x5b5f3e87 → uint256
getTokenUniswapPair 0xbb96e90c → address
getTotalLPTokensMinted 0xbe1716a4 → uint256
getUniswapFactory 0x3e6dfa36 → address
getUniswapRouterV2 0x5873aaa3 → address
initialSupply 0x378dc3dc → uint256
isApprovedBySignature 0x5cbe03d1 → bool
isJoinedLGE 0x9348ac9d → bool
isLPGenerationCompleted 0xda3ca81d → bool
lgeApprover 0x1ed00a7e → address
liquidityGenerationOngoing 0x60a02590 → bool
liquidityGenerationParticipationAgreement 0x8e8e2925 → string
lpReleaseStart 0x93555dfd → uint256
name 0x06fdde03 → string
nonces 0x7ecebe00 → uint256
numCheckpoints 0x6fcfff45 → uint32
owner 0x8da5cb5b → address
pendingReleasableDevFund 0xc83fc86a → uint256
releasedDevFund 0xb041e272 → uint256
symbol 0x95d89b41 → string
tentativeDevAddress 0x444820fb → address
tokenActiveStartTimestamp 0xce687a30 → uint256
tokenUniswapPair 0x4d332457 → address
totalETHContributed 0x23399434 → uint256
totalLPTokensMinted 0x002b1329 → uint256
totalSupply 0x18160ddd → uint256
transferCheckerAddress 0xb2aef26b → address
uniswapFactory 0x8bdb2afa → address
uniswapRouterV2 0x596fa9e3 → address

Write Contract 20 functions

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

addLiquidity 0x70af5647
bool agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement
bytes32 r
bytes32 s
uint8 v
addLiquidityToUniswapNERDxWETHPair 0x2a615cb1
No parameters
addLiquidityWithoutSignature 0x39e041c8
bool agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
confirmDevAddress 0x1c9c52ab
No parameters
createUniswapPairMainnet 0x75b208bc
No parameters
returns: address
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
delegate 0x5c19a95c
address delegatee
delegateBySig 0xc3cda520
address delegatee
uint256 nonce
uint256 expiry
uint8 v
bytes32 r
bytes32 s
emergencyDrain24hAfterLiquidityGenerationEventIsDone 0x4f1a0f7d
No parameters
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
registerLGE 0x741a1f4e
bytes32 r
bytes32 s
uint8 v
renounceOwnership 0x715018a6
No parameters
setDevFundReciever 0xc0f4783d
address _devaddr
setFeeDistributor 0xccfc2e8d
address _feeDistributor
setShouldTransferChecker 0x10a7a659
address _transferCheckerAddress
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
unlockDevFund 0x59c99ef5
No parameters

Recent Transactions

No transactions found for this address