contract TokenInterface {

        mapping(address => uint256) balances;
        mapping(address => mapping(address => uint256)) allowed;
        mapping(address => bool) seller;

        address config;
        address owner;
        address dao;
        address public badgeLedger;
        bool locked;

        /// @return total amount of tokens
        uint256 public totalSupply;

        /// @param _owner The address from which the balance will be retrieved
        /// @return The balance
        function balanceOf(address _owner) constant returns(uint256 balance);

        /// @notice send `_value` tokens to `_to` from `msg.sender`
        /// @param _to The address of the recipient
        /// @param _value The amount of tokens to be transfered
        /// @return Whether the transfer was successful or not
        function transfer(address _to, uint256 _value) returns(bool success);

        /// @notice send `_value` tokens to `_to` from `_from` on the condition it is approved by `_from`
        /// @param _from The address of the sender
        /// @param _to The address of the recipient
        /// @param _value The amount of tokens to be transfered
        /// @return Whether the transfer was successful or not
        function transferFrom(address _from, address _to, uint256 _value) returns(bool success);

        /// @notice `msg.sender` approves `_spender` to spend `_value` tokens on its behalf
        /// @param _spender The address of the account able to transfer the tokens
        /// @param _value The amount of tokens to be approved for transfer
        /// @return Whether the approval was successful or not
        function approve(address _spender, uint256 _value) returns(bool success);

        /// @param _owner The address of the account owning tokens
        /// @param _spender The address of the account able to transfer the tokens
        /// @return Amount of remaining tokens of _owner that _spender is allowed to spend
        function allowance(address _owner, address _spender) constant returns(uint256 remaining);

        /// @notice mint `_amount` of tokens to `_owner`
        /// @param _owner The address of the account receiving the tokens
        /// @param _amount The amount of tokens to mint
        /// @return Whether or not minting was successful
        function mint(address _owner, uint256 _amount) returns(bool success);

        /// @notice mintBadge Mint `_amount` badges to `_owner`
        /// @param _owner The address of the account receiving the tokens
        /// @param _amount The amount of tokens to mint
        /// @return Whether or not minting was successful
        function mintBadge(address _owner, uint256 _amount) returns(bool success);

        function registerDao(address _dao) returns(bool success);

        function registerSeller(address _tokensales) returns(bool success);

        event Transfer(address indexed _from, address indexed _to, uint256 indexed _value);
        event Mint(address indexed _recipient, uint256 indexed _amount);
        event Approval(address indexed _owner, address indexed _spender, uint256 indexed _value);
}
function mint(address _owner, uint256 _amount) returns(bool success);

/// @notice mint `_amount` of tokens to `_owner`
/// @param _owner The address of the account receiving the tokens
/// @param _amount The amount of tokens to mint
/// @return Whether or not minting was successful