contract Withdrawable is PermissionGroups {

    event TokenWithdraw(IERC20 token, uint amount, address sendTo);

    /**
     * @dev Withdraw all IERC20 compatible tokens
     * @param token IERC20 The address of the token contract
     */
    function withdrawToken(IERC20 token, uint amount, address sendTo) external onlyAdmin {
        require(token.transfer(sendTo, amount));
        emit TokenWithdraw(token, amount, sendTo);
    }

    event EtherWithdraw(uint amount, address sendTo);

    /**
     * @dev Withdraw Ethers
     */
    function withdrawEther(uint amount, address payable sendTo) external onlyAdmin {
        sendTo.transfer(amount);
        emit EtherWithdraw(amount, sendTo);
    }
}
function withdrawToken(IERC20 token, uint amount, address sendTo) external onlyAdmin {
    require(token.transfer(sendTo, amount));
    emit TokenWithdraw(token, amount, sendTo);
}

/**
 * @dev Withdraw all IERC20 compatible tokens
 * @param token IERC20 The address of the token contract
 */