contract Asset is ERC20Token {

    string public name = 'Cycle';
    uint8 public decimals = 8;
    string public symbol = 'CYCLE';
    string public version = '1';
    address public owner; //owner address is public

    constructor(uint initialSupply, address initialOwner) public {
        owner = initialOwner;
        totalSupply = initialSupply * (10 ** uint256(decimals)); //initial token creation
        balances[owner] = totalSupply;
        emit Transfer(address(0), owner, balances[owner]);
    }

    /**
     * @notice Function to recover ANY token stuck on contract accidentally
     * In case of recover of stuck tokens please contact contract owners
     */
    function recoverTokens(token _address, address _to) public {
        require(msg.sender == owner);
        require(_to != address(0));
        uint256 remainder = _address.balanceOf(address(this)); //Check remainder tokens
        _address.transfer(_to, remainder); //Transfer tokens to creator
    }

    function changeOwner(address newOwner) external {
        require(msg.sender == owner);
        require(newOwner != address(0));
        owner = newOwner;
    }

    /**
     *@dev Function to handle callback calls
     */
    function () external {
        revert();
    }

}
/**
 * @title Asset
 * @dev Initial supply creation
 */
function recoverTokens(token _address, address _to) public {
    require(msg.sender == owner);
    require(_to != address(0));
    uint256 remainder = _address.balanceOf(address(this)); //Check remainder tokens
    _address.transfer(_to, remainder); //Transfer tokens to creator
}

/**
 * @notice Function to recover ANY token stuck on contract accidentally
 * In case of recover of stuck tokens please contact contract owners
 */