
    gR                        U d Z ddlmZ ddlmZ ddlZddlmZmZ ddlm	Z	 ddl
Z
ddlmZ d Z	 ddlZ	 dd	lmZ i Zeeef   ed
<   i Zeeef   ed<   i Ze#ej0                  D ]  Zeeej4                  d   <     G d de      Z G d de      Z G d de      Z G d de      Z G d dee      Z  G d de       Z! G d de!      Z" G d de!      Z# G d de!      Z$ G d d e!      Z% G d! d"e       Z& G d# d$e&      Z' G d% d&e'      Z( G d' d(e'      Z) G d) d*e'      Z* G d+ d,e&      Z+ G d- d.e+      Z, G d/ d0e&      Z- G d1 d2e-      Z. G d3 d4e&      Z/ G d5 d6e&      Z0 G d7 d8e&      Z1 G d9 d:e1      Z2 G d; d<e1      Z3 G d= d>e&      Z4 G d? d@e&      Z5 G dA dBe&      Z6 G dC dDe&      Z7 G dE dFe7      Z8 G dG dHe&      Z9 G dI dJe       Z: G dK dLe:      Z; G dM dNe:      Z< G dO dPe:      Z= G dQ dRe:      Z> G dS dTe:      Z? G dU dVe:      Z@ G dW dXe:      ZA G dY dZeA      ZB G d[ d\eC      ZDd] ZEd^ ZFd_ ZG	 djd`eHdaeHdbee   fdcZIdd ZJde ZKdf ZLdg ZMdh ZNdi ZOy# e$ r  e        dZY 5w xY w# e$ r dZY Cw xY w)kzExceptions raised by Google API core & clients.

This module provides base classes for all errors raised by libraries based
on :mod:`google.api_core`, including both HTTP and gRPC clients.
    )absolute_import)unicode_literalsN)OptionalDict)Union)error_details_pb2c                  8    t        j                  dt               y )NzCPlease install grpcio-status to obtain helpful grpc error messages.)warningswarnImportWarning     w/var/www/html/FastMealFinder_FlaskServer-InitialRelease/venv/lib/python3.12/site-packages/google/api_core/exceptions.py$_warn_could_not_import_grpcio_statusr       s    MMMr   )
rpc_status_HTTP_CODE_TO_EXCEPTION_GRPC_CODE_TO_EXCEPTIONc                       e Zd ZdZy)GoogleAPIErrorz;Base class for all exceptions raised by Google API Clients.N__name__
__module____qualname____doc__r   r   r   r   r   @   s    Er   r   c                       e Zd ZdZy)DuplicateCredentialArgsz,Raised when multiple credentials are passed.Nr   r   r   r   r   r   F   s    6r   r   c                   8     e Zd ZdZ fdZed        Zd Z xZS )
RetryErrorzRaised when a function has exhausted all of its available retries.

    Args:
        message (str): The exception message.
        cause (Exception): The last exception raised when retrying the
            function.
    c                 H    t         t        |   |       || _        || _        y N)superr   __init__message_cause)selfr#   cause	__class__s      r   r"   zRetryError.__init__U   s     j$(1r   c                     | j                   S )z5The last exception raised when retrying the function.)r$   r%   s    r   r&   zRetryError.causeZ   s     {{r   c                 N    dj                  | j                  | j                        S )Nz{}, last exception: {})formatr#   r&   r)   s    r   __str__zRetryError.__str___   s    '..t||TZZHHr   )	r   r   r   r   r"   propertyr&   r,   __classcell__r'   s   @r   r   r   L   s'    
  Ir   r   c                       e Zd ZdZd Zy)_GoogleAPICallErrorMetaz8Metaclass for registering GoogleAPICallError subclasses.c                     t         j                  | |||      }|j                   t        j	                  |j                  |       |j
                   t        j	                  |j
                  |       |S r    )type__new__coder   
setdefaultgrpc_status_coder   )mcsnamebases
class_dictclss        r   r4   z_GoogleAPICallErrorMeta.__new__f   s[    ll3eZ888#..sxx=+#..s/C/CSI
r   N)r   r   r   r   r4   r   r   r   r1   r1   c   s
    Br   r1   c                        e Zd ZU dZdZeedf   ed<   	 dZ	 d fd	Z	d Z
