<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def send(self, msg: Any, * rids: Iterable[int], signer: Signer = None, message_splitter=None) -> None: """ Enqueue the given message into the outBoxes of the specified remotes or into the outBoxes of all the remotes if rids is None :param msg: the message to enqueue :param rids: ids of the remotes to whose outBoxes this message must be enqueued :param message_splitter: callable that splits msg on two smaller messages """

        # Signing (if required) and serializing before enqueueing otherwise
        # each call to `_enqueue` will have to sign it and `transmit` will try
        # to serialize it which is waste of resources
        message_parts, err_msg = \
            self.prepare_for_sending(msg, signer, message_splitter)

        # TODO: returning breaks contract of super class
        if err_msg is not None:
            return False, err_msg

        if rids:
            for r in rids:
                for part in message_parts:
                    self._enqueue(part, r, signer)
        else:
            for part in message_parts:
                self._enqueueIntoAllRemotes(part, signer)
        return True, None