Source Code
Overview
ETH Balance
0.212716646724811506 ETH
Eth Value
$418.13 (@ $1,965.67/ETH)Latest 25 from a total of 317 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Begin Game | 7148145 | 2588 days ago | IN | 0 ETH | 0.00068832 | ||||
| Reset | 7148139 | 2588 days ago | IN | 0 ETH | 0.00080016 | ||||
| Payout | 7148131 | 2588 days ago | IN | 0 ETH | 0.00139136 | ||||
| Start Settlement | 7148127 | 2588 days ago | IN | 0 ETH | 0.00199153 | ||||
| __callback | 7148124 | 2589 days ago | IN | 0 ETH | 0.0016181 | ||||
| Finalize | 7148121 | 2589 days ago | IN | 0 ETH | 0.00130937 | ||||
| Begin Game | 7143047 | 2590 days ago | IN | 0 ETH | 0.00068832 | ||||
| Reset | 7143042 | 2590 days ago | IN | 0 ETH | 0.00080016 | ||||
| Payout | 7143036 | 2590 days ago | IN | 0 ETH | 0.00139136 | ||||
| Start Settlement | 7143033 | 2590 days ago | IN | 0 ETH | 0.00199153 | ||||
| __callback | 7143030 | 2590 days ago | IN | 0 ETH | 0.0016181 | ||||
| Finalize | 7143028 | 2590 days ago | IN | 0 ETH | 0.00130937 | ||||
| Begin Game | 7142177 | 2590 days ago | IN | 0 ETH | 0.00068832 | ||||
| Reset | 7142174 | 2590 days ago | IN | 0 ETH | 0.00080016 | ||||
| Payout | 7142168 | 2590 days ago | IN | 0 ETH | 0.00139136 | ||||
| Start Settlement | 7142164 | 2590 days ago | IN | 0 ETH | 0.00199153 | ||||
| __callback | 7142162 | 2590 days ago | IN | 0 ETH | 0.0016181 | ||||
| Finalize | 7142160 | 2590 days ago | IN | 0 ETH | 0.00130937 | ||||
| Begin Game | 7139121 | 2590 days ago | IN | 0 ETH | 0.00068832 | ||||
| Reset | 7139115 | 2590 days ago | IN | 0 ETH | 0.00080016 | ||||
| Payout | 7139107 | 2590 days ago | IN | 0 ETH | 0.00139136 | ||||
| Start Settlement | 7139103 | 2590 days ago | IN | 0 ETH | 0.00199153 | ||||
| __callback | 7139099 | 2590 days ago | IN | 0 ETH | 0.0016181 | ||||
| Finalize | 7139096 | 2590 days ago | IN | 0 ETH | 0.00130937 | ||||
| Begin Game | 7134315 | 2591 days ago | IN | 0 ETH | 0.00068832 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 7148121 | 2589 days ago | 0.00243327 ETH | ||||
| - | 7143028 | 2590 days ago | 0.00243327 ETH | ||||
| - | 7142160 | 2590 days ago | 0.00243327 ETH | ||||
| - | 7139096 | 2590 days ago | 0.00243327 ETH | ||||
| - | 7134294 | 2591 days ago | 0.00243327 ETH | ||||
| - | 7133840 | 2591 days ago | 0.00243327 ETH | ||||
| - | 7128764 | 2592 days ago | 0.00243327 ETH | ||||
| - | 7123689 | 2593 days ago | 0.00243327 ETH | ||||
| - | 7118166 | 2595 days ago | 0.00243327 ETH | ||||
| - | 7047212 | 2608 days ago | 0.00237461 ETH | ||||
| - | 7044417 | 2608 days ago | 0.00237461 ETH | ||||
| - | 7038120 | 2609 days ago | 0.00231561 ETH | ||||
| - | 7035308 | 2610 days ago | 0.00231561 ETH | ||||
| - | 7032472 | 2610 days ago | 0.00231561 ETH | ||||
| - | 7024946 | 2611 days ago | 0.00231561 ETH | ||||
| - | 7022162 | 2612 days ago | 0.00231561 ETH | ||||
| - | 6948253 | 2625 days ago | 0.00235433 ETH | ||||
| - | 6945871 | 2625 days ago | 0.00245372 ETH | ||||
| - | 6945774 | 2625 days ago | 0.00245372 ETH | ||||
| - | 6945669 | 2625 days ago | 0.00245372 ETH | ||||
| - | 6943925 | 2625 days ago | 0.00245372 ETH | ||||
| - | 6904409 | 2632 days ago | 0.0025724 ETH | ||||
| - | 6904268 | 2632 days ago | 0.0025724 ETH | ||||
| - | 6903974 | 2632 days ago | 0.0025724 ETH | ||||
| Transfer | 6793210 | 2651 days ago | 0.00247312 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GameContract
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-11-20
*/
pragma solidity ^0.4.18;
contract OraclizeI {
address public cbAddress;
function query(uint _timestamp, string _datasource, string _arg) external payable returns (bytes32 _id);
function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) external payable returns (bytes32 _id);
function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) public payable returns (bytes32 _id);
function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) external payable returns (bytes32 _id);
function queryN(uint _timestamp, string _datasource, bytes _argN) public payable returns (bytes32 _id);
function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) external payable returns (bytes32 _id);
function getPrice(string _datasource) public returns (uint _dsprice);
function getPrice(string _datasource, uint gaslimit) public returns (uint _dsprice);
function setProofType(byte _proofType) external;
function setCustomGasPrice(uint _gasPrice) external;
function randomDS_getSessionPubKeyHash() external constant returns(bytes32);
}
contract OraclizeAddrResolverI {
function getAddress() public returns (address _addr);
}
contract usingOraclize {
uint constant day = 60*60*24;
uint constant week = 60*60*24*7;
uint constant month = 60*60*24*30;
byte constant proofType_NONE = 0x00;
byte constant proofType_TLSNotary = 0x10;
byte constant proofType_Android = 0x20;
byte constant proofType_Ledger = 0x30;
byte constant proofType_Native = 0xF0;
byte constant proofStorage_IPFS = 0x01;
uint8 constant networkID_auto = 0;
uint8 constant networkID_mainnet = 1;
uint8 constant networkID_testnet = 2;
uint8 constant networkID_morden = 2;
uint8 constant networkID_consensys = 161;
OraclizeAddrResolverI OAR;
OraclizeI oraclize;
modifier oraclizeAPI {
if((address(OAR)==0)||(getCodeSize(address(OAR))==0))
oraclize_setNetwork(networkID_auto);
if(address(oraclize) != OAR.getAddress())
oraclize = OraclizeI(OAR.getAddress());
_;
}
modifier coupon(string code){
oraclize = OraclizeI(OAR.getAddress());
_;
}
function oraclize_setNetwork(uint8 networkID) internal returns(bool){
return oraclize_setNetwork();
networkID; // silence the warning and remain backwards compatible
}
function oraclize_setNetwork() internal returns(bool){
if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet
OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed);
oraclize_setNetworkName("eth_mainnet");
return true;
}
if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet
OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1);
oraclize_setNetworkName("eth_ropsten3");
return true;
}
if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet
OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e);
oraclize_setNetworkName("eth_kovan");
return true;
}
if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ //rinkeby testnet
OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48);
oraclize_setNetworkName("eth_rinkeby");
return true;
}
if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge
OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475);
return true;
}
if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide
OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF);
return true;
}
if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity
OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA);
return true;
}
return false;
}
function __callback(bytes32 myid, string result) public {
__callback(myid, result, new bytes(0));
}
function __callback(bytes32 myid, string result, bytes proof) public {
}
function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){
return oraclize.getPrice(datasource);
}
function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){
return oraclize.getPrice(datasource, gaslimit);
}
function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource);
if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
return oraclize.query.value(price)(0, datasource, arg);
}
function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource);
if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
return oraclize.query.value(price)(timestamp, datasource, arg);
}
function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource, gaslimit);
if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit);
}
function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource, gaslimit);
if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit);
}
function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource);
if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
return oraclize.query2.value(price)(0, datasource, arg1, arg2);
}
function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource);
if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2);
}
function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource, gaslimit);
if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit);
}
function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource, gaslimit);
if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit);
}
function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource);
if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
bytes memory args = stra2cbor(argN);
return oraclize.queryN.value(price)(0, datasource, args);
}
function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource);
if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
bytes memory args = stra2cbor(argN);
return oraclize.queryN.value(price)(timestamp, datasource, args);
}
function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource, gaslimit);
if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
bytes memory args = stra2cbor(argN);
return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit);
}
function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource, gaslimit);
if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
bytes memory args = stra2cbor(argN);
return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit);
}
function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](1);
dynargs[0] = args[0];
return oraclize_query(datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](1);
dynargs[0] = args[0];
return oraclize_query(timestamp, datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](1);
dynargs[0] = args[0];
return oraclize_query(timestamp, datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](1);
dynargs[0] = args[0];
return oraclize_query(datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](2);
dynargs[0] = args[0];
dynargs[1] = args[1];
return oraclize_query(datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](2);
dynargs[0] = args[0];
dynargs[1] = args[1];
return oraclize_query(timestamp, datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](2);
dynargs[0] = args[0];
dynargs[1] = args[1];
return oraclize_query(timestamp, datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](2);
dynargs[0] = args[0];
dynargs[1] = args[1];
return oraclize_query(datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](3);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
return oraclize_query(datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](3);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
return oraclize_query(timestamp, datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](3);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
return oraclize_query(timestamp, datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](3);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
return oraclize_query(datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](4);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
return oraclize_query(datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](4);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
return oraclize_query(timestamp, datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](4);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
return oraclize_query(timestamp, datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](4);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
return oraclize_query(datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](5);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
dynargs[4] = args[4];
return oraclize_query(datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](5);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
dynargs[4] = args[4];
return oraclize_query(timestamp, datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](5);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
dynargs[4] = args[4];
return oraclize_query(timestamp, datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
string[] memory dynargs = new string[](5);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
dynargs[4] = args[4];
return oraclize_query(datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource);
if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
bytes memory args = ba2cbor(argN);
return oraclize.queryN.value(price)(0, datasource, args);
}
function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource);
if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
bytes memory args = ba2cbor(argN);
return oraclize.queryN.value(price)(timestamp, datasource, args);
}
function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource, gaslimit);
if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
bytes memory args = ba2cbor(argN);
return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit);
}
function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
uint price = oraclize.getPrice(datasource, gaslimit);
if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
bytes memory args = ba2cbor(argN);
return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit);
}
function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](1);
dynargs[0] = args[0];
return oraclize_query(datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](1);
dynargs[0] = args[0];
return oraclize_query(timestamp, datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](1);
dynargs[0] = args[0];
return oraclize_query(timestamp, datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](1);
dynargs[0] = args[0];
return oraclize_query(datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](2);
dynargs[0] = args[0];
dynargs[1] = args[1];
return oraclize_query(datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](2);
dynargs[0] = args[0];
dynargs[1] = args[1];
return oraclize_query(timestamp, datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](2);
dynargs[0] = args[0];
dynargs[1] = args[1];
return oraclize_query(timestamp, datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](2);
dynargs[0] = args[0];
dynargs[1] = args[1];
return oraclize_query(datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](3);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
return oraclize_query(datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](3);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
return oraclize_query(timestamp, datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](3);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
return oraclize_query(timestamp, datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](3);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
return oraclize_query(datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](4);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
return oraclize_query(datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](4);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
return oraclize_query(timestamp, datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](4);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
return oraclize_query(timestamp, datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](4);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
return oraclize_query(datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](5);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
dynargs[4] = args[4];
return oraclize_query(datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](5);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
dynargs[4] = args[4];
return oraclize_query(timestamp, datasource, dynargs);
}
function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](5);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
dynargs[4] = args[4];
return oraclize_query(timestamp, datasource, dynargs, gaslimit);
}
function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
bytes[] memory dynargs = new bytes[](5);
dynargs[0] = args[0];
dynargs[1] = args[1];
dynargs[2] = args[2];
dynargs[3] = args[3];
dynargs[4] = args[4];
return oraclize_query(datasource, dynargs, gaslimit);
}
function oraclize_cbAddress() oraclizeAPI internal returns (address){
return oraclize.cbAddress();
}
function oraclize_setProof(byte proofP) oraclizeAPI internal {
return oraclize.setProofType(proofP);
}
function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal {
return oraclize.setCustomGasPrice(gasPrice);
}
function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){
return oraclize.randomDS_getSessionPubKeyHash();
}
function getCodeSize(address _addr) constant internal returns(uint _size) {
assembly {
_size := extcodesize(_addr)
}
}
function parseAddr(string _a) internal pure returns (address){
bytes memory tmp = bytes(_a);
uint160 iaddr = 0;
uint160 b1;
uint160 b2;
for (uint i=2; i<2+2*20; i+=2){
iaddr *= 256;
b1 = uint160(tmp[i]);
b2 = uint160(tmp[i+1]);
if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87;
else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55;
else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48;
if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87;
else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55;
else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48;
iaddr += (b1*16+b2);
}
return address(iaddr);
}
function strCompare(string _a, string _b) internal pure returns (int) {
bytes memory a = bytes(_a);
bytes memory b = bytes(_b);
uint minLength = a.length;
if (b.length < minLength) minLength = b.length;
for (uint i = 0; i < minLength; i ++)
if (a[i] < b[i])
return -1;
else if (a[i] > b[i])
return 1;
if (a.length < b.length)
return -1;
else if (a.length > b.length)
return 1;
else
return 0;
}
function indexOf(string _haystack, string _needle) internal pure returns (int) {
bytes memory h = bytes(_haystack);
bytes memory n = bytes(_needle);
if(h.length < 1 || n.length < 1 || (n.length > h.length))
return -1;
else if(h.length > (2**128 -1))
return -1;
else
{
uint subindex = 0;
for (uint i = 0; i < h.length; i ++)
{
if (h[i] == n[0])
{
subindex = 1;
while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex])
{
subindex++;
}
if(subindex == n.length)
return int(i);
}
}
return -1;
}
}
function strConcat(string _a, string _b, string _c, string _d, string _e) internal pure returns (string) {
bytes memory _ba = bytes(_a);
bytes memory _bb = bytes(_b);
bytes memory _bc = bytes(_c);
bytes memory _bd = bytes(_d);
bytes memory _be = bytes(_e);
string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
bytes memory babcde = bytes(abcde);
uint k = 0;
for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
for (i = 0; i < _be.length; i++) babcde[k++] = _be[i];
return string(babcde);
}
function strConcat(string _a, string _b, string _c, string _d) internal pure returns (string) {
return strConcat(_a, _b, _c, _d, "");
}
function strConcat(string _a, string _b, string _c) internal pure returns (string) {
return strConcat(_a, _b, _c, "", "");
}
function strConcat(string _a, string _b) internal pure returns (string) {
return strConcat(_a, _b, "", "", "");
}
// parseInt
function parseInt(string _a) internal pure returns (uint) {
return parseInt(_a, 0);
}
// parseInt(parseFloat*10^_b)
function parseInt(string _a, uint _b) internal pure returns (uint) {
bytes memory bresult = bytes(_a);
uint mint = 0;
bool decimals = false;
for (uint i=0; i<bresult.length; i++){
if ((bresult[i] >= 48)&&(bresult[i] <= 57)){
if (decimals){
if (_b == 0) break;
else _b--;
}
mint *= 10;
mint += uint(bresult[i]) - 48;
} else if (bresult[i] == 46) decimals = true;
}
if (_b > 0) mint *= 10**_b;
return mint;
}
function uint2str(uint i) internal pure returns (string){
if (i == 0) return "0";
uint j = i;
uint len;
while (j != 0){
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (i != 0){
bstr[k--] = byte(48 + i % 10);
i /= 10;
}
return string(bstr);
}
function stra2cbor(string[] arr) internal pure returns (bytes) {
uint arrlen = arr.length;
// get correct cbor output length
uint outputlen = 0;
bytes[] memory elemArray = new bytes[](arrlen);
for (uint i = 0; i < arrlen; i++) {
elemArray[i] = (bytes(arr[i]));
outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types
}
uint ctr = 0;
uint cborlen = arrlen + 0x80;
outputlen += byte(cborlen).length;
bytes memory res = new bytes(outputlen);
while (byte(cborlen).length > ctr) {
res[ctr] = byte(cborlen)[ctr];
ctr++;
}
for (i = 0; i < arrlen; i++) {
res[ctr] = 0x5F;
ctr++;
for (uint x = 0; x < elemArray[i].length; x++) {
// if there's a bug with larger strings, this may be the culprit
if (x % 23 == 0) {
uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x;
elemcborlen += 0x40;
uint lctr = ctr;
while (byte(elemcborlen).length > ctr - lctr) {
res[ctr] = byte(elemcborlen)[ctr - lctr];
ctr++;
}
}
res[ctr] = elemArray[i][x];
ctr++;
}
res[ctr] = 0xFF;
ctr++;
}
return res;
}
function ba2cbor(bytes[] arr) internal pure returns (bytes) {
uint arrlen = arr.length;
// get correct cbor output length
uint outputlen = 0;
bytes[] memory elemArray = new bytes[](arrlen);
for (uint i = 0; i < arrlen; i++) {
elemArray[i] = (bytes(arr[i]));
outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types
}
uint ctr = 0;
uint cborlen = arrlen + 0x80;
outputlen += byte(cborlen).length;
bytes memory res = new bytes(outputlen);
while (byte(cborlen).length > ctr) {
res[ctr] = byte(cborlen)[ctr];
ctr++;
}
for (i = 0; i < arrlen; i++) {
res[ctr] = 0x5F;
ctr++;
for (uint x = 0; x < elemArray[i].length; x++) {
// if there's a bug with larger strings, this may be the culprit
if (x % 23 == 0) {
uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x;
elemcborlen += 0x40;
uint lctr = ctr;
while (byte(elemcborlen).length > ctr - lctr) {
res[ctr] = byte(elemcborlen)[ctr - lctr];
ctr++;
}
}
res[ctr] = elemArray[i][x];
ctr++;
}
res[ctr] = 0xFF;
ctr++;
}
return res;
}
string oraclize_network_name;
function oraclize_setNetworkName(string _network_name) internal {
oraclize_network_name = _network_name;
}
function oraclize_getNetworkName() internal view returns (string) {
return oraclize_network_name;
}
function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){
require((_nbytes > 0) && (_nbytes <= 32));
bytes memory nbytes = new bytes(1);
nbytes[0] = byte(_nbytes);
bytes memory unonce = new bytes(32);
bytes memory sessionKeyHash = new bytes(32);
bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash();
assembly {
mstore(unonce, 0x20)
mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp)))
mstore(sessionKeyHash, 0x20)
mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32)
}
bytes[3] memory args = [unonce, nbytes, sessionKeyHash];
bytes32 queryId = oraclize_query(_delay, "random", args, _customGasLimit);
oraclize_randomDS_setCommitment(queryId, keccak256(abi.encodePacked(bytes8(_delay), args[1], sha256(args[0]), args[2])));
return queryId;
}
function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal {
oraclize_randomDS_args[queryId] = commitment;
}
mapping(bytes32=>bytes32) oraclize_randomDS_args;
mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified;
function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){
bool sigok;
address signer;
bytes32 sigr;
bytes32 sigs;
bytes memory sigr_ = new bytes(32);
uint offset = 4+(uint(dersig[3]) - 0x20);
sigr_ = copyBytes(dersig, offset, 32, sigr_, 0);
bytes memory sigs_ = new bytes(32);
offset += 32 + 2;
sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0);
assembly {
sigr := mload(add(sigr_, 32))
sigs := mload(add(sigs_, 32))
}
(sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs);
if (address(keccak256(pubkey)) == signer) return true;
else {
(sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs);
return (address(keccak256(pubkey)) == signer);
}
}
function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) {
bool sigok;
// Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH)
bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2);
copyBytes(proof, sig2offset, sig2.length, sig2, 0);
bytes memory appkey1_pubkey = new bytes(64);
copyBytes(proof, 3+1, 64, appkey1_pubkey, 0);
bytes memory tosign2 = new bytes(1+65+32);
tosign2[0] = byte(1); //role
copyBytes(proof, sig2offset-65, 65, tosign2, 1);
bytes memory CODEHASH = hex"fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c";
copyBytes(CODEHASH, 0, 32, tosign2, 1+65);
sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey);
if (sigok == false) return false;
// Step 7: verify the APPKEY1 provenance (must be signed by Ledger)
bytes memory LEDGERKEY = hex"7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4";
bytes memory tosign3 = new bytes(1+65);
tosign3[0] = 0xFE;
copyBytes(proof, 3, 65, tosign3, 1);
bytes memory sig3 = new bytes(uint(proof[3+65+1])+2);
copyBytes(proof, 3+65, sig3.length, sig3, 0);
sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY);
return sigok;
}
modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) {
// Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1)
require((_proof[0] == "L") && (_proof[1] == "P") && (_proof[2] == 1));
bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName());
require(proofVerified);
_;
}
function oraclize_randomDS_proofVerify__returnCode(bytes32 _queryId, string _result, bytes _proof) internal returns (uint8){
// Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1)
if ((_proof[0] != "L")||(_proof[1] != "P")||(_proof[2] != 1)) return 1;
bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName());
if (proofVerified == false) return 2;
return 0;
}
function matchBytes32Prefix(bytes32 content, bytes prefix, uint n_random_bytes) internal pure returns (bool){
bool match_ = true;
for (uint256 i=0; i< n_random_bytes; i++) {
if (content[i] != prefix[i]) match_ = false;
}
return match_;
}
function oraclize_randomDS_proofVerify__main(bytes proof, bytes32 queryId, bytes result, string context_name) internal returns (bool){
// Step 2: the unique keyhash has to match with the sha256 of (context name + queryId)
uint ledgerProofLength = 3+65+(uint(proof[3+65+1])+2)+32;
bytes memory keyhash = new bytes(32);
copyBytes(proof, ledgerProofLength, 32, keyhash, 0);
if (!(keccak256(keyhash) == keccak256(abi.encodePacked(sha256(abi.encodePacked(context_name, queryId)))))) return false;
bytes memory sig1 = new bytes(uint(proof[ledgerProofLength+(32+8+1+32)+1])+2);
copyBytes(proof, ledgerProofLength+(32+8+1+32), sig1.length, sig1, 0);
// Step 3: we assume sig1 is valid (it will be verified during step 5) and we verify if 'result' is the prefix of sha256(sig1)
if (!matchBytes32Prefix(sha256(sig1), result, uint(proof[ledgerProofLength+32+8]))) return false;
// Step 4: commitment match verification, keccak256(delay, nbytes, unonce, sessionKeyHash) == commitment in storage.
// This is to verify that the computed args match with the ones specified in the query.
bytes memory commitmentSlice1 = new bytes(8+1+32);
copyBytes(proof, ledgerProofLength+32, 8+1+32, commitmentSlice1, 0);
bytes memory sessionPubkey = new bytes(64);
uint sig2offset = ledgerProofLength+32+(8+1+32)+sig1.length+65;
copyBytes(proof, sig2offset-64, 64, sessionPubkey, 0);
bytes32 sessionPubkeyHash = sha256(sessionPubkey);
if (oraclize_randomDS_args[queryId] == keccak256(abi.encodePacked(commitmentSlice1, sessionPubkeyHash))){ //unonce, nbytes and sessionKeyHash match
delete oraclize_randomDS_args[queryId];
} else return false;
// Step 5: validity verification for sig1 (keyhash and args signed with the sessionKey)
bytes memory tosign1 = new bytes(32+8+1+32);
copyBytes(proof, ledgerProofLength, 32+8+1+32, tosign1, 0);
if (!verifySig(sha256(tosign1), sig1, sessionPubkey)) return false;
// verify if sessionPubkeyHash was verified already, if not.. let's do it!
if (oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] == false){
oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] = oraclize_randomDS_proofVerify__sessionKeyValidity(proof, sig2offset);
}
return oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash];
}
// the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license
function copyBytes(bytes from, uint fromOffset, uint length, bytes to, uint toOffset) internal pure returns (bytes) {
uint minLength = length + toOffset;
// Buffer too small
require(to.length >= minLength); // Should be a better way?
// NOTE: the offset 32 is added to skip the `size` field of both bytes variables
uint i = 32 + fromOffset;
uint j = 32 + toOffset;
while (i < (32 + fromOffset + length)) {
assembly {
let tmp := mload(add(from, i))
mstore(add(to, j), tmp)
}
i += 32;
j += 32;
}
return to;
}
// the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license
// Duplicate Solidity's ecrecover, but catching the CALL return value
function safer_ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal returns (bool, address) {
// We do our own memory management here. Solidity uses memory offset
// 0x40 to store the current end of memory. We write past it (as
// writes are memory extensions), but don't update the offset so
// Solidity will reuse it. The memory used here is only needed for
// this context.
// FIXME: inline assembly can't access return values
bool ret;
address addr;
assembly {
let size := mload(0x40)
mstore(size, hash)
mstore(add(size, 32), v)
mstore(add(size, 64), r)
mstore(add(size, 96), s)
// NOTE: we can reuse the request memory because we deal with
// the return code
ret := call(3000, 1, 0, size, 128, size, 32)
addr := mload(size)
}
return (ret, addr);
}
// the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license
function ecrecovery(bytes32 hash, bytes sig) internal returns (bool, address) {
bytes32 r;
bytes32 s;
uint8 v;
if (sig.length != 65)
return (false, 0);
// The signature format is a compact form of:
// {bytes32 r}{bytes32 s}{uint8 v}
// Compact means, uint8 is not padded to 32 bytes.
assembly {
r := mload(add(sig, 32))
s := mload(add(sig, 64))
// Here we are loading the last 32 bytes. We exploit the fact that
// 'mload' will pad with zeroes if we overread.
// There is no 'mload8' to do this, but that would be nicer.
v := byte(0, mload(add(sig, 96)))
// Alternative solution:
// 'byte' is not working due to the Solidity parser, so lets
// use the second best option, 'and'
// v := and(mload(add(sig, 65)), 255)
}
// albeit non-transactional signatures are not specified by the YP, one would expect it
// to match the YP range of [27, 28]
//
// geth uses [0, 1] and some clients have followed. This might change, see:
// https://github.com/ethereum/go-ethereum/issues/2053
if (v < 27)
v += 27;
if (v != 27 && v != 28)
return (false, 0);
return safer_ecrecover(hash, v, r, s);
}
}
contract Mortal {
/* Define variable owner of the type address */
address owner;
/* This function is executed at initialization and sets the owner of the contract */
constructor() public {
owner = msg.sender;
}
/* Function to recover the funds on the contract */
function kill() public {
if (msg.sender == owner) {
selfdestruct(owner);
}
}
}
contract BucketContract is Mortal {
mapping (address => uint) public betAmount;
mapping (address => bool) public hasBet;
address[] public betters;
uint[] public amountWon;
uint[] public amountBid;
address public owner;
uint256 public totalBid;
bool public payoutComplete;
bool public isWinner;
uint256 public gameId;
uint256 public referralAmount;
uint256 public settlementType;
uint256 public processed;/* no of payouts processed */
uint256 public remaining;/* no of payouts remaining */
uint256 public totalBalance;
GameContract public gameContractObject;
event StateChanged(bool status, string message);
event SendReward(address winner, uint amount);
modifier onlyGameContractOrOwner {
require (msg.sender == address(gameContractObject) || msg.sender == owner);
_;
}
modifier onlyGameContract {
require (msg.sender == address(gameContractObject));
_;
}
modifier onlyOwner {
require(msg.sender == owner);
_;
}
constructor(address gcAddress/*, uint256 _gameId*/) public {
owner = msg.sender;
// gameId = _gameId;
gameContractObject = GameContract(gcAddress);
emit StateChanged(true, "bucket contract deployed");
}
function getBettersArrayLength() public view returns(uint256) {
return betters.length;
}
function getBetter() public view returns(address[]) {
return betters;
}
function getWinningAmount() public view returns(uint[]) {
return amountWon;
}
function getBidAmount() public view returns(uint[]) {
return amountBid;
}
function setGameId(uint256 _gameId) public onlyGameContract {
assert(gameId == 0);
gameId = _gameId;
}
function bet() public payable /*gameRunning*/ {
require (msg.value >= gameContractObject.getPrice(), "Too small bet");
assert(gameContractObject.canBet());
if (hasBet[msg.sender] == false) {
betters.push(msg.sender);
hasBet[msg.sender] = true;
}
betAmount[msg.sender] += msg.value;
totalBid += msg.value;
emit StateChanged(true,"Bet submitted");
}
function transferToOtherBucketContract(address _bucketContract) public onlyGameContractOrOwner {
_bucketContract.transfer(address(this).balance);
}
function () public payable {
emit StateChanged(true, "Ether Received");
}
/* setWinner function - set the winning contract */
function setWinner(uint256 _gameId) public onlyGameContractOrOwner {
require(_gameId == gameContractObject.gameId());
assert(gameContractObject.state() == GameContract.GameState.RandomReceived);
assert(!isWinner);
isWinner = true;
address houseAddressOne = gameContractObject.getHouseAddressOne();
address houseAddressTwo = gameContractObject.getHouseAddressTwo();
address referralAddress = gameContractObject.getReferralAddress();
if (totalBid == 0) {
houseAddressOne.transfer((address(this).balance * 70)/100);
houseAddressTwo.transfer(address(this).balance);
settlementType = 0;
} else if (totalBid == address(this).balance) {
settlementType = 1;
} else {
totalBalance = address(this).balance - totalBid;
uint256 houseAddressShare = gameContractObject.getHouseAddressShare();
houseAddressOne.transfer((totalBalance * houseAddressShare * 70) / 10000);/* 70 percent of house share goes to bucket one */
houseAddressTwo.transfer((totalBalance * houseAddressShare * 30) / 10000);/* 30 percent of house share goes to bucket one */
referralAmount = (totalBalance * gameContractObject.getReferralAddressShare())/100;
referralAddress.transfer(referralAmount);
totalBalance = address(this).balance;
settlementType = 2;
}
processed = 0;
remaining = betters.length;
}
function payout() public onlyGameContract {
assert(!payoutComplete);
assert(isWinner);
uint256 batchsize = gameContractObject.getBatchSize();
uint256 i;
if (betters.length - processed <= batchsize) {
batchsize = remaining;
}
uint256 processLimit = processed + batchsize;
if (settlementType == 0) {
gameContractObject.finishGame();
return;
}
else if (settlementType == 1) {
for (i = processed; i < processLimit && i < betters.length; i++) {
address better = betters[i];
uint amount = betAmount[better];
better.transfer(amount);
emit SendReward(better, amount);
amountWon.push(amount);
}
} else if (settlementType == 2) {
for (i = processed; i < processLimit && i < betters.length; i++) {
address better2 = betters[i];
uint amountToTransfer = (betAmount[better2]*totalBalance)/totalBid;
better2.transfer(amountToTransfer);
emit SendReward(better2, amountToTransfer);
amountWon.push(amountToTransfer - betAmount[better2]);
amountBid.push(betAmount[better2]);
}
}
processed = i;
remaining = betters.length - processed;
if (processed > betters.length - 1) {
payoutComplete = true;
gameContractObject.getHouseAddressOne().transfer(address(this).balance);
gameContractObject.finishGame();
}
}
function resetBucket() public onlyGameContract {
assert(gameContractObject.state() == GameContract.GameState.Finishing);
uint256 i;
for (i = 0; i < betters.length; i++) {
delete betAmount[betters[i]];
delete hasBet[betters[i]];
}
delete betters;
delete amountWon;
delete amountBid;
totalBid = 0;
payoutComplete = false;
isWinner = false;
gameId = 0;
referralAmount = 0;
settlementType = 0;
processed = 0;/* no of payouts processed */
remaining = 0;/* no of payouts remaining */
totalBalance = 0;
}
function drain() public onlyGameContractOrOwner {
assert(gameContractObject.state() == GameContract.GameState.Deployed || gameContractObject.state() == GameContract.GameState.Finished);
gameContractObject.getHouseAddressOne().transfer((address(this).balance * 7) / 10);
gameContractObject.getHouseAddressTwo().transfer(address(this).balance);
emit StateChanged(true, "Drain Successful");
}
}
contract GameContract is usingOraclize, Mortal {
enum GameState {
Deployed,
Started,
RandomRequesting,
RandomReceived,
Settled,
Finishing,
Finished
}
address public owner;
address public otherSettingOwner;
uint256 public price = 1e16;
uint256 public gameId;
uint public startTime = 0;
address public houseAddressOne;
address public houseAddressTwo;
address public referralAddress;
address public recentWinnerContract;
uint256 public shareOfHouseAddress = 10;
uint256 public shareOfReferralAddress = 20;
uint256 public batchSize = 50;
uint256 public callbackGas = 100000; /* The gas amount required to call oraclize function */
GameContract.GameState public state = GameContract.GameState.Deployed;
mapping (uint256 => bool) public isGameSettled;
mapping (uint256 => address) public winningContract;
mapping (uint256 => uint256) public typeOfWinnerContract;
mapping (uint256 => uint256) public randomValue;
mapping (bytes32 => uint256) public oraclizeQueryData;
mapping (uint256 => bool) public oraclizeValueReceived;
mapping (uint256 => bool) public settlement;
BucketContract public bucketOneContractObject;
BucketContract public bucketTwoContractObject;
event StateChanged(bool state, string status);
event CallbackEvent(uint256 number);
modifier onlyOwner {
require(msg.sender == owner);
_;
}
modifier onlyOtherSettingOwner {
require(msg.sender == otherSettingOwner);
_;
}
modifier onlyContractOrOwner {
require (msg.sender == address(this) || msg.sender == owner);
_;
}
constructor( address _houseAddressOne, address _houseAddressTwo, address _referralAddress, address _otherSettingOwner) public {
require(_houseAddressOne != address(0) && _houseAddressTwo != address(0) && _referralAddress != address(0) && _otherSettingOwner != address(0));
owner = msg.sender;
houseAddressOne = _houseAddressOne;
houseAddressTwo = _houseAddressTwo;
referralAddress = _referralAddress;
otherSettingOwner = _otherSettingOwner;
bucketOneContractObject = new BucketContract(address(this));
bucketTwoContractObject = new BucketContract(address(this));
emit StateChanged(true, "Contract deployed");
}
function kill() public onlyOwner {
// kill buckets first
if (address(bucketOneContractObject) != 0) {
bucketOneContractObject.kill();
}
if (address(bucketTwoContractObject) != 0) {
bucketTwoContractObject.kill();
}
super.kill();
}
/*House Share will be value between 1-100*/
function setHouseAddressShare (uint _share) public onlyOtherSettingOwner {
require(_share >= 1 && _share <= 100);
require(_share + shareOfReferralAddress <= 100);
shareOfHouseAddress = _share;
}
function setReferralAddressShare (uint _share) public onlyOtherSettingOwner {
require(_share >= 1 && _share <= 100);
require(_share + shareOfHouseAddress <= 100);
shareOfReferralAddress = _share;
}
function getHouseAddressShare() public view returns(uint) {
return shareOfHouseAddress;
}
function getReferralAddressShare() public view returns(uint) {
return shareOfReferralAddress;
}
function setPrice (uint256 _price) public onlyOtherSettingOwner {
require(_price != 0);
price = _price;
}
function setHouseAddressOne(address _houseAddress) public onlyOtherSettingOwner {
require(_houseAddress != address(0));
houseAddressOne = _houseAddress;
}
function setHouseAddressTwo(address _houseAddress) public onlyOtherSettingOwner {
require(_houseAddress != address(0));
houseAddressTwo = _houseAddress;
}
function setReferralAddress(address _referralAddress) public onlyOtherSettingOwner {
require(_referralAddress != address(0));
referralAddress = _referralAddress;
}
function setCallbackGas(uint256 _value) public onlyOtherSettingOwner {
require(_value > 0);
callbackGas = _value;
}
function setBatchSize(uint256 _size) public onlyOtherSettingOwner {
require(_size != 0);
batchSize = _size;
}
function setOwner(address _owner) public onlyOwner {
require(_owner != address(0));
owner = _owner;
}
function setOtherSettingOwner(address _otherSettingOwner) public onlyOtherSettingOwner {
require(_otherSettingOwner != address(0));
otherSettingOwner = _otherSettingOwner;
}
function getPrice () public view returns (uint256 _price) {
return price;
}
function getGameId() public view returns (uint256 _gameId) {
return gameId;
}
function getHouseAddressOne() public view returns (address _houseAddress) {
return houseAddressOne;
}
function getHouseAddressTwo() public view returns (address _houseAddress) {
return houseAddressTwo;
}
function getReferralAddress() public view returns(address _referralAddress) {
return referralAddress;
}
function getWinnerContractAddress(uint256 _gameId) public view returns(address) {
return winningContract[_gameId];
}
function getWinnerType(uint256 _gameId) public view returns(uint256) {
return typeOfWinnerContract[_gameId];
}
function getBatchSize() public view returns(uint256) {
return batchSize;
}
function beginGame (uint256 _gameId) public payable onlyOwner {
require(_gameId != 0);
require(isGameSettled[_gameId] != true);
assert(state == GameContract.GameState.Deployed || state == GameContract.GameState.Finished);
gameId = _gameId;
bucketOneContractObject.setGameId(_gameId);
bucketTwoContractObject.setGameId(_gameId);
startTime = block.timestamp; // solium-disable-line
state = GameContract.GameState.Started;
emit StateChanged(true, "game started");
}
function () public payable {
emit StateChanged(true, "Ether Received");
}
function finalize() public onlyOwner {
require(oraclizeValueReceived[gameId] == false);
bytes32 queryId = oraclize_newRandomDSQuery(0, 7, callbackGas);
oraclizeQueryData[queryId] = gameId;
state = GameContract.GameState.RandomRequesting;
}
function __callback(bytes32 _queryId, string _result) public {
require(msg.sender == oraclize_cbAddress());
assert(oraclizeValueReceived[oraclizeQueryData[_queryId]] == false);
uint256 maxRange = 2**(8*7);
uint256 randomNumber = uint256(keccak256(abi.encodePacked(_result))) % maxRange;
randomValue[oraclizeQueryData[_queryId]] = randomNumber;
oraclizeValueReceived[oraclizeQueryData[_queryId]] = true;
state = GameContract.GameState.RandomReceived;
emit CallbackEvent(randomNumber);
}
function startSettlement() public onlyOwner {
require(state == GameContract.GameState.RandomReceived);
assert(oraclizeValueReceived[gameId]);
assert(settlement[gameId] == false);
uint256 randomNumber = randomValue[gameId];
if (randomNumber % 2 == 0) {
bucketTwoContractObject.transferToOtherBucketContract(address(bucketOneContractObject));
recentWinnerContract = address(bucketOneContractObject);
winningContract[gameId] = address(bucketOneContractObject);
bucketOneContractObject.setWinner(gameId);
settlement[gameId] = true;
state = GameContract.GameState.Settled;
} else {
bucketOneContractObject.transferToOtherBucketContract(address(bucketTwoContractObject));
recentWinnerContract = address(bucketTwoContractObject);
winningContract[gameId] = address(bucketTwoContractObject);
bucketTwoContractObject.setWinner(gameId);
settlement[gameId] = true;
state = GameContract.GameState.Settled;
}
}
function payout() public onlyOwner {
require(state == GameContract.GameState.Settled);
BucketContract(recentWinnerContract).payout();
}
function canBet() public view returns (bool) {
return state == GameContract.GameState.Started;
}
function finishGame() public {
require(msg.sender == winningContract[gameId] || msg.sender == recentWinnerContract);
isGameSettled[gameId] = true;
state = GameContract.GameState.Finishing;
emit StateChanged(true, "game finished");
}
function reset() public onlyOwner {
require(state == GameContract.GameState.Finishing);
bucketOneContractObject.resetBucket();
bucketTwoContractObject.resetBucket();
state = GameContract.GameState.Finished;
emit StateChanged(true, "game reset");
}
function drain() public onlyOwner {
houseAddressOne.transfer((address(this).balance * 7) / 10);
houseAddressTwo.transfer(address(this).balance);
emit StateChanged(true, "Drain Successful");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"setCallbackGas","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"winningContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"referralAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"houseAddressOne","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gameId","type":"uint256"}],"name":"beginGame","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"oraclizeQueryData","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_queryId","type":"bytes32"},{"name":"_result","type":"string"}],"name":"__callback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"otherSettingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"houseAddressTwo","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReferralAddress","outputs":[{"name":"_referralAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"},{"name":"proof","type":"bytes"}],"name":"__callback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getReferralAddressShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getHouseAddressShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_gameId","type":"uint256"}],"name":"getWinnerType","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bucketOneContractObject","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"canBet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_size","type":"uint256"}],"name":"setBatchSize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"settlement","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"recentWinnerContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"payout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getHouseAddressTwo","outputs":[{"name":"_houseAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_houseAddress","type":"address"}],"name":"setHouseAddressTwo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"startSettlement","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"typeOfWinnerContract","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_share","type":"uint256"}],"name":"setHouseAddressShare","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"drain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getPrice","outputs":[{"name":"_price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_gameId","type":"uint256"}],"name":"getWinnerContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"callbackGas","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBatchSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"shareOfHouseAddress","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_houseAddress","type":"address"}],"name":"setHouseAddressOne","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_share","type":"uint256"}],"name":"setReferralAddressShare","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referralAddress","type":"address"}],"name":"setReferralAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"randomValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"shareOfReferralAddress","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getGameId","outputs":[{"name":"_gameId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"isGameSettled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bucketTwoContractObject","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getHouseAddressOne","outputs":[{"name":"_houseAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reset","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_otherSettingOwner","type":"address"}],"name":"setOtherSettingOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"oraclizeValueReceived","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"batchSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_houseAddressOne","type":"address"},{"name":"_houseAddressTwo","type":"address"},{"name":"_referralAddress","type":"address"},{"name":"_otherSettingOwner","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"state","type":"bool"},{"indexed":false,"name":"status","type":"string"}],"name":"StateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"number","type":"uint256"}],"name":"CallbackEvent","type":"event"}]Contract Creation Code
6080604052662386f26fc100006008556000600a908155600f5560146010556032601155620186a06012556013805460ff191690553480156200004157600080fd5b5060405160808062004bd5833981016040908152815160208301519183015160609093015160058054600160a060020a03191633179055909290600160a060020a038416158015906200009c5750600160a060020a03831615155b8015620000b15750600160a060020a03821615155b8015620000c65750600160a060020a03811615155b1515620000d257600080fd5b6006805433600160a060020a031991821617909155600b80548216600160a060020a0387811691909117909155600c80548316868316179055600d8054831685831617905560078054909216908316179055306200012f6200024a565b600160a060020a03909116815260405190819003602001906000f0801580156200015d573d6000803e3d6000fd5b50601b8054600160a060020a031916600160a060020a039290921691909117905530620001896200024a565b600160a060020a03909116815260405190819003602001906000f080158015620001b7573d6000803e3d6000fd5b50601c8054600160a060020a031916600160a060020a03929092169190911790556040805160018152602081018290526011818301527f436f6e7472616374206465706c6f796564000000000000000000000000000000606082015290517fa5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a35353916080908290030190a1505050506200025b565b604051611ad880620030fd83390190565b612e92806200026b6000396000f30060806040526004361061026e5763ffffffff60e060020a60003504166301d09a3c81146102c55780630f82c8c5146102df57806313af40351461031357806315a88d221461033457806319950a4c1461034957806325a7650a1461035e57806327d8026c1461036957806327dc297e146103935780632d37d425146103f15780632e88fd851461040657806331c359fa1461041b57806338bbfa501461043057806340c97617146104cc5780634182fa46146104e157806341c0e1b5146104f65780634bb278f31461050b5780634dd0f157146105205780635242de1d1461053857806355ec671a1461054d578063576f35e31461057657806360ad23911461058e5780636224dc3e146105a657806363bd1d4a146105bb578063662a3b81146105d0578063680b5eba146105e557806377e170391461060657806378e979251461061b5780637b4f17cd146106305780638da5cb5b1461064857806391b7f5ed1461065d57806396283310146106755780639890220b1461068d57806398d5fdca146106a257806399f02ab5146106b75780639fecb69f146106cf578063a035b1fe146106e4578063a10132ad146106f9578063a25f55d41461070e578063a2eee47d14610723578063a31e5e9714610738578063aa45b11e14610759578063b3caba5a14610771578063b7a2de1814610792578063be7e039f146107aa578063c0bd8351146107bf578063c19d93fb146107d4578063c983c01a1461080d578063cd7b662814610825578063d7c81b551461083a578063d811b1001461084f578063d826f88f14610864578063e6f4c4a714610879578063f0f7c40f1461089a578063f4daaba1146108b2575b604080516001815260208101829052600e818301527f457468657220526563656976656400000000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1005b3480156102d157600080fd5b506102dd6004356108c7565b005b3480156102eb57600080fd5b506102f76004356108f0565b60408051600160a060020a039092168252519081900360200190f35b34801561031f57600080fd5b506102dd600160a060020a036004351661090b565b34801561034057600080fd5b506102f7610959565b34801561035557600080fd5b506102f7610968565b6102dd600435610977565b34801561037557600080fd5b50610381600435610b5e565b60408051918252519081900360200190f35b34801561039f57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102dd958335953695604494919390910191908190840183828082843750949750610b709650505050505050565b3480156103fd57600080fd5b506102f7610d10565b34801561041257600080fd5b506102f7610d1f565b34801561042757600080fd5b506102f7610d2e565b34801561043c57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102dd95833595369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610d3e9650505050505050565b3480156104d857600080fd5b50610381610d43565b3480156104ed57600080fd5b50610381610d49565b34801561050257600080fd5b506102dd610d4f565b34801561051757600080fd5b506102dd610e6a565b34801561052c57600080fd5b50610381600435610ede565b34801561054457600080fd5b506102f7610ef0565b34801561055957600080fd5b50610562610eff565b604080519115158252519081900360200190f35b34801561058257600080fd5b506102dd600435610f1a565b34801561059a57600080fd5b50610562600435610f42565b3480156105b257600080fd5b506102f7610f57565b3480156105c757600080fd5b506102dd610f66565b3480156105dc57600080fd5b506102f7611007565b3480156105f157600080fd5b506102dd600160a060020a0360043516611016565b34801561061257600080fd5b506102dd611064565b34801561062757600080fd5b506103816113c2565b34801561063c57600080fd5b506103816004356113c8565b34801561065457600080fd5b506102f76113da565b34801561066957600080fd5b506102dd6004356113e9565b34801561068157600080fd5b506102dd600435611411565b34801561069957600080fd5b506102dd61145d565b3480156106ae57600080fd5b50610381611547565b3480156106c357600080fd5b506102f760043561154d565b3480156106db57600080fd5b506102dd611568565b3480156106f057600080fd5b5061038161162d565b34801561070557600080fd5b50610381611633565b34801561071a57600080fd5b50610381611639565b34801561072f57600080fd5b5061038161163f565b34801561074457600080fd5b506102dd600160a060020a0360043516611645565b34801561076557600080fd5b506102dd600435611693565b34801561077d57600080fd5b506102dd600160a060020a03600435166116df565b34801561079e57600080fd5b5061038160043561172d565b3480156107b657600080fd5b5061038161173f565b3480156107cb57600080fd5b50610381611745565b3480156107e057600080fd5b506107e961174b565b604051808260068111156107f957fe5b60ff16815260200191505060405180910390f35b34801561081957600080fd5b50610562600435611754565b34801561083157600080fd5b506102f7611769565b34801561084657600080fd5b50610381611778565b34801561085b57600080fd5b506102f761177e565b34801561087057600080fd5b506102dd61178d565b34801561088557600080fd5b506102dd600160a060020a03600435166118fc565b3480156108a657600080fd5b5061056260043561194a565b3480156108be57600080fd5b5061038161195f565b600754600160a060020a031633146108de57600080fd5b600081116108eb57600080fd5b601255565b601560205260009081526040902054600160a060020a031681565b600654600160a060020a0316331461092257600080fd5b600160a060020a038116151561093757600080fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b600d54600160a060020a031681565b600b54600160a060020a031681565b600654600160a060020a0316331461098e57600080fd5b80151561099a57600080fd5b60008181526014602052604090205460ff161515600114156109bb57600080fd5b600060135460ff1660068111156109ce57fe5b14806109ea5750600660135460ff1660068111156109e857fe5b145b15156109f257fe5b6009819055601b54604080517f5926cf13000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a0390921691635926cf139160248082019260009290919082900301818387803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b5050601c54604080517f5926cf13000000000000000000000000000000000000000000000000000000008152600481018690529051600160a060020a039092169350635926cf13925060248082019260009290919082900301818387803b158015610adb57600080fd5b505af1158015610aef573d6000803e3d6000fd5b505042600a5550506013805460ff191660019081179091556040805191825260208201819052600c828201527f67616d6520737461727465640000000000000000000000000000000000000000606083015251600080516020612e47833981519152916080908290030190a150565b60186020526000908152604090205481565b600080610b7b611965565b600160a060020a03163314610b8f57600080fd5b6000848152601860209081526040808320548352601990915290205460ff1615610bb557fe5b670100000000000000915081836040516020018082805190602001908083835b60208310610bf45780518252601f199092019160209182019101610bd5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610c575780518252601f199092019160209182019101610c38565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515610c8d57fe5b600086815260186020908152604080832080548452601783528184209590940694859055925482526019815290829020805460ff19908116600117909155601380549091166003179055815183815291519293507fd73f199d24506c6a66f156765f2434c927383914c10d3de489f010c64086e29a92918290030190a150505050565b600754600160a060020a031681565b600c54600160a060020a031681565b600d54600160a060020a03165b90565b505050565b60105490565b600f5490565b600654600160a060020a03163314610d6657600080fd5b601b54600160a060020a031615610de357601b60009054906101000a9004600160a060020a0316600160a060020a03166341c0e1b56040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050505b601c54600160a060020a031615610e6057601c60009054906101000a9004600160a060020a0316600160a060020a03166341c0e1b56040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b505050505b610e68611b56565b565b600654600090600160a060020a03163314610e8457600080fd5b60095460009081526019602052604090205460ff1615610ea357600080fd5b610eb260006007601254611b77565b6009546000828152601860205260409020556013805491925060029160ff19166001835b021790555050565b60009081526016602052604090205490565b601b54600160a060020a031681565b6000600160135460ff166006811115610f1457fe5b14905090565b600754600160a060020a03163314610f3157600080fd5b801515610f3d57600080fd5b601155565b601a6020526000908152604090205460ff1681565b600e54600160a060020a031681565b600654600160a060020a03163314610f7d57600080fd5b600460135460ff166006811115610f9057fe5b14610f9a57600080fd5b600e60009054906101000a9004600160a060020a0316600160a060020a03166363bd1d4a6040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610fed57600080fd5b505af1158015611001573d6000803e3d6000fd5b50505050565b600c54600160a060020a031690565b600754600160a060020a0316331461102d57600080fd5b600160a060020a038116151561104257600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600654600090600160a060020a0316331461107e57600080fd5b600360135460ff16600681111561109157fe5b1461109b57600080fd5b60095460009081526019602052604090205460ff1615156110b857fe5b6009546000908152601a602052604090205460ff16156110d457fe5b5060095460009081526017602052604090205460028106151561125857601c54601b54604080517fd811b7ca000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169163d811b7ca91602480830192600092919082900301818387803b15801561115b57600080fd5b505af115801561116f573d6000803e3d6000fd5b5050601b8054600e8054600160a060020a03928316600160a060020a031991821681179092556009805460009081526015602052604080822080549094169094179092559354935482517f0df7160200000000000000000000000000000000000000000000000000000000815260048101919091529151939092169450630df7160293506024808201939182900301818387803b15801561120f57600080fd5b505af1158015611223573d6000803e3d6000fd5b50506009546000908152601a60205260409020805460ff19908116600117909155601380549091166004179055506113bf9050565b601b54601c54604080517fd811b7ca000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169163d811b7ca91602480830192600092919082900301818387803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b5050601c8054600e8054600160a060020a03928316600160a060020a031991821681179092556009805460009081526015602052604080822080549094169094179092559354935482517f0df7160200000000000000000000000000000000000000000000000000000000815260048101919091529151939092169450630df7160293506024808201939182900301818387803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b50506009546000908152601a602052604090208054600160ff1991821681179092556013805460049550909350169083610ed6565b50565b600a5481565b60166020526000908152604090205481565b600654600160a060020a031681565b600754600160a060020a0316331461140057600080fd5b80151561140c57600080fd5b600855565b600754600160a060020a0316331461142857600080fd5b6001811015801561143a575060648111155b151561144557600080fd5b6010546064908201111561145857600080fd5b600f55565b600654600160a060020a0316331461147457600080fd5b600b54604051600160a060020a0390911690600a30316007020480156108fc02916000818181858888f193505050501580156114b4573d6000803e3d6000fd5b50600c54604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156114ef573d6000803e3d6000fd5b506040805160018152602081018290526010818301527f447261696e205375636365737366756c0000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1565b60085490565b600090815260156020526040902054600160a060020a031690565b600954600090815260156020526040902054600160a060020a031633148061159a5750600e54600160a060020a031633145b15156115a557600080fd5b60095460009081526014602052604090208054600160ff1991821681179092556013805460059391921690830217905550604080516001815260208101829052600d818301527f67616d652066696e69736865640000000000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1565b60085481565b60125481565b60115490565b600f5481565b600754600160a060020a0316331461165c57600080fd5b600160a060020a038116151561167157600080fd5b600b8054600160a060020a031916600160a060020a0392909216919091179055565b600754600160a060020a031633146116aa57600080fd5b600181101580156116bc575060648111155b15156116c757600080fd5b600f54606490820111156116da57600080fd5b601055565b600754600160a060020a031633146116f657600080fd5b600160a060020a038116151561170b57600080fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b60176020526000908152604090205481565b60105481565b60095490565b60135460ff1681565b60146020526000908152604090205460ff1681565b601c54600160a060020a031681565b60095481565b600b54600160a060020a031690565b600654600160a060020a031633146117a457600080fd5b600560135460ff1660068111156117b757fe5b146117c157600080fd5b601b60009054906101000a9004600160a060020a0316600160a060020a031663883cf6306040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561181457600080fd5b505af1158015611828573d6000803e3d6000fd5b50505050601c60009054906101000a9004600160a060020a0316600160a060020a031663883cf6306040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561187f57600080fd5b505af1158015611893573d6000803e3d6000fd5b50506013805460ff191660061790555050604080516001815260208101829052600a818301527f67616d652072657365740000000000000000000000000000000000000000000060608201529051600080516020612e47833981519152916080908290030190a1565b600754600160a060020a0316331461191357600080fd5b600160a060020a038116151561192857600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b60196020526000908152604090205460ff1681565b60115481565b60008054600160a060020a03161580611990575060005461198e90600160a060020a0316611ebf565b155b156119a15761199f6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156119f357600080fd5b505af1158015611a07573d6000803e3d6000fd5b505050506040513d6020811015611a1d57600080fd5b5051600154600160a060020a03908116911614611ad2576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611a8657600080fd5b505af1158015611a9a573d6000803e3d6000fd5b505050506040513d6020811015611ab057600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600160009054906101000a9004600160a060020a0316600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2557600080fd5b505af1158015611b39573d6000803e3d6000fd5b505050506040513d6020811015611b4f57600080fd5b5051905090565b600554600160a060020a0316331415610e6857600554600160a060020a0316ff5b600060608060606000611b88612d86565b60008089118015611b9a575060208911155b1515611ba557600080fd5b60408051600180825281830190925290602080830190803883390190505095508860f860020a02866000815181101515611bdb57fe5b906020010190600160f860020a031916908160001a90535060408051602080825281830190925290808201610400803883395050604080516020808252818301909252929750905080820161040080388339019050509350611c3b611ed3565b925060208552424118600143034018602086015260208452826020850152606060405190810160405280868152602001878152602001858152509150611cb88a6040805190810160405280600681526020017f72616e646f6d0000000000000000000000000000000000000000000000000000815250848b612093565b9050611eb28178010000000000000000000000000000000000000000000000008c028460016020020151600286600060200201516040518082805190602001908083835b60208310611d1b5780518252601f199092019160209182019101611cfc565b51815160209384036101000a600019018019909216911617905260405191909301945091925050808303816000865af1158015611d5c573d6000803e3d6000fd5b5050506040513d6020811015611d7157600080fd5b5051604080880151905177ffffffffffffffffffffffffffffffffffffffffffffffff19851660208281019182528551919260280191908601908083835b60208310611dce5780518252601f199092019160209182019101611daf565b51815160209384036101000a60001901801990921691161790529201858152845190830192850191508083835b60208310611e1a5780518252601f199092019160209182019101611dfb565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040526040518082805190602001908083835b60208310611e805780518252601f199092019160209182019101611e61565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206122a2565b9998505050505050505050565b3b90565b6000611ecd6122b4565b92915050565b60008054600160a060020a03161580611efe5750600054611efc90600160a060020a0316611ebf565b155b15611f0f57611f0d6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611f6157600080fd5b505af1158015611f75573d6000803e3d6000fd5b505050506040513d6020811015611f8b57600080fd5b5051600154600160a060020a03908116911614612040576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611ff457600080fd5b505af1158015612008573d6000803e3d6000fd5b505050506040513d602081101561201e57600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600160009054906101000a9004600160a060020a0316600160a060020a031663abaa5f3e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2557600080fd5b60008054606090600160a060020a031615806120c157506000546120bf90600160a060020a0316611ebf565b155b156120d2576120d06000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561212457600080fd5b505af1158015612138573d6000803e3d6000fd5b505050506040513d602081101561214e57600080fd5b5051600154600160a060020a03908116911614612203576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156121b757600080fd5b505af11580156121cb573d6000803e3d6000fd5b505050506040513d60208110156121e157600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b6040805160038082526080820190925290816020015b606081526020019060019003908161221957505084518151919250908290600090811061224257fe5b60209081029091010152836001602002015181600181518110151561226357fe5b6020908102919091010152604084015181518290600290811061228257fe5b60209081029091010152612298868683866125dc565b9695505050505050565b60009182526003602052604090912055565b6000806122d4731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed611ebf565b11156123455760008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905560408051808201909152600b81527f6574685f6d61696e6e6574000000000000000000000000000000000000000000602082015261233d906129ee565b506001610d3b565b600061236473c03a2615d5efaf5f49f60b7bb6583eaec212fdf1611ebf565b11156123cd5760008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905560408051808201909152600c81527f6574685f726f707374656e330000000000000000000000000000000000000000602082015261233d906129ee565b60006123ec73b7a07bcf2ba2f2703b24c0691b5278999c59ac7e611ebf565b11156124555760008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905560408051808201909152600981527f6574685f6b6f76616e0000000000000000000000000000000000000000000000602082015261233d906129ee565b600061247473146500cfd35b22e4a392fe0adc06de1a1368ed48611ebf565b11156124dd5760008054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905560408051808201909152600b81527f6574685f72696e6b656279000000000000000000000000000000000000000000602082015261233d906129ee565b60006124fc736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475611ebf565b1115612530575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb4751790556001610d3b565b600061254f7320e12a1f859b3feae5fb2a0a32c18f5a65555bbf611ebf565b1115612583575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf1790556001610d3b565b60006125a27351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa611ebf565b11156125d6575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa1790556001610d3b565b50600090565b600080548190606090600160a060020a0316158061260c575060005461260a90600160a060020a0316611ebf565b155b1561261d5761261b6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561266f57600080fd5b505af1158015612683573d6000803e3d6000fd5b505050506040513d602081101561269957600080fd5b5051600154600160a060020a0390811691161461274e576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561270257600080fd5b505af1158015612716573d6000803e3d6000fd5b505050506040513d602081101561272c57600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600154604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810187905260048101918252885160448201528851600160a060020a0390931692632ef3accc928a928992829160640190602086019080838360005b838110156127ce5781810151838201526020016127b6565b50505050905090810190601f1680156127fb5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561281b57600080fd5b505af115801561282f573d6000803e3d6000fd5b505050506040513d602081101561284557600080fd5b50519150670de0b6b3a76400003a85020182111561286657600092506129e4565b61286f85612a05565b6001546040517fc55c1cb6000000000000000000000000000000000000000000000000000000008152600481018a8152606482018890526080602483019081528a5160848401528a51949550600160a060020a039093169363c55c1cb69387938d938d9389938d939091604482019160a40190602088019080838360005b838110156129055781810151838201526020016128ed565b50505050905090810190601f1680156129325780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b8381101561296557818101518382015260200161294d565b50505050905090810190601f1680156129925780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b50505050506040513d60208110156129df57600080fd5b505192505b5050949350505050565b8051612a01906002906020840190612dae565b5050565b606060008060606000806000606060008060008b5199506000985089604051908082528060200260200182016040528015612a5457816020015b6060815260200190600190039081612a3f5790505b509750600096505b89871015612aed578b87815181101515612a7257fe5b906020019060200201518888815181101515612a8a57fe5b90602001906020020181905250601760018989815181101515612aa957fe5b906020019060200201515103811515612abe57fe5b048888815181101515612acd57fe5b906020019060200201515101600301890198508680600101975050612a5c565b6040805160018b01808252601f1960209c8d01168201909b019091526000965060808b019550898015612b2a578160200160208202803883390190505b5093505b6001861015612b815760f860020a85028660018110612b4957fe5b1a60f860020a028487815181101515612b5e57fe5b906020010190600160f860020a031916908160001a905350600190950194612b2e565b600096505b89871015612d765783517f5f0000000000000000000000000000000000000000000000000000000000000090859088908110612bbe57fe5b906020010190600160f860020a031916908160001a905350600190950194600092505b8787815181101515612bef57fe5b9060200190602002015151831015612d1f57601783061515612cb1576018838989815181101515612c1c57fe5b9060200190602002015151031015612c4e57828888815181101515612c3d57fe5b906020019060200201515103612c51565b60175b60400191508590505b80860360011115612cb15760f860020a820281870360018110612c7957fe5b1a60f860020a028487815181101515612c8e57fe5b906020010190600160f860020a031916908160001a905350600190950194612c5a565b8787815181101515612cbf57fe5b9060200190602002015183815181101515612cd657fe5b90602001015160f860020a900460f860020a028487815181101515612cf757fe5b906020010190600160f860020a031916908160001a9053506001958601959290920191612be1565b83517fff0000000000000000000000000000000000000000000000000000000000000090859088908110612d4f57fe5b906020010190600160f860020a031916908160001a90535060019687019690950194612b86565b50919a9950505050505050505050565b6060604051908101604052806003905b6060815260200190600190039081612d965790505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612def57805160ff1916838001178555612e1c565b82800160010185558215612e1c579182015b82811115612e1c578251825591602001919060010190612e01565b50612e28929150612e2c565b5090565b610d3b91905b80821115612e285760008155600101612e325600a5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a35353a165627a7a72305820509d6961d46ffd79919060fd15303ee55516cb4f2680e8a61b26db785f6ef2590029608060405234801561001057600080fd5b50604051602080611ad883398101604081815291516000805433600160a060020a03199182168117909255600680548216909217909155600f8054909116600160a060020a03831617905560018252602082018390526018838301527f6275636b657420636f6e7472616374206465706c6f7965640000000000000000606083015291517fa5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a35353916080908290030190a150611a09806100cf6000396000f3006080604052600436106101505763ffffffff60e060020a6000350416630df7160281146101b957806311610c25146101d3578063136f1016146101db5780631a9b0b7c14610210578063262007c0146102255780632ce5c2841461028a5780632d180328146102b15780632faebb20146102c957806334aa7e00146102de57806341c0e1b5146102ff5780635005537e1461031457806355234ec0146103295780635926cf131461033e57806363bd1d4a146103565780636bd68a8f1461036b5780636dad2a9114610380578063735ea6e21461039557806375024ae5146103ad578063883cf630146103c25780638a9e8671146103d75780638da5cb5b146103ec5780639890220b1461041d5780639fda5d6214610432578063ad7a672f1461044a578063bbe7a75b1461045f578063d7c81b5514610474578063d811b7ca14610489578063eb01d83b146104aa575b604080516001815260208101829052600e818301527f4574686572205265636569766564000000000000000000000000000000000000606082015290517fa5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a353539181900360800190a1005b3480156101c557600080fd5b506101d16004356104bf565b005b6101d1610a91565b3480156101e757600080fd5b506101fc600160a060020a0360043516610d0f565b604080519115158252519081900360200190f35b34801561021c57600080fd5b506101fc610d24565b34801561023157600080fd5b5061023a610d32565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561027657818101518382015260200161025e565b505050509050019250505060405180910390f35b34801561029657600080fd5b5061029f610d95565b60408051918252519081900360200190f35b3480156102bd57600080fd5b5061029f600435610d9b565b3480156102d557600080fd5b5061029f610dba565b3480156102ea57600080fd5b5061029f600160a060020a0360043516610dc0565b34801561030b57600080fd5b506101d1610dd2565b34801561032057600080fd5b506101fc610df5565b34801561033557600080fd5b5061029f610dfe565b34801561034a57600080fd5b506101d1600435610e04565b34801561036257600080fd5b506101d1610e2a565b34801561037757600080fd5b5061029f611374565b34801561038c57600080fd5b5061023a61137a565b3480156103a157600080fd5b5061029f6004356113d1565b3480156103b957600080fd5b5061029f6113df565b3480156103ce57600080fd5b506101d16113e5565b3480156103e357600080fd5b5061029f61156b565b3480156103f857600080fd5b50610401611571565b60408051600160a060020a039092168252519081900360200190f35b34801561042957600080fd5b506101d1611580565b34801561043e57600080fd5b5061040160043561189d565b34801561045657600080fd5b5061029f6118c5565b34801561046b57600080fd5b506104016118cb565b34801561048057600080fd5b5061029f6118da565b34801561049557600080fd5b506101d1600160a060020a03600435166118e0565b3480156104b657600080fd5b5061023a611948565b600f54600090819081908190600160a060020a03163314806104eb5750600654600160a060020a031633145b15156104f657600080fd5b600f60009054906101000a9004600160a060020a0316600160a060020a031663d7c81b556040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561054957600080fd5b505af115801561055d573d6000803e3d6000fd5b505050506040513d602081101561057357600080fd5b5051851461058057600080fd5b600f546040805160e060020a63c19d93fb0281529051600392600160a060020a03169163c19d93fb9160048083019260209291908290030181600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050506040513d60208110156105f457600080fd5b5051600681111561060157fe5b1461060857fe5b600854610100900460ff161561061a57fe5b6008805461ff001916610100179055600f54604080517fd811b1000000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163d811b100916004808201926020929091908290030181600087803b15801561068957600080fd5b505af115801561069d573d6000803e3d6000fd5b505050506040513d60208110156106b357600080fd5b5051600f54604080517f662a3b810000000000000000000000000000000000000000000000000000000081529051929650600160a060020a039091169163662a3b81916004808201926020929091908290030181600087803b15801561071857600080fd5b505af115801561072c573d6000803e3d6000fd5b505050506040513d602081101561074257600080fd5b5051600f54604080517f31c359fa0000000000000000000000000000000000000000000000000000000081529051929550600160a060020a03909116916331c359fa916004808201926020929091908290030181600087803b1580156107a757600080fd5b505af11580156107bb573d6000803e3d6000fd5b505050506040513d60208110156107d157600080fd5b5051600754909250151561085d57604051600160a060020a03851690606430316046020480156108fc02916000818181858888f1935050505015801561081b573d6000803e3d6000fd5b50604051600160a060020a03841690303180156108fc02916000818181858888f19350505050158015610852573d6000803e3d6000fd5b506000600b55610a7f565b60075430311415610872576001600b55610a7f565b600754303103600e55600f54604080517f4182fa460000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921691634182fa46916004808201926020929091908290030181600087803b1580156108db57600080fd5b505af11580156108ef573d6000803e3d6000fd5b505050506040513d602081101561090557600080fd5b5051600e54909150600160a060020a038516906108fc90612710908402604602049081150290604051600060405180830381858888f19350505050158015610951573d6000803e3d6000fd5b5082600160a060020a03166108fc61271083600e5402601e0281151561097357fe5b049081150290604051600060405180830381858888f1935050505015801561099f573d6000803e3d6000fd5b50600f54604080517f40c976170000000000000000000000000000000000000000000000000000000081529051606492600160a060020a0316916340c976179160048083019260209291908290030181600087803b158015610a0057600080fd5b505af1158015610a14573d6000803e3d6000fd5b505050506040513d6020811015610a2a57600080fd5b5051600e5402811515610a3957fe5b04600a819055604051600160a060020a0384169180156108fc02916000818181858888f19350505050158015610a73573d6000803e3d6000fd5b503031600e556002600b555b50506000600c555050600354600d5550565b600f60009054906101000a9004600160a060020a0316600160a060020a03166398d5fdca6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ae457600080fd5b505af1158015610af8573d6000803e3d6000fd5b505050506040513d6020811015610b0e57600080fd5b5051341015610b7e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f546f6f20736d616c6c2062657400000000000000000000000000000000000000604482015290519081900360640190fd5b600f60009054906101000a9004600160a060020a0316600160a060020a03166355ec671a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610bd157600080fd5b505af1158015610be5573d6000803e3d6000fd5b505050506040513d6020811015610bfb57600080fd5b50511515610c0557fe5b3360009081526002602052604090205460ff161515610c86576003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff1916339081179091556000908152600260205260409020805460ff191690911790555b3360009081526001602081815260409283902080543490810190915560078054909101905582519182528101829052600d818301527f426574207375626d697474656400000000000000000000000000000000000000606082015290517fa5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a353539181900360800190a1565b60026020526000908152604090205460ff1681565b600854610100900460ff1681565b60606003805480602002602001604051908101604052809291908181526020018280548015610d8a57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610d6c575b505050505090505b90565b600c5481565b6005805482908110610da957fe5b600091825260209091200154905081565b60035490565b60016020526000908152604090205481565b600054600160a060020a0316331415610df357600054600160a060020a0316ff5b565b60085460ff1681565b600d5481565b600f54600160a060020a03163314610e1b57600080fd5b60095415610e2557fe5b600955565b600f54600090819081908190819081908190600160a060020a03163314610e5057600080fd5b60085460ff1615610e5d57fe5b600854610100900460ff161515610e7057fe5b600f60009054906101000a9004600160a060020a0316600160a060020a031663a25f55d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b505050506040513d6020811015610eed57600080fd5b5051600c5460035491985090038710610f0657600d5496505b86600c54019450600b5460001415610f8857600f60009054906101000a9004600160a060020a0316600160a060020a0316639fecb69f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610f6b57600080fd5b505af1158015610f7f573d6000803e3d6000fd5b5050505061136b565b600b546001141561109a57600c5495505b8486108015610fa9575060035486105b15611095576003805487908110610fbc57fe5b6000918252602080832090910154600160a060020a0316808352600190915260408083205490519196509450859185156108fc02918691818181858888f19350505050158015611010573d6000803e3d6000fd5b5060408051600160a060020a03861681526020810185905281517fdd98c2e0f63fdbf67a6103620ad6f0ff8ece02b505f42dfd9933c03bcce1389d929181900390910190a160048054600181810183556000929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018490559590950194610f99565b611215565b600b546002141561121557600c5495505b84861080156110bb575060035486105b156112155760038054879081106110ce57fe5b6000918252602080832090910154600754600e54600160a060020a0390921680855260019093526040909320549194500281151561110857fe5b04905081600160a060020a03166108fc829081150290604051600060405180830381858888f19350505050158015611144573d6000803e3d6000fd5b5060408051600160a060020a03841681526020810183905281517fdd98c2e0f63fdbf67a6103620ad6f0ff8ece02b505f42dfd9933c03bcce1389d929181900390910190a1600160a060020a038216600090815260016020819052604082208054600480548085019091559085037f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101555460058054808401825593527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09092019190915595909501946110ab565b600c869055600354868103600d556000190186111561136b576008805460ff19166001179055600f54604080517fd811b1000000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163d811b100916004808201926020929091908290030181600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b505050506040513d60208110156112c557600080fd5b5051604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156112fe573d6000803e3d6000fd5b50600f60009054906101000a9004600160a060020a0316600160a060020a0316639fecb69f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561135257600080fd5b505af1158015611366573d6000803e3d6000fd5b505050505b50505050505050565b600a5481565b60606004805480602002602001604051908101604052809291908181526020018280548015610d8a57602002820191906000526020600020905b8154815260200190600101908083116113b4575050505050905090565b6004805482908110610da957fe5b600b5481565b600f54600090600160a060020a031633146113ff57600080fd5b600f546040805160e060020a63c19d93fb0281529051600592600160a060020a03169163c19d93fb9160048083019260209291908290030181600087803b15801561144957600080fd5b505af115801561145d573d6000803e3d6000fd5b505050506040513d602081101561147357600080fd5b5051600681111561148057fe5b1461148757fe5b5060005b60035481101561151657600160006003838154811015156114a857fe5b6000918252602080832090910154600160a060020a031683528201929092526040018120819055600380546002929190849081106114e257fe5b6000918252602080832090910154600160a060020a031683528201929092526040019020805460ff1916905560010161148b565b6115226003600061199e565b61152e6004600061199e565b61153a6005600061199e565b50600060078190556008805461ffff191690556009819055600a819055600b819055600c819055600d819055600e55565b60075481565b600654600160a060020a031681565b600f54600160a060020a03163314806115a35750600654600160a060020a031633145b15156115ae57600080fd5b600f546040805160e060020a63c19d93fb0281529051600092600160a060020a03169163c19d93fb91600480830192602092919082900301818787803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b505050506040513d602081101561162157600080fd5b5051600681111561162e57fe5b14806116b85750600f546040805160e060020a63c19d93fb0281529051600692600160a060020a03169163c19d93fb9160048083019260209291908290030181600087803b15801561167f57600080fd5b505af1158015611693573d6000803e3d6000fd5b505050506040513d60208110156116a957600080fd5b505160068111156116b657fe5b145b15156116c057fe5b600f60009054906101000a9004600160a060020a0316600160a060020a031663d811b1006040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561171357600080fd5b505af1158015611727573d6000803e3d6000fd5b505050506040513d602081101561173d57600080fd5b5051604051600160a060020a0390911690600a30316007020480156108fc02916000818181858888f1935050505015801561177c573d6000803e3d6000fd5b50600f60009054906101000a9004600160a060020a0316600160a060020a031663662a3b816040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b505050506040513d60208110156117fa57600080fd5b5051604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015611833573d6000803e3d6000fd5b506040805160018152602081018290526010818301527f447261696e205375636365737366756c00000000000000000000000000000000606082015290517fa5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a353539181900360800190a1565b60038054829081106118ab57fe5b600091825260209091200154600160a060020a0316905081565b600e5481565b600f54600160a060020a031681565b60095481565b600f54600160a060020a03163314806119035750600654600160a060020a031633145b151561190e57600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015611944573d6000803e3d6000fd5b5050565b60606005805480602002602001604051908101604052809291908181526020018280548015610d8a57602002820191906000526020600020908154815260200190600101908083116113b4575050505050905090565b50805460008255906000526020600020908101906119bc91906119bf565b50565b610d9291905b808211156119d957600081556001016119c5565b50905600a165627a7a72305820442ed2b459e10c6f07d76c20547225e07da966621a64ecabda83e7af9168dcd8002900000000000000000000000010c494b0aa052d82b1910449ab2d3e88f8c89e8f000000000000000000000000817178a29c5fc05584b0d039fdf000048f1bf125000000000000000000000000b4ce4486898370cf70ee4788b62d296bc764ef440000000000000000000000005a757b51e8923cfa6849eb8d6217078886fcf7cf
Deployed Bytecode
0x60806040526004361061026e5763ffffffff60e060020a60003504166301d09a3c81146102c55780630f82c8c5146102df57806313af40351461031357806315a88d221461033457806319950a4c1461034957806325a7650a1461035e57806327d8026c1461036957806327dc297e146103935780632d37d425146103f15780632e88fd851461040657806331c359fa1461041b57806338bbfa501461043057806340c97617146104cc5780634182fa46146104e157806341c0e1b5146104f65780634bb278f31461050b5780634dd0f157146105205780635242de1d1461053857806355ec671a1461054d578063576f35e31461057657806360ad23911461058e5780636224dc3e146105a657806363bd1d4a146105bb578063662a3b81146105d0578063680b5eba146105e557806377e170391461060657806378e979251461061b5780637b4f17cd146106305780638da5cb5b1461064857806391b7f5ed1461065d57806396283310146106755780639890220b1461068d57806398d5fdca146106a257806399f02ab5146106b75780639fecb69f146106cf578063a035b1fe146106e4578063a10132ad146106f9578063a25f55d41461070e578063a2eee47d14610723578063a31e5e9714610738578063aa45b11e14610759578063b3caba5a14610771578063b7a2de1814610792578063be7e039f146107aa578063c0bd8351146107bf578063c19d93fb146107d4578063c983c01a1461080d578063cd7b662814610825578063d7c81b551461083a578063d811b1001461084f578063d826f88f14610864578063e6f4c4a714610879578063f0f7c40f1461089a578063f4daaba1146108b2575b604080516001815260208101829052600e818301527f457468657220526563656976656400000000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1005b3480156102d157600080fd5b506102dd6004356108c7565b005b3480156102eb57600080fd5b506102f76004356108f0565b60408051600160a060020a039092168252519081900360200190f35b34801561031f57600080fd5b506102dd600160a060020a036004351661090b565b34801561034057600080fd5b506102f7610959565b34801561035557600080fd5b506102f7610968565b6102dd600435610977565b34801561037557600080fd5b50610381600435610b5e565b60408051918252519081900360200190f35b34801561039f57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102dd958335953695604494919390910191908190840183828082843750949750610b709650505050505050565b3480156103fd57600080fd5b506102f7610d10565b34801561041257600080fd5b506102f7610d1f565b34801561042757600080fd5b506102f7610d2e565b34801561043c57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102dd95833595369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610d3e9650505050505050565b3480156104d857600080fd5b50610381610d43565b3480156104ed57600080fd5b50610381610d49565b34801561050257600080fd5b506102dd610d4f565b34801561051757600080fd5b506102dd610e6a565b34801561052c57600080fd5b50610381600435610ede565b34801561054457600080fd5b506102f7610ef0565b34801561055957600080fd5b50610562610eff565b604080519115158252519081900360200190f35b34801561058257600080fd5b506102dd600435610f1a565b34801561059a57600080fd5b50610562600435610f42565b3480156105b257600080fd5b506102f7610f57565b3480156105c757600080fd5b506102dd610f66565b3480156105dc57600080fd5b506102f7611007565b3480156105f157600080fd5b506102dd600160a060020a0360043516611016565b34801561061257600080fd5b506102dd611064565b34801561062757600080fd5b506103816113c2565b34801561063c57600080fd5b506103816004356113c8565b34801561065457600080fd5b506102f76113da565b34801561066957600080fd5b506102dd6004356113e9565b34801561068157600080fd5b506102dd600435611411565b34801561069957600080fd5b506102dd61145d565b3480156106ae57600080fd5b50610381611547565b3480156106c357600080fd5b506102f760043561154d565b3480156106db57600080fd5b506102dd611568565b3480156106f057600080fd5b5061038161162d565b34801561070557600080fd5b50610381611633565b34801561071a57600080fd5b50610381611639565b34801561072f57600080fd5b5061038161163f565b34801561074457600080fd5b506102dd600160a060020a0360043516611645565b34801561076557600080fd5b506102dd600435611693565b34801561077d57600080fd5b506102dd600160a060020a03600435166116df565b34801561079e57600080fd5b5061038160043561172d565b3480156107b657600080fd5b5061038161173f565b3480156107cb57600080fd5b50610381611745565b3480156107e057600080fd5b506107e961174b565b604051808260068111156107f957fe5b60ff16815260200191505060405180910390f35b34801561081957600080fd5b50610562600435611754565b34801561083157600080fd5b506102f7611769565b34801561084657600080fd5b50610381611778565b34801561085b57600080fd5b506102f761177e565b34801561087057600080fd5b506102dd61178d565b34801561088557600080fd5b506102dd600160a060020a03600435166118fc565b3480156108a657600080fd5b5061056260043561194a565b3480156108be57600080fd5b5061038161195f565b600754600160a060020a031633146108de57600080fd5b600081116108eb57600080fd5b601255565b601560205260009081526040902054600160a060020a031681565b600654600160a060020a0316331461092257600080fd5b600160a060020a038116151561093757600080fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b600d54600160a060020a031681565b600b54600160a060020a031681565b600654600160a060020a0316331461098e57600080fd5b80151561099a57600080fd5b60008181526014602052604090205460ff161515600114156109bb57600080fd5b600060135460ff1660068111156109ce57fe5b14806109ea5750600660135460ff1660068111156109e857fe5b145b15156109f257fe5b6009819055601b54604080517f5926cf13000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a0390921691635926cf139160248082019260009290919082900301818387803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b5050601c54604080517f5926cf13000000000000000000000000000000000000000000000000000000008152600481018690529051600160a060020a039092169350635926cf13925060248082019260009290919082900301818387803b158015610adb57600080fd5b505af1158015610aef573d6000803e3d6000fd5b505042600a5550506013805460ff191660019081179091556040805191825260208201819052600c828201527f67616d6520737461727465640000000000000000000000000000000000000000606083015251600080516020612e47833981519152916080908290030190a150565b60186020526000908152604090205481565b600080610b7b611965565b600160a060020a03163314610b8f57600080fd5b6000848152601860209081526040808320548352601990915290205460ff1615610bb557fe5b670100000000000000915081836040516020018082805190602001908083835b60208310610bf45780518252601f199092019160209182019101610bd5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610c575780518252601f199092019160209182019101610c38565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515610c8d57fe5b600086815260186020908152604080832080548452601783528184209590940694859055925482526019815290829020805460ff19908116600117909155601380549091166003179055815183815291519293507fd73f199d24506c6a66f156765f2434c927383914c10d3de489f010c64086e29a92918290030190a150505050565b600754600160a060020a031681565b600c54600160a060020a031681565b600d54600160a060020a03165b90565b505050565b60105490565b600f5490565b600654600160a060020a03163314610d6657600080fd5b601b54600160a060020a031615610de357601b60009054906101000a9004600160a060020a0316600160a060020a03166341c0e1b56040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050505b601c54600160a060020a031615610e6057601c60009054906101000a9004600160a060020a0316600160a060020a03166341c0e1b56040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b505050505b610e68611b56565b565b600654600090600160a060020a03163314610e8457600080fd5b60095460009081526019602052604090205460ff1615610ea357600080fd5b610eb260006007601254611b77565b6009546000828152601860205260409020556013805491925060029160ff19166001835b021790555050565b60009081526016602052604090205490565b601b54600160a060020a031681565b6000600160135460ff166006811115610f1457fe5b14905090565b600754600160a060020a03163314610f3157600080fd5b801515610f3d57600080fd5b601155565b601a6020526000908152604090205460ff1681565b600e54600160a060020a031681565b600654600160a060020a03163314610f7d57600080fd5b600460135460ff166006811115610f9057fe5b14610f9a57600080fd5b600e60009054906101000a9004600160a060020a0316600160a060020a03166363bd1d4a6040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610fed57600080fd5b505af1158015611001573d6000803e3d6000fd5b50505050565b600c54600160a060020a031690565b600754600160a060020a0316331461102d57600080fd5b600160a060020a038116151561104257600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600654600090600160a060020a0316331461107e57600080fd5b600360135460ff16600681111561109157fe5b1461109b57600080fd5b60095460009081526019602052604090205460ff1615156110b857fe5b6009546000908152601a602052604090205460ff16156110d457fe5b5060095460009081526017602052604090205460028106151561125857601c54601b54604080517fd811b7ca000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169163d811b7ca91602480830192600092919082900301818387803b15801561115b57600080fd5b505af115801561116f573d6000803e3d6000fd5b5050601b8054600e8054600160a060020a03928316600160a060020a031991821681179092556009805460009081526015602052604080822080549094169094179092559354935482517f0df7160200000000000000000000000000000000000000000000000000000000815260048101919091529151939092169450630df7160293506024808201939182900301818387803b15801561120f57600080fd5b505af1158015611223573d6000803e3d6000fd5b50506009546000908152601a60205260409020805460ff19908116600117909155601380549091166004179055506113bf9050565b601b54601c54604080517fd811b7ca000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169163d811b7ca91602480830192600092919082900301818387803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b5050601c8054600e8054600160a060020a03928316600160a060020a031991821681179092556009805460009081526015602052604080822080549094169094179092559354935482517f0df7160200000000000000000000000000000000000000000000000000000000815260048101919091529151939092169450630df7160293506024808201939182900301818387803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b50506009546000908152601a602052604090208054600160ff1991821681179092556013805460049550909350169083610ed6565b50565b600a5481565b60166020526000908152604090205481565b600654600160a060020a031681565b600754600160a060020a0316331461140057600080fd5b80151561140c57600080fd5b600855565b600754600160a060020a0316331461142857600080fd5b6001811015801561143a575060648111155b151561144557600080fd5b6010546064908201111561145857600080fd5b600f55565b600654600160a060020a0316331461147457600080fd5b600b54604051600160a060020a0390911690600a30316007020480156108fc02916000818181858888f193505050501580156114b4573d6000803e3d6000fd5b50600c54604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156114ef573d6000803e3d6000fd5b506040805160018152602081018290526010818301527f447261696e205375636365737366756c0000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1565b60085490565b600090815260156020526040902054600160a060020a031690565b600954600090815260156020526040902054600160a060020a031633148061159a5750600e54600160a060020a031633145b15156115a557600080fd5b60095460009081526014602052604090208054600160ff1991821681179092556013805460059391921690830217905550604080516001815260208101829052600d818301527f67616d652066696e69736865640000000000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1565b60085481565b60125481565b60115490565b600f5481565b600754600160a060020a0316331461165c57600080fd5b600160a060020a038116151561167157600080fd5b600b8054600160a060020a031916600160a060020a0392909216919091179055565b600754600160a060020a031633146116aa57600080fd5b600181101580156116bc575060648111155b15156116c757600080fd5b600f54606490820111156116da57600080fd5b601055565b600754600160a060020a031633146116f657600080fd5b600160a060020a038116151561170b57600080fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b60176020526000908152604090205481565b60105481565b60095490565b60135460ff1681565b60146020526000908152604090205460ff1681565b601c54600160a060020a031681565b60095481565b600b54600160a060020a031690565b600654600160a060020a031633146117a457600080fd5b600560135460ff1660068111156117b757fe5b146117c157600080fd5b601b60009054906101000a9004600160a060020a0316600160a060020a031663883cf6306040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561181457600080fd5b505af1158015611828573d6000803e3d6000fd5b50505050601c60009054906101000a9004600160a060020a0316600160a060020a031663883cf6306040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561187f57600080fd5b505af1158015611893573d6000803e3d6000fd5b50506013805460ff191660061790555050604080516001815260208101829052600a818301527f67616d652072657365740000000000000000000000000000000000000000000060608201529051600080516020612e47833981519152916080908290030190a1565b600754600160a060020a0316331461191357600080fd5b600160a060020a038116151561192857600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b60196020526000908152604090205460ff1681565b60115481565b60008054600160a060020a03161580611990575060005461198e90600160a060020a0316611ebf565b155b156119a15761199f6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156119f357600080fd5b505af1158015611a07573d6000803e3d6000fd5b505050506040513d6020811015611a1d57600080fd5b5051600154600160a060020a03908116911614611ad2576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611a8657600080fd5b505af1158015611a9a573d6000803e3d6000fd5b505050506040513d6020811015611ab057600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600160009054906101000a9004600160a060020a0316600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2557600080fd5b505af1158015611b39573d6000803e3d6000fd5b505050506040513d6020811015611b4f57600080fd5b5051905090565b600554600160a060020a0316331415610e6857600554600160a060020a0316ff5b600060608060606000611b88612d86565b60008089118015611b9a575060208911155b1515611ba557600080fd5b60408051600180825281830190925290602080830190803883390190505095508860f860020a02866000815181101515611bdb57fe5b906020010190600160f860020a031916908160001a90535060408051602080825281830190925290808201610400803883395050604080516020808252818301909252929750905080820161040080388339019050509350611c3b611ed3565b925060208552424118600143034018602086015260208452826020850152606060405190810160405280868152602001878152602001858152509150611cb88a6040805190810160405280600681526020017f72616e646f6d0000000000000000000000000000000000000000000000000000815250848b612093565b9050611eb28178010000000000000000000000000000000000000000000000008c028460016020020151600286600060200201516040518082805190602001908083835b60208310611d1b5780518252601f199092019160209182019101611cfc565b51815160209384036101000a600019018019909216911617905260405191909301945091925050808303816000865af1158015611d5c573d6000803e3d6000fd5b5050506040513d6020811015611d7157600080fd5b5051604080880151905177ffffffffffffffffffffffffffffffffffffffffffffffff19851660208281019182528551919260280191908601908083835b60208310611dce5780518252601f199092019160209182019101611daf565b51815160209384036101000a60001901801990921691161790529201858152845190830192850191508083835b60208310611e1a5780518252601f199092019160209182019101611dfb565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040526040518082805190602001908083835b60208310611e805780518252601f199092019160209182019101611e61565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206122a2565b9998505050505050505050565b3b90565b6000611ecd6122b4565b92915050565b60008054600160a060020a03161580611efe5750600054611efc90600160a060020a0316611ebf565b155b15611f0f57611f0d6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611f6157600080fd5b505af1158015611f75573d6000803e3d6000fd5b505050506040513d6020811015611f8b57600080fd5b5051600154600160a060020a03908116911614612040576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611ff457600080fd5b505af1158015612008573d6000803e3d6000fd5b505050506040513d602081101561201e57600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600160009054906101000a9004600160a060020a0316600160a060020a031663abaa5f3e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2557600080fd5b60008054606090600160a060020a031615806120c157506000546120bf90600160a060020a0316611ebf565b155b156120d2576120d06000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561212457600080fd5b505af1158015612138573d6000803e3d6000fd5b505050506040513d602081101561214e57600080fd5b5051600154600160a060020a03908116911614612203576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156121b757600080fd5b505af11580156121cb573d6000803e3d6000fd5b505050506040513d60208110156121e157600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b6040805160038082526080820190925290816020015b606081526020019060019003908161221957505084518151919250908290600090811061224257fe5b60209081029091010152836001602002015181600181518110151561226357fe5b6020908102919091010152604084015181518290600290811061228257fe5b60209081029091010152612298868683866125dc565b9695505050505050565b60009182526003602052604090912055565b6000806122d4731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed611ebf565b11156123455760008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905560408051808201909152600b81527f6574685f6d61696e6e6574000000000000000000000000000000000000000000602082015261233d906129ee565b506001610d3b565b600061236473c03a2615d5efaf5f49f60b7bb6583eaec212fdf1611ebf565b11156123cd5760008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905560408051808201909152600c81527f6574685f726f707374656e330000000000000000000000000000000000000000602082015261233d906129ee565b60006123ec73b7a07bcf2ba2f2703b24c0691b5278999c59ac7e611ebf565b11156124555760008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905560408051808201909152600981527f6574685f6b6f76616e0000000000000000000000000000000000000000000000602082015261233d906129ee565b600061247473146500cfd35b22e4a392fe0adc06de1a1368ed48611ebf565b11156124dd5760008054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905560408051808201909152600b81527f6574685f72696e6b656279000000000000000000000000000000000000000000602082015261233d906129ee565b60006124fc736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475611ebf565b1115612530575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb4751790556001610d3b565b600061254f7320e12a1f859b3feae5fb2a0a32c18f5a65555bbf611ebf565b1115612583575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf1790556001610d3b565b60006125a27351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa611ebf565b11156125d6575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa1790556001610d3b565b50600090565b600080548190606090600160a060020a0316158061260c575060005461260a90600160a060020a0316611ebf565b155b1561261d5761261b6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561266f57600080fd5b505af1158015612683573d6000803e3d6000fd5b505050506040513d602081101561269957600080fd5b5051600154600160a060020a0390811691161461274e576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561270257600080fd5b505af1158015612716573d6000803e3d6000fd5b505050506040513d602081101561272c57600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600154604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810187905260048101918252885160448201528851600160a060020a0390931692632ef3accc928a928992829160640190602086019080838360005b838110156127ce5781810151838201526020016127b6565b50505050905090810190601f1680156127fb5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561281b57600080fd5b505af115801561282f573d6000803e3d6000fd5b505050506040513d602081101561284557600080fd5b50519150670de0b6b3a76400003a85020182111561286657600092506129e4565b61286f85612a05565b6001546040517fc55c1cb6000000000000000000000000000000000000000000000000000000008152600481018a8152606482018890526080602483019081528a5160848401528a51949550600160a060020a039093169363c55c1cb69387938d938d9389938d939091604482019160a40190602088019080838360005b838110156129055781810151838201526020016128ed565b50505050905090810190601f1680156129325780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b8381101561296557818101518382015260200161294d565b50505050905090810190601f1680156129925780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b50505050506040513d60208110156129df57600080fd5b505192505b5050949350505050565b8051612a01906002906020840190612dae565b5050565b606060008060606000806000606060008060008b5199506000985089604051908082528060200260200182016040528015612a5457816020015b6060815260200190600190039081612a3f5790505b509750600096505b89871015612aed578b87815181101515612a7257fe5b906020019060200201518888815181101515612a8a57fe5b90602001906020020181905250601760018989815181101515612aa957fe5b906020019060200201515103811515612abe57fe5b048888815181101515612acd57fe5b906020019060200201515101600301890198508680600101975050612a5c565b6040805160018b01808252601f1960209c8d01168201909b019091526000965060808b019550898015612b2a578160200160208202803883390190505b5093505b6001861015612b815760f860020a85028660018110612b4957fe5b1a60f860020a028487815181101515612b5e57fe5b906020010190600160f860020a031916908160001a905350600190950194612b2e565b600096505b89871015612d765783517f5f0000000000000000000000000000000000000000000000000000000000000090859088908110612bbe57fe5b906020010190600160f860020a031916908160001a905350600190950194600092505b8787815181101515612bef57fe5b9060200190602002015151831015612d1f57601783061515612cb1576018838989815181101515612c1c57fe5b9060200190602002015151031015612c4e57828888815181101515612c3d57fe5b906020019060200201515103612c51565b60175b60400191508590505b80860360011115612cb15760f860020a820281870360018110612c7957fe5b1a60f860020a028487815181101515612c8e57fe5b906020010190600160f860020a031916908160001a905350600190950194612c5a565b8787815181101515612cbf57fe5b9060200190602002015183815181101515612cd657fe5b90602001015160f860020a900460f860020a028487815181101515612cf757fe5b906020010190600160f860020a031916908160001a9053506001958601959290920191612be1565b83517fff0000000000000000000000000000000000000000000000000000000000000090859088908110612d4f57fe5b906020010190600160f860020a031916908160001a90535060019687019690950194612b86565b50919a9950505050505050505050565b6060604051908101604052806003905b6060815260200190600190039081612d965790505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612def57805160ff1916838001178555612e1c565b82800160010185558215612e1c579182015b82811115612e1c578251825591602001919060010190612e01565b50612e28929150612e2c565b5090565b610d3b91905b80821115612e285760008155600101612e325600a5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a35353a165627a7a72305820509d6961d46ffd79919060fd15303ee55516cb4f2680e8a61b26db785f6ef2590029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000010c494b0aa052d82b1910449ab2d3e88f8c89e8f000000000000000000000000817178a29c5fc05584b0d039fdf000048f1bf125000000000000000000000000b4ce4486898370cf70ee4788b62d296bc764ef440000000000000000000000005a757b51e8923cfa6849eb8d6217078886fcf7cf
-----Decoded View---------------
Arg [0] : _houseAddressOne (address): 0x10C494b0aa052D82B1910449Ab2D3e88F8C89e8f
Arg [1] : _houseAddressTwo (address): 0x817178A29c5fc05584b0d039FdF000048f1bF125
Arg [2] : _referralAddress (address): 0xB4cE4486898370CF70Ee4788b62d296Bc764ef44
Arg [3] : _otherSettingOwner (address): 0x5A757B51E8923cfA6849eB8d6217078886fcf7CF
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000010c494b0aa052d82b1910449ab2d3e88f8c89e8f
Arg [1] : 000000000000000000000000817178a29c5fc05584b0d039fdf000048f1bf125
Arg [2] : 000000000000000000000000b4ce4486898370cf70ee4788b62d296bc764ef44
Arg [3] : 0000000000000000000000005a757b51e8923cfa6849eb8d6217078886fcf7cf
Swarm Source
bzzr://442ed2b459e10c6f07d76c20547225e07da966621a64ecabda83e7af9168dcd8
Loading...
Loading
Loading...
Loading
Net Worth in USD
$418.37
Net Worth in ETH
0.21284
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,966.81 | 0.2127 | $418.37 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.