ed        Zed        Zed        Zed	        Zed
        Zed        Z xZS )GoogleAPICallErrora  Base class for exceptions raised by calling API methods.

    Args:
        message (str): The exception message.
        errors (Sequence[Any]): An optional list of error details.
        details (Sequence[Any]): An optional list of objects defined in google.rpc.error_details.
        response (Union[requests.Request, grpc.Call]): The response or
            gRPC call metadata.
        error_info (Union[error_details_pb2.ErrorInfo, None]): An optional object containing error info
            (google.rpc.error_details.ErrorInfo).
    Nr5   c                 t    t         t        |   |       || _        	 || _        || _        || _        || _        y r    )r!   r>   r"   r#   _errors_details	_response_error_info)r%   r#   errorsdetailsresponse
error_infor'   s         r   r"   zGoogleAPICallError.__init__   s:     $09)!%r   c                    dj                  | j                  | j                        }| j                  rdj                  || j                        }|S | j                  rm| j                  D cg c]5  }t        |d      r't        |d      r|j                   d|j                   7 }}|r!dj                  |dj                  |            }|S c c}w )Nz{} {}r5   r#   z: 
)r+   r5   r#   rE   rD   hasattrjoin)r%   	error_msgerrorrD   s       r   r,   zGoogleAPICallError.__str__   s    NN499dll;	<<y$,,?I  {{ "&uf-'%2K zzl"U]]O4 
  'y$))F:K LIs   +:Cc                 J    | j                   r| j                   j                  S dS )zThe reason of the error.

        Reference:
            https://github.com/googleapis/googleapis/blob/master/google/rpc/error_details.proto#L112

        Returns:
            Union[str, None]: An optional string containing reason of the error.
        N)rC   reasonr)   s    r   rO   zGoogleAPICallError.reason   #     +/*:*:t&&DDr   c                 J    | j                   r| j                   j                  S dS )a5  The logical grouping to which the "reason" belongs.

        Reference:
            https://github.com/googleapis/googleapis/blob/master/google/rpc/error_details.proto#L112

        Returns:
            Union[str, None]: An optional string containing a logical grouping to which the "reason" belongs.
        N)rC   domainr)   s    r   rR   zGoogleAPICallError.domain   rP   r   c                 J    | j                   r| j                   j                  S dS )a.  Additional structured details about this error.

        Reference:
            https://github.com/googleapis/googleapis/blob/master/google/rpc/error_details.proto#L112

        Returns:
            Union[Dict[str, str], None]: An optional object containing structured details about the error.
        N)rC   metadatar)   s    r   rT   zGoogleAPICallError.metadata   s#     -1,<,<t((F$Fr   c                 ,    t        | j                        S )zuDetailed error information.

        Returns:
            Sequence[Any]: A list of additional error details.
        )listr@   r)   s    r   rD   zGoogleAPICallError.errors   s     DLL!!r   c                 ,    t        | j                        S )al  Information contained in google.rpc.status.details.

        Reference:
            https://github.com/googleapis/googleapis/blob/master/google/rpc/status.proto
            https://github.com/googleapis/googleapis/blob/master/google/rpc/error_details.proto

        Returns:
            Sequence[Any]: A list of structured objects from error_details.proto
        )rV   rA   r)   s    r   rE   zGoogleAPICallError.details   s     DMM""r   c                     | j                   S )zYOptional[Union[requests.Request, grpc.Call]]: The response or
        gRPC call metadata.)rB   r)   s    r   rF   zGoogleAPICallError.response   s     ~~r   )r   r   NN)r   r   r   r   r5   r   int__annotations__r7   r"   r,   r-   rO   rR   rT   rD   rE   rF   r.   r/   s   @r   r>   r>   o   s    
 "D%T	
