<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def open_stream(self, destination, timeout_ms=None):
 """Opens a new stream to a destination service on the device. Not the same as the posix 'open' or any other Open methods, this corresponds to the OPEN message described in the ADB protocol documentation mentioned above. It creates a stream (uniquely identified by remote/local ids) that connects to a particular service endpoint. Args: destination: The service:command string, see ADB documentation. timeout_ms: Timeout in milliseconds for the Open to succeed (or as a PolledTimeout object). Raises: AdbProtocolError: Wrong local_id sent to us, or we didn't get a ready response. Returns: An AdbStream object that can be used to read/write data to the specified service endpoint, or None if the requested service couldn't be opened. """

    timeout = timeouts.PolledTimeout.from_millis(timeout_ms)

    stream_transport = self._make_stream_transport()
    self.transport.write_message(
        adb_message.AdbMessage(
            command='OPEN',
            arg0=stream_transport.local_id, arg1=0,
            data=destination + '\0'),
        timeout)
    if not stream_transport.ensure_opened(timeout):
      return None
    return AdbStream(destination, stream_transport)