contract Token is MintableToken, BurnableToken, Refundable {
    string public version = "1.1";

	string public name;
	string public symbol;
	uint8 public decimals;
    bool public mintable;
	bool public burnable;
	string public memo;
	uint256 public initSupply;

	bool public canBurn;

	constructor(
		address _owner, string _name, string _symbol, uint256 _initSupply, uint8 _decimals,
		bool _mintable, bool _burnable, string _memo
	) public {
		require(_owner != address(0));
		owner = _owner;
		name = _name;
		symbol = _symbol;
        initSupply = _initSupply;
		decimals = _decimals;
		mintable = _mintable;
		burnable = _burnable;
		memo = _memo;

		canBurn = burnable;

		uint256 amount = _initSupply;
		totalSupply_ = totalSupply_.add(amount);
		balances[owner] = balances[owner].add(amount);
		emit Transfer(address(0), owner, amount);

		if (!_mintable) {
			mintingFinished = true;
		}
	}

	/**
	* @dev Burns a specific amount of tokens.
	* @param _value The amount of token to be burned.
	*/
	function burn(uint256 _value) public {
		require(canBurn);
		BurnableToken.burn(_value);
	}

	function ownerSetCanBurn(bool _canBurn) onlyOwner public {
		canBurn = _canBurn;
	}
}
function burn(uint256 _value) public {
	require(canBurn);
	BurnableToken.burn(_value);
}

/**
 	* @dev Burns a specific amount of tokens.
 	* @param _value The amount of token to be burned.
 	*/