contract Owner {
	
	// Token Name
	string public name = "FoodCoin";
	// Token Symbol
	string public symbol = "FOOD";
	// Decimals
	uint256 public decimals = 8;
	// Version 
	string public version = "v1";
	
	// Emission Address
	address public emissionAddress = address(0);
	// Withdraw address
	address public withdrawAddress = address(0);
	
	// Owners Addresses
	mapping ( address => bool ) public ownerAddressMap;
	// Owner Address/Number
	mapping ( address => uint256 ) public ownerAddressNumberMap;
	// Owners List
	mapping ( uint256 => address ) public ownerListMap;
	// Amount of owners
	uint256 public ownerCountInt = 0;

	// Modifier - Owner
	modifier isOwner {
        require( ownerAddressMap[msg.sender]==true );
        _;
    }
	
	// Owner Creation/Activation
	function ownerOn( address _onOwnerAddress ) external isOwner returns (bool retrnVal) {
		// Check if it's a non-zero address
		require( _onOwnerAddress != address(0) );
		// If the owner is already exist
		if ( ownerAddressNumberMap[ _onOwnerAddress ]>0 )
		{
			// If the owner is disablead, activate him again
			if ( !ownerAddressMap[ _onOwnerAddress ] )
			{
				ownerAddressMap[ _onOwnerAddress ] = true;
				retrnVal = true;
			}
			else
			{
				retrnVal = false;
			}
		}
		// If the owner is not exist
		else
		{
			ownerAddressMap[ _onOwnerAddress ] = true;
			ownerAddressNumberMap[ _onOwnerAddress ] = ownerCountInt;
			ownerListMap[ ownerCountInt ] = _onOwnerAddress;
			ownerCountInt++;
			retrnVal = true;
		}
	}
	
	// Owner disabled
	function ownerOff( address _offOwnerAddress ) external isOwner returns (bool retrnVal) {
		// If owner exist and he is not 0 and active
		// 0 owner can`t be off
		if ( ownerAddressNumberMap[ _offOwnerAddress ]>0 && ownerAddressMap[ _offOwnerAddress ] )
		{
			ownerAddressMap[ _offOwnerAddress ] = false;
			retrnVal = true;
		}
		else
		{
			retrnVal = false;
		}
	}
	
	// Token name changing function
	function contractNameUpdate( string _newName, bool updateConfirmation ) external isOwner returns (bool retrnVal) {
		
		if ( updateConfirmation )
		{
			name = _newName;
			retrnVal = true;
		}
		else
		{
			retrnVal = false;
		}
	}
	
	// Token symbol changing function
	function contractSymbolUpdate( string _newSymbol, bool updateConfirmation ) external isOwner returns (bool retrnVal) {

		if ( updateConfirmation )
		{
			symbol = _newSymbol;
			retrnVal = true;
		}
		else
		{
			retrnVal = false;
		}
	}
	
	// Token decimals changing function
	function contractDecimalsUpdate( uint256 _newDecimals, bool updateConfirmation ) external isOwner returns (bool retrnVal) {
		
		if ( updateConfirmation && _newDecimals != decimals )
		{
			decimals = _newDecimals;
			retrnVal = true;
		}
		else
		{
			retrnVal = false;
		}
	}
	
	// New token emission address setting up 
	function emissionAddressUpdate( address _newEmissionAddress ) external isOwner {
		emissionAddress = _newEmissionAddress;
	}
	
	// New token withdrawing address setting up
	function withdrawAddressUpdate( address _newWithdrawAddress ) external isOwner {
		withdrawAddress = _newWithdrawAddress;
	}

	// Constructor adds owner to undeletable list
	function Owner() public {
		// Owner creation
		ownerAddressMap[ msg.sender ] = true;
		ownerAddressNumberMap[ msg.sender ] = ownerCountInt;
		ownerListMap[ ownerCountInt ] = msg.sender;
		ownerCountInt++;
	}
}
function contractSymbolUpdate( string _newSymbol, bool updateConfirmation ) external isOwner returns (bool retrnVal) {

	if ( updateConfirmation )
	{
		symbol = _newSymbol;
		retrnVal = true;
	}
	else
	{
		retrnVal = false;
	}
}

// Token symbol changing function