Contract Overview
Balance: 0.007112 Ether
Ether Value: $1.49 (@ $209.07/ETH)
Transactions: 148 txns
 Latest 25 txns From a total of 148 Transactions

TxHash Age From To Value [TxFee]
0x5767e88de6eda6380c2164900ca82d404d003c2e061f435055ddab342d5b573a55 days 7 hrs ago0x406f4533b2f6209812d7ef9c7d69b8c54217c208  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0.003 Ether0.000344577
0x1b690b98c256dd2120f9805df3ffead54b43bf7de431cab2109adc6f4976508d55 days 12 hrs ago0x0c7aa5825879cdea1071dd693f78f38840355745  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000396951
0x33e44089711afb60ba979573f0b33d578083e0c584000ed7f26f4c5357529cff58 days 21 hrs ago0x4aa8bf6afd411831b7d63f40140f862cd7a78dc0  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.0001646246
0xd30c7aecffbfc583010362ba433bef3bb6422ffbf447deec0a299e836045262262 days 19 hrs ago0x34ba87ac5108f234cdb2d62126ab0abb43a7c446  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000104307
0x998e7334f36d17b78854f54c6b4fe0832bcb218a19bd13d6991c3095e4ef002762 days 19 hrs ago0x34ba87ac5108f234cdb2d62126ab0abb43a7c446  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000104307
0xe331d51eeadf82e60686d95debc0f4072de7a1415b07a7cff5c11640ee71332663 days 14 hrs ago0x686472a553271af53bf4bf92d6353d266a80cb51  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000313806
0xde46b571bc92709080ad7add1ca6d65e7100c47e1935ca860715d0e04a6fd25b63 days 14 hrs ago0x686472a553271af53bf4bf92d6353d266a80cb51  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000655794
0xb3e02181cdcb61f0ef0bc6f0d22a4efec4b6a78a4ec76479dcf71a7aca2f3d8a63 days 14 hrs ago0x686472a553271af53bf4bf92d6353d266a80cb51  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.00066139
0x0ff768901caa5226ea735f0a80db39f6b80535ec94978a1c41c24ee086b8941863 days 16 hrs ago0x34ba87ac5108f234cdb2d62126ab0abb43a7c446  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.00014214
0x76d45e91f7ae6f83b16d0e8443c43e62fd6b69cbfe501dea31b30e703980092c63 days 16 hrs ago0x34ba87ac5108f234cdb2d62126ab0abb43a7c446  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000224325
0x4f04eb10c0566ae7da71815265b3628d716b63164e56f0a0436864a2db5163d863 days 16 hrs ago0x34ba87ac5108f234cdb2d62126ab0abb43a7c446  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000224005
0x16e062a8f6b2167800fb46507eabd95640d94bee3eb637e71da7f28c43225ba063 days 16 hrs ago0x34ba87ac5108f234cdb2d62126ab0abb43a7c446  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000224325
0x25210dced9bfb33fc003f0b8610c5d71bbf7b62f51c9f7006766faafe46964e563 days 16 hrs ago0x34ba87ac5108f234cdb2d62126ab0abb43a7c446  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000074505
0x64a8f27db5e888b40d14e890d9db6d008c9ef48795307dd8df566628f3c187e665 days 11 hrs ago0x34ba87ac5108f234cdb2d62126ab0abb43a7c446  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.0001690479
0x28070d64c656c9dac8e935460d626d790dafd3be2385eb9c06df6eabfbf699a373 days 8 hrs ago0x0c7aa5825879cdea1071dd693f78f38840355745  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000146427
0x6d363754a2c47c158c89d02716ce7dfc89f12b7b736bec3ee2fbc8c8d238d48d74 days 11 hrs ago0x0c7aa5825879cdea1071dd693f78f38840355745  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000129025
0xebd4810573fbd77b66bf624a8c6e902b9c5b2d0899927411955b69623a60e36874 days 16 hrs ago0x686472a553271af53bf4bf92d6353d266a80cb51  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000292726
0xb4ad177c0f62593c5f5d0e5ec4e8d2b14ff295e04a2610e1955ec9a26b4210f675 days 9 hrs ago0x0c7aa5825879cdea1071dd693f78f38840355745  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000174501
0x6f44ab8b08e68515894af4422a0642048eac97243b5ea975418e77d64f10921075 days 9 hrs ago0x0c7aa5825879cdea1071dd693f78f38840355745  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000141622
0xa6274896714f7aa087f8f6f9449e9c4dfe398008d4048be1c327077d3c80788276 days 14 hrs ago0x0c7aa5825879cdea1071dd693f78f38840355745  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000096306
0xa84894df0b976b0d09c2292d6bc058952f71592b3903ab9fada9ceca6ea3d4ca76 days 14 hrs ago0x0c7aa5825879cdea1071dd693f78f38840355745  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000133528
0x49699a70028f58b5809f397e4213b7ba9abeec2ce441210dc2159de648d0c3a076 days 14 hrs ago0x0c7aa5825879cdea1071dd693f78f38840355745  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000196712
0x611af6e757502f6ca46bcd706712cdf6b4e1906d7b95c9b8c4b8dbad7da5e88176 days 14 hrs ago0x0c7aa5825879cdea1071dd693f78f38840355745  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000132905
0x4212337ae5e12c6f4c69c2c2b449bf2783b33f71e06a444e293cc408a528366a76 days 15 hrs ago0x0c7aa5825879cdea1071dd693f78f38840355745  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0.00528 Ether0.000106406
0x1a702367131c0cc668a63b81c1327e122aa0f888c190966bd9f7727868b1041678 days 13 hrs ago0x34ba87ac5108f234cdb2d62126ab0abb43a7c446  IN   0x689fb61845488297dfe7586e5f7956475955d2dc0 Ether0.000053666
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 2 Internal Transactions

ParentTxHash Block Age From To Value
0x64a8f27db5e888b40d14e890d9db6d008c9ef48795307dd8df566628f3c187e6612962265 days 11 hrs ago0x689fb61845488297dfe7586e5f7956475955d2dc0x34ba87ac5108f234cdb2d62126ab0abb43a7c4460.003168 Ether
0x1a702367131c0cc668a63b81c1327e122aa0f888c190966bd9f7727868b10416605213178 days 13 hrs ago0x689fb61845488297dfe7586e5f7956475955d2dc0x34ba87ac5108f234cdb2d62126ab0abb43a7c4460.003 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: MyCryptoChampCore
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