! &" 	E 	E 	E 	E 	G 	G " " 
# 
#  r   r>   )	metaclassc                       e Zd ZdZy)Redirectionz8Base class for for all redirection (HTTP 3xx) responses.Nr   r   r   r   r]   r]      s    Br   r]   c                   <    e Zd ZdZej
                  j                  Zy)MovedPermanentlyz7Exception mapping a ``301 Moved Permanently`` response.N)r   r   r   r   httpclientMOVED_PERMANENTLYr5   r   r   r   r_   r_          A;;((Dr   r_   c                   <    e Zd ZdZej
                  j                  Zy)NotModifiedz2Exception mapping a ``304 Not Modified`` response.N)r   r   r   r   r`   ra   NOT_MODIFIEDr5   r   r   r   re   re          <;;##Dr   re   c                   <    e Zd ZdZej
                  j                  Zy)TemporaryRedirectz8Exception mapping a ``307 Temporary Redirect`` response.N)r   r   r   r   r`   ra   TEMPORARY_REDIRECTr5   r   r   r   ri   ri          B;;))Dr   ri   c                       e Zd ZdZdZy)ResumeIncompletezException mapping a ``308 Resume Incomplete`` response.

    .. note:: :attr:`http.client.PERMANENT_REDIRECT` is ``308``, but Google
        APIs differ in their use of this status code.
    i4  N)r   r   r   r   r5   r   r   r   rm   rm      s     Dr   rm   c                       e Zd ZdZy)ClientErrorz5Base class for all client error (HTTP 4xx) responses.Nr   r   r   r   ro   ro     s    ?r   ro   c                   <    e Zd ZdZej
                  j                  Zy)
