ETH Price: $1,850.30 (+0.89%)
Gas: 21 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Sponsored

Transaction Hash
Method
Block
From
To
Value
Free Car79298952019-06-10 7:34:451447 days 18 hrs ago1560152085IN
0x30eEB2...CD1A00E3
0 ETH0.00136583
Free Car76905272019-05-03 21:52:001485 days 4 hrs ago1556920320IN
0x30eEB2...CD1A00E3
0 ETH0.001363333
Free Car76665982019-04-30 4:18:391488 days 21 hrs ago1556597919IN
0x30eEB2...CD1A00E3
0 ETH0.000544341.2
Free Car76357012019-04-25 9:11:211493 days 17 hrs ago1556183481IN
0x30eEB2...CD1A00E3
0 ETH0.001358393
Free Car75242662019-04-08 0:32:281511 days 1 hr ago1554683548IN
0x30eEB2...CD1A00E3
0 ETH0.000451971
Free Car75008922019-04-04 9:29:001514 days 16 hrs ago1554370140IN
0x30eEB2...CD1A00E3
0 ETH0.000902292
Free Car74995592019-04-04 4:23:251514 days 21 hrs ago1554351805IN
0x30eEB2...CD1A00E3
0 ETH0.00180134
Free Car74608272019-03-29 2:40:481520 days 23 hrs ago1553827248IN
0x30eEB2...CD1A00E3
0 ETH0.0008992
Free Car74585312019-03-28 18:10:261521 days 8 hrs ago1553796626IN
0x30eEB2...CD1A00E3
0 ETH0.000673011.5
Free Car74254082019-03-23 14:09:421526 days 12 hrs ago1553350182IN
0x30eEB2...CD1A00E3
0 ETH0.00089572
Car Presell74000602019-03-19 15:30:151530 days 10 hrs ago1553009415IN
0x30eEB2...CD1A00E3
0.075 ETH0.000759132
Free Car74000482019-03-19 15:27:421530 days 10 hrs ago1553009262IN
0x30eEB2...CD1A00E3
0 ETH0.000894052
Free Car73819122019-03-16 19:20:201533 days 6 hrs ago1552764020IN
0x30eEB2...CD1A00E3
0 ETH0.00044621
Free Car73618062019-03-13 16:36:311536 days 9 hrs ago1552494991IN
0x30eEB2...CD1A00E3
0 ETH0.000890762
Free Car73201192019-03-07 4:46:351542 days 21 hrs ago1551933995IN
0x30eEB2...CD1A00E3
0 ETH0.001333673
Free Car73087232019-03-05 10:04:171544 days 16 hrs ago1551780257IN
0x30eEB2...CD1A00E3
0 ETH0.001331193
Free Car73014542019-03-04 6:53:231545 days 19 hrs ago1551682403IN
0x30eEB2...CD1A00E3
0 ETH0.000885812
Free Car72963242019-03-03 11:34:031546 days 14 hrs ago1551612843IN
0x30eEB2...CD1A00E3
0 ETH0.000884172
Free Car72588422019-02-23 20:40:021554 days 5 hrs ago1550954402IN
0x30eEB2...CD1A00E3
0 ETH0.001328193.01
Free Car72341402019-02-18 1:29:361560 days 41 mins ago1550453376IN
0x30eEB2...CD1A00E3
0 ETH0.002202185
Free Car72073442019-02-11 16:05:261566 days 10 hrs ago1549901126IN
0x30eEB2...CD1A00E3
0 ETH0.000879222
Free Car72035392019-02-10 18:12:461567 days 7 hrs ago1549822366IN
0x30eEB2...CD1A00E3
0 ETH0.001316363
Free Car72001032019-02-09 23:13:331568 days 2 hrs ago1549754013IN
0x30eEB2...CD1A00E3
0 ETH0.001313893
Car Presell71953832019-02-09 0:09:591569 days 2 hrs ago1549670999IN
0x30eEB2...CD1A00E3
0.112 ETH0.001037793
Car Presell71841362019-02-06 17:16:331571 days 8 hrs ago1549473393IN
0x30eEB2...CD1A00E3
0.225 ETH0.000437461.21
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
74000602019-03-19 15:30:151530 days 10 hrs ago1553009415
0x30eEB2...CD1A00E3
0.015 ETH
74000602019-03-19 15:30:151530 days 10 hrs ago1553009415
0x30eEB2...CD1A00E3
0.06 ETH
71953832019-02-09 0:09:591569 days 2 hrs ago1549670999
0x30eEB2...CD1A00E3
0.0224 ETH
71953832019-02-09 0:09:591569 days 2 hrs ago1549670999
0x30eEB2...CD1A00E3
0.0896 ETH
71841362019-02-06 17:16:331571 days 8 hrs ago1549473393
0x30eEB2...CD1A00E3
0.045 ETH
71841362019-02-06 17:16:331571 days 8 hrs ago1549473393
0x30eEB2...CD1A00E3
0.18 ETH
71694192019-02-03 17:30:551574 days 8 hrs ago1549215055
0x30eEB2...CD1A00E3
0.045 ETH
71694192019-02-03 17:30:551574 days 8 hrs ago1549215055
0x30eEB2...CD1A00E3
0.18 ETH
71657772019-02-02 23:15:331575 days 2 hrs ago1549149333
0x30eEB2...CD1A00E3
0.045 ETH
71657772019-02-02 23:15:331575 days 2 hrs ago1549149333
0x30eEB2...CD1A00E3
0.18 ETH
71620242019-02-02 5:07:151575 days 21 hrs ago1549084035
0x30eEB2...CD1A00E3
0.045 ETH
71620242019-02-02 5:07:151575 days 21 hrs ago1549084035
0x30eEB2...CD1A00E3
0.18 ETH
71619782019-02-02 4:53:151575 days 21 hrs ago1549083195
0x30eEB2...CD1A00E3
0.1126 ETH
71619782019-02-02 4:53:151575 days 21 hrs ago1549083195
0x30eEB2...CD1A00E3
0.4504 ETH
71551142019-01-31 19:06:291577 days 7 hrs ago1548961589
0x30eEB2...CD1A00E3
0.015 ETH
71551142019-01-31 19:06:291577 days 7 hrs ago1548961589
0x30eEB2...CD1A00E3
0.06 ETH
71543592019-01-31 15:33:131577 days 10 hrs ago1548948793
0x30eEB2...CD1A00E3
0.015 ETH
71543592019-01-31 15:33:131577 days 10 hrs ago1548948793
0x30eEB2...CD1A00E3
0.06 ETH
71459462019-01-29 22:21:151579 days 3 hrs ago1548800475
0x30eEB2...CD1A00E3
0.015 ETH
71459462019-01-29 22:21:151579 days 3 hrs ago1548800475
0x30eEB2...CD1A00E3
0.06 ETH
71454412019-01-29 19:50:021579 days 6 hrs ago1548791402
0x30eEB2...CD1A00E3
0.1126 ETH
71454412019-01-29 19:50:021579 days 6 hrs ago1548791402
0x30eEB2...CD1A00E3
0.4504 ETH
71442372019-01-29 14:04:381579 days 12 hrs ago1548770678
0x30eEB2...CD1A00E3
0.015 ETH
71442372019-01-29 14:04:381579 days 12 hrs ago1548770678
0x30eEB2...CD1A00E3
0.06 ETH
71442362019-01-29 14:04:281579 days 12 hrs ago1548770668
0x30eEB2...CD1A00E3
0.015 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CarsPresell

