<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def trace_sync(self, data, timeout=5.0):
 """Send tracing data and wait for it to finish. This awaitable coroutine wraps VirtualIOTileDevice.trace() and turns the callback into an awaitable object. The appropriate usage of this method is by calling it inside the event loop as: await device.trace_sync(data) Args: data (bytes):
 The raw data that should be traced. timeout (float):
 The maximum number of seconds to wait before timing out. Returns: awaitable: An awaitable object with the result. The result will be True if the data was sent successfully or False if the data could not be sent in its entirety. When False is returned, there is no guarantee about how much of the data was sent, if any, just that it was not known to be successfully sent. """


        done = AwaitableResponse()
        self.trace(data, callback=done.set_result)
        return done.wait(timeout)