Address Contract Verified
Address
0xD933191bF2C8833C7EAF2749Cf19AF450CA453af
Balance
0 ETH
Nonce
1
Code Size
24568 bytes
Creator
0xF6E16C1F...4f34 at tx 0x8be000c1...6d602a
Indexed Transactions
0
Contract Bytecode
24568 bytes
0x608060405234801561000f575f80fd5b5060043610610105575f3560e01c80631b55ba3a146101095780632a3064871461011357806340a41c16146101315780635679e04d14610159578063643dd0a3146101615780636479a8421461016957806368e9dc7e1461017c57806369c038421461018f57806375d435a314610197578063780c034d146101b75780638cf7324f146101ca578063924b94c7146101d2578063a4172807146101f2578063b5a9fb2a14610212578063c129008914610232578063c25b0d1014610245578063ec72428d14610299578063ef680ee5146102b9578063f279e6a1146102cc578063faf4d14a146102df578063ff404d54146102f2575b5f80fd5b610111610312565b005b61011b610369565b6040516101289190614ed2565b60405180910390f35b61014461013f366004614f1d565b610424565b60408051928352602083019190915201610128565b610111610512565b6101116106a7565b610111610177366004614f4a565b61078a565b61011161018a366004614f72565b610a14565b610111610cbd565b6101aa6101a5366004614fa2565b610d20565b6040516101289190614fe9565b6101116101c5366004614f72565b610f4b565b610111610f72565b6101e56101e03660046150ac565b610fde565b60405161012891906150dd565b610205610200366004614fa2565b6112c6565b6040516101289190615263565b610225610220366004614fa2565b6113b6565b60405161012891906154c5565b61011b610240366004614fa2565b6115ef565b600154600254600354600754600654604080516001600160a01b03909616865260208601949094529284019190915260ff6101008204811615156060850152161515608083015260a082015260c001610128565b6102ac6102a7366004614fa2565b6116cf565b60405161012891906155ee565b6101116102c73660046157dd565b6117ce565b6101116102da366004614f72565b611a11565b6102056102ed366004614f1d565b611ba3565b610305610300366004614f4a565b611c1a565b6040516101289190615858565b61031a611d2b565b6001546001600160a01b03163314610330575f80fd5b6006545f819003610344574260065561035d565b6040516305d30d4b60e51b815260040160405180910390fd5b5061036760015f55565b565b6008805460609190806001600160401b0381111561038957610389615773565b6040519080825280602002602001820160405280156103b2578160200160208202803683370190505b5092505f5b8181101561041e578281815481106103d1576103d1615a31565b905f5260205f20015f9054906101000a90046001600160a01b03168482815181106103fe576103fe615a31565b6001600160a01b03909216602092830291909101909101526001016103b7565b50505090565b5f818152601160205260408120600881015460078201548392918391829182916104589161045191611d86565b6064611dbd565b90504284600501541161047e5761047784600a015485600b0154611ddc565b9150610506565b61048c4285601f0154611df6565b92505f6104a561049c8386611d86565b62278d00611dbd565b90505f6104b78660080154600a611dbd565b90505f818310156104c857826104ca565b815b905086600a01548110156104de57806104e4565b86600a01545b945086600b01545f14610502576104ff87600b015486611ddc565b94505b5050505b50909590945092505050565b61051a611d2b565b61052960065462278d00611ddc565b42106105845760075462010000900460ff1615610544575f80fd5b6007805462ff000019166201000017905560405133907f87f5baccaef3274c54e83e7392674388c6ee0aab699dd087f9c2b3772289e0eb905f90a261069e565b335f9081526009602090815260408083208054825181850281018501909352808352939284908301828280156105d757602002820191905f5260205f20905b8154815260200190600101908083116105c3575b505050505090505f5b82811015610665575f8282815181106105fb576105fb615a31565b6020908102919091018101515f81815260119092526040909120600f01549091506001600160a01b03163314801561064257505f818152601160205260409020600a015415155b1561065c575f818152601160205260409020426005909101555b506001016105e0565b5060405182815233907f979c060d0547c29d0f6d414154d586605ad169f84121c695ff63fef132a6fc9f9060200160405180910390a250505b61036760015f55565b6106af611d2b565b335f908152601360205260409020600881015460ff16156106ce575f80fd5b60088101805460ff19166001908117909155335f81815260106020908152604080832080549586018155835291204293019290925590517fbe299c10a63523a3acad3c2422a173ba0d8993c6f345b07ac368ece9d5d8a29c90610778906020808252602d908201527f492068617665206167726565642074686520686f6c64706c6174666f726d2e6360408201526c37b6903234b9b1b630b4b6b2b960991b606082015260800190565b60405180910390a25061036760015f55565b610792611d2b565b6001546001600160a01b031633146109f3576001600160a01b0382165f90815260126020908152604080832060158352818420338552909252822060058101549192909190036107e0575f80fd5b6005810154309085906107f4906001611df6565b6040516370a0823160e01b81526001600160a01b038316906370a0823190610820908690600401615a45565b602060405180830381865afa15801561083b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085f9190615a59565b11610868575f80fd5b600583015460405163a9059cbb60e01b81525f916001600160a01b0384169163a9059cbb9161089c91339190600401615a70565b6020604051808303815f875af11580156108b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108dc9190615a89565b9050806108e7575f80fd5b6012850154600a86015460058601546109009190611ddc565b600a870155601286015460058601546109199190611df6565b6012870155600f86018054905f61092f83615abc565b919050555061094685600701548660050154611ddc565b6007860155601085018054905f61095c83615abc565b909155505060058501546001600160a01b0389169033907f0473cea0c869cd9206172e89c1b89c3443b0eb817f538fda265714518a1f7ee09060018a01908b6109a58282611d86565b6040516109b59493929190615b85565b60405180910390a3600754610100900460ff166109dc576109dc8888838860050154611e0e565b50505f6005840155505042601190910155506109fd565b6109fd8282612055565b610a078282612584565b610a1060015f55565b5050565b610a1c611d2b565b6001546001600160a01b03163314610a32575f80fd5b6006545f03610a3f575f80fd5b5f8390505f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa49190615a59565b905060138110610ab2575f80fd5b5f8190505f836001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610af2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b199190810190615bb3565b905060028511610b27575f80fd5b600d8510610b33575f80fd5b5f610b49610b42604888611dbd565b601e611d86565b90505f610b598262015180615c27565b6001600160a01b038a165f9081526012602052604090206007810154919250908911610b83575f80fd5b80601001545f03610c3a5780546001600160a01b0319166001600160a01b038b1617815560018101610bb58582615c96565b50805460ff60a01b1916600160a01b17815560048101859055426010820155600880546001810182555f919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b038c166001600160a01b0319909116179055600281018890556003810182905560078101899055610c59565b6002810188905560038101829055610c53896001611df6565b60078201555b896001600160a01b0316336001600160a01b03167f1064303b5804f4dae580341f1a038044cf6d14a0bd3e69cb35c024a3012d4ce78a878d604051610ca093929190615d4b565b60405180910390a350505050505050610cb860015f55565b505050565b610cc5611d2b565b6001546001600160a01b03163314610cdb575f80fd5b6007805460ff19811660ff9091161517905560405133907f5cdc8979784f5e6e3c966605ded7c07eee9c5b28bc4f06371ddb3387fe45f395905f90a261036760015f55565b610d816040518061016001604052805f6001600160a01b0316815260200160608152602001606081526020015f151581526020015f81526020015f81526020015f81526020015f81526020015f151581526020015f81526020015f81525090565b610d8a82612652565b15610f46576001600160a01b038083165f9081526013602090815260408083208151610160810190925280549094168152600184018054939491939192840191610dd390615ad4565b80601f0160208091040260200160405190810160405280929190818152602001828054610dff90615ad4565b8015610e4a5780601f10610e2157610100808354040283529160200191610e4a565b820191905f5260205f20905b815481529060010190602001808311610e2d57829003601f168201915b50505050508152602001600282018054610e6390615ad4565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8f90615ad4565b8015610eda5780601f10610eb157610100808354040283529160200191610eda565b820191905f5260205f20905b815481529060010190602001808311610ebd57829003601f168201915b5050509183525050600382015460ff90811615156020830152600483015460408301526005830154606083015260068301546080830152600783015460a0830152600883015416151560c0820152600982015460e0820152600a90910154610100909101529392505050565b919050565b610f53611d2b565b333214610f5e575f80fd5b610f69838383612690565b610cb860015f55565b610f7a611d2b565b6001546001600160a01b03163314610f90575f80fd5b6007805461ff001981166101009182900460ff161590910217905560405133907ff1b421337c9065ba93bb6c018dc836db4f52a3a676958192e03573cacb1b2711905f90a261036760015f55565b6110b1604051806103a001604052805f151581526020015f6001600160a01b031681526020015f6001600160a01b03168152602001606081526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6110ba82612652565b156112c0576001600160a01b038084165f9081526015602090815260408083208685168452825280832081516103a081018352815460ff81161515825261010090048616938101939093526001810154909416908201526002830180549293919260608401919061112a90615ad4565b80601f016020809104026020016040519081016040528092919081815260200182805461115690615ad4565b80156111a15780601f10611178576101008083540402835291602001916111a1565b820191905f5260205f20905b81548152906001019060200180831161118457829003601f168201915b505050918352505060038201546020820152600482015460408201526005820154606082015260068201546080820152600782015460a0820152600882015460c0820152600982015460e0820152600a820154610100820152600b820154610120820152600c820154610140820152600d820154610160820152600e820154610180820152600f8201546101a082015260108201546101c082015260118201546101e08201526012820154610200820152601382015461022082015260148201546102408201526015820154610260820152601682015461028082015260178201546102a082015260188201546102c082015260198201546102e0820152601a820154610300820152601b909101546103209091015291506112c09050565b92915050565b6001600160a01b0381165f90815260096020526040902054606090806001600160401b038111156112f9576112f9615773565b60405190808252806020026020018201604052801561133257816020015b61131f614c37565b8152602001906001900390816113175790505b50915061133e83612652565b156113b0575f5b818110156113ae576001600160a01b0384165f908152600960205260409020805461138991908390811061137b5761137b615a31565b905f5260205f200154612cb9565b83828151811061139b5761139b615a31565b6020908102919091010152600101611345565b505b50919050565b611456604051806102c001604052805f6001600160a01b031681526020015f15158152602001606081526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6001600160a01b038281165f9081526012602090815260409182902082516102c08101845281549485168152600160a01b90940460ff1615159184019190915260018101805491928401916114aa90615ad4565b80601f01602080910402602001604051908101604052809291908181526020018280546114d690615ad4565b80156115215780601f106114f857610100808354040283529160200191611521565b820191905f5260205f20905b81548152906001019060200180831161150457829003601f168201915b505050505081526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f8201548152602001601082015481526020016011820154815260200160128201548152602001601382015481526020016014820154815250509050919050565b6001600160a01b0381165f908152600c60205260409020805460609190806001600160401b0381111561162457611624615773565b60405190808252806020026020018201604052801561164d578160200160208202803683370190505b50925061165984612652565b156113ae575f5b818110156116c75782818154811061167a5761167a615a31565b905f5260205f20015f9054906101000a90046001600160a01b03168482815181106116a7576116a7615a31565b6001600160a01b0390921660209283029190910190910152600101611660565b505050919050565b60606116da82612652565b15610f46576001600160a01b0382165f908152600b6020526040902054806001600160401b0381111561170f5761170f615773565b60405190808252806020026020018201604052801561174857816020015b611735614d3f565b81526020019060019003908161172d5790505b509150805b80156113ae576001600160a01b0384165f908152600b6020526040902061179790611779600184615d73565b8154811061178957611789615a31565b905f5260205f200154613016565b836117a28385615d73565b815181106117b2576117b2615a31565b6020026020010181905250806117c790615d86565b905061174d565b6117d6611d2b565b6107d881116117e3575f80fd5b5f600f836040516117f49190615db2565b908152604080516020928190038301902054335f90815260139093528183206001600160a01b03909116808452918320600482015492945090929091900361183d574260048301555b604080515f815260208101808352815190209161185f91600186019101615dbd565b60405160208183030381529060405280519060200120036119aa57600e8560405161188a9190615db2565b9081526040519081900360200190205460ff161561190a57600182016118b08682615c96565b50600582018490556001600160a01b0383165f908152600c60209081526040822080546001810182559083529082200180546001600160a01b031916331790556007820180549161190083615abc565b91905055506119c3565b6040805180820190915260118152700307830303030303030303030303030303607c1b602082015260018301906119419082615c96565b5060058201849055600180546001600160a01b03165f818152600c6020908152604080832080549586018155835281832090940180546001600160a01b03191633179055828252601390529182206007018054919261199f83615abc565b9190505550506119c3565b604051636565826960e11b815260040160405180910390fd5b600582015460405133917f08f307ec7b2d6ddc28a7af033c6ab81f8167b67a264cb624913c3ee1b769b882916119fd916001870191615e2e565b60405180910390a2505050610a1060015f55565b611a19611d2b565b6001600160a01b038316611a2b575f80fd5b815f03611a36575f80fd5b5f828152601160205260409020600f8101546001600160a01b03163314611a5b575f80fd5b60108101546001600160a01b03858116911614611a76575f80fd5b80600a01545f03611a9a57604051631189da5b60e11b815260040160405180910390fd5b60108101546001600160a01b03165f908152601560209081526040808320338452909152902060058201544210611b8d57611ad94283601f0154611df6565b6024830155600a820154600b830154611af29190611ddc565b60238301555f600a83015542601f830155600b8101546008830154611b179190611df6565b600b82015560128201546023830154611b309190611ddc565b60128301819055611b5890611b4e9068056bc75e2d63100000611d86565b8360080154611dbd565b6011830155600b82015415611b7d575f600b830155600c8201805460ff191660011790555b611b88858585613241565b611b98565b611b9885858561360d565b5050610cb860015f55565b6040805160018082528183019092526060919081816020015b611bc4614c37565b815260200190600190039081611bbc5790505091505f5b818110156113ae57611bf5611bf08286615e4f565b612cb9565b838281518110611c0757611c07615a31565b6020908102919091010152600101611bdb565b6060611c2583612652565b156112c0576001600160a01b0383165f908152600a6020526040902054828111611c4d578092505b826001600160401b03811115611c6557611c65615773565b604051908082528060200260200182016040528015611c9e57816020015b611c8b614ded565b815260200190600190039081611c835790505b509150825b8015611d23576001600160a01b0385165f908152600a60205260409020611cec90611cce8385615d73565b81548110611cde57611cde615a31565b905f5260205f200154613831565b83611cf78387615d73565b81518110611d0757611d07615a31565b602002602001018190525080611d1c90615d86565b9050611ca3565b505092915050565b60025f5403611d805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640160405180910390fd5b60025f55565b5f825f03611d9557505f6112c0565b5f611da08385615c27565b905082611dad8583615e76565b14611db6575f80fd5b9392505050565b5f815f03611dc9575f80fd5b5f611dd48385615e76565b949350505050565b5f80611de88385615e4f565b905083811015611db6575f80fd5b5f82821115611e03575f80fd5b5f611dd48385615d73565b60058054905f611e1d83615abc565b90915550506005546001600160a01b0385165f9081526012602081815260408084206015835281852033865283528185208686526016845294829020868155436002820155426003820155825180840190935293825271576974686472617720416666696c6961746560701b928201929092529092919030906006830190611ea59082615c96565b506007820180546001600160a01b038084166001600160a01b031992831617909255600884018054821633179055600984018054928c1692909116919091179055600a8201611ef76001860182615e89565b50600480850154600b840155600c83018990558201869055611f198689611d86565b6005830155600d808401546011808501829055601280860192909255918401889055600f84018990558501546010840155600383015490840154611f5d9190611df6565b60148301556040516370a0823160e01b815289906001600160a01b038216906370a0823190611f90908590600401615a45565b602060405180830381865afa158015611fab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fcf9190615a59565b601380850191909155335f90815260209190915260409020600a8101546005850154611ffb9190611ddc565b600a8201556001546001600160a01b0316330361201957600361201c565b60025b60ff166015909401939093555050335f908152600b60209081526040822080546001810182559083529120019390935550505050505050565b6001546001600160a01b031633811461206c575f80fd5b6001600160a01b0383165f9081526012602090815260408083206015835281842033855290925290912060058101541515806120ab5750601481015415155b806120b95750601581015415155b6120c1575f80fd5b601282015460058201548690309015612226576120e384600501546001611df6565b6040516370a0823160e01b81526001600160a01b038416906370a082319061210f908590600401615a45565b602060405180830381865afa15801561212a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061214e9190615a59565b11612157575f80fd5b600584015460405163a9059cbb60e01b81526001600160a01b0384169163a9059cbb91612188918a91600401615a70565b6020604051808303815f875af11580156121a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c89190615a89565b50600f85018054905f6121da83615abc565b91905055506121f185600a01548560050154611ddc565b600a8601556007840154600585015461220a9190611ddc565b6007850155601084018054905f61222083615abc565b91905055505b6014840154156123535761223f84601401546001611df6565b6040516370a0823160e01b81526001600160a01b038416906370a082319061226b908590600401615a45565b602060405180830381865afa158015612286573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122aa9190615a59565b116122b3575f80fd5b601484015460405163a9059cbb60e01b81526001600160a01b0384169163a9059cbb916122e4918a91600401615a70565b6020604051808303815f875af1158015612300573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123249190615a89565b5061233784601901548560140154611ddc565b6019850155601684018054905f61234d83615abc565b91905055505b6015840154156124805761236c84601501546001611df6565b6040516370a0823160e01b81526001600160a01b038416906370a0823190612398908590600401615a45565b602060405180830381865afa1580156123b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d79190615a59565b116123e0575f80fd5b601584015460405163a9059cbb60e01b81526001600160a01b0384169163a9059cbb91612411918a91600401615a70565b6020604051808303815f875af115801561242d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124519190615a89565b5061246484601a01548560150154611ddc565b601a850155601784018054905f61247a83615abc565b91905055505b5f6124a061249686600501548760140154611ddc565b8660150154611ddc565b90506124b0866012015482611df6565b6012870155601885018054905f6124c683615abc565b91905055506124d985601b015482611ddc565b601b86015560118501545f036124f0574260118601555b6001600160a01b038916337f0473cea0c869cd9206172e89c1b89c3443b0eb817f538fda265714518a1f7ee060018901848c61252c8282611d86565b60405161253c9493929190615b85565b60405180910390a3600754610100900460ff1661255f5761255f89898684611e0e565b50505f6005840181905560148401819055601584015550504260119091015550505050565b6001600160a01b0382165f90815260126020818152604080842060158352818520338652909252909220908201546125bc9084611d86565b6011830155600582018390554260148301556040516370a0823160e01b8152309085906001600160a01b038216906370a08231906125fe908590600401615a45565b602060405180830381865afa158015612619573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061263d9190615a59565b60139094019390935550600401919091555050565b6001545f906001600160a01b0383811691161415806112c057506001546001600160a01b0383811691161480156112c0575060075460ff1692915050565b6006545f0361269d575f80fd5b335f908152601060209081526040808320546009909252909120546126c3816001611ddc565b82146126cd575f80fd5b6001600160a01b0385165f8181526012602090815260408083203380855260138452828520958552601584528285209085529092528220909291879003612712575f80fd5b61272183600701546001611ddc565b61272f82600c015489611ddc565b10612738575f80fd5b81600401545f0361274a574260048301555b8254600160a01b900460ff166127735760405163259ba1ad60e01b815260040160405180910390fd5b6040516323b872dd60e01b81523360048201523060248201526044810188905288905f906001600160a01b038316906323b872dd906064016020604051808303815f875af11580156127c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127eb9190615a89565b9050806127f6575f80fd5b5050600382015460ff166129565760028054905f61281383615abc565b90915550506002545f908152600d602090815260409182902080546001600160a01b03191633179055426011840155905161284c910190565b60405160208183030381529060405280519060200120826001016040516020016128769190615dbd565b604051602081830303815290604052805190602001200361294e576040805180820190915260118152700307830303030303030303030303030303607c1b602082015260018301906128c89082615c96565b506107e860058301908155600180546001600160a01b03165f908152600c6020908152604080832080548086018255908452919092200180546001600160a01b03191633908117909155925490517f08f307ec7b2d6ddc28a7af033c6ab81f8167b67a264cb624913c3ee1b769b882926129459290870191615e2e565b60405180910390a25b612956613a9c565b5f82600101805461296690615ad4565b80601f016020809104026020016040519081016040528092919081815260200182805461299290615ad4565b80156129dd5780601f106129b4576101008083540402835291602001916129dd565b820191905f5260205f20905b8154815290600101906020018083116129c057829003601f168201915b505050505090505f600f826040516129f59190615db2565b9081526040805160209281900383019020546001600160a01b038d81165f9081526015855283812091909216808352935220600d810154600b8601546003549394509192909190158015612a5357506001546001600160a01b031633145b15612a5c575f91505b612a6a86600801548d611ddc565b6008870155600b860154612a7e908d611ddc565b600b870155600d860154612a92908d611ddc565b600d870155600c860154612aa6908d611ddc565b600c870155855460ff16612b345785546001600160a01b038e16610100026001600160a81b0319909116176001908117875586810180546001600160a01b03191633179055600489015460038801556002870190612b06908a0182615e89565b50600b88018054905f612b1883615abc565b9091555050600c88018054905f612b2e83615abc565b91905055505b600e86018054905f612b4583615abc565b9190505550612b5888600801548d611ddc565b60088901556012880154612b6c908d611ddc565b6012890155600d88018054905f612b8283615abc565b9091555050600687018054905f612b9883615abc565b909155505060038054905f612bac83615abc565b919050555060095f336001600160a01b03166001600160a01b031681526020019081526020015f20600354908060018154018082558091505060019003905f5260205f20015f90919091909150555f60115f60035481526020019081526020015f209050600354815f01819055504381600101819055508b81600d01819055508d816010015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060105f336001600160a01b03166001600160a01b031681526020019081526020015f208a81548110612c8857612c88615a31565b905f5260205f2001548160250181905550612ca98e838f8887600354613c99565b5050505050505050505050505050565b612cc1614c37565b5f60115f8481526020019081526020015f20604051806104c00160405290815f820154815260200160018201548152602001600282018054612d0290615ad4565b80601f0160208091040260200160405190810160405280929190818152602001828054612d2e90615ad4565b8015612d795780601f10612d5057610100808354040283529160200191612d79565b820191905f5260205f20905b815481529060010190602001808311612d5c57829003601f168201915b505050918352505060038201546020820152600482015460408201526005820154606082015260068201546080820152600782015460a0820152600882015460c0820152600982015460e0820152600a820154610100820152600b820154610120820152600c82015460ff161515610140820152600d820154610160820152600e820154610180820152600f8201546001600160a01b039081166101a08301526010830154166101c082015260118201546101e0820152601282015461020082015260138201805461022090920191612e5190615ad4565b80601f0160208091040260200160405190810160405280929190818152602001828054612e7d90615ad4565b8015612ec85780601f10612e9f57610100808354040283529160200191612ec8565b820191905f5260205f20905b815481529060010190602001808311612eab57829003601f168201915b50505050508152602001601482018054612ee190615ad4565b80601f0160208091040260200160405190810160405280929190818152602001828054612f0d90615ad4565b8015612f585780601f10612f2f57610100808354040283529160200191612f58565b820191905f5260205f20905b815481529060010190602001808311612f3b57829003601f168201915b505050505081526020016015820154815260200160168201548152602001601782015481526020016018820154815260200160198201548152602001601a8201548152602001601b8201548152602001601c8201548152602001601d8201548152602001601e8201548152602001601f82015481526020016020820154815260200160218201548152602001602282015481526020016023820154815260200160248201548152602001602582015481525050905080915050919050565b61301e614d3f565b5f60165f8481526020019081526020015f20604051806102c00160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805461308790615ad4565b80601f01602080910402602001604051908101604052809291908181526020018280546130b390615ad4565b80156130fe5780601f106130d5576101008083540402835291602001916130fe565b820191905f5260205f20905b8154815290600101906020018083116130e157829003601f168201915b505050918352505060078201546001600160a01b0390811660208301526008830154811660408301526009830154166060820152600a8201805460809092019161314790615ad4565b80601f016020809104026020016040519081016040528092919081815260200182805461317390615ad4565b80156131be5780601f10613195576101008083540402835291602001916131be565b820191905f5260205f20905b8154815290600101906020018083116131a157829003601f168201915b5050509183525050600b8201546020820152600c8201546040820152600d8201546060820152600e8201546080820152600f82015460a0820152601082015460c0820152601182015460e0820152601282015461010082015260138201546101208201526014820154610140820152601590910154610160909101529392505050565b5f82815260116020908152604080832060108101546001600160a01b031684526012835281842060158452828520338652909352922060238301543090879061328b906001611df6565b6040516370a0823160e01b81526001600160a01b038316906370a08231906132b7908690600401615a45565b602060405180830381865afa1580156132d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f69190615a59565b116132ff575f80fd5b600f850154602386015460405163a9059cbb60e01b81525f926001600160a01b038086169363a9059cbb9361333a9390921691600401615a70565b6020604051808303815f875af1158015613356573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061337a9190615a89565b905080613385575f80fd5b602386018054602088018190555f9091556012860154906133a7908290611df6565b6012870155600986015460208801546133c09190611ddc565b6009870155600e86018054905f6133d683615abc565b9091555050600d850154600986015460208901546133f49190611ddc565b6009870155600d860154602089015461340d9190611df6565b600d870155600c86015460208901546134269190611df6565b600c870155601f8801546011870155600f86018054905f61344683615abc565b91905055505f61345a89602001548b611d86565b905061346a89600e015482611ddc565b600e8a0155602289018054905f61348083615abc565b919050555061349787600a01548a60200154611df6565b87600a018190555088600a01545f03613566578989602101819055505f6134c66104518b60080154600c611d86565b600c8b015490915060ff166134ea576134e76104518b60080154601c611d86565b90505b87600a01545f0361353c575f600c8901819055600d8901819055885460ff19168955600b8a0180549161351c83615d86565b9091555050600c89018054905f61353283615d86565b9190505550613564565b61354a88600c015482611df6565b600c890155600d88015461355e9082611df6565b600d8901555b505b6135708c8b612584565b886010015f9054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b03167fe61cf6f28402bca96222f82fc42ee9a4ba5a2f91f39b9baa8743d6be88a856f48b5f01548c6002018d602001548f876040516135db959493929190615f49565b60405180910390a3600754610100900460ff166135ff576135ff8c8c85858e613f8b565b505050505050505050505050565b5f828152601160205260409020601f81015461362a904290611df6565b81602401819055505f61364861045183600801548460070154611d86565b90505f61365c61049c838560240154611d86565b90505f61366e8460080154600a611dbd565b90505f805f838510156136815784613683565b835b925086600a0154831015613697578261369d565b86600a01545b91506136ad87600a015483611df6565b600a880155600b870154156136e457600c8701805460ff19166001179055600b8701546136da9083611ddc565b60238801556136ec565b602387018290555b335f908152601360205260408120600b890182905542601f8a0155600889015490919061371e9061045190600c611d86565b90505f6137336104518b600801546010611d86565b8a546040519192509061374890602001615f7e565b60405160208183030381529060405280519060200120846001016040516020016137729190615dbd565b604051602081830303815290604052805190602001201480156137ba5750335f90815260096020526040812080548392906137af576137af615a31565b905f5260205f200154145b6137de576137d96137cf8c6008015485611df6565b8c600a0154611df6565b6137f8565b6137f86137cf6137f28d6008015486611df6565b84611df6565b945061381a6138108668056bc75e2d63100000611d86565b8c60080154611dbd565b60118c015560128b01859055612ca98e8e8e613241565b613839614ded565b60145f8381526020019081526020015f20604051806103a00160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820180546138c990615ad4565b80601f01602080910402602001604051908101604052809291908181526020018280546138f590615ad4565b80156139405780601f1061391757610100808354040283529160200191613940565b820191905f5260205f20905b81548152906001019060200180831161392357829003601f168201915b5050509183525050600b8201546001600160a01b039081166020830152600c83015481166040830152600d830154166060820152600e8201805460809092019161398990615ad4565b80601f01602080910402602001604051908101604052809291908181526020018280546139b590615ad4565b8015613a005780601f106139d757610100808354040283529160200191613a00565b820191905f5260205f20905b8154815290600101906020018083116139e357829003601f168201915b50505050508152602001600f820154815260200160108201548152602001601182015481526020016012820154815260200160138201548152602001601482015481526020016015820154815260200160168201548152602001601782015481526020016018820154815260200160198201548152602001601a8201548152602001601b8201548152602001601c820154815250509050919050565b60408051600f8082528183019092525f908260208201818036833750506040805160108082528183019092529293505f929150602082018180368337019050505060408051808201909152601081526f0616263646566313233343536373839360841b602082015290505f5b83811015613b6c575f613b1c6010836141bc565b9050828181518110613b3057613b30615a31565b602001015160f81c60f81b848381518110613b4d57613b4d615a31565b60200101906001600160f81b03191690815f1a90535050600101613b08565b506040805180820182526002815261060f60f31b602080830191909152915184925f91613b9d918491869101615f9b565b6040516020818303038152906040529050600e81604051613bbe9190615db2565b9081526040519081900360200190205460ff1615613bef576040516319f9adeb60e31b815260040160405180910390fd5b335f90815260136020526040902060028101613c0b8382615c96565b5080546001600160a01b03191633178155604051600190600e90613c30908590615db2565b908152604051908190036020018120805492151560ff19909316929092179091553390600f90613c61908590615db2565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905550505050505050565b5f613ca48686611ddc565b5f83815260116020526040812091925090613cc3610451600289611d86565b601e8201555f889003613d3457868510613cf65760016019820155613cec610451600a89611d86565b601a820155613dc8565b60026019820155613d0b610451600a87611d86565b601a820155613d1a8786611df6565b9150613d2a610451600a84611d86565b601b820155613dc8565b848810613d5657600360198201555f601a820155613d2a610451600a89611d86565b848311613d785760046019820155613d72610451600a89611d86565b601a8201555b84831115613dc857600560198201555f613d92868a611df6565b9050613da2610451600a83611d86565b601a830155613db18487611df6565b9250613dc1610451600a85611d86565b601b830155505b6001546001600160a01b038a81165f9081526015602090815260408083208b85168452909152902060050154601a8401549190921691613e0791611ddc565b6001600160a01b038b81165f908152601560209081526040808320938c16835292905220600581019190915560060154601a830154613e469190611ddc565b6001600160a01b038b81165f9081526015602090815260408083208c851684529091528082206006019390935590831681522060120154601e830154613e8c9190611ddc565b6001600160a01b038b81165f908152601560209081526040808320938616835292905220601281019190915560130154601b830154613ecb9190611ddc565b6001600160a01b038b81165f908152601560209081526040808320938616835292905220601381019190915560140154601e830154613f0a9190611ddc565b6001600160a01b038b81165f908152601560208181526040808420948716845293905291902060148101929092550154601b830154613f499190611ddc565b6001600160a01b03808c165f90815260156020818152604080842094871684529390529190200155613f7f8a878b8b888a61421a565b50505050505050505050565b5f84815260116020908152604080832060108101546001600160a01b03168452601283528184206015845282852033865290935290832060058054929491923092909190613fd883615abc565b90915550506005545f81815260166020908152604091829020838155875460018201554360028201558251808401909352600e83526d2bb4ba34323930bb902a37b5b2b760911b918301919091529060068201906140369082615c96565b506007810180546001600160a01b038086166001600160a01b031992831617909255600883018054821633179055600983018054928e1692909116919091179055600a81016140886001870182615e89565b50600480860154600b83015560208701805491830191909155426003830155600a87015490546140b89190611ddc565b600d80830191909155600a870154600e830155600f82018a90556012808701546010840155601183018a9055908501549082015560248601546014820155600c8101879055602086015461410c9088611d86565b6005820155600160158201556040516370a0823160e01b81528b905f906001600160a01b038316906370a0823190614148908890600401615a45565b602060405180830381865afa158015614163573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141879190615a59565b6013909301929092555050335f908152600b602090815260408220805460018101825590835291200155505050505050505050565b5f82424433856040516020016141f89493929190938452602084019290925260601b6001600160601b0319166040830152605482015260740190565b604051602081830303815290604052805190602001205f1c611db69190615faf565b5f614229610451856048611d86565b90505f61423a610451866010611d86565b5f8481526011602090815260408083206001600160a01b03808e1685526012845282852033865260138552948390206001549351969750919591939216916142829101615f7e565b60405160208183030381529060405280519060200120826001016040516020016142ac9190615dbd565b604051602081830303815290604052805190602001201480156142d45750600382015460ff16155b806142df5750866001145b15614393576142f284601b015486611ddc565b601b8501556001600160a01b03808d165f908152601560209081526040808320938516835292905220601301546143299086611ddc565b6001600160a01b038d81165f9081526015602081815260408084209487168452939052919020601381019290925501546143639086611ddc565b6001600160a01b03808e165f90815260156020818152604080842094871684529390529181209091019190915594505b600382015460ff166143af5760038201805460ff191660011790555b5f6143be428560030154611ddc565b600886018b9055601786018b90556005860181905560038501546006870155600f860180546001600160a01b031916331790559050600285016144046001860182615e89565b50600a8501879055600b8501869055601385016144246002850182615e89565b5042601f86015560028401546007860155601485016144466001850182615e89565b5060048085015460038701554290860155601585018c9055601685018b9055601885018990556008850154600d8601546144809190611d86565b6009860155601a850154156144b9576144b36144a986601a015468056bc75e2d63100000611d86565b8660080154611dbd565b601c8601555b601b850154156144e3576144dd6144a986601b015468056bc75e2d63100000611d86565b601d8601555b60108501546001600160a01b03165f9081526015602090815260408083203384529091529020600a908101549086015461452a9161452091611ddc565b86600b0154611ddc565b6010860180546001600160a01b039081165f90815260156020908152604080832033808552925291829020600a01949094559154885460088a0154600d8b015460098c015495519390941695947fe86df417b87cf1098c6fd2bbdf3d1112b3f97a461ba47d6018e091a24710f48d946145a99460028e01939290615f49565b60405180910390a36145c383600901548660090154611ddc565b600984015560088301805460ff191690556010850154600d8601546145f1916001600160a01b031690612584565b600754610100900460ff16614628576146148d8986601201548760130154614637565b6146288d8986601201548760130154614924565b50505050505050505050505050565b5f838152601160205260409020601a8101541561491d57335f90815260136020526040812060018101805491929161466e90615ad4565b80601f016020809104026020016040519081016040528092919081815260200182805461469a90615ad4565b80156146e55780601f106146bc576101008083540402835291602001916146e5565b820191905f5260205f20905b8154815290600101906020018083116146c857829003601f168201915b505050505090505f600f826040516146fd9190615db2565b90815260405190819003602001902054600480546001600160a01b0390921692505f61472883615abc565b90915550506004545f81815260146020908152604091829020838155875460018083019190915588015460028201554260038201558251808401909352600f83526e416666696c6961746520426f6e757360881b9183019190915290600a8201906147939082615c96565b50600b81018054336001600160a01b031991821617909155600c8201805482166001600160a01b0386811691909117909155600d83018054909216908c16179055600e81016147e56002880182615e89565b506003860154600f8201556007808701546011830155600880880154601384015560168089015460128501556018808a01546014860155601a8a0154600486018190556015808c015481880155601e8c01546009880155601b8c01549487019490945560198b015492860192909255601c8a01546006860155601d8a0154938501939093556001600160a01b03808e165f90815260209384526040808220928916825291909352909120600501549183018290556148a39190611df6565b6017820155600d86015460108201819055601a8701546148c39190611d86565b60058201556001601c82015560088601546148df908990611df6565b6019820155601a8101889055601b018690556001600160a01b039091165f908152600a60209081526040822080546001810182559083529120015550505b5050505050565b5f8381526011602052604081206001546004805492936001600160a01b03909216929161495083615abc565b90915550506004545f81815260146020526040812091825583546001808401919091558401546002830155426003830155601b84015490036149c55760408051808201909152600681526546656520322560d01b6020820152600a8201906149b89082615c96565b506002601c820155614a74565b604080518082019091526015815274466565203225202b204e6f7420456c696769626c6560581b6020820152600a820190614a009082615c96565b506003601c8201556008830154614a1890600a611dbd565b614a2784601b01546001611df6565b10614a7457604080518082019091526019815278466565203225202b20576974686f757420436173686261636b60381b6020820152600a820190614a6b9082615c96565b506004601c8201555b600b810180546001600160a01b03199081163317909155600154600c8301805483166001600160a01b03928316179055600d83018054918a1691909216179055600e8101614ac56002850182615e89565b506003830154600f820155600780840154601183015560088085015460138401556016808601546012850155601886015460148086019190915560158088015481870155601988015492860192909255601a8701546004860155601e8701546009860155601b87015492850192909255601c8601546006850155601d860154928401929092556001600160a01b038981165f9081526020848152604080832093881683529290522090810154910154614b7e9190611ddc565b601882018190556009820154614ba191614b9791611df6565b8260080154611df6565b60178201556008830154614bb6908690611df6565b6019820155601a8101859055601b808201859055600d8401546010830155601e840154908401545f91614be891611ddc565b9050614bf884600d015482611d86565b600590920191909155506001600160a01b03165f908152600a602090815260408220600454815460018101835591845291909220909101555050505050565b604051806104c001604052805f81526020015f8152602001606081526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581526020015f81526020015f81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f815260200160608152602001606081526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806102c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f8152602001606081526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b03168152602001606081526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806103a001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f8152602001606081526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b03168152602001606081526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6001600160a01b03169052565b602080825282518282018190525f918401906040840190835b81811015614f125783516001600160a01b0316835260209384019390920191600101614eeb565b509095945050505050565b5f60208284031215614f2d575f80fd5b5035919050565b80356001600160a01b0381168114610f46575f80fd5b5f8060408385031215614f5b575f80fd5b614f6483614f34565b946020939093013593505050565b5f805f60608486031215614f84575f80fd5b614f8d84614f34565b95602085013595506040909401359392505050565b5f60208284031215614fb2575f80fd5b611db682614f34565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60208152614ffb602082018351614ec5565b5f60208301516101606040840152615017610180840182614fbb565b90506040840151601f198483030160608501526150348282614fbb565b915050606084015161504a608085018215159052565b50608084015160a084015260a084015160c084015260c084015160e084015260e084015161010084015261010084015161508961012085018215159052565b506101208401516101408401526101408401516101608401528091505092915050565b5f80604083850312156150bd575f80fd5b6150c683614f34565b91506150d460208401614f34565b90509250929050565b602081526150f060208201835115159052565b5f60208301516151036040840182614ec5565b5060408301516151166060840182614ec5565b5060608301516103a060808401526151326103c0840182614fbb565b9050608084015160a084015260a084015160c084015260c084015160e084015260e08401516101008401526101008401516101208401526101208401516101408401526101408401516101608401526101608401516101808401526101808401516101a08401526101a08401516101c08401526101c08401516101e08401526101e08401516102008401526102008401516102208401526102208401516102408401526102408401516102608401526102608401516102808401526102808401516102a08401526102a08401516102c08401526102c08401516102e08401526102e08401516103008401526103008401516103208401526103208401516103408401526103408401516103608401526103608401516103808401526103808401516103a08401528091505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156154b957603f198786030184528151805186526020810151602087015260408101516104c060408801526152c56104c0880182614fbb565b9050606082015160608801526080820151608088015260a082015160a088015260c082015160c088015260e082015160e088015261010082015161010088015261012082015161012088015261014082015161014088015261016082015161016088015261018082015161533e61018089018215159052565b506101a08201516101a08801526101c08201516101c08801526101e082015161536b6101e0890182614ec5565b50610200820151615380610200890182614ec5565b506102208201516102208801526102408201516102408801526102608201518782036102608901526153b28282614fbb565b9150506102808201518782036102808901526153ce8282614fbb565b9150506102a08201516102a08801526102c08201516102c08801526102e08201516102e08801526103008201516103008801526103208201516103208801526103408201516103408801526103608201516103608801526103808201516103808801526103a08201516103a08801526103c08201516103c08801526103e08201516103e08801526104008201516104008801526104208201516104208801526104408201516104408801526104608201516104608801526104808201516104808801526104a08201516104a08801528096505050602082019150602084019350600181019050615289565b50929695505050505050565b602081526154d7602082018351614ec5565b5f60208301516154eb604084018215159052565b5060408301516102c060608401526155076102e0840182614fbb565b905060608401516080840152608084015160a084015260a084015160c084015260c084015160e084015260e08401516101008401526101008401516101208401526101208401516101408401526101408401516101608401526101608401516101808401526101808401516101a08401526101a08401516101c08401526101c08401516101e08401526101e08401516102008401526102008401516102208401526102208401516102408401526102408401516102608401526102608401516102808401526102808401516102a08401526102a08401516102c08401528091505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156154b957603f198786030184528151805186526020810151602087015260408101516040870152606081015160608701526080810151608087015260a081015160a087015260c08101516102c060c08801526156786102c0880182614fbb565b905060e082015161568c60e0890182614ec5565b506101008201516156a1610100890182614ec5565b506101208201516156b6610120890182614ec5565b506101408201518782036101408901526156d08282614fbb565b9150506101608201516101608801526101808201516101808801526101a08201516101a08801526101c08201516101c08801526101e08201516101e08801526102008201516102008801526102208201516102208801526102408201516102408801526102608201516102608801526102808201516102808801526102a08201516102a08801528096505050602082019150602084019350600181019050615614565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156157af576157af615773565b604052919050565b5f6001600160401b038211156157cf576157cf615773565b50601f01601f191660200190565b5f80604083850312156157ee575f80fd5b82356001600160401b03811115615803575f80fd5b8301601f81018513615813575f80fd5b8035615826615821826157b7565b615787565b81815286602083850101111561583a575f80fd5b816020840160208301375f6020928201830152969401359450505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156154b957603f198786030184528151805186526020810151602087015260408101516040870152606081015160608701526080810151608087015260a081015160a087015260c081015160c087015260e081015160e08701526101008101516101008701526101208101516101208701526101408101516103a06101408801526159106103a0880182614fbb565b9050610160820151615926610160890182614ec5565b5061018082015161593b610180890182614ec5565b506101a08201516159506101a0890182614ec5565b506101c08201518782036101c089015261596a8282614fbb565b9150506101e08201516101e08801526102008201516102008801526102208201516102208801526102408201516102408801526102608201516102608801526102808201516102808801526102a08201516102a08801526102c08201516102c08801526102e08201516102e0880152610300820151610300880152610320820151610320880152610340820151610340880152610360820151610360880152610380820151610380880152809650505060208201915060208401935060018101905061587e565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b0391909116815260200190565b5f60208284031215615a69575f80fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b5f60208284031215615a99575f80fd5b81518015158114611db6575f80fd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201615acd57615acd615aa8565b5060010190565b600181811c90821680615ae857607f821691505b6020821081036113b057634e487b7160e01b5f52602260045260245ffd5b5f8154615b1281615ad4565b808552600182168015615b2c5760018114615b4857615b7c565b60ff1983166020870152602082151560051b8701019350615b7c565b845f5260205f205f5b83811015615b735781546020828a010152600182019150602081019050615b51565b87016020019450505b50505092915050565b608081525f615b976080830187615b06565b6020830195909552506040810192909252606090910152919050565b5f60208284031215615bc3575f80fd5b81516001600160401b03811115615bd8575f80fd5b8201601f81018413615be8575f80fd5b8051615bf6615821826157b7565b818152856020838501011115615c0a575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b80820281158282048414176112c0576112c0615aa8565b601f821115610cb857805f5260205f20601f840160051c81016020851015615c635750805b601f840160051c820191505b8181101561491d575f8155600101615c6f565b5f19600383901b1c191660019190911b1790565b81516001600160401b03811115615caf57615caf615773565b615cc381615cbd8454615ad4565b84615c3e565b6020601f821160018114615cf0575f8315615cde5750848201515b615ce88482615c82565b85555061491d565b5f84815260208120601f198516915b82811015615d1f5787850151825560209485019460019092019101615cff565b5084821015615d3c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b838152606060208201525f615d636060830185614fbb565b9050826040830152949350505050565b818103818111156112c0576112c0615aa8565b5f81615d9457615d94615aa8565b505f190190565b5f81518060208401855e5f93019283525090919050565b5f611db68284615d9b565b5f808354615dca81615ad4565b600182168015615de15760018114615df657615e23565b60ff1983168652811515820286019350615e23565b865f5260205f205f5b83811015615e1b57815488820152600190910190602001615dff565b505081860193505b509195945050505050565b604081525f615e406040830185615b06565b90508260208301529392505050565b808201808211156112c0576112c0615aa8565b634e487b7160e01b5f52601260045260245ffd5b5f82615e8457615e84615e62565b500490565b818103615e94575050565b615e9e8254615ad4565b6001600160401b03811115615eb557615eb5615773565b615ec381615cbd8454615ad4565b5f601f821160018114615ee6575f8315615cde575084820154615ce88482615c82565b5f8581526020808220868352908220601f198616925b83811015615f1c5782860154825560019586019590910190602001615efc565b5085831015615f3957818501545f19600388901b60f8161c191681555b5050505050600190811b01905550565b85815260a060208201525f615f6160a0830187615b06565b604083019590955250606081019290925260809091015292915050565b700307830303030303030303030303030303607c1b815260110190565b5f611dd4615fa98386615d9b565b84615d9b565b5f82615fbd57615fbd615e62565b50069056fea264697066735822122074ce8749e601a1515ed98edffd627fbbc47c95beab6ca332816f760edff5fce364736f6c634300081a0033
Verified Source Code Full Match
Compiler: v0.8.26+commit.8a97fa7a
EVM: cancun
Optimization: Yes (28 runs)
holdplatform.sol 2172 lines
/// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
import "./openzeppelin/security/ReentrancyGuard.sol";
import "./interfaces/ERC20Interface.sol";
/* import "./openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
⫸ This function is not used because it exceeds 24,576 bytes.
*/
/**
██ ██ ██████ ██ ██████ ██████ ██ █████ ████████ ███████ ██████ ██████ ███ ███ ██ ██ ██████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ████ ██ ██ ██
███████ ██ ██ ██ ██ ██ ██████ ██ ███████ ██ █████ ██ ██ ██████ ██ ████ ██ ██ ██ █████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ██████ ███████ ██████ ██ ███████ ██ ██ ██ ██ ██████ ██ ██ ██ ██ ████ ███████
⫸⫸⫸ https://holdplatform.com
**/
// -----------------------------------------
// ✦✦✦ Mainnet - Holdplatform V2
// -----------------------------------------
// Dec-29-2024 11:08:59 AM +UTC
// -----------------------------------------
// ✦ Disclaimer
// -----------------------------------------
/*
By accessing this website address you are deemed to have read,
understood and agreed to all terms and conditions that have been written on
the Holdplatform.com website. For information, Holdplatform.com is not an
investment business, but a decentralized application, which is more likely
to be regarded as speculation. You must know, that every investment or
speculation always has two inseparable sides, namely potential and risk.
So, learn and understand all the potentials and risks, because brilliant
results in the past or at present are not a sure guarantee that in the
future they will still produce the same thing. Of course, the results can
be more or less. Depending on various factors that influence it.
Holdplatform.com never guarantees the accuracy of the results you will
get in the future. Nothing is certain in this world. The only certainty
is that we have tried to provide the best through the decentralized
application we made with the Ethereum network. Holdplatform.com never
forces you to join or do a Hold token on our platform, because all the
processes have been carried out on your own with full awareness. You can
only hold a token after agreeing to all the disclaimers written on this
website. Holdplatform.com is not responsible for any losses and damage
that occur in the future caused by disruptions, inaccuracies, errors, or
negligence caused by various factors such as: hacking, changes in market
conditions, economic conditions or changes in the laws in a country, and
unexpected things that can directly or indirectly affect the existence of
Holdplatform.com. If you are a beginner, we strongly recommend consulting
in advance with financial experts or people who are more experienced in
the field of blockchain. So, before you participate in Holdplatform.com,
We remind you that: Never spend money you cannot afford to lose, be wise
in making an investment or speculation. Once again, Holdplatform.com never
gives a guarantee that you will become a super-rich tomorrow. Because each
person has a different business, effort, and persistence. so, NO WARRANTY
everyone will get the same thing. The results could be more, could be less,
could have been profitable, could have been a loss. We have as much as
possible provided the best platform to help your welfare.
So, everything really depends on your action!
*/
// -----------------------------------------
// ✦ Why should you join HoldPlatform V2 ?
// -----------------------------------------
/**
1.Thousands of Web2 businesses have weaknesses due to their centralized nature,
where the owner can suddenly change the rules of the system, which of course, harms the users.
2.The majority of businesses only last 1-2 years, so why should we work hard or even smart to develop them?
3.Inflation is very real, reaching up to 12% in a year. This quickly erodes a person's wealth in an almost invisible way.
4. Starting any business, whether offline or online, makes it very difficult to break even. Even if it's possible,
it takes a very long time. On Holdplatform.com, your capital will return 88% within just 1 year with a 6% monthly unlock rate.
5. Holdplatform is the best place for you to practice DCA (Dollar Cost Averaging) in Bitcoin.
In addition to increasing your Bitcoin holdings, you can also run its affiliate business.
6. The founder has the best experience in affiliate marketing across various businesses since 2009 and
wants to help you succeed in affiliate marketing because becoming an affiliate is the best way to make money.
7. The bank uses a Fractional Reserve Banking system with a 1:10 ratio,
meaning that for every $10,000 of your money, up to $9,000 has been used for loans and other purposes.
The Holdplatform is open-source, and 88% of your token is safe. The deployer cannot touch or use your token.
✦✦✦✦✦✦✦
There are only two choices right now: either the value of your fiat wealth decreases by 12% due to inflation,
or your WBTC decreases by 12% on Holdplatform. However, with the potential for unlimited affiliate bonuses
and, of course, the likely increase in BTC prices, which will surely be more than 12% in the coming time,
✦ Holdplatform offers a better opportunity.
*/
// -----------------------------------------
// ✦ I'd rather keep my WBTC myself.
// -----------------------------------------
/**
1. If you have less than 0.1 BTC, it is highly discouraged to keep it yourself. It won't make you rich.
2. If people can keep their money themselves, why do so many store it in banks?
3. If everyone can cook, why do so many people go to restaurants where it's 50% more expensive than cooking at home?
4. If water at home is cheap, or even free, why do so many people buy bottled water at the convenience store?
✦✦✦✦
Because for some people, keeping money in a bank, eating at a restaurant, and drinking bottled water are better options.
Similarly, Holdplatform is the best way to protect against inflation and start an affiliate business with minimal risk,
as Holdplatform uses WEB3, which is, of course, more transparent and much safer than WEB2 businesses.
*/
// -----------------------------------------
// ✦ How the system works
// -----------------------------------------
/**
-----------------------
••• Deployment phase
-----------------------
1. The deployer performs the deployment on Remix on the chain being used
2. The constructor will automatically create the data for the first time for the msg.sender as the deployer.
3. The data includes : _idnumber, _holdstatus_bycashbackcode, _searchaddress_bycashbackcode, readdata
4. In addition, it also stores deployer data, which consists of mapping(address => User) private _user
5. Contains permanent data : u.useraddress, u.cashbackcode, u.affiliateid, u.status, u.unixregister, u.firsttimebuybitcoin
-----------------------
••• Launch phase
-----------------------
1. The deployer must press the write button for the (Start) function, which will automatically change 0 to the block.timestamp data, and the Dapps can be used.
2. Once the launch unixtime is successfully updated, it cannot be undone, paused, or even stopped. The smart contract will run forever
-----------------------
••• Add Contract
-----------------------
1. Unlike Uniswap, where all users can input the contract address being used, on the Holdplatform, only the deployer can add a new contract address.
2. The deployer add at least one contract address that can be used permanently. This cannot be paused or stopped.
3. As an example, the deployer will add the WBTC (Wrapped Bitcoin) token with three important parameters.
4. The parameters are the contract address, maximum contribution, and the percentage of unlocked tokens per month.
5. Although the percentage is calculated monthly, in reality, the system calculates it per second
6. And it can be withdrawn at any time with a maximum accumulation of 10% (if the contract duration has not yet ended).
7. If the contract duration has ended, then when the user presses the withdraw button, all tokens will be unlocked and sent.
8. The data that can be updated for the next hold are the percentage of tokens unlocked per month and the maximum contribution amount.
9. Updates do not apply retroactively and will not change the conditions for existing users who have already held tokens.
10. The unlock percentage can be changed to a range of 3-12% per month.
11. For the maximum contribution, it must be greater than the previous maximum contribution amount.
12. Creating or updating the maximum contribution must include the token amount in decimals. For example, 100 tokens with 8 decimals should be written as 10000000000
-----------------------
••• Holdplatform
-----------------------
1. To participate in holdplatform.com, users must Sign the Disclaimer, and this agreement is recorded on the blockchain.
2. To participate in locking tokens on the Holdplatform, users can use a cashback code from an inviter or choose not to use a cashback code at all.
3. Users who use a cashback code will receive a 16% cashback from the total tokens locked, both for the first token lock and subsequent token locks.
4. Users who do not use a cashback code will not receive a 16% cashback from the total tokens locked for the first token lock.
5. However, for the second and subsequent token locks, they will still receive the cashback. The 16% cashback can be withdrawn immediately, even after just 1 second.
6. Token distribution system: 2% for the deployer, 10% for affiliates, 16% for user cashback, and 72% will be locked for several months based on the specified percentage.
7. Users who do not use a cashback code will have the 16% tokens marked as not eligible, and they will be added to the deployer's balance.
-----------------------
••• Example
-----------------------
For example, the system currently has the WBTC (Wrapped Bitcoin) contract address registered with a
Max Contribution of 0.1 BTC, or with decimals as 10,000,000, and an unlock percentage of 6% per month.
Someone is holding tokens and has already saved a cashback code.
This user locked 0.1 BTC at the unixtime 1723691458 (Thu Aug 15 2024 03:10:58 GMT) Then the result is :
- One second after making the deposit,
the user can withdraw the 16% x 0.1 WBTC cashback at unixtime 1723691459 (Thu Aug 15 2024 03:10:59 GMT) --- > 0.016 WBTC
- One second after making the deposit,
the affiliate can withdraw the 10% x 0.1 WBTC cashback at unixtime 1723691459 (Thu Aug 15 2024 03:10:59 GMT) --- > 0.01 WBTC
- One second after making the deposit,
the deployer can withdraw the 2% x 0.1 WBTC cashback at unixtime 1723691459 (Thu Aug 15 2024 03:10:59 GMT) --- > 0.002 WBTC
72% of the tokens (0.072 WBTC) will be locked for 12 months (31,104,000 seconds),
and the tokens will unlock every second at a rate of 6% per month, 0.2% per day, or 0.00833% per hour.
The user can leave the tokens locked. If at any time the user wishes to withdraw,
they can accumulate up to a maximum of 10% if the contract duration has not yet ended.
If the contract duration has ended at the unixtime 1754795458 (Sun Aug 10 2025 03:10:58 GMT), the user can withdraw everything.
-----------------------------------
••• Holdplatform Affiliate System
-----------------------------------
By making a token deposit on the Holdplatform at least once, with any amount, your cashback code becomes active and can be used for promotion
Make sure you have made a deposit with the maximum amount specified by the max contribution.
This way, if any of your referrals make a deposit, you can receive the full 10% bonus.
✦ Holdplatform uses ACS (Anti Cheat System).
It is not possible for account-1 to make a small deposit and then account-2 to make a large deposit,
as the referral bonus calculation is based on 10% x Bonus Parameter.
✦ What is Bonus Parameter ?
The bonus parameter is the reference used to measure the affiliate bonus you can receive, up to 10%.
The bonus parameter is calculated based on the amount of your token deposit that has not yet been withdrawn.
You are free to withdraw the tokens you hold, but keep in mind that every time you withdraw the tokens you hold,
your bonus parameter decreases. The bonus parameter can increase again up to the max contribution if you deposit again up to the maximum.
⫸⫸⫸ Withdrawing tokens reduces the bonus parameter.
⫸⫸⫸ Withdrawing the affiliate bonus does not reduce the bonus parameter.
Here is the detailed bonus calculation :
✦ Bonus Type 1
⁎ Example : Your Deposit 0.05 BTC == > Your Bonus Paramater 0.05 BTC --- Referral OLD Contribution = 0 BTC, Referral NEW Contribution 0.05 BTC
-- if ( Referral_OldContribution == 0 && Your_BonusParameter >= Referral_NewContribution )
-- Affiliate Bonus = 10% x Referral_NewContribution
-- Not Eligible = 0%
✦ Bonus Type 2
⁎ Example : Your Deposit 0.05 BTC == > Your Bonus Paramater 0.05 BTC --- Referral OLD Contribution = 0 BTC, Referral NEW Contribution 0.09 BTC
-- if ( Referral_OldContribution == 0 && Your_BonusParameter < Referral_NewContribution )
-- Affiliate Bonus = 10% x Your_BonusParameter
-- Not Eligible = 10% x ( Referral_NewContribution - Your_BonusParameter )
✦ Bonus Type 3
⁎ Example : Your Deposit 0.05 BTC == > Your Bonus Paramater 0.05 BTC --- Referral OLD Contribution = 0.06 BTC, Referral NEW Contribution 0.04 BTC
-- if ( Referral_OldContribution > Your_BonusParameter )
-- Affiliate Bonus = 0%
-- Not Eligible = 10% x Referral_NewContribution
✦ Bonus Type 4
⁎ Example : Your Deposit 0.05 BTC == > Your Bonus Paramater 0.05 BTC --- Referral OLD Contribution = 0.02 BTC, Referral NEW Contribution 0.02 BTC
-- if ( Referral_OldContribution > 0 && AllContribution <= Your_BonusParameter)
-- Affiliate Bonus = 10% x Referral_NewContribution
-- Not Eligible = 0%
✦ Bonus Type 5
⁎ Example : Your Deposit 0.05 BTC == > Your Bonus Paramater 0.05 BTC --- Referral OLD Contribution = 0.02 BTC, Referral NEW Contribution 0.08 BTC
-- if ( Referral_OldContribution > 0 && AllContribution > Your_BonusParameter )
-- Affiliate Bonus = 10% x ( Your_BonusParameter - Referral_OldContribution )
-- Not Eligible = 10% x ( AllContribution - Your_BonusParameter )
-----------------------
••• Withdraw
-----------------------
1. Anyone who has stored tokens can perform a partial withdrawal or withdraw everything when the contract ends.
2. A referrer can withdraw the affiliate bonus they have received from the combined total of all bonuses they have received, at any time!
3. The deployer can withdraw the 2% Holdplatform fee and the percentage that is not eligible at any time.
-----------------------
••• Best Practice
-----------------------
- Deposit as much as you can up to the maximum contribution. To ensure that your bonus parameters do not decrease,
do not withdraw tokens from your deposit. Instead, withdraw from the affiliate bonus earned from your efforts in promoting the Holdplatform.
-----------------------
••• Read Data (Public)
-----------------------
1. function GetAffiliate(address address_) public
2. function GetAvailabletowithdraw(uint256 hold_id) public
3. function GetBonusHistory_byAddress(address address_) public
4. function GetContractAddress(address address_) public
5. function GetContractDetail() public
6. function GetContractList() public
7. function GetData_byAddress(address address_) public
8. function GetData_byId(uint256 id_) public
9. function GetStat(address tokenaddress, address useraddress) public
10. function GetUserDetail(address address_) public
11. function GetWithdrawHistory_byAddress(address address_) public
-----------------------
••• Write Data (Public)
-----------------------
1. Est. Gas ± 75,302 - function SignDisclaimer() public nonReentrant
2. Est. Gas ± 166,622 - function CashbackCode(string memory _cashbackcode, uint256 firsttime_buybitcoin) public nonReentrant
3. Est. Gas ± 2,669,310 - function Holdplatform(address TokenAddress, uint256 amount, uint256 TokenPrice ) public nonReentrant
4. Est. Gas ± 847,346 - function Withdraw(address TokenAddress, uint256 hold_id, uint256 TokenPrice) public nonReentrant
5. Est. Gas ± 645,441 - function Affiliate(address TokenAddress, uint256 TokenPrice) public nonReentrant
5. Est. Gas ± 41,384 - function TryTestnet() public nonReentrant
-----------------------
••• Write Data (Deployer)
-----------------------
1. Est. Gas ± 47,888 - function Start() public nonReentrant restricted
2. Est. Gas ± 239,985 - function Save(address TokenAddress, uint256 _maxcontribution, uint256 _PercentPermonth) public nonReentrant restricted
3. Est. Gas ± 26,988 - function LoadData() public nonReentrant restricted
4. Est. Gas ± 48,106 - function GasOptimization() public nonReentrant restricted
-----------------------
••• Gas Optimization
-----------------------
- Holdplatform Gas ± 995,300 ( Reducing gas fees by up to 62% )
- Withdraw Gas ± 320,218 ( Reducing gas fees by up to 62% )
- Affiliate Gas ± 109,616 ( Reducing gas fees by up to 84% )
*/
contract HoldplatformV2 is ReentrancyGuard {
/* using SafeERC20 for IERC20;
⫸ This function is not used because it exceeds 24,576 bytes.
*/
// ------------------------------------
// ✦ Constructor
// ------------------------------------
constructor() {
_deployer = msg.sender;
User storage u = _user[_deployer];
//------------------------------------------------------------------------------------
_id = 1; /// ID number 1 is the deployer's ID.
_holdstatus_bycashbackcode["0x000000000000000"] = true; /// The deployer's cashback code has been held.
_readdata = true; /// The deployer can read their own account data.
_idnumber[1] = _deployer; /// ID number 1 is the deployer's ID.
_searchaddress_bycashbackcode["0x000000000000000"] = _deployer; /// The cashback code 0x000000000000000 belongs to the deployer
u.useraddress = _deployer; /// Deployer 0x Address
u.cashbackcode = "0x000000000000000"; /// Default Cashbackcode for deployer
u.affiliateid = "0x000000000000000"; /// The deployer affiliates with themselves.
u.status = true; /// Is the deployer automatically a user? TRUE.
u.unixregister = block.timestamp; /// Unix time of the deployer's account registration / Unix time of deployment.
u.firsttimebuybitcoin = 2015; /// The first time the deployer bought Bitcoin.
_afflist[_deployer].push(msg.sender);
}
// ------------------------------------
// ✦ Modifier ( Restricted )
// ------------------------------------
modifier restricted() {
require(msg.sender == _deployer); /// The restricted feature can only be WRITTEN by the deployer.
_;
}
// ------------------------------------
// ✦ Holdplatform Web3 Database
// ------------------------------------
address private _deployer; // [00] 0x address belonging to the deployer
uint256 private _id; // [01] The number of 0x addresses that have participated
uint256 private _count; // [02] The total hold from all addresses of all participants
uint256 private _tx_bonushistory; // [03] Serial number for bonus history
uint256 private _tx_withdrawhistory; // [04] Serial number for withdraw history
uint256 private _launch; // [05] The Unix time of this system was started by the deployer
uint256 private constant _twenty = 1e20; // [06] (10 ** 20);
bool private _readdata; // [07] FALSE/TRUE status indicating whether the deployer can read their own account data.
bool private _gas_optimization; // [08] FALSE/TRUE status indicating whether gas optimization is enabled in the system.
bool private _testnet_close; // [09] FALSE/TRUE status indicating that the testnet system has been closed (30 days).
address[] private _contractlist; // [10] Contains contract addresses that have been added by the deployer.
mapping(address user => uint256[] HoldId ) private _idaddress; // [11] Hold ID number of each address (all data).
mapping(address user => uint256[] Bonushistory ) private _id_bonushistory; // [12] Bonushistiry ID number of each address (all data).
mapping(address user => uint256[] Withdrawhistory ) private _id_withdrawhistory; // [13] Withdrawhistory ID number of each address (all data).
mapping(address user => address[] team) private _afflist; // [14] All 0x referral addresses registered with the cashback code.
mapping(uint256 serial => address user ) private _idnumber; // [15] The serial number of the 0x address when registering in the system.
mapping(string cashbackCode => bool isHold) private _holdstatus_bycashbackcode; // [16] Status FALSE/TRUE indicating whether a cashback code has been held.
mapping(string cashbackCode => address user ) private _searchaddress_bycashbackcode; // [17] Searching for a 0x address based on the cashback code.
mapping(address user => uint256[] unixtime) private _disclaimer; // [18] User must sign the disclaimer, and it must be recorded.
mapping(uint256 holdId => Safe) private _safes; // [S] User data
mapping(address tokenDetail => Tokenlist) private _tokenlist; // [T] Token data
mapping(address userDetail => User) private _user; // [U] User data
mapping(uint256 bonusId => Bonushistory) private _bonushistory; // [V] Bonushistory data
mapping(address tokenaddress => mapping (address useraddress => Stat)) private _stat; // [W] Stat data
mapping(uint256 withdrawId => Withdrawhistory) private _withdrawhistory; // [X] Transaction data
struct Safe {
uint256 id; /// S00 -- > Hold ID
uint256 blocknumber; /// S01 -- > The block number at the time the transaction was made.
string tokensymbol; /// S02 -- > A symbol that represents the ticker of a token.
uint256 tokendecimal; /// S03 -- > The number of decimals for the token, usually 8 (00000000) or 18 (000000000000000000).
uint256 starttime; /// S04 -- > Start time ( Based On Unix Time ).
uint256 endtime; /// S05 -- > The Expiration Of A Hold Platform Based On Unix Time.
uint256 holdingtime_inseconds; /// S06 -- > Duration of holding on the platform in seconds.
uint256 percentage; /// S07 -- > The percentage of tokens that are unlocked every month ( Default 3% )
uint256 amount; /// S08 -- > The total amount of tokens deposited for holding.
uint256 usdvalue_deposit; /// S09 -- > The number of tokens multiplied by the token price at the time of deposit.
uint256 amountbalance; /// S10 -- > 88% from Contribution / 72% Without Cashback.
uint256 cashbackbalance; /// S11 -- > 16% from Contribution / 0% Without Cashback.
bool cashbackstatus; /// S12 -- > Cashback Status
uint256 tokenprice_start; /// S13 -- > The token price at the time of holding.
uint256 usdvalue_withdraw; /// S14 -- > Total accumulated withdrawals in USD.
address user; /// S15 -- > The ETH address you are using.
address tokenaddress; /// S16 -- > The Token Contract Address That You Are Using.
uint256 percentagereceive; /// S17 -- > The Percentage You Have Received.
uint256 tokenreceive; /// S18 -- > The Number Of Tokens You Have Received.
string affiliateid; /// S19 -- > It is 0x + a 15-digit random affiliate ID generated by the smart contract.
string cashbackcode; /// S20 -- > This is the cashback code you used when registering (your sponsor).
uint256 bonusparameter; /// S21 -- > It is the parameter used to determine the affiliate bonus based on the sponsor's deposit.
uint256 oldcontribution; /// S22 -- > The total amount of all previous user deposits.
uint256 newcontribution; /// S23 -- > The latest deposit amount from the user.
uint256 allcontribution; /// S24 -- > Adding up all the old and new total deposits.
uint256 bonustype; /// S25 -- > It will be determined automatically, with the bonus type set based on the bonus parameters.
uint256 affiliatebonus; /// S26 -- > The amount of bonus received by the affiliate.
uint256 not_eligible; /// S27 -- > The amount of bonus that is not eligible because the sponsor did not meet the maximum contribution limit.
uint256 percentage_affiliate; /// S28 -- > The percentage earned by the affiliate.
uint256 percentage_not_eligible; /// S29 -- > The percentage that is not eligible because the sponsor did not meet the criteria.
uint256 fee; /// S30 -- > A 2% fee is given to the deployer who created the hold platform.
uint256 lasttime; /// S31 -- > The last time you made a withdrawal, the data displayed is in UNIX format.
uint256 lastwithdraw; /// S32 -- > The amount of the last withdrawal you made.
uint256 tokenprice_end; /// S33 -- > The token price when the contract ended and the last withdrawal was made.
uint256 tx_withdraw; /// S34 -- > The number of withdrawal transactions for that hold ID.
uint256 payment_queue; /// S35 -- > The amount of payment ready to be transferred upon withdrawal.
uint256 timeframe; /// S36 -- > The time difference between the last withdrawal and now (in seconds).
uint256 unix_signdisclaimer; /// S37 -- > The terms and conditions, including a disclaimer, were agreed upon before holding the token
}
struct Tokenlist {
address contractaddress; /// T00 -- > The contract address that can be used in the holdplatform system.
bool contractstatus; /// T01 -- > The status of whether a contract address can be used.
string tokensymbol; /// T02 -- > A symbol that represents the ticker of a token.
uint256 percentpermonth; /// T03 -- > The percentage of tokens that are unlocked every month ( Default 3% )
uint256 holdingtime_inseconds; /// T04 -- > Duration of holding on the platform in seconds.
uint256 tokendecimal; /// T05 -- > The number of decimals for the token, usually 8 (00000000) or 18 (000000000000000000).
uint256 tokenprice; /// T06 -- > The token price for the latest update based on the function called.
uint256 min_contribution; /// T07 -- > The minimum amount required for a deposit in the system.
uint256 max_contribution; /// T08 -- > The maximum deposit amount (accumulated from all active deposits).
uint256 totalcontribution; /// T09 -- > The total amount of all user deposits for the selected token address.
uint256 totalpayments; /// T10 -- > The total amount of withdrawals made by all users for the selected token address.
uint256 totalaffiliatepayments; /// T11 -- > The total amount of withdrawals that have been paid to affiliates.
uint256 activeuser; /// T12 -- > The number of active users with at least one active position.
uint256 totaluser; /// T13 -- > The number of users on the selected token address.
uint256 totaltx_lock; /// T14 -- > The number of token lock transactions in the dApp.
uint256 totaltx_unlock; /// T15 -- > The number of token unlock transactions in the dApp.
uint256 totaltx_affiliate; /// T16 -- > The number of token lock transactions in the dApp.
uint256 unix_contractadded; /// T17 -- > The number of affiliate (withdrawal) transactions that have been made.
uint256 totalusdvalue; /// T18 -- > The estimated amount of tokens stored in USD.
uint256 tokenbalance; /// T19 -- > The number of tokens recorded according to the system's mechanism.
uint256 tokenbalance_sync; /// T20 -- > The number of tokens based on retrieved data from the balanceOf smart contract.
uint256 unix_tokenprice; /// T21 -- > The last price update time (in UNIX time).
}
struct User {
address useraddress; /// U00 -- > Searching for data based on the selected address.
string cashbackcode; /// U01 -- > This is the cashback code you used when registering (your sponsor).
string affiliateid; /// U02 -- > It is 0x + a 15-digit random affiliate ID generated by the smart contract.
bool status; /// U03 -- > Status (true) if the user has held at least once.
uint256 unixregister; /// U04 -- > User registration date / cashback code submission (based on UNIX time).
uint256 firsttimebuybitcoin; /// U05 -- > When did the user first purchase Bitcoin?
uint256 totaltransaction; /// U06 -- > The number of deposit transactions made by the user.
uint256 totalaffiliate; /// U07 -- > The number of users who registered with your cashback code.
bool sign; /// U08 -- > The status of the latest disclaimer signing. It will change to false with each hold.
uint256 usddeposit; /// U09 -- > Total deposit in all tokens if converted to USD.
uint256 usdaffiliate; /// U10 -- > Total affiliate earnings in all tokens, if converted to USD.
}
/// If gas optimization is false, the data (bonus history) will be displayed.
struct Bonushistory {
uint256 id; /// V00 -- > Bonus History ID
uint256 holdid; /// V01 -- > Hold ID
uint256 blocknumber; /// V02 -- > The block number at the time the transaction was made.
uint256 unixtime; /// V03 -- > The time the transaction was made (based on UNIX time).
uint256 affiliateprofit; /// V04 -- > The amount of bonus received by the affiliate.
uint256 usdvalue; /// V05 -- > The number of tokens multiplied by the current price (USD).
uint256 percentage_affiliate; /// V06 -- > The percentage earned by the affiliate.
uint256 percentage_not_eligible; /// V07 -- > The percentage that is not eligible because the sponsor did not meet the criteria.
uint256 noteligible; /// V08 -- > The amount of bonus that is not eligible because the sponsor did not meet the maximum contribution limit.
uint256 fee; /// V09 -- > A 2% fee is given to the deployer who created the hold platform.
string transactiontype; /// V10 -- > Affiliate Bonus / Deployer
address from; /// V11 -- > Your referral address.
address to; /// V12 -- > The smart contract address of the hold platform.
address tokenaddress; /// V13 -- > The currently selected token address.
string tokensymbol; /// V14 -- > A symbol that represents the ticker of a token.
uint256 tokendecimal; /// V15 -- > The number of decimals for the token, usually 8 (00000000) or 18 (000000000000000000).
uint256 tokenprice; /// V16 -- > The token price when the affiliate bonus enters the system.
uint256 percentage; /// V17 -- > The percentage of tokens unlocked each month for the referral.
uint256 oldcontribution; /// V18 -- > The total amount of all previous user deposits.
uint256 amount; /// V19 -- > The latest deposit amount from the user.
uint256 allcontribution; /// V20 -- > Adding up all the old and new total deposits.
uint256 bonusparameter; /// V21 -- > The address of the referral.
uint256 bonustype; /// V22 -- > It will be determined automatically, with the bonus type set based on the bonus parameters.
uint256 balancebefore; /// V23 -- > Your balance before receiving the bonus in the system.
uint256 balanceafter; /// V24 -- > Your balance after receiving the bonus in the system.
uint256 tokenbalance_before; /// V25 -- > Dapps balance before receiving the bonus in the system.
uint256 tokenbalance_after; /// V26 -- > Dapps balance after receiving the bonus in the system.
uint256 tokenbalance_sync; /// V27 -- > Synchronizing data with balanceOf.
uint256 code; /// V28 -- > Bonus codes are assigned as 1 (affiliate) and 2 (deployer).
}
struct Stat {
bool activeuser; /// W00 -- > The user's status in the system, have they held or not?
address tokenaddress; /// W01 -- > The currently selected token address.
address useraddress; /// W02 -- > The user's address.
string tokensymbol; /// W03 -- > A symbol that represents the ticker of a token.
uint256 tokendecimal; /// W04 -- > The number of decimals for the token, usually 8 (00000000) or 18 (000000000000000000).
uint256 tokenprice; /// W05 -- > The price of the token when the user holds.
uint256 affiliatevault; /// W06 -- > The user's affiliate bonus balance that can be withdrawn.
uint256 affiliateprofit; /// W07 -- > The history of the total affiliate bonus earned by the member.
uint256 affiliatepayments; /// W08 -- > The amount of affiliate bonus that has been successfully withdrawn.
uint256 lifetimecontribution; /// W09 -- > The total deposits made by the user since joining the HoldPlatform.
uint256 lifetimepayments; /// W10 -- > The total number of tokens that have been successfully withdrawn so far (excluding affiliate bonuses).
uint256 mybalance; /// W11 -- > The token balance on HoldPlatform that you have not withdrawn yet (combined from all storage).
uint256 activecontribution; /// W12 -- > The total amount of tokens in storage that have not yet expired.
uint256 depositparameter; /// W13 -- > The parameter used to ensure that the deposit cannot exceed the maximum contribution.
uint256 bonusparameter; /// W14 -- > This is the parameter used to determine the affiliate bonus that will be received, up to 10%.
uint256 tx_deposit; /// W15 -- > The total number of deposit transactions in the system.
uint256 tx_withdraw; /// W16 -- > The total number of withdraw transactions in the system.
uint256 tx_affiliatewithdraw; /// W17 -- > The total number of affiliate withdraw transactions in the system.
uint256 unix_lastwithdraw; /// W18 -- > The last withdrawal time (in Unix time format).
//Deployeronly
uint256 stat_fee; /// W19 -- > Recording of the fee amount credited to the deployer account.
uint256 stat_noteligible; /// W20 -- > The amount of token balance that is not eligible to be counted as an affiliate bonus and goes to the deployer.
uint256 fee_balance; /// W21 -- > The translation to English is: "The 2% fee balance ready for withdrawal.
uint256 noteligible_balance; /// W22 -- > The not eligible balance ready for withdrawal.
uint256 tx_fee; /// W23 -- > The total number of fee withdrawal transactions conducted by the deployer.
uint256 tx_noteligible; /// W24 -- > The total number of not eligible withdrawal transactions conducted by the deployer.
uint256 tx_deployerwithdraw; /// W25 -- > The total number of withdrawal transactions conducted by the deployer.
uint256 fee_paid; /// W26 -- > The total amount of the 2% fee that has been successfully withdrawn by the deployer.
uint256 noteligible_paid; /// W27 -- > The total amount of the Not Eligible balances that has been successfully withdrawn by the deployer.
uint256 totalwithdraw; /// W28 -- > The total accumulated withdrawals from the 2% fee balances and not eligible balances.
}
/// If gas optimization is false, the data (withdraw history) will be displayed.
struct Withdrawhistory {
uint256 id; /// X00 -- > Withdraw History ID
uint256 holdid; /// X01 -- > Hold ID
uint256 blocknumber; /// X02 -- > The block number at the time the transaction was made.
uint256 unixtime; /// X03 -- > The time the transaction was made (based on UNIX time).
uint256 amount; /// X04 -- > The total amount of tokens successfully sent from the dApp to the user's account.
uint256 usdvalue; /// X05 -- > The number of tokens multiplied by the current price (USD).
string transactiontype; /// X06 -- > Type of withdrawal transaction (token / affiliate / deployer).
address from; /// X07 -- > The smart contract address of HoldPlatform
address to; /// X08 -- > The address where the tokens were successfully withdrawn (user's address).
address tokenaddress; /// X09 -- > The currently selected token address.
string tokensymbol; /// X10 -- > A symbol that represents the ticker of a token.
uint256 tokendecimal; /// X11 -- > The number of decimals for the token, usually 8 (00000000) or 18 (000000000000000000).
uint256 tokenprice; /// X12 -- > The token price when the user withdraws tokens.
uint256 balancebefore; /// X13 -- > The account balance before making the withdrawal.
uint256 balanceafter; /// X14 -- > The account balance after making the withdrawal.
uint256 tokenbalance_before; /// X15 -- > The Dapps balance before making the withdrawal.
uint256 tokenbalance_after; /// X16 -- > The Dapps after before making the withdrawal.
uint256 bonusparameter_before; /// X17 -- > Bonus parameter before the user makes a withdrawal (withdrawing tokens reduces the bonus parameter).
uint256 bonusparameter_after; /// X18 -- > Bonus parameter after the user makes a withdrawal (withdrawing tokens reduces the bonus parameter).
uint256 tokenbalance_sync; /// X19 -- > For data accuracy, each function call will sync with balanceOf.
uint256 timeframe; /// X20 -- > The time interval since the last withdrawal.
uint256 code;
/// code - X21 -- > The identification code for the type of withdrawal:
// 1. Withdraw history for tokens, where both user and deployer have the same code, which is (1).
// 2. Withdraw affiliate balance by the user.
// 3. Withdraw affiliate balance & not eligible balance by the deployer.
}
// ------------------------------------
// ✦ Read Function
// ------------------------------------
function _checkAddress(address address_) internal view returns (bool) {
return (address_ != _deployer || (address_ == _deployer && _readdata));
}
/**
* @notice Enter the user's address in the search field, and all their team data will appear.
* @return data Contains an array of all referral addresses that have saved the cashback code during initial registration.
*/
function GetAffiliate(address address_) public view returns (address[] memory data) {
address[] storage afflist = _afflist[address_];
uint256 length = afflist.length;
data = new address[](length);
if(_checkAddress(address_)) {
for (uint256 i = 0; i < length; ++i) {
data[i] = afflist[i];
}
}
}
/**
* @notice HoldPlatform V2 has an auto-calculate feature that can be called through a web3 JavaScript
* @notice . function to get the most accurate estimate of the amount of tokens ready to be withdrawn.
*/
function GetAvailabletowithdraw(uint256 hold_id) public view returns (uint256 timeframe, uint256 available ) {
Safe storage s = _safes[hold_id];
uint256 timeframe_;
uint256 availabletowithdraw;
uint256 onemonth = div(mul(s.amount, s.percentage), 100);
if(s.endtime <= block.timestamp){
availabletowithdraw = add(s.amountbalance, s.cashbackbalance);
} else {
// Calculate the difference (in seconds) between the time of the last withdrawal and the current time
timeframe_ = sub(block.timestamp, s.lasttime);
// Calculate the total number of tokens unlocked within one month (30 days - 2592000 seconds)
uint256 CalculateWithdraw = div(mul(onemonth, timeframe_), 2592000);
// S.amount * s.percentage / 100 * timeframe / seconds30days
uint256 MaxWithdraw = div(s.amount, 10);
uint256 MaxAccumulation;
// Maximum withdraw before unlocked, Max 10% Accumulation
MaxAccumulation = (CalculateWithdraw >= MaxWithdraw) ? MaxWithdraw : CalculateWithdraw;
// Maximum withdraw = User Amount Balance
availabletowithdraw = (MaxAccumulation >= s.amountbalance) ? s.amountbalance : MaxAccumulation;
if (s.cashbackbalance != 0) {
availabletowithdraw = add(s.cashbackbalance, availabletowithdraw);
}
}
timeframe = timeframe_;
available = availabletowithdraw;
}
/**
* @notice If Gas Optimization is set to false, you can view each affiliate bonus transaction here by simply entering the user address.
* @dev This function retrieves a limited number of bonus history records for a specific address,
* @dev ensuring that the number of records does not exceed the requested limit or the available data.
* @dev The function is designed to avoid issues with excessive data retrieval that could lead to errors in Solidity,
* @dev particularly the "stack too deep" error. The records are retrieved in reverse order, starting from the most recent.
* @param address_ - The address owned by the user.
* @param limit_ - The maximum limit of data that can be read. The recommended maximum is 1024.
*/
function GetBonusHistory_byAddress(address address_, uint256 limit_) public view returns (Bonushistory[] memory data) {
if(_...
// [truncated — 119378 bytes total]
ERC20Interface.sol 23 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
interface ERC20Interface {
function totalSupply() external view returns (uint256);
//view
function symbol() external view returns (string memory);
function decimals() external view returns (uint256 decimals_);
function balanceOf(address _owner) external view returns (uint256 balance);
function allowance(address _owner, address _spender) external view returns (uint256 remaining);
//write
function transfer(address _to, uint256 _value) external returns (bool success);
function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
function approve(address _spender, uint256 _value) external returns (bool success);
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
ReentrancyGuard.sol 77 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == _ENTERED;
}
}
Read Contract
GetAffiliate 0xc1290089 → address[]
GetAvailabletowithdraw 0x40a41c16 → uint256, uint256
GetBonusHistory_byAddress 0xff404d54 → tuple[]
GetContractAddress 0xb5a9fb2a → tuple
GetContractDetail 0xc25b0d10 → address, uint256, uint256, bool, bool, uint256
GetContractList 0x2a306487 → address[]
GetData_byAddress 0xa4172807 → tuple[]
GetData_byId 0xfaf4d14a → tuple[]
GetStat 0x924b94c7 → tuple
GetUserDetail 0x75d435a3 → tuple
GetWithdrawHistory_byAddress 0xec72428d → tuple[]
Write Contract 10 functions
These functions modify contract state and require a wallet transaction to execute.
Affiliate 0x6479a842
address TokenAddress
uint256 TokenPrice
CashbackCode 0xef680ee5
string _cashbackcode
uint256 firsttime_buybitcoin
GasOptimization 0x8cf7324f
No parameters
Holdplatform 0x780c034d
address TokenAddress
uint256 amount
uint256 TokenPrice
LoadData 0x69c03842
No parameters
Save 0x68e9dc7e
address TokenAddress
uint256 _maxcontribution
uint256 _PercentPermonth
SignDisclaimer 0x643dd0a3
No parameters
Start 0x1b55ba3a
No parameters
TryTestnet 0x5679e04d
No parameters
Withdraw 0xf279e6a1
address TokenAddress
uint256 hold_id
uint256 TokenPrice
Token Balances (1)
View Transfers →Recent Transactions
No transactions found for this address