Contract Overview | iDice_2
Balance: 59.630221040727199991 Ether
Ether Value: $5,627.90 (@ $94.38/ETH)
Transactions: 25640 txns
 Latest 25 transactions from a total of 25640 transactions

TxHash Age From To Value [TxFee]
0xa97e741ee84468d7d21b6639c81f32a858c21d91f42735af579bc9a62ef4237e13 days 16 hrs ago0x000042425e06b0b1e8e20a811c91d6864608324b  IN   iDice_20 Ether0.00258488
0x3b2894371389a56629f5c059cc9355bd586d786ce3206ad6241b33d3adc672d313 days 16 hrs ago0x0819743fe98dfc6b5604672bba5473c9ad660b97  IN   iDice_20.5 Ether0.001645497
0x2c3a8f55c5664e0877b420a61bdcbebb6c0b6dcabd4b553ba5a0ee6841ea1a0e15 days 23 hrs ago0x00004242f4449d49ec9c64ad6f9385a56b2a6297  IN   iDice_20 Ether0.00258488
0xa1ae3c6b2f55371702e7bb32245fadbb74568be2d0aa3ac20e65242ec3be43a415 days 23 hrs ago0x625d4b53def2276ab4be7efecc1868c193beb5f1  IN   iDice_21.22 Ether0.0012615477
0x449591374bd81ee313827125b77b1c7bb1622692595ba4422f09293a0bc1c6ee33 days 10 hrs ago0xa82c409e974bb8d9c430a080329be9b5302c178d  IN   iDice_20.56657224 Ether0.00144
0xd85994b3566faadbbe21ae05bdff5d55924b0fc1ce72abfe3af8c585fb64bf9e41 days 14 hrs ago0x00004242ca3469e30ae4a62775fee6584ed3fdca  IN   iDice_20 Ether0.00279566
0x283ec461d0407a937deed7a2af55977658c138dc57979da508f30fd19de2d35841 days 14 hrs ago0x713ef9bae4e3295c97de81c124c4a10694f399a1  IN   iDice_21.8 Ether0.003839493
0xf367933bbcba042ffe86b90ade42047d837f2a629b58b3237a6d5b02bdc010cf112 days 7 hrs ago0x6fab7b83711ef0631a3371cedeca840f8e11e991  IN   iDice_20.15 Ether0.000089696
0xc10bd71bfc02c1b39b53c71a4678ff10e8cd965b0e6820132c5d0beb73cdcd4e112 days 7 hrs ago0x6fab7b83711ef0631a3371cedeca840f8e11e991  IN   iDice_20.1 Ether0.000089696
0xeb31225bb6a84856d3d1cc6ec2d15a86ab989e808d8e75a3d78b37b4f76e0316112 days 8 hrs ago0x6fab7b83711ef0631a3371cedeca840f8e11e991  IN   iDice_20.1 Ether0.000089696
0x8d93df94c3ee96c6232d1bacdaf1cab55e63aac21b1ebff80a5c4406cab37c2f112 days 8 hrs ago0x00004242ca3469e30ae4a62775fee6584ed3fdca  IN   iDice_20 Ether0.00258488
0xfb83ac166be226f2c604d351ef6a49cd30ee8933818d5061e75f4608473b5c9a112 days 8 hrs ago0x6fab7b83711ef0631a3371cedeca840f8e11e991  IN   iDice_20.5 Ether0.0091866
0xc27f9840c1395531d401a3fe8b6d67bfd8313c04b06422f36876e60c1503a6a4125 days 18 hrs ago0x00004242f4449d49ec9c64ad6f9385a56b2a6297  IN   iDice_20 Ether0.00258488
0x254c03d818a441b108d806f7860a2d243a8c5d021a4c2ae1794777788f19ec8c125 days 18 hrs ago0x25a144262b83fbc765dc9063050c47378f5db977  IN   iDice_20.25 Ether0.018100467
0x0e6f1c3e675d6cf04a327026892aa1482d6493f826a5a2f49fa8e678560598e8134 days 16 hrs ago0x429dc9d3197ef46439510a3d23363c6f84266b7a  IN   iDice_20 Ether0.000056968
0xf6271fd99f5dddac3770c10bbc4839513704db471b7e13b2f058922604d4213b134 days 16 hrs ago0x429dc9d3197ef46439510a3d23363c6f84266b7a  IN   iDice_20 Ether0.000170904
0x4094688eec22d1f332ab55d9610e0f1bede11d47e851723cc6569ec779549b4c138 days 10 hrs ago0xbe551345db7534d37c7f446d2391fb7102222151  IN   iDice_20 Ether0.000910733
0x7e44b52084a36d67c1d9984efaaf92fed27dc7541535b5d978c3a3f671b39d59138 days 10 hrs ago0xbe551345db7534d37c7f446d2391fb7102222151  IN   iDice_20 Ether0.000970634
0xf084237aac5204f1aeca45891d10f5193b681ad6127acf062b28bec01616500f140 days 15 hrs ago0x7abf5ae2078de94d645d924a86006e38b36ece13  IN   iDice_20 Ether0.000039654
0x8f1b265a16926f4d8dbbd427d0019a409882a172761ca0bd824c525027d0a2ce150 days 3 hrs agoOraclize  IN   iDice_20 Ether0.00279694
0xe9625173fefb2af1ef2401b53d317beda698c12fd461c15b36d95f5ec04f8ad3150 days 3 hrs ago0x85112a5f3470f82e27c27c94bd5ffec4994330ad  IN   iDice_20.5 Ether0.000548499
0x73d35b7e61524a783afd1fc1489891cd8a6f61caa3a3d2d514eb0265adb31b0d176 days 20 hrs agoOraclize  IN   iDice_20 Ether0.00258488
0xe46bc0db5737eff81be017f020018f8470987de4c64b5a79102462411c986e7a176 days 20 hrs ago0xc283086ab679d181da10428417b542374220d8ab  IN   iDice_20.2 Ether0.007496153
0x254b1f766a03e51aaf0b518cca0229ac4f3ce54428cc587e65fba14d5fa7728e187 days 18 hrs agoOraclize  IN   iDice_20 Ether0.00279694
0x68bb71bf58295253b71744b76e6cb907c2b2f889004e36899f52539f39368317187 days 18 hrs ago0x49b1d949e28b1f465497a48d6472afb25b2c4725  IN   iDice_213.3 Ether0.007496153
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0xa97e741ee84468d7d21b6639c81f32a858c21d91f42735af579bc9a62ef4237e682648613 days 16 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x0819743fe98dfc6b5604672bba5473c9ad660b971 wei
0x3b2894371389a56629f5c059cc9355bd586d786ce3206ad6241b33d3adc672d3682647413 days 16 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.00547312641937925 Ether
0x2c3a8f55c5664e0877b420a61bdcbebb6c0b6dcabd4b553ba5a0ee6841ea1a0e681265115 days 23 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x625d4b53def2276ab4be7efecc1868c193beb5f11 wei
0xa1ae3c6b2f55371702e7bb32245fadbb74568be2d0aa3ac20e65242ec3be43a4681264915 days 23 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.00547312641937925 Ether
0x449591374bd81ee313827125b77b1c7bb1622692595ba4422f09293a0bc1c6ee670646933 days 10 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.00527866020175 Ether
0xd85994b3566faadbbe21ae05bdff5d55924b0fc1ce72abfe3af8c585fb64bf9e665654041 days 14 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x713ef9bae4e3295c97de81c124c4a10694f399a11.956521739130434782 Ether
0x283ec461d0407a937deed7a2af55977658c138dc57979da508f30fd19de2d358665653641 days 14 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0052280397701359 Ether
0x8d93df94c3ee96c6232d1bacdaf1cab55e63aac21b1ebff80a5c4406cab37c2f6226838112 days 8 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x6fab7b83711ef0631a3371cedeca840f8e11e9911 wei
0xfb83ac166be226f2c604d351ef6a49cd30ee8933818d5061e75f4608473b5c9a6226835112 days 8 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051814421018253 Ether
0xc27f9840c1395531d401a3fe8b6d67bfd8313c04b06422f36876e60c1503a6a46147349125 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x25a144262b83fbc765dc9063050c47378f5db9771 wei
0x254c03d818a441b108d806f7860a2d243a8c5d021a4c2ae1794777788f19ec8c6147347125 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051940240589833 Ether
0x8f1b265a16926f4d8dbbd427d0019a409882a172761ca0bd824c525027d0a2ce6003149150 days 3 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x85112a5f3470f82e27c27c94bd5ffec4994330ad0.543478260869565217 Ether
0xe9625173fefb2af1ef2401b53d317beda698c12fd461c15b36d95f5ec04f8ad36003144150 days 3 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051133871366144 Ether
0x73d35b7e61524a783afd1fc1489891cd8a6f61caa3a3d2d514eb0265adb31b0d5847090176 days 20 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0xc283086ab679d181da10428417b542374220d8ab1 wei
0xe46bc0db5737eff81be017f020018f8470987de4c64b5a79102462411c986e7a5847088176 days 20 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051333587345408 Ether
0x254b1f766a03e51aaf0b518cca0229ac4f3ce54428cc587e65fba14d5fa7728e5783113187 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x49b1d949e28b1f465497a48d6472afb25b2c472514.456521739130434782 Ether
0x68bb71bf58295253b71744b76e6cb907c2b2f889004e36899f52539f393683175783111187 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051333587345408 Ether
0xc2ca1e0d78c52675be162eef90d997cf2766fc71af47f9d6d40cb2133e72867e5783096187 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x49b1d949e28b1f465497a48d6472afb25b2c47251 wei
0x519dccfb0dc9fa33ff01ed4021674ca37da1d58c6352c00d7a13ab1af626efda5782994187 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051333587345408 Ether
0xa9560c7f227d8a38728302c7ac867e17b3a88963cf8bd900f033fe9ef94c2ec45782952187 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x49b1d949e28b1f465497a48d6472afb25b2c47251 wei
0x9e8230c1626166885a9cb64397eef7e574dfc496fa631d7bdd0ffac741c9dd285782949187 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051333587345408 Ether
0x2ab21085d91369d5dfdc2b3738f4ad9555c9bcb8bedb65ac11cbcf272f6b1f495782929187 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x49b1d949e28b1f465497a48d6472afb25b2c47251 wei
0x6fbec8381fb68bbc019b6e951d05473fb4a9cad28236b3fffb85183f377f544c5782926187 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051333587345408 Ether
0x51c5311834f2e0884d6991d38377937bf30ceaeaf0237ba6e0e3d31373196d0d5694667203 days 10 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0xcf03ae6eeaf14aa68ec6123dbce4941675807d130.434782608695652173 Ether
0xdb02ce332ce5e10b87883707f76ab0aa9e4fb0a5c58909cac36db7537c039de55694483203 days 11 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051333587345408 Ether
[ Download CSV Export  ] 
Contract Name: IDice
Compiler Text: v0.4.11-nightly.2017.3.21+commit.6fb27dee
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.2;