Compiler Version
v0.4.25-nightly.2018.5.18+commit.4d7b092c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-01-17
*/

/* ==================================================================== */
/* Copyright (c) 2018 The CryptoRacing Project.  All rights reserved.
/* 
/*   The first idle car race game of blockchain                 
/* ==================================================================== */
pragma solidity ^0.4.20;

/// @title ERC-165 Standard Interface Detection
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
interface ERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
contract ERC721 is ERC165 {
    event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    function balanceOf(address _owner) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;
    function approve(address _approved, uint256 _tokenId) external;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

/// @title ERC-721 Non-Fungible Token Standard
interface ERC721TokenReceiver {
	function onERC721Received(address _from, uint256 _tokenId, bytes data) external returns(bytes4);
}

contract AccessAdmin {
    bool public isPaused = false;
    address public addrAdmin;  

    event AdminTransferred(address indexed preAdmin, address indexed newAdmin);

    function AccessAdmin() public {
        addrAdmin = msg.sender;
    }  


    modifier onlyAdmin() {
        require(msg.sender == addrAdmin);
        _;
    }

    modifier whenNotPaused() {
        require(!isPaused);
        _;
    }

    modifier whenPaused {
        require(isPaused);
        _;
    }

    function setAdmin(address _newAdmin) external onlyAdmin {
        require(_newAdmin != address(0));
        AdminTransferred(addrAdmin, _newAdmin);
        addrAdmin = _newAdmin;
    }

    function doPause() external onlyAdmin whenNotPaused {
        isPaused = true;
    }

    function doUnpause() external onlyAdmin whenPaused {
        isPaused = false;
    }
}


contract AccessService is AccessAdmin {
    address public addrService;
    address public addrFinance;

    modifier onlyService() {
        require(msg.sender == addrService);
        _;
    }

    modifier onlyFinance() {
        require(msg.sender == addrFinance);
        _;
    }

    function setService(address _newService) external {
        require(msg.sender == addrService || msg.sender == addrAdmin);
        require(_newService != address(0));
        addrService = _newService;
    }

    function setFinance(address _newFinance) external {
        require(msg.sender == addrFinance || msg.sender == addrAdmin);
        require(_newFinance != address(0));
        addrFinance = _newFinance;
    }
}





/* ==================================================================== */
/* equipmentId 
/* 10001	T1
/* 10002	T2
/* 10003	T3
/* 10004	T4
/* 10005	T5
/* 10006	T6 
/* 10007	freeCar          
/* ==================================================================== */

contract RaceToken is ERC721, AccessAdmin {
    /// @dev The equipment info
    struct Fashion {
        uint16 equipmentId;             // 0  Equipment ID
        uint16 quality;     	        // 1  Rarity: 1 Coarse/2 Good/3 Rare/4 Epic/5 Legendary
        uint16 pos;         	        // 2  Slots: 1 Engine/2 Turbine/3 BodySystem/4 Pipe/5 Suspension/6 NO2/7 Tyre/8 Transmission/9 Car
        uint16 production;    	        // 3  Race bonus productivity
        uint16 attack;	                // 4  Attack
        uint16 defense;                 // 5  Defense
        uint16 plunder;     	        // 6  Plunder
        uint16 productionMultiplier;    // 7  Percent value
        uint16 attackMultiplier;     	// 8  Percent value
        uint16 defenseMultiplier;     	// 9  Percent value
        uint16 plunderMultiplier;     	// 10 Percent value
        uint16 level;       	        // 11 level
        uint16 isPercent;   	        // 12  Percent value
    }

    /// @dev All equipments tokenArray (not exceeding 2^32-1)
    Fashion[] public fashionArray;

    /// @dev Amount of tokens destroyed
    uint256 destroyFashionCount;

    /// @dev Equipment token ID belong to owner address
    mapping (uint256 => address) fashionIdToOwner;

    /// @dev Equipments owner by the owner (array)
    mapping (address => uint256[]) ownerToFashionArray;

    /// @dev Equipment token ID search in owner array
    mapping (uint256 => uint256) fashionIdToOwnerIndex;

    /// @dev The authorized address for each Race
    mapping (uint256 => address) fashionIdToApprovals;

    /// @dev The authorized operators for each address
    mapping (address => mapping (address => bool)) operatorToApprovals;

    /// @dev Trust contract
    mapping (address => bool) actionContracts;

	//设置可调用当前合约的其他合约
    function setActionContract(address _actionAddr, bool _useful) external onlyAdmin {
        actionContracts[_actionAddr] = _useful;
    }

    function getActionContract(address _actionAddr) external view onlyAdmin returns(bool) {
        return actionContracts[_actionAddr];
    }

    /// @dev This emits when the approved address for an Race is changed or reaffirmed.
    event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

    /// @dev This emits when an operator is enabled or disabled for an owner.
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    /// @dev This emits when the equipment ownership changed 
    event Transfer(address indexed from, address indexed to, uint256 tokenId);

    /// @dev This emits when the equipment created
    event CreateFashion(address indexed owner, uint256 tokenId, uint16 equipmentId, uint16 quality, uint16 pos, uint16 level, uint16 createType);

    /// @dev This emits when the equipment's attributes changed
    event ChangeFashion(address indexed owner, uint256 tokenId, uint16 changeType);

    /// @dev This emits when the equipment destroyed
    event DeleteFashion(address indexed owner, uint256 tokenId, uint16 deleteType);
    
    function RaceToken() public {
        addrAdmin = msg.sender;
        fashionArray.length += 1;
    }

    // modifier
    /// @dev Check if token ID is valid
    modifier isValidToken(uint256 _tokenId) {
        require(_tokenId >= 1 && _tokenId <= fashionArray.length);
        require(fashionIdToOwner[_tokenId] != address(0)); 
        _;
    }

    modifier canTransfer(uint256 _tokenId) {
        address owner = fashionIdToOwner[_tokenId];
        require(msg.sender == owner || msg.sender == fashionIdToApprovals[_tokenId] || operatorToApprovals[owner][msg.sender]);
        _;
    }

    // ERC721
    function supportsInterface(bytes4 _interfaceId) external view returns(bool) {
        // ERC165 || ERC721 || ERC165^ERC721
        return (_interfaceId == 0x01ffc9a7 || _interfaceId == 0x80ac58cd || _interfaceId == 0x8153916a) && (_interfaceId != 0xffffffff);
    }
        
    function name() public pure returns(string) {
        return "Race Token";
    }

    function symbol() public pure returns(string) {
        return "Race";
    }

    /// @dev Search for token quantity address
    /// @param _owner Address that needs to be searched
    /// @return Returns token quantity
    function balanceOf(address _owner) external view returns(uint256) {
        require(_owner != address(0));
        return ownerToFashionArray[_owner].length;
    }

    /// @dev Find the owner of an Race
    /// @param _tokenId The tokenId of Race
    /// @return Give The address of the owner of this Race
    function ownerOf(uint256 _tokenId) external view /*isValidToken(_tokenId)*/ returns (address owner) {
        return fashionIdToOwner[_tokenId];
    }

    /// @dev Transfers the ownership of an Race from one address to another address
    /// @param _from The current owner of the Race
    /// @param _to The new owner
    /// @param _tokenId The Race to transfer
    /// @param data Additional data with no specified format, sent in call to `_to`
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) 
        external
        whenNotPaused
    {
        _safeTransferFrom(_from, _to, _tokenId, data);
    }

    /// @dev Transfers the ownership of an Race from one address to another address
    /// @param _from The current owner of the Race
    /// @param _to The new owner
    /// @param _tokenId The Race to transfer
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) 
        external
        whenNotPaused
    {
        _safeTransferFrom(_from, _to, _tokenId, "");
    }

    /// @dev Transfer ownership of an Race, '_to' must be a vaild address, or the Race will lost
    /// @param _from The current owner of the Race
    /// @param _to The new owner
    /// @param _tokenId The Race to transfer
    function transferFrom(address _from, address _to, uint256 _tokenId)
        external
        whenNotPaused
        isValidToken(_tokenId)
        canTransfer(_tokenId)
    {
        address owner = fashionIdToOwner[_tokenId];
        require(owner != address(0));
        require(_to != address(0));
        require(owner == _from);
        
        _transfer(_from, _to, _tokenId);
    }

    /// @dev Set or reaffirm the approved address for an Race
    /// @param _approved The new approved Race controller
    /// @param _tokenId The Race to approve
    function approve(address _approved, uint256 _tokenId)
        external
        whenNotPaused
    {
        address owner = fashionIdToOwner[_tokenId];
        require(owner != address(0));
        require(msg.sender == owner || operatorToApprovals[owner][msg.sender]);

        fashionIdToApprovals[_tokenId] = _approved;
        Approval(owner, _approved, _tokenId);
    }

    /// @dev Enable or disable approval for a third party ("operator") to manage all your asset.
    /// @param _operator Address to add to the set of authorized operators.
    /// @param _approved True if the operators is approved, false to revoke approval
    function setApprovalForAll(address _operator, bool _approved) 
        external 
        whenNotPaused
    {
        operatorToApprovals[msg.sender][_operator] = _approved;
        ApprovalForAll(msg.sender, _operator, _approved);
    }

    /// @dev Get the approved address for a single Race
    /// @param _tokenId The Race to find the approved address for
    /// @return The approved address for this Race, or the zero address if there is none
    function getApproved(uint256 _tokenId) external view isValidToken(_tokenId) returns (address) {
        return fashionIdToApprovals[_tokenId];
    }

    /// @dev Query if an address is an authorized operator for another address
    /// @param _owner The address that owns the Races
    /// @param _operator The address that acts on behalf of the owner
    /// @return True if `_operator` is an approved operator for `_owner`, false otherwise
    function isApprovedForAll(address _owner, address _operator) external view returns (bool) {
        return operatorToApprovals[_owner][_operator];
    }

    /// @dev Count Races tracked by this contract
    /// @return A count of valid Races tracked by this contract, where each one of
    ///  them has an assigned and queryable owner not equal to the zero address
    function totalSupply() external view returns (uint256) {
        return fashionArray.length - destroyFashionCount - 1;
    }

    /// @dev Do the real transfer with out any condition checking
    /// @param _from The old owner of this Race(If created: 0x0)
    /// @param _to The new owner of this Race 
    /// @param _tokenId The tokenId of the Race
    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        if (_from != address(0)) {
            uint256 indexFrom = fashionIdToOwnerIndex[_tokenId];
            uint256[] storage fsArray = ownerToFashionArray[_from];
            require(fsArray[indexFrom] == _tokenId);

            // If the Race is not the element of array, change it to with the last
            if (indexFrom != fsArray.length - 1) {
                uint256 lastTokenId = fsArray[fsArray.length - 1];
                fsArray[indexFrom] = lastTokenId; 
                fashionIdToOwnerIndex[lastTokenId] = indexFrom;
            }
            fsArray.length -= 1; 
            
            if (fashionIdToApprovals[_tokenId] != address(0)) {
                delete fashionIdToApprovals[_tokenId];
            }      
        }

        // Give the Race to '_to'
        fashionIdToOwner[_tokenId] = _to;
        ownerToFashionArray[_to].push(_tokenId);
        fashionIdToOwnerIndex[_tokenId] = ownerToFashionArray[_to].length - 1;
        
        Transfer(_from != address(0) ? _from : this, _to, _tokenId);
    }

    /// @dev Actually perform the safeTransferFrom
    function _safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) 
        internal
        isValidToken(_tokenId) 
        canTransfer(_tokenId)
    {
        address owner = fashionIdToOwner[_tokenId];
        require(owner != address(0));
        require(_to != address(0));
        require(owner == _from);
        
        _transfer(_from, _to, _tokenId);

        // Do the callback after everything is done to avoid reentrancy attack
        uint256 codeSize;
        assembly { codeSize := extcodesize(_to) }
        if (codeSize == 0) {
            return;
        }
        bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(_from, _tokenId, data);
        // bytes4(keccak256("onERC721Received(address,uint256,bytes)")) = 0xf0b9e5ba;
        require(retval == 0xf0b9e5ba);
    }

    //----------------------------------------------------------------------------------------------------------

    /// @dev Equipment creation
    /// @param _owner Owner of the equipment created
    /// @param _attrs Attributes of the equipment created
    /// @return Token ID of the equipment created
    function createFashion(address _owner, uint16[13] _attrs, uint16 _createType) 
        external 
        whenNotPaused
        returns(uint256)
    {
        require(actionContracts[msg.sender]);
        require(_owner != address(0));

        uint256 newFashionId = fashionArray.length;
        require(newFashionId < 4294967296);

        fashionArray.length += 1;
        Fashion storage fs = fashionArray[newFashionId];
        fs.equipmentId = _attrs[0];
        fs.quality = _attrs[1];
        fs.pos = _attrs[2];
        if (_attrs[3] != 0) {
            fs.production = _attrs[3];
        }
        
        if (_attrs[4] != 0) {
            fs.attack = _attrs[4];
        }
		
		if (_attrs[5] != 0) {
            fs.defense = _attrs[5];
        }
       
        if (_attrs[6] != 0) {
            fs.plunder = _attrs[6];
        }
        
        if (_attrs[7] != 0) {
            fs.productionMultiplier = _attrs[7];
        }

        if (_attrs[8] != 0) {
            fs.attackMultiplier = _attrs[8];
        }

        if (_attrs[9] != 0) {
            fs.defenseMultiplier = _attrs[9];
        }

        if (_attrs[10] != 0) {
            fs.plunderMultiplier = _attrs[10];
        }

        if (_attrs[11] != 0) {
            fs.level = _attrs[11];
        }

        if (_attrs[12] != 0) {
            fs.isPercent = _attrs[12];
        }
        
        _transfer(0, _owner, newFashionId);
        CreateFashion(_owner, newFashionId, _attrs[0], _attrs[1], _attrs[2], _attrs[11], _createType);
        return newFashionId;
    }

    /// @dev One specific attribute of the equipment modified
    function _changeAttrByIndex(Fashion storage _fs, uint16 _index, uint16 _val) internal {
        if (_index == 3) {
            _fs.production = _val;
        } else if(_index == 4) {
            _fs.attack = _val;
        } else if(_index == 5) {
            _fs.defense = _val;
        } else if(_index == 6) {
            _fs.plunder = _val;
        }else if(_index == 7) {
            _fs.productionMultiplier = _val;
        }else if(_index == 8) {
            _fs.attackMultiplier = _val;
        }else if(_index == 9) {
            _fs.defenseMultiplier = _val;
        }else if(_index == 10) {
            _fs.plunderMultiplier = _val;
        } else if(_index == 11) {
            _fs.level = _val;
        } 
       
    }

    /// @dev Equiment attributes modified (max 4 stats modified)
    /// @param _tokenId Equipment Token ID
    /// @param _idxArray Stats order that must be modified
    /// @param _params Stat value that must be modified
    /// @param _changeType Modification type such as enhance, socket, etc.
    function changeFashionAttr(uint256 _tokenId, uint16[4] _idxArray, uint16[4] _params, uint16 _changeType) 
        external 
        whenNotPaused
        isValidToken(_tokenId) 
    {
        require(actionContracts[msg.sender]);

        Fashion storage fs = fashionArray[_tokenId];
        if (_idxArray[0] > 0) {
            _changeAttrByIndex(fs, _idxArray[0], _params[0]);
        }

        if (_idxArray[1] > 0) {
            _changeAttrByIndex(fs, _idxArray[1], _params[1]);
        }

        if (_idxArray[2] > 0) {
            _changeAttrByIndex(fs, _idxArray[2], _params[2]);
        }

        if (_idxArray[3] > 0) {
            _changeAttrByIndex(fs, _idxArray[3], _params[3]);
        }

        ChangeFashion(fashionIdToOwner[_tokenId], _tokenId, _changeType);
    }

    /// @dev Equipment destruction
    /// @param _tokenId Equipment Token ID
    /// @param _deleteType Destruction type, such as craft
    function destroyFashion(uint256 _tokenId, uint16 _deleteType)
        external 
        whenNotPaused
        isValidToken(_tokenId) 
    {
        require(actionContracts[msg.sender]);

        address _from = fashionIdToOwner[_tokenId];
        uint256 indexFrom = fashionIdToOwnerIndex[_tokenId];
        uint256[] storage fsArray = ownerToFashionArray[_from]; 
        require(fsArray[indexFrom] == _tokenId);

        if (indexFrom != fsArray.length - 1) {
            uint256 lastTokenId = fsArray[fsArray.length - 1];
            fsArray[indexFrom] = lastTokenId; 
            fashionIdToOwnerIndex[lastTokenId] = indexFrom;
        }
        fsArray.length -= 1; 

        fashionIdToOwner[_tokenId] = address(0);
        delete fashionIdToOwnerIndex[_tokenId];
        destroyFashionCount += 1;

        Transfer(_from, 0, _tokenId);

        DeleteFashion(_from, _tokenId, _deleteType);
    }

    /// @dev Safe transfer by trust contracts
    function safeTransferByContract(uint256 _tokenId, address _to) 
        external
        whenNotPaused
    {
        require(actionContracts[msg.sender]);

        require(_tokenId >= 1 && _tokenId <= fashionArray.length);
        address owner = fashionIdToOwner[_tokenId];
        require(owner != address(0));
        require(_to != address(0));
        require(owner != _to);

        _transfer(owner, _to, _tokenId);
    }

    //----------------------------------------------------------------------------------------------------------

	/// @dev Get fashion attrs by tokenId front
    function getFashionFront(uint256 _tokenId) external view isValidToken(_tokenId) returns (uint256[14] datas) {
        Fashion storage fs = fashionArray[_tokenId];
        datas[0] = fs.equipmentId;
        datas[1] = fs.quality;
        datas[2] = fs.pos;
        datas[3] = fs.production;
        datas[4] = fs.attack;
        datas[5] = fs.defense;
        datas[6] = fs.plunder;
        datas[7] = fs.productionMultiplier;
        datas[8] = fs.attackMultiplier;
        datas[9] = fs.defenseMultiplier;
        datas[10] = fs.plunderMultiplier;
        datas[11] = fs.level;
        datas[12] = fs.isPercent; 
        datas[13] = _tokenId;      
    }

    /// @dev Get fashion attrs by tokenId back
    function getFashion(uint256 _tokenId) external view isValidToken(_tokenId) returns (uint16[13] datas) {
        Fashion storage fs = fashionArray[_tokenId];
        datas[0] = fs.equipmentId;
        datas[1] = fs.quality;
        datas[2] = fs.pos;
        datas[3] = fs.production;
        datas[4] = fs.attack;
        datas[5] = fs.defense;
        datas[6] = fs.plunder;
        datas[7] = fs.productionMultiplier;
        datas[8] = fs.attackMultiplier;
        datas[9] = fs.defenseMultiplier;
        datas[10] = fs.plunderMultiplier;
        datas[11] = fs.level;
        datas[12] = fs.isPercent;      
    }


    /// @dev Get tokenIds and flags by owner
    function getOwnFashions(address _owner) external view returns(uint256[] tokens, uint32[] flags) {
        require(_owner != address(0));
        uint256[] storage fsArray = ownerToFashionArray[_owner];
        uint256 length = fsArray.length;
        tokens = new uint256[](length);
        flags = new uint32[](length);
        for (uint256 i = 0; i < length; ++i) {
            tokens[i] = fsArray[i];
            Fashion storage fs = fashionArray[fsArray[i]];
            flags[i] = uint32(uint32(fs.equipmentId) * 10000 + uint32(fs.quality) * 100 + fs.pos);
        }
    }


    /// @dev Race token info returned based on Token ID transfered (64 at most)
    function getFashionsAttrs(uint256[] _tokens) external view returns(uint256[] attrs) {
        uint256 length = _tokens.length;
        attrs = new uint256[](length * 14);
        uint256 tokenId;
        uint256 index;
        for (uint256 i = 0; i < length; ++i) {
            tokenId = _tokens[i];
            if (fashionIdToOwner[tokenId] != address(0)) {
                index = i * 14;
                Fashion storage fs = fashionArray[tokenId];
                attrs[index]     = fs.equipmentId;
				attrs[index + 1] = fs.quality;
                attrs[index + 2] = fs.pos;
                attrs[index + 3] = fs.production;
                attrs[index + 4] = fs.attack;
                attrs[index + 5] = fs.defense;
                attrs[index + 6] = fs.plunder;
                attrs[index + 7] = fs.productionMultiplier;
                attrs[index + 8] = fs.attackMultiplier;
                attrs[index + 9] = fs.defenseMultiplier;
                attrs[index + 10] = fs.plunderMultiplier;
                attrs[index + 11] = fs.level;
                attrs[index + 12] = fs.isPercent; 
                attrs[index + 13] = tokenId;  
            }   
        }
    }
}