/* 		
		https://mycryptochamp.io/
		[email protected]
*/

pragma solidity 0.4.24;

contract Controller{
	function getChampReward(uint _position) public view returns(uint);
	function changeChampsName(uint _champId, string _name, address _msgsender) external;
	function withdrawChamp(uint _id, address _msgsender) external;
	function attack(uint _champId, uint _targetId, address _msgsender) external;
	function transferToken(address _from, address _to, uint _id, bool _isTokenChamp) external;
	function cancelTokenSale(uint _id, address _msgsender, bool _isTokenChamp) public;
	function giveToken(address _to, uint _id, address _msgsender, bool _isTokenChamp) external;
	function setTokenForSale(uint _id, uint _price, address _msgsender, bool _isTokenChamp) external;
	function getTokenURIs(uint _id, bool _isTokenChamp) public pure returns(string);
	function takeOffItem(uint _champId, uint8 _type, address _msgsender) public;
	function putOn(uint _champId, uint _itemId, address _msgsender) external;
	function forgeItems(uint _parentItemID, uint _childItemID, address _msgsender) external;
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint a, uint b) internal pure returns (uint) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint a, uint b) internal pure returns (uint) {
    uint c = a + b;
    assert(c >= a);
    return c;
  }
}

/// @title MyCryptoChamp Core - Stores all of game data. Functions are stored in the replaceable contracts. This solution was required in order to avoid unexpected bugs and make game upgradeable.
/// @author Patrik Mojzis
contract MyCryptoChampCore {

    using SafeMath for uint;

    struct Champ {
        uint id; //same as position in Champ[]
        uint attackPower;
        uint defencePower;
        uint cooldownTime; //how long does it take to be able attack again
        uint readyTime; //if is smaller than block.timestamp champ is ready to fight
        uint winCount;
        uint lossCount;
        uint position; //subtract 1 and you get position in leaderboard[]
        uint price; //sale price
        uint withdrawCooldown; //if you one of the 800 best champs and withdrawCooldown is less as block.timestamp then you get ETH reward
        uint eq_sword; 
        uint eq_shield; 
        uint eq_helmet; 
        bool forSale; //is champ for sale?
    }
    
    struct AddressInfo {
        uint withdrawal;
        uint champsCount;
        uint itemsCount;
        string name;
    }

    //Item struct
    struct Item {
        uint id;
        uint8 itemType; // 1 - Sword | 2 - Shield | 3 - Helmet
        uint8 itemRarity; // 1 - Common | 2 - Uncommon | 3 - Rare | 4 - Epic | 5 - Legendery | 6 - Forged
        uint attackPower;
        uint defencePower;
        uint cooldownReduction;
        uint price;
        uint onChampId; //can not be used to decide if item is on champ, because champ's id can be 0, 'bool onChamp' solves it.
        bool onChamp; 
        bool forSale; //is item for sale?
    }
    
    Champ[] public champs;
    Item[] public items;
    mapping (uint => uint) public leaderboard;
    mapping (address => bool) private trusted;
    mapping (address => AddressInfo) public addressInfo;
    mapping (bool => mapping(address => mapping (address => bool))) public tokenOperatorApprovals;
    mapping (bool => mapping(uint => address)) public tokenApprovals;
    mapping (bool => mapping(uint => address)) public tokenToOwner;
    mapping (uint => string) public champToName;
    mapping (bool => uint) public tokensForSaleCount;
    uint public pendingWithdrawal = 0;
    address private contractOwner;
    Controller internal controller;


    constructor () public 
    {
        trusted[msg.sender] = true;
        contractOwner = msg.sender;
    }
    

    /*============== MODIFIERS ==============*/
    modifier onlyTrusted(){
        require(trusted[msg.sender]);
        _;
    }

    modifier isPaid(uint _price)
    {
        require(msg.value >= _price);
        _;
    }

    modifier onlyNotOwnerOfItem(uint _itemId) {
        require(_itemId != 0);
        require(msg.sender != tokenToOwner[false][_itemId]);
        _;
    }

    modifier isItemForSale(uint _id){
        require(items[_id].forSale);
        _;
    }

    modifier onlyNotOwnerOfChamp(uint _champId) 
    {
        require(msg.sender != tokenToOwner[true][_champId]);
        _;
    }

    modifier isChampForSale(uint _id)
    {
        require(champs[_id].forSale);
        _;
    }


    /*============== CONTROL COTRACT ==============*/
    function loadController(address _address) external onlyTrusted {
        controller = Controller(_address);
    }

    
    function setTrusted(address _address, bool _trusted) external onlyTrusted {
        trusted[_address] = _trusted;
    }
    
    function transferOwnership(address newOwner) public onlyTrusted {
        require(newOwner != address(0));
        contractOwner = newOwner;
    }
    

    /*============== PRIVATE FUNCTIONS ==============*/
    function _addWithdrawal(address _address, uint _amount) private 
    {
        addressInfo[_address].withdrawal += _amount;
        pendingWithdrawal += _amount;
    }

    /// @notice Distribute input funds between contract owner and players
    function _distributeNewSaleInput(address _affiliateAddress) private 
    {
        //contract owner
        _addWithdrawal(contractOwner, ((msg.value / 100) * 60)); // 60%

        //affiliate
        //checks if _affiliateAddress is set & if affiliate address is not buying player
        if(_affiliateAddress != address(0) && _affiliateAddress != msg.sender){
            _addWithdrawal(_affiliateAddress, ((msg.value / 100) * 25)); //provision is 25%
            
        }
    }

    
    /*============== ONLY TRUSTED ==============*/
    function addWithdrawal(address _address, uint _amount) public onlyTrusted 
    {
        _addWithdrawal(_address, _amount);
    }

    function clearTokenApproval(address _from, uint _tokenId, bool _isTokenChamp) public onlyTrusted
    {
        require(tokenToOwner[_isTokenChamp][_tokenId] == _from);
        if (tokenApprovals[_isTokenChamp][_tokenId] != address(0)) {
            tokenApprovals[_isTokenChamp][_tokenId] = address(0);
        }
    }

    function emergencyWithdraw() external onlyTrusted
    {
        contractOwner.transfer(address(this).balance);
    }

    function setChampsName(uint _champId, string _name) public onlyTrusted 
    {
        champToName[_champId] = _name;
    }

    function setLeaderboard(uint _x, uint _value) public onlyTrusted
    {
        leaderboard[_x] = _value;
    }

    function setTokenApproval(uint _id, address _to, bool _isTokenChamp) public onlyTrusted
    {
        tokenApprovals[_isTokenChamp][_id] = _to;
    }

    function setTokenOperatorApprovals(address _from, address _to, bool _approved, bool _isTokenChamp) public onlyTrusted
    {
        tokenOperatorApprovals[_isTokenChamp][_from][_to] = _approved;
    }

    function setTokenToOwner(uint _id, address _owner, bool _isTokenChamp) public onlyTrusted
    {
        tokenToOwner[_isTokenChamp][_id] = _owner;
    }

    function setTokensForSaleCount(uint _value, bool _isTokenChamp) public onlyTrusted 
    {
        tokensForSaleCount[_isTokenChamp] = _value;
    }

    function transferToken(address _from, address _to, uint _id, bool _isTokenChamp) public onlyTrusted
    {
        controller.transferToken(_from, _to, _id, _isTokenChamp);
    }

    function updateAddressInfo(address _address, uint _withdrawal, bool _updatePendingWithdrawal, uint _champsCount, bool _updateChampsCount, uint _itemsCount, bool _updateItemsCount, string _name, bool _updateName) public onlyTrusted {
        AddressInfo storage ai = addressInfo[_address];
        if(_updatePendingWithdrawal){ ai.withdrawal = _withdrawal; }
        if(_updateChampsCount){ ai.champsCount = _champsCount; }
        if(_updateItemsCount){ ai.itemsCount = _itemsCount; }
        if(_updateName){ ai.name = _name; }
    }

    function newChamp(
        uint _attackPower,
        uint _defencePower,
        uint _cooldownTime,
        uint _winCount,
        uint _lossCount,
        uint _position,
        uint _price,
        uint _eq_sword, 
        uint _eq_shield, 
        uint _eq_helmet, 
        bool _forSale,
        address _owner
    ) public onlyTrusted returns (uint){

        Champ memory champ = Champ({
            id: 0,
            attackPower: 0, //CompilerError: Stack too deep, try removing local variables.
            defencePower: _defencePower,
            cooldownTime: _cooldownTime,
            readyTime: 0,
            winCount: _winCount,
            lossCount: _lossCount,
            position: _position,
            price: _price,
            withdrawCooldown: 0,
            eq_sword: _eq_sword,
            eq_shield: _eq_shield,
            eq_helmet: _eq_helmet,
            forSale: _forSale
        });
        champ.attackPower = _attackPower;

        uint id = champs.push(champ) - 1; 
        champs[id].id = id; 
        leaderboard[_position] = id;

        addressInfo[_owner].champsCount++;
        tokenToOwner[true][id] = _owner;

        if(_forSale){
            tokensForSaleCount[true]++;
        }

        return id;
    }

    function newItem(
        uint8 _itemType,
        uint8 _itemRarity,
        uint _attackPower,
        uint _defencePower,
        uint _cooldownReduction,
        uint _price,
        uint _onChampId,
        bool _onChamp,
        bool _forSale,
        address _owner
    ) public onlyTrusted returns (uint)
    { 
        //create that struct
        Item memory item = Item({
            id: 0,
            itemType: _itemType,
            itemRarity: _itemRarity, 
            attackPower: _attackPower,
            defencePower: _defencePower,
            cooldownReduction: _cooldownReduction,
            price: _price,
            onChampId: _onChampId,
            onChamp: _onChamp, 
            forSale: _forSale

        });

        uint id = items.push(item) - 1;
        items[id].id = id; 

        addressInfo[_owner].itemsCount++;
        tokenToOwner[false][id] = _owner;

        if(_forSale){
            tokensForSaleCount[false]++;
        }

        return id;
    }

    function updateChamp(
        uint _champId, 
        uint _attackPower,
        uint _defencePower,
        uint _cooldownTime,
        uint _readyTime,
        uint _winCount,
        uint _lossCount,
        uint _position,
        uint _price,
        uint _withdrawCooldown,
        uint _eq_sword, 
        uint _eq_shield, 
        uint _eq_helmet, 
        bool _forSale
    ) public onlyTrusted {
        Champ storage champ = champs[_champId];
        if(champ.attackPower != _attackPower){champ.attackPower = _attackPower;}
        if(champ.defencePower != _defencePower){champ.defencePower = _defencePower;}
        if(champ.cooldownTime != _cooldownTime){champ.cooldownTime = _cooldownTime;}
        if(champ.readyTime != _readyTime){champ.readyTime = _readyTime;}
        if(champ.winCount != _winCount){champ.winCount = _winCount;}
        if(champ.lossCount != _lossCount){champ.lossCount = _lossCount;}
        if(champ.position != _position){
            champ.position = _position;
            leaderboard[_position] = _champId;
        }
        if(champ.price != _price){champ.price = _price;}
        if(champ.withdrawCooldown != _withdrawCooldown){champ.withdrawCooldown = _withdrawCooldown;}
        if(champ.eq_sword != _eq_sword){champ.eq_sword = _eq_sword;}
        if(champ.eq_shield != _eq_shield){champ.eq_shield = _eq_shield;}
        if(champ.eq_helmet != _eq_helmet){champ.eq_helmet = _eq_helmet;}
        if(champ.forSale != _forSale){ 
            champ.forSale = _forSale; 
            if(_forSale){
                tokensForSaleCount[true]++;
            }else{
                tokensForSaleCount[true]--;
            }
        }
    }

    function updateItem(
        uint _id,
        uint8 _itemType,
        uint8 _itemRarity,
        uint _attackPower,
        uint _defencePower,
        uint _cooldownReduction,
        uint _price,
        uint _onChampId,
        bool _onChamp,
        bool _forSale
    ) public onlyTrusted
    {
        Item storage item = items[_id];
        if(item.itemType != _itemType){item.itemType = _itemType;}
        if(item.itemRarity != _itemRarity){item.itemRarity = _itemRarity;}
        if(item.attackPower != _attackPower){item.attackPower = _attackPower;}
        if(item.defencePower != _defencePower){item.defencePower = _defencePower;}
        if(item.cooldownReduction != _cooldownReduction){item.cooldownReduction = _cooldownReduction;}
        if(item.price != _price){item.price = _price;}
        if(item.onChampId != _onChampId){item.onChampId = _onChampId;}
        if(item.onChamp != _onChamp){item.onChamp = _onChamp;}
        if(item.forSale != _forSale){
            item.forSale = _forSale;
            if(_forSale){
                tokensForSaleCount[false]++;
            }else{
                tokensForSaleCount[false]--;
            }
        }
    }


    /*============== CALLABLE BY PLAYER ==============*/
    function buyItem(uint _id, address _affiliateAddress) external payable 
    onlyNotOwnerOfItem(_id) 
    isItemForSale(_id)
    isPaid(items[_id].price) 
    {
        if(tokenToOwner[false][_id] == address(this)){
            _distributeNewSaleInput(_affiliateAddress);
        }else{
            _addWithdrawal(tokenToOwner[false][_id], msg.value);
        }
        controller.transferToken(tokenToOwner[false][_id], msg.sender, _id, false);
    }

    function buyChamp(uint _id, address _affiliateAddress) external payable
    onlyNotOwnerOfChamp(_id) 
    isChampForSale(_id) 
    isPaid(champs[_id].price) 
    {
        if(tokenToOwner[true][_id] == address(this)){
            _distributeNewSaleInput(_affiliateAddress);
        }else{
            _addWithdrawal(tokenToOwner[true][_id], msg.value);
        }
        controller.transferToken(tokenToOwner[true][_id], msg.sender, _id, true);
    }

    function changePlayersName(string _name) external {
        addressInfo[msg.sender].name = _name;
    }

    function withdrawToAddress(address _address) external 
    {
        address playerAddress = _address;
        if(playerAddress == address(0)){ playerAddress = msg.sender; }
        uint share = addressInfo[playerAddress].withdrawal; //gets pending funds
        require(share > 0); //is it more than 0?

        addressInfo[playerAddress].withdrawal = 0; //set player's withdrawal pendings to 0 
        pendingWithdrawal = pendingWithdrawal.sub(share); //subtract share from total pendings 
        
        playerAddress.transfer(share); //transfer
    }


    /*============== VIEW FUNCTIONS ==============*/
    function getChampsByOwner(address _owner) external view returns(uint256[]) {
        uint256[] memory result = new uint256[](addressInfo[_owner].champsCount);
        uint256 counter = 0;
        for (uint256 i = 0; i < champs.length; i++) {
            if (tokenToOwner[true][i] == _owner) {
                result[counter] = i;
                counter++;
            }
        }
        return result;
    }

    function getTokensForSale(bool _isTokenChamp) view external returns(uint256[]){
        uint256[] memory result = new uint256[](tokensForSaleCount[_isTokenChamp]);
        if(tokensForSaleCount[_isTokenChamp] > 0){
            uint256 counter = 0;
            if(_isTokenChamp){
                for (uint256 i = 0; i < champs.length; i++) {
                    if (champs[i].forSale == true) {
                        result[counter]=i;
                        counter++;
                    }
                }
            }else{
                for (uint256 n = 0; n < items.length; n++) {
                    if (items[n].forSale == true) {
                        result[counter]=n;
                        counter++;
                    }
                }
            }
        }
        return result;
    }

    function getChampStats(uint256 _champId) public view returns(uint256,uint256,uint256){
        Champ storage champ = champs[_champId];
        Item storage sword = items[champ.eq_sword];
        Item storage shield = items[champ.eq_shield];
        Item storage helmet = items[champ.eq_helmet];

        uint totalAttackPower = champ.attackPower + sword.attackPower + shield.attackPower + helmet.attackPower; //Gets champs AP
        uint totalDefencePower = champ.defencePower + sword.defencePower + shield.defencePower + helmet.defencePower; //Gets champs  DP
        uint totalCooldownReduction = sword.cooldownReduction + shield.cooldownReduction + helmet.cooldownReduction; //Gets  CR

        return (totalAttackPower, totalDefencePower, totalCooldownReduction);
    }

    function getItemsByOwner(address _owner) external view returns(uint256[]) {
        uint256[] memory result = new uint256[](addressInfo[_owner].itemsCount);
        uint256 counter = 0;
        for (uint256 i = 0; i < items.length; i++) {
            if (tokenToOwner[false][i] == _owner) {
                result[counter] = i;
                counter++;
            }
        }
        return result;
    }

    function getTokenCount(bool _isTokenChamp) external view returns(uint)
    {
        if(_isTokenChamp){
            return champs.length - addressInfo[address(0)].champsCount;
        }else{
            return items.length - 1 - addressInfo[address(0)].itemsCount;
        }
    }
    
    function getTokenURIs(uint _tokenId, bool _isTokenChamp) public view returns(string)
    {
        return controller.getTokenURIs(_tokenId,_isTokenChamp);
    }

    function onlyApprovedOrOwnerOfToken(uint _id, address _msgsender, bool _isTokenChamp) external view returns(bool)
    {
        if(!_isTokenChamp){
            require(_id != 0);
        }
        address owner = tokenToOwner[_isTokenChamp][_id];
        return(_msgsender == owner || _msgsender == tokenApprovals[_isTokenChamp][_id] || tokenOperatorApprovals[_isTokenChamp][owner][_msgsender]);
    }


    /*============== DELEGATE ==============*/
    function attack(uint _champId, uint _targetId) external{
        controller.attack(_champId, _targetId, msg.sender);
    }

    function cancelTokenSale(uint _id, bool _isTokenChamp) public{
        controller.cancelTokenSale(_id, msg.sender, _isTokenChamp);
    }

    function changeChampsName(uint _champId, string _name) external{
        controller.changeChampsName(_champId, _name, msg.sender);
    }

    function forgeItems(uint _parentItemID, uint _childItemID) external{
        controller.forgeItems(_parentItemID, _childItemID, msg.sender);
    }

    function giveToken(address _to, uint _champId, bool _isTokenChamp) external{
        controller.giveToken(_to, _champId, msg.sender, _isTokenChamp);
    }

    function setTokenForSale(uint _id, uint _price, bool _isTokenChamp) external{
        controller.setTokenForSale(_id, _price, msg.sender, _isTokenChamp);
    }

    function putOn(uint _champId, uint _itemId) external{
        controller.putOn(_champId, _itemId, msg.sender);
    }

    function takeOffItem(uint _champId, uint8 _type) public{
        controller.takeOffItem(_champId, _type, msg.sender);
    }

    function withdrawChamp(uint _id) external{
        controller.withdrawChamp(_id, msg.sender); 
    }

    function getChampReward(uint _position) public view returns(uint){
        return controller.getChampReward(_position);
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"loadController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_isTokenChamp","type":"bool"}],"name":"cancelTokenSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_to","type":"address"},{"name":"_isTokenChamp","type":"bool"}],"name":"setTokenApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_champId","type":"uint256"},{"name":"_attackPower","type":"uint256"},{"name":"_defencePower","type":"uint256"},{"name":"_cooldownTime","type":"uint256"},{"name":"_readyTime","type":"uint256"},{"name":"_winCount","type":"uint256"},{"name":"_lossCount","type":"uint256"},{"name":"_position","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_withdrawCooldown","type":"uint256"},{"name":"_eq_sword","type":"uint256"},{"name":"_eq_shield","type":"uint256"},{"name":"_eq_helmet","type":"uint256"},{"name":"_forSale","type":"bool"}],"name":"updateChamp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"addressInfo","outputs":[{"name":"withdrawal","type":"uint256"},{"name":"champsCount","type":"uint256"},{"name":"itemsCount","type":"uint256"},{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_isTokenChamp","type":"bool"}],"name":"clearTokenApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getItemsByOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_isTokenChamp","type":"bool"}],"name":"setTokenForSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"withdrawChamp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_attackPower","type":"uint256"},{"name":"_defencePower","type":"uint256"},{"name":"_cooldownTime","type":"uint256"},{"name":"_winCount","type":"uint256"},{"name":"_lossCount","type":"uint256"},{"name":"_position","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_eq_sword","type":"uint256"},{"name":"_eq_shield","type":"uint256"},{"name":"_eq_helmet","type":"uint256"},{"name":"_forSale","type":"bool"},{"name":"_owner","type":"address"}],"name":"newChamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_parentItemID","type":"uint256"},{"name":"_childItemID","type":"uint256"}],"name":"forgeItems","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_champId","type":"uint256"}],"name":"getChampStats","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_champId","type":"uint256"},{"name":"_itemId","type":"uint256"}],"name":"putOn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_champId","type":"uint256"},{"name":"_name","type":"string"}],"name":"setChampsName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bool"},{"name":"","type":"address"},{"name":"","type":"address"}],"name":"tokenOperatorApprovals","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"}],"name":"tokenApprovals","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"changePlayersName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_champId","type":"uint256"},{"name":"_isTokenChamp","type":"bool"}],"name":"giveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_itemType","type":"uint8"},{"name":"_itemRarity","type":"uint8"},{"name":"_attackPower","type":"uint256"},{"name":"_defencePower","type":"uint256"},{"name":"_cooldownReduction","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_onChampId","type":"uint256"},{"name":"_onChamp","type":"bool"},{"name":"_forSale","type":"bool"}],"name":"updateItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"champToName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_affiliateAddress","type":"address"}],"name":"buyItem","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_isTokenChamp","type":"bool"}],"name":"getTokenCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingWithdrawal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_id","type":"uint256"},{"name":"_isTokenChamp","type":"bool"}],"name":"transferToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_withdrawal","type":"uint256"},{"name":"_updatePendingWithdrawal","type":"bool"},{"name":"_champsCount","type":"uint256"},{"name":"_updateChampsCount","type":"bool"},{"name":"_itemsCount","type":"uint256"},{"name":"_updateItemsCount","type":"bool"},{"name":"_name","type":"string"},{"name":"_updateName","type":"bool"}],"name":"updateAddressInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"},{"name":"_isTokenChamp","type":"bool"}],"name":"setTokensForSaleCount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_isTokenChamp","type":"bool"}],"name":"getTokensForSale","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_position","type":"uint256"}],"name":"getChampReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_itemType","type":"uint8"},{"name":"_itemRarity","type":"uint8"},{"name":"_attackPower","type":"uint256"},{"name":"_defencePower","type":"uint256"},{"name":"_cooldownReduction","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_onChampId","type":"uint256"},{"name":"_onChamp","type":"bool"},{"name":"_forSale","type":"bool"},{"name":"_owner","type":"address"}],"name":"newItem","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"withdrawToAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bool"}],"name":"tokensForSaleCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"}],"name":"tokenToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_champId","type":"uint256"},{"name":"_name","type":"string"}],"name":"changeChampsName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_x","type":"uint256"},{"name":"_value","type":"uint256"}],"name":"setLeaderboard","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"leaderboard","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"items","outputs":[{"name":"id","type":"uint256"},{"name":"itemType","type":"uint8"},{"name":"itemRarity","type":"uint8"},{"name":"attackPower","type":"uint256"},{"name":"defencePower","type":"uint256"},{"name":"cooldownReduction","type":"uint256"},{"name":"price","type":"uint256"},{"name":"onChampId","type":"uint256"},{"name":"onChamp","type":"bool"},{"name":"forSale","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"champs","outputs":[{"name":"id","type":"uint256"},{"name":"attackPower","type":"uint256"},{"name":"defencePower","type":"uint256"},{"name":"cooldownTime","type":"uint256"},{"name":"readyTime","type":"uint256"},{"name":"winCount","type":"uint256"},{"name":"lossCount","type":"uint256"},{"name":"position","type":"uint256"},{"name":"price","type":"uint256"},{"name":"withdrawCooldown","type":"uint256"},{"name":"eq_sword","type":"uint256"},{"name":"eq_shield","type":"uint256"},{"name":"eq_helmet","type":"uint256"},{"name":"forSale","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"},{"name":"_msgsender","type":"address"},{"name":"_isTokenChamp","type":"bool"}],"name":"onlyApprovedOrOwnerOfToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_amount","type":"uint256"}],"name":"addWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"emergencyWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_champId","type":"uint256"},{"name":"_type","type":"uint8"}],"name":"takeOffItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_affiliateAddress","type":"address"}],"name":"buyChamp","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_approved","type":"bool"},{"name":"_isTokenChamp","type":"bool"}],"name":"setTokenOperatorApprovals","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_isTokenChamp","type":"bool"}],"name":"getTokenURIs","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_champId","type":"uint256"},{"name":"_targetId","type":"uint256"}],"name":"attack","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_owner","type":"address"},{"name":"_isTokenChamp","type":"bool"}],"name":"setTokenToOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getChampsByOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_trusted","type":"bool"}],"name":"setTrusted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]

  Contract Creation Code Switch To Opcodes View