// <ORACLIZE_API>
/*
Copyright (c) 2015-2016 Oraclize SRL
Copyright (c) 2016 Oraclize LTD



Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:



The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.



THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

//please import oraclizeAPI_pre0.4.sol when solidity < 0.4.0

contract OraclizeI {
    address public cbAddress;
    function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id);
    function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id);
    function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id);
    function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id);
    function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id);
    function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id);
    function getPrice(string _datasource) returns (uint _dsprice);
    function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice);
    function useCoupon(string _coupon);
    function setProofType(byte _proofType);
    function setConfig(bytes32 _config);
    function setCustomGasPrice(uint _gasPrice);
}
contract OraclizeAddrResolverI {
    function getAddress() 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 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);
        oraclize = OraclizeI(OAR.getAddress());
        _;
    }
    modifier coupon(string code){
        oraclize = OraclizeI(OAR.getAddress());
        oraclize.useCoupon(code);
        _;
    }

    function oraclize_setNetwork(uint8 networkID) internal returns(bool){
        if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet
            OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed);
            return true;
        }
        if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet
            OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1);
            return true;
        }
        if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet
            OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e);
            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) {
        __callback(myid, result, new bytes(0));
    }
    function __callback(bytes32 myid, string result, bytes proof) {
    }

    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_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_setConfig(bytes32 config) oraclizeAPI internal {
        return oraclize.setConfig(config);
    }

    function getCodeSize(address _addr) constant internal returns(uint _size) {
        assembly {
            _size := extcodesize(_addr)
        }
    }

    function parseAddr(string _a) internal 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 >= 48)&&(b1 <= 57)) b1 -= 48;
            if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87;
            else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48;
            iaddr += (b1*16+b2);
        }
        return address(iaddr);
    }

    function strCompare(string _a, string _b) internal 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 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 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 returns (string) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string _a, string _b, string _c) internal returns (string) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string _a, string _b) internal returns (string) {
        return strConcat(_a, _b, "", "", "");
    }

    // parseInt
    function parseInt(string _a) internal returns (uint) {
        return parseInt(_a, 0);
    }

    // parseInt(parseFloat*10^_b)
    function parseInt(string _a, uint _b) internal 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 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 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;
        }
}
// </ORACLIZE_API>

// Etheroll Functions
contract DSSafeAddSub {
    function safeToAdd(uint a, uint b) internal returns (bool) {
        return (a + b >= a);
    }
    function safeAdd(uint a, uint b) internal returns (uint) {
        if (!safeToAdd(a, b)) throw;
        return a + b;
    }

    function safeToSubtract(uint a, uint b) internal returns (bool) {
        return (b <= a);
    }

    function safeSub(uint a, uint b) internal returns (uint) {
        if (!safeToSubtract(a, b)) throw;
        return a - b;
    }
}

contract IDice is usingOraclize, DSSafeAddSub {

    /*
     * checks player profit and number is within range
    */
    modifier betIsValid(uint _betSize, uint _playerNumber) {
        if(((((_betSize * (100-(safeSub(_playerNumber,1)))) / (safeSub(_playerNumber,1))+_betSize))*houseEdge/houseEdgeDivisor)-_betSize > maxProfit || _betSize < minBet || _playerNumber < minNumber || _playerNumber > maxNumber) throw;
		_;
    }

    /*
     * checks game is currently active
    */
    modifier gameIsActive {
        if(gamePaused == true) throw;
		_;
    }

    /*
     * checks payouts are currently active
    */
    modifier payoutsAreActive {
        if(payoutsPaused == true) throw;
		_;
    }

    /*
     * checks only Oraclize address is calling
    */
    modifier onlyOraclize {
        if (msg.sender != oraclize_cbAddress()) throw;
        _;
    }

    /*
     * checks only owner address is calling
    */
    modifier onlyOwner {
         if (msg.sender != owner) throw;
         _;
    }

    /*
     * checks only treasury address is calling
    */
    modifier onlyTreasury {
         if (msg.sender != treasury) throw;
         _;
    }

    /*
     * game vars
    */

    uint constant public maxBetDivisor = 1000000;
    uint constant public houseEdgeDivisor = 1000;
    uint constant public maxNumber = 99;
    uint constant public minNumber = 2;
	bool public gamePaused;
    uint32 public gasForOraclize;
    address public owner;
    bool public payoutsPaused;
    address public treasury;
    uint public contractBalance;
    uint public houseEdge;
    uint public maxProfit;
    uint public maxProfitAsPercentOfHouse;
    uint public minBet;
    int public totalBets;
    uint public totalUserProfit;
    uint public maxPendingPayouts;

    /*
     * player vars
    */
    mapping (bytes32 => address) playerAddress;
    mapping (bytes32 => address) playerTempAddress;
    mapping (bytes32 => bytes32) playerBetId;
    mapping (bytes32 => uint) playerBetValue;
    mapping (bytes32 => uint) playerTempBetValue;
    mapping (bytes32 => uint) playerRandomResult;
    mapping (bytes32 => uint) playerDieResult;
    mapping (bytes32 => uint) playerNumber;
    mapping (address => uint) playerPendingWithdrawals;
    mapping (bytes32 => uint) playerProfit;
    mapping (bytes32 => uint) playerTempReward;


    /*
     * events
    */
    /* log bets + output to web3 for precise 'payout on win' field in UI */
    event LogBet(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RewardValue, uint ProfitValue, uint BetValue, uint PlayerNumber);
    /* output to web3 UI on bet result*/
    /* Status: 0=lose, 1=win, 2=win + failed send, 3=refund, 4=refund + failed send*/
	event LogResult(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed PlayerNumber, uint DiceResult, uint Value, int Status, bytes Proof);
    /* log manual refunds */
    event LogRefund(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RefundValue);
    /* log owner transfers */
    event LogOwnerTransfer(address indexed SentToAddress, uint indexed AmountTransferred);


    /*
     * init
    */
    function IDice() {

        owner = msg.sender;
        treasury = msg.sender;

        // This setnetwork is unncessary
        oraclize_setNetwork(networkID_auto);
        /* use TLSNotary for oraclize call */
		oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS);

        /* init 990 = 99% (1% houseEdge)*/
        ownerSetHouseEdge(935);

        // 25,000 = 2.5% is our max profit of the house
        ownerSetMaxProfitAsPercentOfHouse(25000);
        /* init min bet (0.2 ether) */

        ownerSetMinBet(200000000000000000);
        /* init gas for oraclize */
        gasForOraclize = 250000;

    }

    /*
     * public function
     * player submit bet
     * only if game is active & bet is valid can query oraclize and set player vars
    */
    function playerRollDice(uint rollUnder) public
        payable
        gameIsActive
        betIsValid(msg.value, rollUnder)
	{

        /*
        * assign partially encrypted query to oraclize
        * only the apiKey is encrypted
        * integer query is in plain text
        */
        bytes32 rngId = oraclize_query("nested", "[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random.data.0', '\\n{\"jsonrpc\":\"2.0\",\"method\":\"generateSignedIntegers\",\"params\":{\"apiKey\":${[decrypt] BDC819nTYbEiByr/iwndzNdSJ9JGJGRWwOTnFLhrFcxtWh53H7szcqHaC+Z/6UKH6T6N57RiPNmBWGeFSmqURHUqCSyN8vmUjVj9gEi7HmCoQlLSpx8QJTV9OxhFf43u8Vn7DugZcgyVcPEkEs2lTP1BXiAd},\"n\":1,\"min\":1,\"max\":100,\"replacement\":true,\"base\":10${[identity] \"}\"},\"id\":1${[identity] \"}\"}']", gasForOraclize);
        /* total number of bets (display purpose only) */
        totalBets += 1;
        /* map bet id to this oraclize query */
		playerBetId[rngId] = rngId;
        /* map player lucky number to this oraclize query */
		playerNumber[rngId] = rollUnder;
        /* map value of wager to this oraclize query */
        playerBetValue[rngId] = msg.value;
        /* map player address to this oraclize query */
        playerAddress[rngId] = msg.sender;
        /* safely map player reward to this oraclize query */
        playerProfit[rngId] = ((((msg.value * (100-(safeSub(rollUnder,1)))) / (safeSub(rollUnder,1))+msg.value))*houseEdge/houseEdgeDivisor)-msg.value;
        /* safely increase maxPendingPayouts liability - calc all pending payouts under assumption they win */
        maxPendingPayouts = safeAdd(maxPendingPayouts, playerProfit[rngId]);
        /* check contract can payout on win */
        if(maxPendingPayouts >= contractBalance) throw;
        /* provides accurate numbers for web3 and manual refunds in case of no oraclize __callback */
        LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]);

    }


    /*
    * semi-public function - only oraclize can call
    */
    /*TLSNotary for oraclize call */
	function __callback(bytes32 myid, string result, bytes proof) public
    //function __callback(bytes32 myid, string result) public
		onlyOraclize
		payoutsAreActive
	{

        /* player address mapped to query id does not exist */
        if (playerAddress[myid]==0x0) throw;

	    /* map result to player */
        playerRandomResult[myid] = parseInt(result);

        /* provably-fair random integer for player bounded to 1-100 inclusive
        *  sha3 the result from random.org and proof (IPFS address of TLSNotary proof)
        */
        playerDieResult[myid] = uint(sha3(playerRandomResult[myid], proof)) % (100 - 1) + 1;

        /* get the playerAddress for this query id */
        playerTempAddress[myid] = playerAddress[myid];
        /* delete playerAddress for this query id */
        delete playerAddress[myid];

        /* map the playerProfit for this query id */
        playerTempReward[myid] = playerProfit[myid];
        /* set  playerProfit for this query id to 0 */
        playerProfit[myid] = 0;

        /* safely reduce maxPendingPayouts liability */
        maxPendingPayouts = safeSub(maxPendingPayouts, playerTempReward[myid]);

        /* map the playerBetValue for this query id */
        playerTempBetValue[myid] = playerBetValue[myid];
        /* set  playerBetValue for this query id to 0 */
        playerBetValue[myid] = 0;

        /*
        * refund
        * if result from oraclize is 0 refund only the original bet value
        * if refund fails save refund value to playerPendingWithdrawals
        */
        if(playerDieResult[myid]==0){

             LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 3, proof);
            //LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 3);

            /*
            * send refund - external call to an untrusted contract
            * if send fails map refund value to playerPendingWithdrawals[address]
            * for withdrawal later via playerWithdrawPendingTransactions
            */
            if(!playerTempAddress[myid].send(playerTempBetValue[myid])){
                LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 4, proof);
                //LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 4);
                /* if send failed let player withdraw via playerWithdrawPendingTransactions */
                playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempBetValue[myid]);
            }

            return;
        }

        /*
        * pay winner
        * update contract balance to calculate new max bet
        * send reward
        * if send of reward fails save value to playerPendingWithdrawals
        */
        if(playerDieResult[myid] < playerNumber[myid]){

            /* safely reduce contract balance by player profit */
            contractBalance = safeSub(contractBalance, playerTempReward[myid]);

            /* safely calculate total payout as player profit plus original wager */
            playerTempReward[myid] = safeAdd(playerTempReward[myid], playerTempBetValue[myid]);

            totalUserProfit = totalUserProfit + playerTempReward[myid]; // total profits

            LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 1, proof);
            //LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 1);

            /* update maximum profit */
            setMaxProfit();

            /*
            * send win - external call to an untrusted contract
            * if send fails map reward value to playerPendingWithdrawals[address]
            * for withdrawal later via playerWithdrawPendingTransactions
            */
            if(!playerTempAddress[myid].send(playerTempReward[myid])){
                LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 2, proof);
                //LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 2);
                /* if send failed let player withdraw via playerWithdrawPendingTransactions */
                playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempReward[myid]);
            }

            return;
        }

        /*
        * no win
        * send 1 wei to a losing bet
        * update contract balance to calculate new max bet
        */
        if(playerDieResult[myid] >= playerNumber[myid]){

            LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 0, proof);
            //LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 0);

            /*
            *  safe adjust contractBalance
            *  setMaxProfit
            *  send 1 wei to losing bet
            */
            contractBalance = safeAdd(contractBalance, (playerTempBetValue[myid]-1));

            /* update maximum profit */
            setMaxProfit();

            /*
            * send 1 wei - external call to an untrusted contract
            */
            if(!playerTempAddress[myid].send(1)){
                /* if send failed let player withdraw via playerWithdrawPendingTransactions */
               playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], 1);
            }

            return;

        }

    }

    /*
    * public function
    * in case of a failed refund or win send
    */
    function playerWithdrawPendingTransactions() public
        payoutsAreActive
        returns (bool)
     {
        uint withdrawAmount = playerPendingWithdrawals[msg.sender];
        playerPendingWithdrawals[msg.sender] = 0;
        /* external call to untrusted contract */
        if (msg.sender.call.value(withdrawAmount)()) {
            return true;
        } else {
            /* if send failed revert playerPendingWithdrawals[msg.sender] = 0; */
            /* player can try to withdraw again later */
            playerPendingWithdrawals[msg.sender] = withdrawAmount;
            return false;
        }
    }

    /* check for pending withdrawals  */
    function playerGetPendingTxByAddress(address addressToCheck) public constant returns (uint) {
        return playerPendingWithdrawals[addressToCheck];
    }

    /*
    * internal function
    * sets max profit
    */
    function setMaxProfit() internal {
        maxProfit = (contractBalance*maxProfitAsPercentOfHouse)/maxBetDivisor;
    }

    /*
    * owner/treasury address only functions
    */
    function ()
        payable
    {
        playerRollDice(47);
    }

    function ownerAddBankroll ()
    payable
    onlyTreasury
    {
        /* safely update contract balance */
        contractBalance = safeAdd(contractBalance, msg.value);
        /* update the maximum profit */
        setMaxProfit();
    }

    /* set gas for oraclize query */
    function ownerSetOraclizeSafeGas(uint32 newSafeGasToOraclize) public
		onlyOwner
	{
    	gasForOraclize = newSafeGasToOraclize;
    }

    /* only owner address can set houseEdge */
    function ownerSetHouseEdge(uint newHouseEdge) public
		onlyOwner
    {
        houseEdge = newHouseEdge;
    }

    /* only owner address can set maxProfitAsPercentOfHouse */
    function ownerSetMaxProfitAsPercentOfHouse(uint newMaxProfitAsPercent) public
		onlyOwner
    {
        /* restrict to maximum profit of 5% of total house balance*/
        if(newMaxProfitAsPercent > 50000) throw;
        maxProfitAsPercentOfHouse = newMaxProfitAsPercent;
        setMaxProfit();
    }

    /* only owner address can set minBet */
    function ownerSetMinBet(uint newMinimumBet) public
		onlyOwner
    {
        minBet = newMinimumBet;
    }

    /* only owner address can transfer ether */
    function ownerTransferEther(address sendTo, uint amount) public
		onlyOwner
    {
        /* safely update contract balance when sending out funds*/
        contractBalance = safeSub(contractBalance, amount);
        /* update max profit */
        setMaxProfit();
        if(!sendTo.send(amount)) throw;
        LogOwnerTransfer(sendTo, amount);
    }

    /* only owner address can do manual refund
    * used only if bet placed + oraclize failed to __callback
    * filter LogBet by address and/or playerBetId:
    * LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]);
    * check the following logs do not exist for playerBetId and/or playerAddress[rngId] before refunding:
    * LogResult or LogRefund
    * if LogResult exists player should use the withdraw pattern playerWithdrawPendingTransactions
    */
    function ownerRefundPlayer(bytes32 originalPlayerBetId, address sendTo, uint originalPlayerProfit, uint originalPlayerBetValue) public
		onlyOwner
    {
        /* safely reduce pendingPayouts by playerProfit[rngId] */
        maxPendingPayouts = safeSub(maxPendingPayouts, originalPlayerProfit);
        /* send refund */
        if(!sendTo.send(originalPlayerBetValue)) throw;
        /* log refunds */
        LogRefund(originalPlayerBetId, sendTo, originalPlayerBetValue);
    }

    /* only owner address can set emergency pause #1 */
    function ownerPauseGame(bool newStatus) public
		onlyOwner
    {
		gamePaused = newStatus;
    }

    /* only owner address can set emergency pause #2 */
    function ownerPausePayouts(bool newPayoutStatus) public
		onlyOwner
    {
		payoutsPaused = newPayoutStatus;
    }

    /* only owner address can set treasury address */
    function ownerSetTreasury(address newTreasury) public
		onlyOwner
	{
        treasury = newTreasury;
    }

    /* only owner address can set owner address */
    function ownerChangeOwner(address newOwner) public
		onlyOwner
	{
        owner = newOwner;
    }

    /* only owner address can suicide - emergency */
    function ownerkill() public
		onlyOwner
	{
		suicide(owner);
	}


}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"maxProfitAsPercentOfHouse","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newHouseEdge","type":"uint256"}],"name":"ownerSetHouseEdge","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"}],"name":"__callback","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"payoutsPaused","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newTreasury","type":"address"}],"name":"ownerSetTreasury","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"ownerAddBankroll","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"},{"name":"proof","type":"bytes"}],"name":"__callback","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxBetDivisor","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"addressToCheck","type":"address"}],"name":"playerGetPendingTxByAddress","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newPayoutStatus","type":"bool"}],"name":"ownerPausePayouts","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"ownerChangeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newMaxProfitAsPercent","type":"uint256"}],"name":"ownerSetMaxProfitAsPercentOfHouse","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"treasury","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newMinimumBet","type":"uint256"}],"name":"ownerSetMinBet","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newStatus","type":"bool"}],"name":"ownerPauseGame","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"gasForOraclize","outputs":[{"name":"","type":"uint32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sendTo","type":"address"},{"name":"amount","type":"uint256"}],"name":"ownerTransferEther","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"contractBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minBet","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"playerWithdrawPendingTransactions","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalUserProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalBets","outputs":[{"name":"","type":"int256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"gamePaused","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"originalPlayerBetId","type":"bytes32"},{"name":"sendTo","type":"address"},{"name":"originalPlayerProfit","type":"uint256"},{"name":"originalPlayerBetValue","type":"uint256"}],"name":"ownerRefundPlayer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newSafeGasToOraclize","type":"uint32"}],"name":"ownerSetOraclizeSafeGas","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"ownerkill","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"houseEdge","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"rollUnder","type":"uint256"}],"name":"playerRollDice","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"houseEdgeDivisor","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxPendingPayouts","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"BetID","type":"bytes32"},{"indexed":true,"name":"PlayerAddress","type":"address"},{"indexed":true,"name":"RewardValue","type":"uint256"},{"indexed":false,"name":"ProfitValue","type":"uint256"},{"indexed":false,"name":"BetValue","type":"uint256"},{"indexed":false,"name":"PlayerNumber","type":"uint256"}],"name":"LogBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"BetID","type":"bytes32"},{"indexed":true,"name":"PlayerAddress","type":"address"},{"indexed":true,"name":"PlayerNumber","type":"uint256"},{"indexed":false,"name":"DiceResult","type":"uint256"},{"indexed":false,"name":"Value","type":"uint256"},{"indexed":false,"name":"Status","type":"int256"},{"indexed":false,"name":"Proof","type":"bytes"}],"name":"LogResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"BetID","type":"bytes32"},{"indexed":true,"name":"PlayerAddress","type":"address"},{"indexed":true,"name":"RefundValue","type":"uint256"}],"name":"LogRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"SentToAddress","type":"address"},{"indexed":true,"name":"AmountTransferred","type":"uint256"}],"name":"LogOwnerTransfer","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200000d57fe5b5b60028054600160a060020a033316600160a060020a0319918216811790925560038054909116909117905562000053600064010000000062001be56200011882021704565b506200008d7f110000000000000000000000000000000000000000000000000000000000000064010000000062001f846200038082021704565b620000a86103a7640100000000620008f36200051082021704565b620000c36161a8640100000000620013796200053782021704565b620000e46702c68af0bb140000640100000000620013c66200058782021704565b6001805460a860020a63ffffffff0219167703d0900000000000000000000000000000000000000000001790555b620005ca565b60008062000148731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed64010000000062001bdd620005ae82021704565b11156200017e575060008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905560016200037b565b6000620001ad73c03a2615d5efaf5f49f60b7bb6583eaec212fdf164010000000062001bdd620005ae82021704565b1115620001e3575060008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905560016200037b565b60006200021273b7a07bcf2ba2f2703b24c0691b5278999c59ac7e64010000000062001bdd620005ae82021704565b111562000248575060008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905560016200037b565b600062000277736f485c8bf6fc43ea212e93bbf8ce046c7f1cb47564010000000062001bdd620005ae82021704565b1115620002ad575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb47517905560016200037b565b6000620002dc7320e12a1f859b3feae5fb2a0a32c18f5a65555bbf64010000000062001bdd620005ae82021704565b111562000312575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf17905560016200037b565b6000620003417351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa64010000000062001bdd620005ae82021704565b111562000377575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa17905560016200037b565b5060005b919050565b600054600160a060020a03161580620003bb5750600054620003b990600160a060020a031664010000000062001bdd620005ae82021704565b155b15620003dd57620003db600064010000000062001be56200011882021704565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b15156200045257fe5b60325a03f115156200046057fe5b505060408051805160018054600160a060020a031916600160a060020a0392831617908190557f688dcfd70000000000000000000000000000000000000000000000000000000083527fff000000000000000000000000000000000000000000000000000000000000008616600484015292519216925063688dcfd791602480830192600092919082900301818387803b1515620004fa57fe5b60325a03f115156200050857fe5b5050505b5b50565b60025433600160a060020a039081169116146200052d5760006000fd5b60058190555b5b50565b60025433600160a060020a03908116911614620005545760006000fd5b61c350811115620005655760006000fd5b60078190556200050c64010000000062001a6d620005b682021704565b5b5b50565b60025433600160a060020a03908116911614620005a45760006000fd5b60088190555b5b50565b803b5b919050565b600754600454620f424091025b046006555b565b6122c180620005da6000396000f300606060405236156101905763ffffffff60e060020a60003504166323214fab81146101a3578063268d50fe146101c557806327dc297e146101da578063301cf6e714610233578063313752421461025757806331b296291461027557806338bbfa501461027f57806339849771146103155780633a4f6999146103375780633c314a91146103595780634b7fcee7146103875780634f44728d1461039e57806355b93031146103bc5780635e968a49146103de57806361d027b3146103f35780636cdf4c901461041f5780636eacd48a146104345780637072a9771461044b5780637ac37d58146104745780638b7afe2e146104955780638da5cb5b146104b75780639619367d146104e3578063a5f4af3314610505578063b539cd5514610529578063b69f5ada1461054b578063befa1e2f1461056d578063c3de1ab91461058f578063cf832ce2146105b3578063d207e757146105da578063d263b7eb146105f5578063d667dcd714610607578063dc6dd15214610629578063e5c774de14610636578063ed62f50114610658575b6101a15b61019e602f61067a565b5b565b005b34156101ab57fe5b6101b36108ed565b60408051918252519081900360200190f35b34156101cd57fe5b6101a16004356108f3565b005b34156101e257fe5b60408051602060046024803582810135601f81018590048502860185019096528585526101a1958335959394604494939290920191819084018382808284375094965061091995505050505050565b005b341561023b57fe5b610243610949565b604080519115158252519081900360200190f35b341561025f57fe5b6101a1600160a060020a0360043516610959565b005b6101a1610995565b005b341561028757fe5b60408051602060046024803582810135601f81018590048502860185019096528585526101a1958335959394604494939290920191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979998810197919650918201945092508291508401838280828437509496506109cc95505050505050565b005b341561031d57fe5b6101b36112c4565b60408051918252519081900360200190f35b341561033f57fe5b6101b36112cb565b60408051918252519081900360200190f35b341561036157fe5b6101b3600160a060020a03600435166112d0565b60408051918252519081900360200190f35b341561038f57fe5b6101a160043515156112ef565b005b34156103a657fe5b6101a1600160a060020a0360043516611338565b005b34156103c457fe5b6101b3611374565b60408051918252519081900360200190f35b34156103e657fe5b6101a1600435611379565b005b34156103fb57fe5b6104036113b7565b60408051600160a060020a039092168252519081900360200190f35b341561042757fe5b6101a16004356113c6565b005b341561043c57fe5b6101a160043515156113ec565b005b341561045357fe5b61045b611435565b6040805163ffffffff9092168252519081900360200190f35b341561047c57fe5b6101a1600160a060020a0360043516602435611448565b005b341561049d57fe5b6101b36114e8565b60408051918252519081900360200190f35b34156104bf57fe5b6104036114ee565b60408051600160a060020a039092168252519081900360200190f35b34156104eb57fe5b6101b36114fd565b60408051918252519081900360200190f35b341561050d57fe5b610243611503565b604080519115158252519081900360200190f35b341561053157fe5b6101b3611592565b60408051918252519081900360200190f35b341561055357fe5b6101b3611598565b60408051918252519081900360200190f35b341561057557fe5b6101b361159e565b60408051918252519081900360200190f35b341561059757fe5b6102436115a4565b604080519115158252519081900360200190f35b34156105bb57fe5b6101a1600435600160a060020a03602435166044356064356115b4565b005b34156105e257fe5b6101a163ffffffff60043516611650565b005b34156105fd57fe5b6101a16116a1565b005b341561060f57fe5b6101b36116ce565b60408051918252519081900360200190f35b6101a160043561067a565b005b341561063e57fe5b6101b36116d4565b60408051918252519081900360200190f35b341561066057fe5b6101b36116da565b60408051918252519081900360200190f35b6001805460009160a060020a90910460ff161515141561069a5760006000fd5b3482600654826103e8600554856106b28660016116e0565b6106bd8760016116e0565b60640388028115156106cb57fe5b0401028115156106d757fe5b040311806106e6575060085482105b806106f15750600281105b806106fc5750606381115b156107075760006000fd5b610773604060405190810160405280600681526020017f6e657374656400000000000000000000000000000000000000000000000000008152506101c0604051908101604052806101a081526020016120d66101a0913960015460a860020a900463ffffffff16611703565b6009805460019081019091556000828152600e6020908152604080832085905560138252808320899055600f82528083203490819055600c9092529091208054600160a060020a03191633600160a060020a0316179055600554929550916103e89183906107e29089906116e0565b6107ed8960016116e0565b60640334028115156107fb57fe5b04010281151561080757fe5b60008681526015602052604090209190049190910390819055600b5461082c91611a4a565b600b81905560045490106108405760006000fd5b6000838152600f60209081526040808320546015909252909120546108659190611a4a565b6000848152600c6020908152604080832054600e8352818420546015845282852054600f855283862054601386529584902054845191825294810195909552848301939093529051600160a060020a03909116927f1cb5bfc4e69cbacf65c8e05bdb84d7a327bd6bb4c034ff82359aefd7443775c4919081900360600190a45b5b50505b5050565b60075481565b60025433600160a060020a0390811691161461090f5760006000fd5b60058190555b5b50565b6108e98282600060405180591061092d5750595b908082528060200260200182016040525b506109cc565b5b5050565b60025460a060020a900460ff1681565b60025433600160a060020a039081169116146109755760006000fd5b60038054600160a060020a031916600160a060020a0383161790555b5b50565b60035433600160a060020a039081169116146109b15760006000fd5b6109bd60045434611a4a565b60045561019e611a6d565b5b5b565b6109d4611a81565b600160a060020a031633600160a060020a03161415156109f45760006000fd5b60025460a060020a900460ff16151560011415610a115760006000fd5b6000838152600c6020526040902054600160a060020a03161515610a355760006000fd5b610a3e82611bbd565b6000848152601160209081526040918290208390559051828152835160639392859291828201918401908083835b60208310610a8b5780518252601f199092019160209182019101610a6c565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120935050508215159050610ac357fe5b600085815260126020908152604080832094909306600101909355600c83528181208054600d85528383208054600160a060020a03909216600160a060020a0319928316179055815416905560158352818120805460169094529181209283559055600b549054610b3491906116e0565b600b556000838152600f602090815260408083208054601084528285205583905560129091529020541515610dee57600083815260136020908152604080832054600d835281842054600e8452828520546012855283862054601086529584902054845187815280870182905260039581018690526080606082018181528a519183019190915289519598600160a060020a0390951697939660008051602061227683398151915296939490938b93929160a0840191908501908083838215610c18575b805182526020831115610c1857601f199092019160209182019101610bf8565b505050905090810190601f168015610c445780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a46000838152600d60209081526040808320546010909252808320549051600160a060020a039092169281156108fc029290818181858888f193505050501515610de957600083815260136020908152604080832054600d835281842054600e8452828520546012855283862054601086529584902054845187815280870182905260049581018690526080606082018181528a519183019190915289519598600160a060020a0390951697939660008051602061227683398151915296939490938b93929160a0840191908501908083838215610d4c575b805182526020831115610d4c57601f199092019160209182019101610d2c565b505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a46000838152600d6020908152604080832054600160a060020a031683526014825280832054868452601090925290912054610dc39190611a4a565b6000848152600d6020908152604080832054600160a060020a0316835260149091529020555b6112bb565b60008381526013602090815260408083205460129092529091205410156110f457600454600084815260166020526040902054610e2b91906116e0565b600455600083815260166020908152604080832054601090925290912054610e539190611a4a565b6000848152601660208181526040808420858155600a80549096019095556013825280842054600d835281852054600e8452828620546012855295839020549484529554825185815280850182905260019381018490526080606082018181528a519183019190915289519398600160a060020a0316979660008051602061227683398151915296909593948b93929160a0840191908501908083838215610f16575b805182526020831115610f1657601f199092019160209182019101610ef6565b505050905090810190601f168015610f425780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4610f5a611a6d565b6000838152600d60209081526040808320546016909252808320549051600160a060020a039092169281156108fc029290818181858888f193505050501515610de957600083815260136020908152604080832054600d835281842054600e8452828520546012855283862054601686529584902054845187815280870182905260029581018690526080606082018181528a519183019190915289519598600160a060020a0390951697939660008051602061227683398151915296939490938b93929160a0840191908501908083838215611052575b80518252602083111561105257601f199092019160209182019101611032565b505050905090810190601f16801561107e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a46000838152600d6020908152604080832054600160a060020a031683526014825280832054868452601690925290912054610dc39190611a4a565b6000848152600d6020908152604080832054600160a060020a0316835260149091529020555b6112bb565b600083815260136020908152604080832054601290925290912054106112bb57600083815260136020908152604080832054600d835281842054600e8452828520546012855283862054601086528487205485518281528088018290529586018890526080606087018181528a519188019190915289519598600160a060020a03909516979396600080516020612276833981519152969395929492938b9391929160a08401919085019080838382156111c9575b8051825260208311156111c957601f1990920191602091820191016111a9565b505050905090810190601f1680156111f55780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4600454600084815260106020526040902054611225919060001901611a4a565b600455611230611a6d565b6000838152600d6020526040808220549051600160a060020a03909116919060019082818181858883f193505050501515610de9576000838152600d6020908152604080832054600160a060020a031683526014909152902054610dc3906001611a4a565b6000848152600d6020908152604080832054600160a060020a0316835260149091529020555b5b5b5b5b505050565b620f424081565b606381565b600160a060020a0381166000908152601460205260409020545b919050565b60025433600160a060020a0390811691161461130b5760006000fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a831515021790555b5b50565b60025433600160a060020a039081169116146113545760006000fd5b60028054600160a060020a031916600160a060020a0383161790555b5b50565b600281565b60025433600160a060020a039081169116146113955760006000fd5b61c3508111156113a55760006000fd5b6007819055610915611a6d565b5b5b50565b600354600160a060020a031681565b60025433600160a060020a039081169116146113e25760006000fd5b60088190555b5b50565b60025433600160a060020a039081169116146114085760006000fd5b6001805474ff0000000000000000000000000000000000000000191660a060020a831515021790555b5b50565b60015460a860020a900463ffffffff1681565b60025433600160a060020a039081169116146114645760006000fd5b611470600454826116e0565b60045561147b611a6d565b604051600160a060020a0383169082156108fc029083906000818181858888f1935050505015156114ac5760006000fd5b6040518190600160a060020a038416907f42c501a185f41a8eb77b0a3e7b72a6435ea7aa752f8a1a0a13ca4628495eca9190600090a35b5b5050565b60045481565b600254600160a060020a031681565b60085481565b60006000600260149054906101000a900460ff1615156001151514156115295760006000fd5b50600160a060020a033316600081815260146020526040808220805490839055905190929183919081818185876185025a03f1925050501561156e576001915061158c565b600160a060020a033316600090815260146020526040812082905591505b5b5b5090565b60065481565b600a5481565b60095481565b60015460a060020a900460ff1681565b60025433600160a060020a039081169116146115d05760006000fd5b6115dc600b54836116e0565b600b55604051600160a060020a0384169082156108fc029083906000818181858888f1935050505015156116105760006000fd5b6040518190600160a060020a0385169086907f7b6ccf85690b8ce1b7d21a94ca738803a9da7dc74e10140f269efa0d8d6fb85190600090a45b5b50505050565b60025433600160a060020a0390811691161461166c5760006000fd5b6001805478ffffffff000000000000000000000000000000000000000000191660a860020a63ffffffff8416021790555b5b50565b60025433600160a060020a039081169116146116bd5760006000fd5b600254600160a060020a0316ff5b5b565b60055481565b6103e881565b600b5481565b60006116ec8383611bd2565b15156116f85760006000fd5b508082035b92915050565b600080548190600160a060020a03161580611730575060005461172e90600160a060020a0316611bdd565b155b156117415761173f6000611be5565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b151561179c57fe5b60325a03f115156117a957fe5b505060408051805160018054600160a060020a031916600160a060020a039283161790819055600060209384015283517f2ef3accc00000000000000000000000000000000000000000000000000000000815260248101899052600481019485528a5160448201528a51919092169450632ef3accc938a93899391928392606401918601908083838215611858575b80518252602083111561185857601f199092019160209182019101611838565b505050905090810190601f1680156118845780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15156118a057fe5b60325a03f115156118ad57fe5b505060405151915050670de0b6b3a76400003a8402018111156118d35760009150611a41565b600160009054906101000a9004600160a060020a0316600160a060020a031663c51be90f8260008888886000604051602001526040518663ffffffff1660e060020a028152600401808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360008314611973575b80518252602083111561197357601f199092019160209182019101611953565b505050905090810190601f16801561199f5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838382156119de575b8051825260208311156119de57601f1990920191602091820191016119be565b505050905090810190601f168015611a0a5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b1515611a2857fe5b61235a5a03f11515611a3657fe5b505060405151935050505b5b509392505050565b6000611a568383611de2565b1515611a625760006000fd5b508181015b92915050565b600754600454620f424091025b046006555b565b60008054600160a060020a03161580611aac5750600054611aaa90600160a060020a0316611bdd565b155b15611abd57611abb6000611be5565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515611b1857fe5b60325a03f11515611b2557fe5b505060408051805160018054600160a060020a031916600160a060020a0392831617908190556000602093840181905284517fc281d19e000000000000000000000000000000000000000000000000000000008152945191909216945063c281d19e9360048082019493918390030190829087803b1515611ba257fe5b60325a03f11515611baf57fe5b5050604051519150505b5b90565b6000611bca826000611df0565b90505b919050565b818111155b92915050565b803b5b919050565b60006000611c06731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed611bdd565b1115611c3a575060008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905560016112ea565b6000611c5973c03a2615d5efaf5f49f60b7bb6583eaec212fdf1611bdd565b1115611c8d575060008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905560016112ea565b6000611cac73b7a07bcf2ba2f2703b24c0691b5278999c59ac7e611bdd565b1115611ce0575060008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905560016112ea565b6000611cff736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475611bdd565b1115611d33575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb47517905560016112ea565b6000611d527320e12a1f859b3feae5fb2a0a32c18f5a65555bbf611bdd565b1115611d86575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf17905560016112ea565b6000611da57351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa611bdd565b1115611dd9575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa17905560016112ea565b5060005b919050565b808201829010155b92915050565b6000611dfa611f72565b5082600080805b8351811015611f525783517f300000000000000000000000000000000000000000000000000000000000000090859083908110611e3a57fe5b90602001015160f860020a900460f860020a02600160f860020a03191610158015611eb0575083517f390000000000000000000000000000000000000000000000000000000000000090859083908110611e9057fe5b90602001015160f860020a900460f860020a02600160f860020a03191611155b15611f0a578115611ecf57851515611ec757611f52565b600019909501945b5b600a8302925060308482815181101515611ee657fe5b90602001015160f860020a900460f860020a0260f860020a90040383019250611f48565b8381815181101515611f1857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602e60f860020a021415611f4857600191505b5b5b600101611e01565b6000861115611f645785600a0a830292505b8294505b5050505092915050565b60408051602081019091526000815290565b600054600160a060020a03161580611fae5750600054611fac90600160a060020a0316611bdd565b155b15611fbf57611fbd6000611be5565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b151561201a57fe5b60325a03f1151561202757fe5b505060408051805160018054600160a060020a031916600160a060020a0392831617908190557f688dcfd70000000000000000000000000000000000000000000000000000000083527fff000000000000000000000000000000000000000000000000000000000000008616600484015292519216925063688dcfd791602480830192600092919082900301818387803b15156120c057fe5b60325a03f115156108e557fe5b5050505b5b5056005b55524c5d205b276a736f6e2868747470733a2f2f6170692e72616e646f6d2e6f72672f6a736f6e2d7270632f312f696e766f6b65292e726573756c742e72616e646f6d2e646174612e30272c20275c6e7b226a736f6e727063223a22322e30222c226d6574686f64223a2267656e65726174655369676e6564496e746567657273222c22706172616d73223a7b226170694b6579223a247b5b646563727970745d204244433831396e54596245694279722f69776e647a4e64534a394a474a475257774f546e464c687246637874576835334837737a63714861432b5a2f36554b483654364e35375269504e6d4257476546536d7155524855714353794e38766d556a566a3967456937486d436f516c4c53707838514a5456394f7868466634337538566e374475675a636779566350456b4573326c54503142586941647d2c226e223a312c226d696e223a312c226d6178223a3130302c227265706c6163656d656e74223a747275652c2262617365223a3130247b5b6964656e746974795d20227d227d2c226964223a31247b5b6964656e746974795d20227d227d275d631b7e83754f4cdc55b37da22c617abf4803c0263b8ea1a436d43eed60d6a1e8a165627a7a72305820f1ae9585307ee165eb7d9bf3324ba5b8d107da0e476a62014ad07e1d40c3aac50029

   Swarm Source:
bzzr://f1ae9585307ee165eb7d9bf3324ba5b8d107da0e476a62014ad07e1d40c3aac5

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.