<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_param(self, keyword, param=None, default=None):
 """ Get all the parameters for a given keyword, or default if keyword or parameter are not present in the configuration. This finds every declaration of the given parameter (which is the one which takes effect). If no parameter is given, then the entire line is treated as the parameter. There is always at least one element returned - the default, or Parameters: keyword(str):
 The keyword name, e.g. 'tinker' or 'driftfile' param(str):
 The parameter name, e.g. 'panic' or 'step'. If not given, all the definitions of that keyword are given. default(str):
 The default (singular) value if the keyword or parameter is not found. If not given, None is used. Returns: list: All the values of the given parameter, or an empty list if not found. """

        if not keyword or keyword not in self.data:
            return [default]
        # keyword in data - if no value, we store None, so return that in a list
        if self.data[keyword] is None:
            return [None]
        # If we're not searching for a particular parameter, just return all
        # the values for this keyword.
        if not param:
            return self.data[keyword]

        found = []
        for line in self.data[keyword]:
            # Line has already had keyword removed.
            words = line.strip().split()
            if len(words) > 1:
                # Line has param and value - check param:
                if words[0] == param:
                    found.append(words[1])
            else:
                found.append(words[0])
        if found == []:
            return [default]
        else:
            return found