60806040526000600a5534801561001557600080fd5b506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614cc7806100be6000396000f300608060405260043610610250576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680626f277014610255578063088df612146102985780630d325b29146102d15780630def38661461032a5780632126fcb2146103db57806329f6d9c3146104ac5780632c67a8e514610505578063338e4fd61461059d57806333fb1e05146105e0578063344c0dd51461060d57806341d9cc43146106d457806344f06bc71461070b5780634506e64d1461075a57806350c6ef881461079157806350d27312146108045780635355faed1461088b57806354c9cc44146109045780635df709041461093f5780635e7b983214610998578063736e077b14610a295780637383d70914610acf5780637a1aeb3c14610b0f5780637e28882214610b52578063811ea6de14610b7d57806387402d9a14610bf65780638e2e207714610ccd5780639187300e14610d0657806394b5c9f314610d8a578063a60956a614610dcb578063a92bd72c14610e86578063b8bcb3c914610ec9578063bb865ac014610f0c578063bcb98ba214610f85578063bd0a0e8514610fca578063bf36839914611001578063bfb231d214611042578063c5af6257146110d6578063d037628314611176578063d9a3af65146111e7578063db2e21bc14611234578063db9f16a81461124b578063dcfa6ac414611285578063e109ef24146112c5578063e167458814611340578063e1fa7638146113f2578063eb0fb0a314611429578063f0c41bb214611482578063f2fde38b1461151a578063f32a12ac1461155d575b600080fd5b34801561026157600080fd5b50610296600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115ac565b005b3480156102a457600080fd5b506102cf60048036038101908080359060200190929190803515159060200190929190505050611648565b005b3480156102dd57600080fd5b5061032860048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611735565b005b34801561033657600080fd5b506103d9600480360381019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035151590602001909291905050506117f9565b005b3480156103e757600080fd5b5061041c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a47565b6040518085815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561046e578082015181840152602081019050610453565b50505050905090810190601f16801561049b5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156104b857600080fd5b50610503600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050611b0f565b005b34801561051157600080fd5b50610546600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd5565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561058957808201518184015260208101905061056e565b505050509050019250505060405180910390f35b3480156105a957600080fd5b506105de6004803603810190808035906020019092919080359060200190929190803515159060200190929190505050611e1f565b005b3480156105ec57600080fd5b5061060b60048036038101908080359060200190929190505050611f15565b005b34801561061957600080fd5b506106be60048036038101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803515159060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ff5565b6040518082815260200191505060405180910390f35b3480156106e057600080fd5b5061070960048036038101908080359060200190929190803590602001909291905050506122e2565b005b34801561071757600080fd5b50610736600480360381019080803590602001909291905050506123cb565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561076657600080fd5b5061078f60048036038101908080359060200190929190803590602001909291905050506124be565b005b34801561079d57600080fd5b5061080260048036038101908080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506125a7565b005b34801561081057600080fd5b50610871600480360381019080803515159060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061262b565b604051808215151515815260200191505060405180910390f35b34801561089757600080fd5b506108c260048036038101908080351515906020019092919080359060200190929190505050612667565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561091057600080fd5b5061093d6004803603810190808035906020019082018035906020019190919293919293905050506126a9565b005b34801561094b57600080fd5b50610996600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035151590602001909291905050506126ff565b005b3480156109a457600080fd5b50610a2760048036038101908080359060200190929190803560ff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803515159060200190929190803515159060200190929190505050612821565b005b348015610a3557600080fd5b50610a5460048036038101908080359060200190929190505050612a67565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a94578082015181840152602081019050610a79565b50505050905090810190601f168015610ac15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b0d60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b17565b005b348015610b1b57600080fd5b50610b3c600480360381019080803515159060200190929190505050612e5f565b6040518082815260200191505060405180910390f35b348015610b5e57600080fd5b50610b67612f0c565b6040518082815260200191505060405180910390f35b348015610b8957600080fd5b50610bf4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050612f12565b005b348015610c0257600080fd5b50610ccb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035151590602001909291908035906020019092919080351515906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080351515906020019092919050505061308d565b005b348015610cd957600080fd5b50610d0460048036038101908080359060200190929190803515159060200190929190505050613184565b005b348015610d1257600080fd5b50610d336004803603810190808035151590602001909291905050506131fc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d76578082015181840152602081019050610d5b565b505050509050019250505060405180910390f35b348015610d9657600080fd5b50610db560048036038101908080359060200190929190505050613388565b6040518082815260200191505060405180910390f35b348015610dd757600080fd5b50610e70600480360381019080803560ff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803515159060200190929190803515159060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061345d565b6040518082815260200191505060405180910390f35b348015610e9257600080fd5b50610ec7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613728565b005b348015610ed557600080fd5b50610ef660048036038101908080351515906020019092919050505061386a565b6040518082815260200191505060405180910390f35b348015610f1857600080fd5b50610f4360048036038101908080351515906020019092919080359060200190929190505050613882565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f9157600080fd5b50610fc8600480360381019080803590602001909291908035906020019082018035906020019190919293919293905050506138c4565b005b348015610fd657600080fd5b50610fff60048036038101908080359060200190929190803590602001909291905050506139c8565b005b34801561100d57600080fd5b5061102c60048036038101908080359060200190929190505050613a3c565b6040518082815260200191505060405180910390f35b34801561104e57600080fd5b5061106d60048036038101908080359060200190929190505050613a54565b604051808b81526020018a60ff1660ff1681526020018960ff1660ff16815260200188815260200187815260200186815260200185815260200184815260200183151515158152602001821515151581526020019a505050505050505050505060405180910390f35b3480156110e257600080fd5b5061110160048036038101908080359060200190929190505050613aeb565b604051808f81526020018e81526020018d81526020018c81526020018b81526020018a8152602001898152602001888152602001878152602001868152602001858152602001848152602001838152602001821515151581526020019e50505050505050505050505050505060405180910390f35b34801561118257600080fd5b506111cd60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613b73565b604051808215151515815260200191505060405180910390f35b3480156111f357600080fd5b50611232600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613d36565b005b34801561124057600080fd5b50611249613d9c565b005b34801561125757600080fd5b5061128360048036038101908080359060200190929190803560ff169060200190929190505050613e76565b005b6112c360048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f65565b005b3480156112d157600080fd5b5061133e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291908035151590602001909291905050506142a1565b005b34801561134c57600080fd5b50611377600480360381019080803590602001909291908035151590602001909291905050506143a8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156113b757808201518184015260208101905061139c565b50505050905090810190601f1680156113e45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156113fe57600080fd5b5061142760048036038101908080359060200190929190803590602001909291905050506144e0565b005b34801561143557600080fd5b5061148060048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506145c9565b005b34801561148e57600080fd5b506114c3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061468d565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156115065780820151818401526020810190506114eb565b505050509050019250505060405180910390f35b34801561152657600080fd5b5061155b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506147d8565b005b34801561156957600080fd5b506115aa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506148b0565b005b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561160457600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634da1e0b78333846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019350505050600060405180830381600087803b15801561171957600080fd5b505af115801561172d573d6000803e3d6000fd5b505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561178d57600080fd5b816006600083151515158152602001908152602001600020600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561185357600080fd5b60008f81548110151561186257fe5b90600052602060002090600e020190508d8160010154141515611889578d81600101819055505b8c81600201541415156118a0578c81600201819055505b8b81600301541415156118b7578b81600301819055505b8a81600401541415156118ce578a81600401819055505b8981600501541415156118e5578981600501819055505b8881600601541415156118fc578881600601819055505b87816007015414151561192b578781600701819055508e600260008a8152602001908152602001600020819055505b868160080154141515611942578681600801819055505b858160090154141515611959578581600901819055505b8481600a0154141515611970578481600a01819055505b8381600b0154141515611987578381600b01819055505b8281600c015414151561199e578281600c01819055505b81151581600d0160009054906101000a900460ff161515141515611a36578181600d0160006101000a81548160ff0219169083151502179055508115611a0b5760096000600115151515815260200190815260200160002060008154809291906001019190505550611a35565b60096000600115151515815260200190815260200160002060008154809291906001900391905055505b5b505050505050505050505050505050565b6004602052806000526040600020600091509050806000015490806001015490806002015490806003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b055780601f10611ada57610100808354040283529160200191611b05565b820191906000526020600020905b815481529060010190602001808311611ae857829003601f168201915b5050505050905084565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611b6757600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166007600083151515158152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611be957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166006600083151515158152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611cd05760006006600083151515158152602001908152602001600020600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050565b606080600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154604051908082528060200260200182016040528015611d4c5781602001602082028038833980820191505090505b50925060009150600090505b600180549050811015611e14578473ffffffffffffffffffffffffffffffffffffffff166007600080151515158152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e0757808383815181101515611df057fe5b906020019060200201818152505081806001019250505b8080600101915050611d58565b829350505050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a87af57b848433856040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182151515158152602001945050505050600060405180830381600087803b158015611ef857600080fd5b505af1158015611f0c573d6000803e3d6000fd5b50505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca76002182336040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015611fda57600080fd5b505af1158015611fee573d6000803e3d6000fd5b5050505050565b6000611fff614aa6565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561205957600080fd5b6101c06040519081016040528060008152602001600081526020018f81526020018e8152602001600081526020018d81526020018c81526020018b81526020018a81526020016000815260200189815260200188815260200187815260200186151581525091508e82602001818152505060016000839080600181540180825580915050906001820390600052602060002090600e020160009091929091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d0160006101000a81548160ff0219169083151502179055505050039050806000828154811015156121b757fe5b90600052602060002090600e02016000018190555080600260008c815260200190815260200160002081905550600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000815480929190600101919050555083600760006001151515158152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084156122cd57600960006001151515158152602001908152602001600020600081548092919060010191905055505b80925050509c9b505050505050505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a1bc13ad8383336040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b505050505050565b60008060008060008060008060008060008b8154811015156123e957fe5b90600052602060002090600e02019650600187600a015481548110151561240c57fe5b90600052602060002090600802019550600187600b015481548110151561242f57fe5b90600052602060002090600802019450600187600c015481548110151561245257fe5b90600052602060002090600802019350836002015485600201548760020154896001015401010192508360030154856003015487600301548960020154010101915083600401548560040154876004015401019050828282995099509950505050505050509193909250565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce9a6ac88383336040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561258b57600080fd5b505af115801561259f573d6000803e3d6000fd5b505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156125ff57600080fd5b80600860008481526020019081526020016000209080519060200190612626929190614b18565b505050565b6005602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8181600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030191906126fa929190614b98565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350be7503848433856040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182151515158152602001945050505050600060405180830381600087803b15801561280457600080fd5b505af1158015612818573d6000803e3d6000fd5b50505050505050565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561287b57600080fd5b60018b81548110151561288a57fe5b906000526020600020906008020190508960ff168160010160009054906101000a900460ff1660ff161415156128d857898160010160006101000a81548160ff021916908360ff1602179055505b8860ff168160010160019054906101000a900460ff1660ff1614151561291657888160010160016101000a81548160ff021916908360ff1602179055505b87816002015414151561292d578781600201819055505b868160030154141515612944578681600301819055505b85816004015414151561295b578581600401819055505b848160050154141515612972578481600501819055505b838160060154141515612989578381600601819055505b8215158160070160009054906101000a900460ff1615151415156129c457828160070160006101000a81548160ff0219169083151502179055505b8115158160070160019054906101000a900460ff161515141515612a5a57818160070160016101000a81548160ff0219169083151502179055508115612a3057600960008015151515815260200190815260200160002060008154809291906001019190505550612a59565b600960008015151515815260200190815260200160002060008154809291906001900391905055505b5b5050505050505050505050565b60086020528060005260406000206000915090508054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b0f5780601f10612ae457610100808354040283529160200191612b0f565b820191906000526020600020905b815481529060010190602001808311612af257829003601f168201915b505050505081565b8160008114151515612b2857600080fd5b6007600080151515158152602001908152602001600020600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515612bab57600080fd5b82600181815481101515612bbb57fe5b906000526020600020906008020160070160019054906101000a900460ff161515612be557600080fd5b600184815481101515612bf457fe5b906000526020600020906008020160050154803410151515612c1557600080fd5b3073ffffffffffffffffffffffffffffffffffffffff166007600080151515158152602001908152602001600020600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c9f57612c9a84614963565b612cf2565b612cf16007600080151515158152602001908152602001600020600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634614a29565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663811ea6de6007600080151515158152602001908152602001600020600088815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338860006040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182151515158152602001945050505050600060405180830381600087803b158015612e4057600080fd5b505af1158015612e54573d6000803e3d6000fd5b505050505050505050565b60008115612eb857600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600080549050039050612f07565b600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015460018080549050030390505b919050565b600a5481565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612f6a57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663811ea6de858585856040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182151515158152602001945050505050600060405180830381600087803b15801561306f57600080fd5b505af1158015613083573d6000803e3d6000fd5b5050505050505050565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156130e757600080fd5b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508715613138578881600001819055505b8515613148578681600101819055505b8315613158578481600201819055505b81156131785782816003019080519060200190613176929190614b18565b505b50505050505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156131dc57600080fd5b816009600083151515158152602001908152602001600020819055505050565b606080600080600060096000871515151581526020019081526020016000205460405190808252806020026020018201604052801561324a5781602001602082028038833980820191505090505b5093506000600960008815151515815260200190815260200160002054111561337c576000925085156132fb57600091505b6000805490508210156132f6576001151560008381548110151561329c57fe5b90600052602060002090600e0201600d0160009054906101000a900460ff16151514156132e9578184848151811015156132d257fe5b906020019060200201818152505082806001019350505b818060010192505061327c565b61337b565b600090505b60018054905081101561337a576001151560018281548110151561332057fe5b906000526020600020906008020160070160019054906101000a900460ff161515141561336d5780848481518110151561335657fe5b906020019060200201818152505082806001019350505b8080600101915050613300565b5b5b83945050505050919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394b5c9f3836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561341b57600080fd5b505af115801561342f573d6000803e3d6000fd5b505050506040513d602081101561344557600080fd5b81019080805190602001909291905050509050919050565b6000613467614c18565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156134c157600080fd5b61014060405190810160405280600081526020018e60ff1681526020018d60ff1681526020018c81526020018b81526020018a81526020018981526020018881526020018715158152602001861515815250915060018083908060018154018082558091505090600182039060005260206000209060080201600090919290919091506000820151816000015560208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160010160016101000a81548160ff021916908360ff160217905550606082015181600201556080820151816003015560a0820151816004015560c0820151816005015560e082015181600601556101008201518160070160006101000a81548160ff0219169083151502179055506101208201518160070160016101000a81548160ff02191690831515021790555050500390508060018281548110151561361957fe5b906000526020600020906008020160000181905550600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008154809291906001019190505550836007600080151515158152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508415613715576009600080151515158152602001908152602001600020600081548092919060010191905055505b80925050509a9950505050505050505050565b600080829150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613767573391505b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000811115156137bb57600080fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061381881600a54614a8d90919063ffffffff16565b600a819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613864573d6000803e3d6000fd5b50505050565b60096020528060005260406000206000915090505481565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166309a0cfe4848484336040518563ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180858152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281038252858582818152602001925080828437820191505095505050505050600060405180830381600087803b1580156139ab57600080fd5b505af11580156139bf573d6000803e3d6000fd5b50505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613a2057600080fd5b8060026000848152602001908152602001600020819055505050565b60026020528060005260406000206000915090505481565b600181815481101515613a6357fe5b90600052602060002090600802016000915090508060000154908060010160009054906101000a900460ff16908060010160019054906101000a900460ff16908060020154908060030154908060040154908060050154908060060154908060070160009054906101000a900460ff16908060070160019054906101000a900460ff1690508a565b600081815481101515613afa57fe5b90600052602060002090600e020160009150905080600001549080600101549080600201549080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a01549080600b01549080600c01549080600d0160009054906101000a900460ff1690508e565b600080821515613b8e5760008514151515613b8d57600080fd5b5b6007600084151515158152602001908152602001600020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613c8657506006600084151515158152602001908152602001600020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80613d2c5750600560008415151515815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9150509392505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613d8e57600080fd5b613d988282614a29565b5050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613df457600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015613e73573d6000803e3d6000fd5b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638c945d388383336040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1660ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015613f4957600080fd5b505af1158015613f5d573d6000803e3d6000fd5b505050505050565b81600760006001151515158152602001908152602001600020600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515613fea57600080fd5b82600081815481101515613ffa57fe5b90600052602060002090600e0201600d0160009054906101000a900460ff16151561402457600080fd5b60008481548110151561403357fe5b90600052602060002090600e02016008015480341015151561405457600080fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760006001151515158152602001908152602001600020600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156140df576140da84614963565b614133565b614132600760006001151515158152602001908152602001600020600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634614a29565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663811ea6de600760006001151515158152602001908152602001600020600088815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338860016040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182151515158152602001945050505050600060405180830381600087803b15801561428257600080fd5b505af1158015614296573d6000803e3d6000fd5b505050505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156142f957600080fd5b81600560008315151515815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6060600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e167458884846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018215151515815260200192505050600060405180830381600087803b15801561444757600080fd5b505af115801561445b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561448557600080fd5b81019080805164010000000081111561449d57600080fd5b828101905060208101848111156144b357600080fd5b81518560018202830111640100000000821117156144d057600080fd5b5050929190505050905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663daaf3d2e8383336040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156145ad57600080fd5b505af11580156145c1573d6000803e3d6000fd5b505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561462157600080fd5b816007600083151515158152602001908152602001600020600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b606080600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040519080825280602002602001820160405280156147045781602001602082028038833980820191505090505b50925060009150600090505b6000805490508110156147cd578473ffffffffffffffffffffffffffffffffffffffff16600760006001151515158152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156147c0578083838151811015156147a957fe5b906020019060200201818152505081806001019250505b8080600101915050614710565b829350505050919050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561483057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561486c57600080fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561490857600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61499e600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603c60643481151561499757fe5b0402614a29565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015614a0757503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15614a2657614a25816019606434811515614a1e57fe5b0402614a29565b5b50565b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254019250508190555080600a600082825401925050819055505050565b6000828211151515614a9b57fe5b818303905092915050565b6101c060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614b5957805160ff1916838001178555614b87565b82800160010185558215614b87579182015b82811115614b86578251825591602001919060010190614b6b565b5b509050614b949190614c76565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614bd957803560ff1916838001178555614c07565b82800160010185558215614c07579182015b82811115614c06578235825591602001919060010190614beb565b5b509050614c149190614c76565b5090565b6101406040519081016040528060008152602001600060ff168152602001600060ff16815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b614c9891905b80821115614c94576000816000905550600101614c7c565b5090565b905600a165627a7a7230582067a990025a9138c614880f57620d6c8080a00f9be557de7466ec0d5681b6d5000029

   Swarm Source:
bzzr://67a990025a9138c614880f57620d6c8080a00f9be557de7466ec0d5681b6d500

 

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.