<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def process_checkpoint(self, msg: Checkpoint, sender: str) -> bool: """ Process checkpoint messages :return: whether processed (True) or stashed (False) """

        self.logger.info('{} processing checkpoint {} from {}'.format(self, msg, sender))
        result, reason = self.validator.validate_checkpoint_msg(msg)
        if result == DISCARD:
            self.discard(msg, "{} discard message {} from {} "
                              "with the reason: {}".format(self, msg, sender, reason),
                         self.logger.trace)
        elif result == PROCESS:
            self._do_process_checkpoint(msg, sender)
        else:
            self.logger.debug("{} stashing checkpoint message {} with "
                              "the reason: {}".format(self, msg, reason))
            self.stasher.stash((msg, sender), result)
            return False
        return True