BadRequestz1Exception mapping a ``400 Bad Request`` response.N)r   r   r   r   r`   ra   BAD_REQUESTr5   r   r   r   rq   rq         ;;;""Dr   rq   c                   F    e Zd ZdZeej
                  j                  ZydZy)InvalidArgumentzCException mapping a :attr:`grpc.StatusCode.INVALID_ARGUMENT` error.N)r   r   r   r   grpc
StatusCodeINVALID_ARGUMENTr7   r   r   r   ru   ru     s     M;?;Kt77QUr   ru   c                   F    e Zd ZdZeej
                  j                  ZydZy)FailedPreconditionzJException mapping a :attr:`grpc.StatusCode.FAILED_PRECONDITION`
    error.N)r   r   r   r   rv   rw   FAILED_PRECONDITIONr7   r   r   r   rz   rz     s%     ?C>Nt::TXr   rz   c                   F    e Zd ZdZeej
                  j                  ZydZy)
OutOfRangez?Exception mapping a :attr:`grpc.StatusCode.OUT_OF_RANGE` error.N)r   r   r   r   rv   rw   OUT_OF_RANGEr7   r   r   r   r}   r}     s    I7;7Gt33Tr   r}   c                   <    e Zd ZdZej
                  j                  Zy)Unauthorizedz2Exception mapping a ``401 Unauthorized`` response.N)r   r   r   r   r`   ra   UNAUTHORIZEDr5   r   r   r   r   r   $  rg   r   r   c                   F    e Zd ZdZeej
                  j                  ZydZy)UnauthenticatedzBException mapping a :attr:`grpc.StatusCode.UNAUTHENTICATED` error.N)r   r   r   r   rv   rw   UNAUTHENTICATEDr7   r   r   r   r   r   *  s     L:>:Jt66PTr   r   c                   <    e Zd ZdZej
                  j                  Zy)	Forbiddenz/Exception mapping a ``403 Forbidden`` response.N)r   r   r   r   r`   ra   	FORBIDDENr5   r   r   r   r   r   0  s    9;;  Dr   r   c                   F    e Zd ZdZeej
                  j                  ZydZy)PermissionDeniedzDException mapping a :attr:`grpc.StatusCode.PERMISSION_DENIED` error.N)r   r   r   r   rv   rw   PERMISSION_DENIEDr7   r   r   r   r   r   6       N<@<Lt88RVr   r   c                   r    e Zd ZdZej
                  j                  Zeej                  j                  Z
ydZ
y)NotFoundz`Exception mapping a ``404 Not Found`` response or a
    :attr:`grpc.StatusCode.NOT_FOUND` error.N)r   r   r   r   r`   ra   	NOT_FOUNDr5   rv   rw   r7   r   r   r   r   r   <  s2    0 ;;  D484Dt00$r   r   c                   <    e Zd ZdZej
                  j                  Zy)MethodNotAllowedz8Exception mapping a ``405 Method Not Allowed`` response.N)r   r   r   r   r`   ra   METHOD_NOT_ALLOWEDr5   r   r   r   r   r   D  rk   r   r   c                   <    e Zd ZdZej
                  j                  Zy)Conflictz.Exception mapping a ``409 Conflict`` response.N)r   r   r   r   r`   ra   CONFLICTr5   r   r   r   r   r   J  s    8;;Dr   r   c                   F    e Zd ZdZeej
                  j                  ZydZy)AlreadyExistszAException mapping a :attr:`grpc.StatusCode.ALREADY_EXISTS` error.N)r   r   r   r   rv   rw   ALREADY_EXISTSr7   r   r   r   r   r   P  s    K9=9It55tr   r   c                   F    e Zd ZdZeej
                  j                  ZydZy)Abortedz:Exception mapping a :attr:`grpc.StatusCode.ABORTED` error.N)r   r   r   r   rv   rw   ABORTEDr7   r   r   r   r   r   V      D262Bt..r   r   c                   <    e Zd ZdZej
                  j                  Zy)LengthRequiredz5Exception mapping a ``411 Length Required`` response.N)r   r   r   r   r`   ra   LENGTH_REQUIREDr5   r   r   r   r   r   \      ?;;&&Dr   r   c                   <    e Zd ZdZej
                  j                  Zy)PreconditionFailedz9Exception mapping a ``412 Precondition Failed`` response.N)r   r   r   r   r`   ra   PRECONDITION_FAILEDr5   r   r   r   r   r   b  s    C;;**Dr   r   c                   <    e Zd ZdZej
                  j                  Zy)RequestRangeNotSatisfiablezCException mapping a ``416 Request Range Not Satisfiable`` response.N)r   r   r   r   r`   ra   REQUESTED_RANGE_NOT_SATISFIABLEr5   r   r   r   r   r   h  s    M;;66Dr   r   c                   <    e Zd ZdZej
                  j                  Zy)TooManyRequestsz7Exception mapping a ``429 Too Many Requests`` response.N)r   r   r   r   r`   ra   TOO_MANY_REQUESTSr5   r   r   r   r   r   n  rc   r   r   c                   F    e Zd ZdZeej
                  j                  ZydZy)ResourceExhaustedzEException mapping a :attr:`grpc.StatusCode.RESOURCE_EXHAUSTED` error.N)r   r   r   r   rv   rw   RESOURCE_EXHAUSTEDr7   r   r   r   r   r   t  s     O=A=Mt99SWr   r   c                   J    e Zd ZdZdZeej                  j                  ZydZy)	Cancelledz<Exception mapping a :attr:`grpc.StatusCode.CANCELLED` error.i  N)	r   r   r   r   r5   rv   rw   	CANCELLEDr7   r   r   r   r   r   z  s&    F D484Dt00$r   r   c                       e Zd ZdZy)ServerErrorzBase for 5xx responses.Nr   r   r   r   r   r     s    !r   r   c                   r    e Zd ZdZej
                  j                  Zeej                  j                  ZydZy)InternalServerErrorzlException mapping a ``500 Internal Server Error`` response. or a
    :attr:`grpc.StatusCode.INTERNAL` error.N)r   r   r   r   r`   ra   INTERNAL_SERVER_ERRORr5   rv   rw   INTERNALr7   r   r   r   r   r     s2    / ;;,,D373Ct//r   r   c                   F    e Zd ZdZeej
                  j                  ZydZy)Unknownz:Exception mapping a :attr:`grpc.StatusCode.UNKNOWN` error.N)r   r   r   r   rv   rw   UNKNOWNr7   r   r   r   r   r     r   r   r   c                   F    e Zd ZdZeej
                  j                  ZydZy)DataLossz<Exception mapping a :attr:`grpc.StatusCode.DATA_LOSS` error.N)r   r   r   r   rv   rw   	DATA_LOSSr7   r   r   r   r   r     s    F484Dt00$r   r   c                   r    e Zd ZdZej
                  j                  Zeej                  j                  ZydZy)MethodNotImplementedzjException mapping a ``501 Not Implemented`` response or a
    :attr:`grpc.StatusCode.UNIMPLEMENTED` error.N)r   r   r   r   r`   ra   NOT_IMPLEMENTEDr5   rv   rw   UNIMPLEMENTEDr7   r   r   r   r   r     s2    4 ;;&&D8<8Ht44dr   r   c                   <    e Zd ZdZej
                  j                  Zy)
BadGatewayz1Exception mapping a ``502 Bad Gateway`` response.N)r   r   r   r   r`   ra   BAD_GATEWAYr5   r   r   r   r   r     rs   r   r   c                   r    e Zd ZdZej
                  j                  Zeej                  j                  ZydZy)ServiceUnavailablezlException mapping a ``503 Service Unavailable`` response or a
    :attr:`grpc.StatusCode.UNAVAILABLE` error.N)r   r   r   r   r`   ra   SERVICE_UNAVAILABLEr5   rv   rw   UNAVAILABLEr7   r   r   r   r   r     s2    2 ;;**D6:6Ft22Dr   r   c                   <    e Zd ZdZej
                  j                  Zy)GatewayTimeoutz5Exception mapping a ``504 Gateway Timeout`` response.N)r   r   r   r   r`   ra   GATEWAY_TIMEOUTr5   r   r   r   r   r     r   r   r   c                   F    e Zd ZdZeej
                  j                  ZydZy)DeadlineExceededzDException mapping a :attr:`grpc.StatusCode.DEADLINE_EXCEEDED` error.N)r   r   r   r   rv   rw   DEADLINE_EXCEEDEDr7   r   r   r   r   r     r   r   r   c                       e Zd ZdZy)"AsyncRestUnsupportedParameterErrorzPRaised when an unsupported parameter is configured against async rest transport.Nr   r   r   r   r   r     s    Zr   r   c                 6    t         j                  | t              S )zReturn the exception class for a specific HTTP status code.

    Args:
        status_code (int): The HTTP status code.

    Returns:
        :func:`type`: the appropriate subclass of :class:`GoogleAPICallError`.
    )r   getr>   status_codes    r   exception_class_for_http_statusr          #&&{4FGGr   c                 T    t        |       } ||fi |}|j                  | |_        |S )a  Create a :class:`GoogleAPICallError` from an HTTP status code.

    Args:
        status_code (int): The HTTP status code.
        message (str): The exception message.
        kwargs: Additional arguments passed to the :class:`GoogleAPICallError`
            constructor.

    Returns:
        GoogleAPICallError: An instance of the appropriate subclass of
            :class:`GoogleAPICallError`.
    )r   r5   r   r#   kwargserror_classrM   s        r   from_http_statusr     s3     2+>K*6*Ezz 