//Tournament bonus interface
interface IRaceCoin {
    function addTotalEtherPool(uint256 amount) external;
    function addPlayerToList(address player) external;
    function increasePlayersAttribute(address player, uint16[13] param) external;
    function reducePlayersAttribute(address player, uint16[13] param) external;
}

contract CarsPresell is AccessService {

    using SafeMath for uint256;
    
    RaceToken tokenContract;

    IRaceCoin public raceCoinContract;

   
    //Bonus pool address
    address poolContract;

    ///Bonus pool ratio
    uint256 constant prizeGoldPercent = 80;

    //referer
    uint256 constant refererPercent = 5;

    //The maximum number of cars per quality
	uint16 private carCountsLimit;


   



    mapping (uint16 => uint16) carPresellCounter;
    mapping (address => uint16[]) presellLimit;

    mapping (address => uint16) freeCarCount;

    event CarPreSelled(address indexed buyer, uint16 equipmentId);
    event FreeCarsObtained(address indexed buyer, uint16 equipmentId);

    event PresellReferalGain(address referal, address player, uint256 amount);

    function CarsPresell(address _nftAddr) public {
        addrAdmin = msg.sender;
        addrService = msg.sender;
        addrFinance = msg.sender;

        tokenContract = RaceToken(_nftAddr);
		
		//Maximum number of vehicles per class
		carCountsLimit = 500;

        carPresellCounter[10001] = 100;
        carPresellCounter[10002] = 100;
        carPresellCounter[10003] = 100;
        carPresellCounter[10004] = 100;
        carPresellCounter[10005] = 100;
		carPresellCounter[10006] = 100;

    }

    function() external payable {

    }

    function setRaceTokenAddr(address _nftAddr) external onlyAdmin {
        tokenContract = RaceToken(_nftAddr);
    }

   
    //Set up tournament bonus address
    function setRaceCoin(address _addr) external onlyAdmin {
        require(_addr != address(0));
        poolContract = _addr;
        raceCoinContract = IRaceCoin(_addr);
    }
	
	
	//Increase the number of pre-sale cars, the maximum limit of each vehicle is 500 vehicles.
	function setCarCounts(uint16 _carId, uint16 _carCounts) external onlyAdmin {
		require( carPresellCounter[_carId] <= carCountsLimit);
		uint16 curSupply = carPresellCounter[_carId];
		require((curSupply + _carCounts)<= carCountsLimit);
        carPresellCounter[_carId] = curSupply + _carCounts;
    }


    //Get free cars
    function freeCar(uint16 _equipmentId)
        external
        payable
        whenNotPaused 
    {
        require(freeCarCount[msg.sender] != 1);

        uint256 payBack = 0;

        uint16[] storage buyArray = presellLimit[msg.sender];

        if(_equipmentId == 10007){
            require(msg.value >= 0.0 ether);
            payBack = (msg.value - 0.0 ether);
            uint16[13] memory param0 = [10007, 7, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0];
            tokenContract.createFashion(msg.sender, param0, 1);
            raceCoinContract.increasePlayersAttribute(msg.sender, param0);
            buyArray.push(10007);

            if (payBack > 0) {
                msg.sender.transfer(payBack);
            }

            freeCarCount[msg.sender] = 1;

            raceCoinContract.addPlayerToList(msg.sender);

            emit FreeCarsObtained(msg.sender,_equipmentId);
        }
    }

    //Whether a free car has been received.
    function getFreeCarCount(address _owner) external view returns(uint16){

        require(_owner != address(0));
        if(freeCarCount[msg.sender] != 1){
            freeCarCount[msg.sender] = 0;
        }

        return  freeCarCount[msg.sender];
    }



    function UpdateCurrentCarCount(uint16 _equipmentId,uint16 curSupply) internal {
        carPresellCounter[_equipmentId] = (curSupply - 1);
    }


    function carPresell(address referer,uint16 _equipmentId) 
        external
        payable
        whenNotPaused 
    {
        uint16 curSupply = carPresellCounter[_equipmentId];
        require(curSupply > 0);
        uint16[] storage buyArray = presellLimit[msg.sender];
        uint256 curBuyCnt = buyArray.length;
		
        require(curBuyCnt < 21);

        uint256 payBack = 0;
        if (_equipmentId == 10001) {
            require(msg.value >= 0.075 ether);
            payBack = (msg.value - 0.075 ether);
            uint16[13] memory param1 = [10001, 1, 9, 10, 0, 0, 0, 5, 0, 0, 0, 0, 0];       // 10 productivity 5% productivity plus
            tokenContract.createFashion(msg.sender, param1, 1);
            raceCoinContract.increasePlayersAttribute(msg.sender, param1);
            buyArray.push(10001);
            raceCoinContract.addPlayerToList(msg.sender);
        } else if(_equipmentId == 10002) {
            require(msg.value >= 0.112 ether);
            payBack = (msg.value - 0.112 ether);
            uint16[13] memory param2 = [10002, 2, 9, 15, 0, 0, 0, 8, 5, 0, 0, 0, 0];       // 15 productivity 8% productivity plus 5% attack bonus
            tokenContract.createFashion(msg.sender, param2, 1);
            raceCoinContract.increasePlayersAttribute(msg.sender, param2);
            buyArray.push(10002);
            raceCoinContract.addPlayerToList(msg.sender);
        } else if(_equipmentId == 10003) {
            require(msg.value >= 0.225 ether);
            payBack = (msg.value - 0.225 ether);
            uint16[13] memory param3 = [10003, 3, 9, 30, 0, 0, 0, 15, 10, 5, 0, 0, 0];        // 30 productivity 15% productivity plus 10% attack plus 5% defense plus
            tokenContract.createFashion(msg.sender, param3, 1);
            raceCoinContract.increasePlayersAttribute(msg.sender, param3);
            buyArray.push(10003);
            raceCoinContract.addPlayerToList(msg.sender);
        } else if(_equipmentId == 10004) {
            require(msg.value >= 0.563 ether);
            payBack = (msg.value - 0.563 ether);
            uint16[13] memory param4 = [10004, 4, 9, 75, 0, 0, 0, 38, 25, 13, 5, 0, 0];        // 75 productivity 38% productivity plus 25% attack plus 13% defense plus 5% predatory addition.
            tokenContract.createFashion(msg.sender, param4, 1);
            raceCoinContract.increasePlayersAttribute(msg.sender, param4);
            buyArray.push(10004);
            raceCoinContract.addPlayerToList(msg.sender);
        } else if(_equipmentId == 10005){
            require(msg.value >= 1.7 ether);
            payBack = (msg.value - 1.7 ether);
            uint16[13] memory param5 = [10005, 5, 9, 225, 0, 0, 0, 113, 75, 38, 15, 0, 0];      // 225 productivity 113% productivity plus 75% attack plus 38% defense plus 15% predatory addition.
            tokenContract.createFashion(msg.sender, param5, 1);
            raceCoinContract.increasePlayersAttribute(msg.sender, param5);
            buyArray.push(10005);
            raceCoinContract.addPlayerToList(msg.sender);
        }else if(_equipmentId == 10006){
            require(msg.value >= 6 ether);
            payBack = (msg.value - 6 ether);
            uint16[13] memory param6 = [10006, 6, 9, 788, 0, 0, 0, 394, 263, 131, 53, 0, 0];      // 788 productivity 394% productivity plus 263% attack plus 131% defense plus 53% predatory addition.
            tokenContract.createFashion(msg.sender, param6, 1);
            raceCoinContract.increasePlayersAttribute(msg.sender, param6);
            buyArray.push(10006);
            raceCoinContract.addPlayerToList(msg.sender);
        }

        UpdateCurrentCarCount(_equipmentId,curSupply);


        emit CarPreSelled(msg.sender, _equipmentId);



        uint256 ethVal = msg.value.sub(payBack);

        uint256 referalDivs;
        if (referer != address(0) && referer != msg.sender) {
            referalDivs = ethVal.mul(refererPercent).div(100); // 5%
            referer.transfer(referalDivs);
            emit PresellReferalGain(referer, msg.sender, referalDivs);
        }


        //Capital injection into capital pool
        if (poolContract != address(0) && ethVal.mul(prizeGoldPercent).div(100) > 0) {
            poolContract.transfer(ethVal.mul(prizeGoldPercent).div(100));
            raceCoinContract.addTotalEtherPool(ethVal.mul(prizeGoldPercent).div(100));
        }

        //The rest of the account is entered into the developer account.
        if(referalDivs > 0){
            addrFinance.transfer(ethVal.sub(ethVal.mul(prizeGoldPercent).div(100)).sub(ethVal.mul(refererPercent).div(100)));
        }else{
            addrFinance.transfer(ethVal.sub(ethVal.mul(prizeGoldPercent).div(100)));
        }
        

           
        if (payBack > 0) {
            msg.sender.transfer(payBack);
        }
    }

    function withdraw() 
        external 
    {
        require(msg.sender == addrFinance || msg.sender == addrAdmin);
        addrFinance.transfer(this.balance);
    }

    function getCarCanPresellCount() external view returns (uint16[6] cntArray) {
        cntArray[0] = carPresellCounter[10001];
        cntArray[1] = carPresellCounter[10002];
        cntArray[2] = carPresellCounter[10003];
        cntArray[3] = carPresellCounter[10004];
        cntArray[4] = carPresellCounter[10005];
		cntArray[5] = carPresellCounter[10006];  		
    }

    function getBuyCount(address _owner) external view returns (uint32) {
        return uint32(presellLimit[_owner].length);
    }

    function getBuyArray(address _owner) external view returns (uint16[]) {
        uint16[] storage buyArray = presellLimit[_owner];
        return buyArray;
    }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    /**
    * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

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

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setRaceCoin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"referer","type":"address"},{"name":"_equipmentId","type":"uint16"}],"name":"carPresell","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"doUnpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getFreeCarCount","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"raceCoinContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_carId","type":"uint16"},{"name":"_carCounts","type":"uint16"}],"name":"setCarCounts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"doPause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"addrFinance","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newFinance","type":"address"}],"name":"setFinance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isPaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_equipmentId","type":"uint16"}],"name":"freeCar","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newService","type":"address"}],"name":"setService","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"addrAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"addrService","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCarCanPresellCount","outputs":[{"name":"cntArray","type":"uint16[6]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getBuyCount","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getBuyArray","outputs":[{"name":"","type":"uint16[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nftAddr","type":"address"}],"name":"setRaceTokenAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_nftAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"equipmentId","type":"uint16"}],"name":"CarPreSelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"equipmentId","type":"uint16"}],"name":"FreeCarsObtained","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"referal","type":"address"},{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PresellReferalGain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"preAdmin","type":"address"},{"indexed":true,"name":"newAdmin","type":"address"}],"name":"AdminTransferred","type":"event"}]

608060405260008060006101000a81548160ff02191690831515021790555034801561002a57600080fd5b50604051602080613e5f8339810180604052810190808051906020019092919050505033600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101f4600560146101000a81548161ffff021916908361ffff16021790555060646006600061271161ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060646006600061271261ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060646006600061271361ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060646006600061271461ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060646006600061271561ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060646006600061271661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555050613b60806102ff6000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806312bcf07d146101145780631aec50cd1461015757806330efb8d31461019b5780633ccfd60b146101b2578063558dc444146101c957806362b33b5514610228578063649f357c1461027f57806367d0661d146102be578063704b6c02146102d557806382cb9df9146103185780639b8d30641461036f578063b187bd26146103b2578063bedb8a3f146103e1578063bf8bdac114610405578063bfae2f0e14610448578063cdd977e01461049f578063cecfbf34146104f6578063d489c0bf14610549578063e5d3d9d7146105ac578063f6d75e8214610644575b005b34801561012057600080fd5b50610155600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610687565b005b610199600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291905050506107a4565b005b3480156101a757600080fd5b506101b0612788565b005b3480156101be57600080fd5b506101c761281a565b005b3480156101d557600080fd5b5061020a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612950565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561023457600080fd5b5061023d612a99565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028b57600080fd5b506102bc600480360381019080803561ffff169060200190929190803561ffff169060200190929190505050612abf565b005b3480156102ca57600080fd5b506102d3612bfe565b005b3480156102e157600080fd5b50610316600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c91565b005b34801561032457600080fd5b5061032d612de9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561037b57600080fd5b506103b0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e0f565b005b3480156103be57600080fd5b506103c7612f43565b604051808215151515815260200191505060405180910390f35b610403600480360381019080803561ffff169060200190929190505050612f55565b005b34801561041157600080fd5b50610446600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613549565b005b34801561045457600080fd5b5061045d61367d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ab57600080fd5b506104b46136a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561050257600080fd5b5061050b6136c9565b6040518082600660200280838360005b8381101561053657808201518184015260208101905061051b565b5050505090500191505060405180910390f35b34801561055557600080fd5b5061058a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613890565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156105b857600080fd5b506105ed600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506138dc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610630578082015181840152602081019050610615565b505050509050019250505060405180910390f35b34801561065057600080fd5b50610685600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139a1565b005b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106e357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561071f57600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806107b2613aed565b6107ba613aed565b6107c2613aed565b6107ca613aed565b6107d2613aed565b6107da613aed565b6000806000809054906101000a900460ff161515156107f857600080fd5b600660008e61ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff169b5060008c61ffff1611151561083757600080fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209a508a80549050995060158a10151561088e57600080fd5b600098506127118d61ffff161415610cc45767010a741a4627800034101515156108b757600080fd5b67010a741a46278000340398506101a06040519081016040528061271161ffff168152602001600161ffff168152602001600961ffff168152602001600a61ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600561ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152509750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f1406049338a60016040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600d60200280838360005b83811015610a2b578082015181840152602081019050610a10565b505050509050018261ffff1681526020019350505050602060405180830381600087803b158015610a5b57600080fd5b505af1158015610a6f573d6000803e3d6000fd5b505050506040513d6020811015610a8557600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aab17f9338a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600d60200280838360005b83811015610b5f578082015181840152602081019050610b44565b5050505090500192505050600060405180830381600087803b158015610b8457600080fd5b505af1158015610b98573d6000803e3d6000fd5b505050508a612711908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328ed9d80336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610ca757600080fd5b505af1158015610cbb573d6000803e3d6000fd5b505050506121c2565b6127128d61ffff1614156110f65767018de76816d800003410151515610ce957600080fd5b67018de76816d80000340398506101a06040519081016040528061271261ffff168152602001600261ffff168152602001600961ffff168152602001600f61ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600861ffff168152602001600561ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152509650600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f1406049338960016040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600d60200280838360005b83811015610e5d578082015181840152602081019050610e42565b505050509050018261ffff1681526020019350505050602060405180830381600087803b158015610e8d57600080fd5b505af1158015610ea1573d6000803e3d6000fd5b505050506040513d6020811015610eb757600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aab17f933896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600d60200280838360005b83811015610f91578082015181840152602081019050610f76565b5050505090500192505050600060405180830381600087803b158015610fb657600080fd5b505af1158015610fca573d6000803e3d6000fd5b505050508a612712908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328ed9d80336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156110d957600080fd5b505af11580156110ed573d6000803e3d6000fd5b505050506121c1565b6127138d61ffff1614156115285767031f5c4ed2768000341015151561111b57600080fd5b67031f5c4ed2768000340398506101a06040519081016040528061271361ffff168152602001600361ffff168152602001600961ffff168152602001601e61ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600f61ffff168152602001600a61ffff168152602001600561ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152509550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f1406049338860016040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600d60200280838360005b8381101561128f578082015181840152602081019050611274565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1580156112bf57600080fd5b505af11580156112d3573d6000803e3d6000fd5b505050506040513d60208110156112e957600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aab17f933886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600d60200280838360005b838110156113c35780820151818401526020810190506113a8565b5050505090500192505050600060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b505050508a612713908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328ed9d80336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561150b57600080fd5b505af115801561151f573d6000803e3d6000fd5b505050506121c0565b6127148d61ffff16141561195a576707d02d84608b8000341015151561154d57600080fd5b6707d02d84608b8000340398506101a06040519081016040528061271461ffff168152602001600461ffff168152602001600961ffff168152602001604b61ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001602661ffff168152602001601961ffff168152602001600d61ffff168152602001600561ffff168152602001600061ffff168152602001600061ffff168152509450600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f1406049338760016040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600d60200280838360005b838110156116c15780820151818401526020810190506116a6565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1580156116f157600080fd5b505af1158015611705573d6000803e3d6000fd5b505050506040513d602081101561171b57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aab17f933876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600d60200280838360005b838110156117f55780820151818401526020810190506117da565b5050505090500192505050600060405180830381600087803b15801561181a57600080fd5b505af115801561182e573d6000803e3d6000fd5b505050508a612714908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328ed9d80336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561193d57600080fd5b505af1158015611951573d6000803e3d6000fd5b505050506121bf565b6127158d61ffff161415611d8c576717979cfe362a0000341015151561197f57600080fd5b6717979cfe362a0000340398506101a06040519081016040528061271561ffff168152602001600561ffff168152602001600961ffff16815260200160e161ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001607161ffff168152602001604b61ffff168152602001602661ffff168152602001600f61ffff168152602001600061ffff168152602001600061ffff168152509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f1406049338660016040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600d60200280838360005b83811015611af3578082015181840152602081019050611ad8565b505050509050018261ffff1681526020019350505050602060405180830381600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b505050506040513d6020811015611b4d57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aab17f933866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600d60200280838360005b83811015611c27578082015181840152602081019050611c0c565b5050505090500192505050600060405180830381600087803b158015611c4c57600080fd5b505af1158015611c60573d6000803e3d6000fd5b505050508a612715908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328ed9d80336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611d6f57600080fd5b505af1158015611d83573d6000803e3d6000fd5b505050506121be565b6127168d61ffff1614156121bd576753444835ec5800003410151515611db157600080fd5b6753444835ec580000340398506101a06040519081016040528061271661ffff168152602001600661ffff168152602001600961ffff16815260200161031461ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff16815260200161018a61ffff16815260200161010761ffff168152602001608361ffff168152602001603561ffff168152602001600061ffff168152602001600061ffff168152509250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f1406049338560016040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600d60200280838360005b83811015611f28578082015181840152602081019050611f0d565b505050509050018261ffff1681526020019350505050602060405180830381600087803b158015611f5857600080fd5b505af1158015611f6c573d6000803e3d6000fd5b505050506040513d6020811015611f8257600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aab17f933856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600d60200280838360005b8381101561205c578082015181840152602081019050612041565b5050505090500192505050600060405180830381600087803b15801561208157600080fd5b505af1158015612095573d6000803e3d6000fd5b505050508a612716908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328ed9d80336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156121a457600080fd5b505af11580156121b8573d6000803e3d6000fd5b505050505b5b5b5b5b5b6121cc8d8d613a41565b3373ffffffffffffffffffffffffffffffffffffffff167f1916d27b07f08435c37b17f9f23255ee9623457f8eb8752e32510255850b5dc38e604051808261ffff1661ffff16815260200191505060405180910390a26122358934613a7e90919063ffffffff16565b9150600073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff16141580156122a057503373ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614155b156123b5576122cc60646122be600585613a9790919063ffffffff16565b613ad290919063ffffffff16565b90508d73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612314573d6000803e3d6000fd5b507fe360cd1808f32f51cd18f90bf94f40accf77a3213b3adfa84384c8d7845f309e8e3383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561243a57506000612438606461242a605086613a9790919063ffffffff16565b613ad290919063ffffffff16565b115b1561259e57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6124a26064612494605087613a9790919063ffffffff16565b613ad290919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156124cd573d6000803e3d6000fd5b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e7526bd6125336064612525605087613a9790919063ffffffff16565b613ad290919063ffffffff16565b6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561258557600080fd5b505af1158015612599573d6000803e3d6000fd5b505050505b600081111561268557600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61265461260d60646125ff600588613a9790919063ffffffff16565b613ad290919063ffffffff16565b612646612637606461262960508a613a9790919063ffffffff16565b613ad290919063ffffffff16565b87613a7e90919063ffffffff16565b613a7e90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561267f573d6000803e3d6000fd5b50612727565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6126fa6126eb60646126dd605088613a9790919063ffffffff16565b613ad290919063ffffffff16565b85613a7e90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612725573d6000803e3d6000fd5b505b6000891115612778573373ffffffffffffffffffffffffffffffffffffffff166108fc8a9081150290604051600060405180830381858888f19350505050158015612776573d6000803e3d6000fd5b505b5050505050505050505050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127e457600080fd5b6000809054906101000a900460ff1615156127fe57600080fd5b60008060006101000a81548160ff021916908315150217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806128c35750600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156128ce57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801561294d573d6000803e3d6000fd5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561298d57600080fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff16141515612a44576000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff169050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612b1c57600080fd5b600560149054906101000a900461ffff1661ffff16600660008561ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1611151515612b6c57600080fd5b600660008461ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff169050600560149054906101000a900461ffff1661ffff1682820161ffff1611151515612bc157600080fd5b818101600660008561ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c5a57600080fd5b6000809054906101000a900460ff16151515612c7557600080fd5b60016000806101000a81548160ff021916908315150217905550565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ced57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612d2957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a380600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612eb85750600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612ec357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612eff57600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900460ff1681565b600080612f60613aed565b6000809054906101000a900460ff16151515612f7b57600080fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1614151515612fdc57600080fd5b60009250600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002091506127178461ffff161415613543576000341015151561303f57600080fd5b6000340392506101a06040519081016040528061271761ffff168152602001600761ffff168152602001600961ffff168152602001600161ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f1406049338360016040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600d60200280838360005b838110156131ac578082015181840152602081019050613191565b505050509050018261ffff1681526020019350505050602060405180830381600087803b1580156131dc57600080fd5b505af11580156131f0573d6000803e3d6000fd5b505050506040513d602081101561320657600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aab17f933836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600d60200280838360005b838110156132e05780820151818401526020810190506132c5565b5050505090500192505050600060405180830381600087803b15801561330557600080fd5b505af1158015613319573d6000803e3d6000fd5b5050505081612717908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff1602179055505060008311156133bc573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156133ba573d6000803e3d6000fd5b505b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328ed9d80336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156134d457600080fd5b505af11580156134e8573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167fee82114fb2a33ead719c44bab6c2e40e71cfd9898d84245be54d80a1048ce0ba85604051808261ffff1661ffff16815260200191505060405180910390a25b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806135f25750600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156135fd57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561363957600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6136d1613b11565b6006600061271161ffff16815260200190815260200160002060009054906101000a900461ffff1681600060068110151561370857fe5b602002019061ffff16908161ffff16815250506006600061271261ffff16815260200190815260200160002060009054906101000a900461ffff1681600160068110151561375257fe5b602002019061ffff16908161ffff16815250506006600061271361ffff16815260200190815260200160002060009054906101000a900461ffff1681600260068110151561379c57fe5b602002019061ffff16908161ffff16815250506006600061271461ffff16815260200190815260200160002060009054906101000a900461ffff168160036006811015156137e657fe5b602002019061ffff16908161ffff16815250506006600061271561ffff16815260200190815260200160002060009054906101000a900461ffff1681600460068110151561383057fe5b602002019061ffff16908161ffff16815250506006600061271661ffff16815260200190815260200160002060009054906101000a900461ffff1681600560068110151561387a57fe5b602002019061ffff16908161ffff168152505090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60606000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508080548060200260200160405190810160405280929190818152602001828054801561399457602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161395b5790505b5050505050915050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156139fd57600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60018103600660008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505050565b6000828211151515613a8c57fe5b818303905092915050565b6000806000841415613aac5760009150613acb565b8284029050828482811515613abd57fe5b04141515613ac757fe5b8091505b5092915050565b6000808284811515613ae057fe5b0490508091505092915050565b6101a060405190810160405280600d90602082028038833980820191505090505090565b60c0604051908101604052806006906020820280388339808201915050905050905600a165627a7a72305820aa8e9598dc4200cb983a146698456e49f74e5a50908dabd7d025514071af25db0029000000000000000000000000df9ca851164984d7665d4db1da0921c77c6105ad

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000df9ca851164984d7665d4db1da0921c77c6105ad

-----Decoded View---------------
Arg [0] : _nftAddr (address): 0xDf9ca851164984d7665d4DB1dA0921c77C6105Ad

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000df9ca851164984d7665d4db1da0921c77c6105ad


Swarm Source

bzzr://aa8e9598dc4200cb983a146698456e49f74e5a50908dabd7d025514071af25db

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.