<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def handle_twitter_http_error(e, error_count, call_counter, time_window_start, wait_period):
 """ This function handles the twitter request in case of an HTTP error. Inputs: - e: A twython.TwythonError instance to be handled. - error_count: Number of failed retries of the call until now. - call_counter: A counter that keeps track of the number of function calls in the current 15-minute window. - time_window_start: The timestamp of the current 15-minute window. - wait_period: For certain Twitter errors (i.e. server overload), we wait and call again. Outputs: - call_counter: A counter that keeps track of the number of function calls in the current 15-minute window. - time_window_start: The timestamp of the current 15-minute window. - wait_period: For certain Twitter errors (i.e. server overload), we wait and call again. Raises: - twython.TwythonError """

    if e.error_code == 401:
        # Encountered 401 Error (Not Authorized)
        raise e
    elif e.error_code == 404:
        # Encountered 404 Error (Not Found)
        raise e
    elif e.error_code == 429:
        # Encountered 429 Error (Rate Limit Exceeded)
        # Sleep for 15 minutes
        error_count += 0.5
        call_counter = 0
        wait_period = 2
        time.sleep(60*15 + 5)
        time_window_start = time.perf_counter()
        return error_count, call_counter, time_window_start, wait_period
    elif e.error_code in (500, 502, 503, 504):
        error_count += 1
        time.sleep(wait_period)
        wait_period *= 1.5
        return error_count, call_counter, time_window_start, wait_period
    else:
        raise e