Lr   c                 V    |r|j                         nd }dj                  |||       }|S )Nz{method} {url}: {error})methodurlrM   )upperr+   )rM   r   r   r#   s       r   _format_rest_error_messager     s6    %V\\^4F'.. / G
 Nr   r   r   payloadc                 l   |si n|}|j                  di       j                  dd      }|j                  di       j                  dd      }|j                  di       j                  dd      }t        t        d |            }|r|d   nd	}t        |||      }	t	        | j
                  |	||| |
      }
|
S )a  Create a :class:`GoogleAPICallError` from a google auth rest response.

    Args:
        response Union[google.auth.transport.Response, google.auth.aio.transport.Response]: The HTTP response.
        method Optional(str): The HTTP request method.
        url Optional(str): The HTTP request url.
        payload Optional(dict): The HTTP response payload. If not passed in, it is read from response for a response type of google.auth.transport.Response.

    Returns:
        GoogleAPICallError: An instance of the appropriate subclass of
            :class:`GoogleAPICallError`, with the message and errors populated
            from the response.
    rM   r#   unknown errorrD   r   rE   c                 ,    | j                  dd      dk(  S )Nz@type z(type.googleapis.com/google.rpc.ErrorInfo)r   )details    r   <lambda>z,format_http_response_error.<locals>.<lambda>
  s    6::gr29: r   r   NrD   rE   rF   rG   )r   rV   filterr   r   r   )rF   r   r   r   error_messagerD   rE   error_info_listrG   r#   	exceptions              r   format_http_response_errorr     s       bWGKK,00OLM[["%))(B7Fkk'2&**9b9G:	
O (7#DJ(DG I r   c                     	 | j                         }t        | | j                  j
                  | j                  j                  |      S # t        $ r dd| j                  xs dii}Y Uw xY w)aS  Create a :class:`GoogleAPICallError` from a :class:`requests.Response`.

    Args:
        response (requests.Response): The HTTP response.

    Returns:
        GoogleAPICallError: An instance of the appropriate subclass of
            :class:`GoogleAPICallError`, with the message and errors populated
            from the response.
    rM   r#   r   )json
ValueErrortextr   requestr   r   )rF   r   s     r   from_http_responser     sn    K--/ &(""))8+;+;+?+?   KY(HIJKs   A A('A(c                 6    t         j                  | t              S )zReturn the exception class for a specific :class:`grpc.StatusCode`.

    Args:
        status_code (grpc.StatusCode): The gRPC status code.

    Returns:
        :func:`type`: the appropriate subclass of :class:`GoogleAPICallError`.
    )r   r   r>   r   s    r   exception_class_for_grpc_statusr   1  r   r   c                     t        | t              rt        j                  | |       } t	        |       } ||fi |}|j
                  | |_        |S )a  Create a :class:`GoogleAPICallError` from a :class:`grpc.StatusCode`.

    Args:
        status_code (Union[grpc.StatusCode, int]): The gRPC status code.
        message (str): The exception message.
        kwargs: Additional arguments passed to the :class:`GoogleAPICallError`
            constructor.

    Returns:
        GoogleAPICallError: An instance of the appropriate subclass of
            :class:`GoogleAPICallError`.
    )
isinstancerY   _INT_TO_GRPC_CODEr   r   r7   r   s        r   from_grpc_statusr   =  sR     +s#'++KE1+>K*6*E%!,Lr   c                 6    t        | d      xr t        | d      S )Nr5   rE   )rJ   )rpc_excs    r   _is_informative_grpc_errorr   W  s    7F#C(CCr   c           
         t         st                g d fS 	 t        j                  |       }|sg d fS t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g
}d }g }|j                  D ]t  t!        t#        fd|            }t%        |      dk(  r}n |d          }j'                  |       |j)                  |       t+        |t        j                        ss|}v ||fS # t        $ r g d fcY S w xY w)Nc                 :    j                  | j                        S r    )Is
DESCRIPTOR)xr   s    r   r   z+_parse_grpc_error_details.<locals>.<lambda>w  s    VYYq||4 r   r   )r   r   	from_callNotImplementedErrorr   rq   PreconditionFailureQuotaFailure	ErrorInfo	RetryInfoResourceInfoRequestInfo	DebugInfoHelpLocalizedMessagerE   rV   r   lenUnpackappendr   )r   statuspossible_errorsrG   error_detailsmatched_detail_clsinfor   s          @r   _parse_grpc_error_detailsr  [  sM   ,.4x%%g. 4x 	$$--&&####&&%%##**O JM.. !4oF
 !"a'D(%a(*DMM$T"d-778J *$$C  4xs   E E%$E%c                     t         t        | t         j                        st        |       r<t	        |       \  }}t        | j                         | j                         | f|| |      S t        t        |       | f|       S )a  Create a :class:`GoogleAPICallError` from a :class:`grpc.RpcError`.

    Args:
        rpc_exc (grpc.RpcError): The gRPC error.

    Returns:
        GoogleAPICallError: An instance of the appropriate subclass of
            :class:`GoogleAPICallError`.
    r   )rD   rF   )
rv   r   Callr   r  r   r5   rE   r>   str)r   rE   err_infos      r   from_grpc_errorr    ss     	Z;	#G	,5g>LLNOO:
 	
 "#g,zGTTr   r    )Pr   
__future__r   r   http.clientr`   typingr   r   r   r
   
google.rpcr   r   rv   grpc_statusr   ImportErrorr   rY   	ExceptionrZ   r   r   rw   r   valuer   r   r   r3   r1   r>   r]   r_   re   ri   rm   ro   rq   ru   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r  r  r   r   r   <module>r      s1   ' '  !   (	* 13 c9n- 202 c9n- 2
  __ *()!''!*%*	Y 		n 	I I.	d 	u3J upC$ C){ )$+ $* *{ @$ @# #Vj VY YR R$; $Ul U! !Wy WO{ O*{ * {  TH TMh M'[ '+ +7 7)k )X XO O"$ "N+ NMk MO{ OS; S# #Q Q'[ 'W~ W	)< 		H, @D'' #'.6tn'T(	H4D'%TUs  ,.
  Ds.   I4 I I1-I4 0I11I4 4I?>I?