
    [hiQ                       U d dl mZ d dlmZ d dlZd dlZd dlZd dlZ	d dl
Z
d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z# d dl$Z$d dl%m&Z& d dl%m'Z' e	j(        rd dl)Z* ej+        dej,        dd            G d de-          Z.dAdBdZ/dCdDdZ0dCdEd"Z1	 dCdFd&Z2dGd)Z3 G d* d+          Z4 G d, d-e5          Z6 G d. d/          Z7 G d0 d1          Z8 G d2 d3          Z9 G d4 d5e9          Z: G d6 d7e9          Z; e$j<                    Z=d8e>d9<   e=?                    d:d;<          Z@d=e>d><   dHd@ZAdS )I    )annotationsN)contextmanager)charset)policy)encode_base64)Header)MIMEBase)MIMEMultipart)MIMEText)
formataddr)
formatdate)
make_msgid)	parseaddr)
guess_type)TracebackType)current_app)Flaskutf-8c                  ,     e Zd Zd	 fdZd
 fdZ xZS )FlaskMailUnicodeDecodeErrorobjt.AnyargsreturnNonec                B    || _          t                      j        |  d S N)r   super__init__)selfr   r   	__class__s      b/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/flask_mail/__init__.pyr   z$FlaskMailUnicodeDecodeError.__init__$   s$    $    strc                    t                                                      }| d| j        dt          | j                   dS )Nz. You passed in z ())r   __str__r   type)r    originalr!   s     r"   r'   z#FlaskMailUnicodeDecodeError.__str__(   s?    77??$$KKDHKK$tx..KKKKr#   )r   r   r   r   r   r   r   r$   )__name__
__module____qualname__r   r'   __classcell__)r!   s   @r"   r   r   #   se                   L L L L L L L L L Lr#   r   strictsr   encodingr$   errorsr   c                t   t          | t                    r| S 	 t          | t                    rt          |           }nt          |           }nf# t          $ rY}t          | t                    st          | g|j        R  |d                    fd| j        D                       }Y d}~nd}~ww xY w|S )zz
    Similar to smart_text, except that lazy instances are resolved to
    strings, rather than kept as lazy objects.
     c                2    g | ]}t          |          S  )
force_text).0argr1   r2   s     r"   
<listcomp>zforce_text.<locals>.<listcomp>>   s%    LLLc
3&99LLLr#   N)
isinstancer$   bytesUnicodeDecodeError	Exceptionr   r   join)r0   r1   r2   outes    ``  r"   r7   r7   -   s    
 !S 	Na 	a6**CCa&&C N N N!Y'' 	A-a9!&999q@hhLLLLLQVLLLMM	N Js   6A 
B5AB00B5subjectc                    	 |                      d           nf# t          $ rY 	 t          | |                                           } n2# t          $ r% t          | d                                           } Y nw xY wY nw xY w| S )Nasciir   )encodeUnicodeEncodeErrorr   )rB   r1   s     r"   sanitize_subjectrG   C   s    8w 8 8 8	8Wh//6688GG! 	8 	8 	8Wg..5577GGG	88 Ns2    
A;"AA;,A52A;4A55A;:A;addrstr | tuple[str, str]c                   t          | t                    rt          t          |                     } | \  }} 	 t	          ||                                          }n2# t          $ r% t	          |d                                          }Y nw xY w	 |                     d           n# t          $ r d| v rv|                     dd          \  }}t          t	          ||                    }|                    d                              d          }d	                    ||g          } n"t	          | |                                          } Y nw xY wt          || f          S )Nr   rD   @   idna)r;   r$   r   r7   r   rE   rF   splitdecoder?   r   )rH   r1   nm	localpartdomains        r"   sanitize_addressrS   O   sc   $ +D))**HB*B!!((** * * *B  ''))*	3G 3 3 3$;; $

3 2 2IvF9h7788I]]6**11'::F88Y/00DD$))0022D3 r4j!!!s$   "A ,B
	B
B$ $B&EE	addresses!c.Iterable[str | tuple[str, str]]	list[str]c                     fd| D             S )Nc                0    g | ]}t          |          S r6   )rS   )r8   rA   r1   s     r"   r:   z&sanitize_addresses.<locals>.<listcomp>k   s$    ===aQ))===r#   r6   )rT   r1   s    `r"   sanitize_addressesrY   h   s     >===9====r#   lineboolc                    d| v pd| v S )z,Used by has_bad_header to check for \r or \n
r6   )rZ   s    r"   _has_newliner_   n   s    4<'44<'r#   c                  F    e Zd ZdZddZddZddZddZ	 d d!dZd"dZ	dS )#
ConnectionzHandles connection to host.mailMailr   r   c                0    || _         d | _        d| _        d S Nr   )rb   host
num_emails)r    rb   s     r"   r   zConnection.__init__v   s    	<@	 r#   te.Selfc                n    | j         j        rd | _        n|                                 | _        d| _        | S re   )rb   suppressrf   configure_hostrg   r    s    r"   	__enter__zConnection.__enter__{   s7    9 	.DII++--DIr#   exc_typetype[BaseException]	exc_valueBaseExceptiontbr   c                J    | j         | j                                          d S d S r   )rf   quit)r    rn   rp   rr   s       r"   __exit__zConnection.__exit__   s,     9 INN ! r#   smtplib.SMTP | smtplib.SMTP_SSLc                   | j         j        r*t          j        | j         j        | j         j                  }n)t          j        | j         j        | j         j                  }|                    t          | j         j	                             | j         j
        r|                                 | j         j        r6| j         j        r*|                    | j         j        | j         j                   |S r   )rb   use_sslsmtplibSMTP_SSLserverportSMTPset_debuglevelintdebuguse_tlsstarttlsusernamepasswordlogin)r    rf   s     r"   rk   zConnection.configure_host   s     9 	B#DI$4dinEEDD<	 0$).AADC	001119 	MMOOO9 	?$)"4 	?JJty)49+=>>>r#   NmessageMessageenvelope_fromstr | tuple[str, str] | Nonec                   |j         s
J d            |j        s
J d            |                                rt          |j        t          j                    |_        | j        m| j                            t          |p|j                  t          t          |j                             |                                |j        |j                   t          j                    }t                               ||           | xj        dz  c_        | j        | j        j        k    rBd| _        | j        r6| j                                         |                                 | _        dS dS dS )zVerifies and sends message.

        :param message: Message instance.
        :param envelope_from: Email address to be used in MAIL FROM command.
        zNo recipients have been addedzRThe message does not specify a sender and a default sender has not been configuredN)r   rL   r   )send_tosenderhas_bad_headersBadHeaderErrordatetimerf   sendmailrS   listrY   as_bytesmail_optionsrcpt_optionsr   _get_current_objectemail_dispatchedsendrg   rb   
max_emailsrt   rk   )r    r   r   apps       r"   r   zConnection.send   sk    ?? ????~ 	
 	
&	
 	
 	

 ""$$ 	!  <9;;GL9 I !@'.AA'8899  ""$$   -//c73331?di222DOy 2	    //11			 322 2r#   r   r   kwargsc                D    |                      t          |i |           dS ztShortcut for send(msg).

        Takes same arguments as Message constructor.

        :versionadded: 0.3.5
        Nr   r   r    r   r   s      r"   send_messagezConnection.send_message   s)     			'4*6**+++++r#   )rb   rc   r   r   )r   rh   )rn   ro   rp   rq   rr   r   r   r   )r   rv   r   )r   r   r   r   r   r   r   r   r   r   r   r   )
r+   r,   r-   __doc__r   rm   ru   rk   r   r   r6   r#   r"   ra   ra   s   s        %%! ! ! !
         & OS&2 &2 &2 &2 &2P, , , , , ,r#   ra   c                      e Zd ZdS )r   N)r+   r,   r-   r6   r#   r"   r   r      s        Dr#   r   c                  &    e Zd ZdZ	 	 	 	 	 dddZdS )
Attachmenta?  Encapsulates file attachment information.

    :param filename: filename of attachment
    :param content_type: file mimetype
    :param data: the raw file data
    :param disposition: content-disposition (if any)

    .. versionchanged:: 0.10.0
        The `data` argument is required.

    .. versionadded: 0.3.5
    Nfilename
str | Nonecontent_typedatastr | bytes | Nonedispositionheadersdict[str, str] | Nonec                    |t          d          || _        ||t          |          d         }|t          |t                    rd}nd}|| _        || _        |pd| _        |i }|| _        d S )Nz The 'data' argument is required.r   z
text/plainzapplication/octet-stream
attachment)	
ValueErrorr   r   r;   r$   r   r   r   r   r    r   r   r   r   r   s         r"   r   zAttachment.__init__   s     <?@@@!%	H$8%h//2L$$$ :+9$,!- + ;|?G'.r#   NNNNN)
r   r   r   r   r   r   r   r   r   r   )r+   r,   r-   r   r   r6   r#   r"   r   r      sH           $#'#'"&)-/ / / / / / /r#   r   c                      e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d@dAdZedBd            ZedCd             Zej        dDd#            ZdEdFd(Z	dGd*Z
dHd+ZdId-ZdHd.ZdId/ZdJd1ZdJd2ZdKd5ZdLd8Z	 	 	 	 	 dMdNd?ZdS )Or   a;  Encapsulates an email message.

    :param subject: email subject header
    :param recipients: list of email addresses
    :param body: plain text message
    :param html: HTML message
    :param alts: A dict or an iterable to go through dict() that contains multipart
                 alternatives
    :param sender: email sender address, or **MAIL_DEFAULT_SENDER** by default
    :param cc: CC list
    :param bcc: BCC list
    :param attachments: list of Attachment instances
    :param reply_to: reply-to address
    :param date: send date
    :param charset: message character set
    :param extra_headers: A dictionary of additional headers for the message
    :param mail_options: A list of ESMTP options to be used in MAIL FROM command
    :param rcpt_options:  A list of ESMTP options to be used in RCPT commands
     NrB   r$   
recipients"list[str | tuple[str, str]] | Nonebodyr   htmlalts3dict[str, str] | c.Iterable[tuple[str, str]] | Noner   r   ccbccattachmentslist[Attachment] | Nonereply_tor   float | Noner   extra_headersr   r   list[str] | Noner   c                   |pt           j        d         j        }t          |t                    r|d          d|d          d}|pg | _        || _        || _        |
| _        |pg | _	        |pg | _
        || _        t          |pi           | _        || _        || _        t!                      | _        || _        || _        |pg | _        |pg | _        |	pg | _        d S )Nrb   r    <rL   >)r   
extensionsdefault_senderr;   tupler   rB   r   r   r   r   r   dictr   r   r   r   msgIdr   r   r   r   r   )r    rB   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                   r"   r   zMessage.__init__  s    $ H;1&9Hfe$$ 	2q	11VAY111F7A7GR#-36>/1xR03	r $	$($4$4	 $	"&	$,,
#*4A'3'9r'3'9r-8->Br#   r   set[str | tuple[str, str]]c                    t          | j                  }| j        r|                    | j                   | j        r|                    | j                   |S r   )setr   r   updater   )r    r@   s     r"   r   zMessage.send_to=  sR    $/""8 	!JJtx   7 	 JJtw
r#   c                6    | j                             d          S Nr   )r   getrl   s    r"   r   zMessage.htmlI  s    y}}V$$$r#   valuer   c                X    || j                             dd            d S || j         d<   d S r   )r   pop)r    r   s     r"   r   zMessage.htmlM  s5    =IMM&$''''' %DIfr#   plaintextsubtyper   c                8    | j         pd}t          |||          S )zCreates a MIMEText object with the given subtype (default: 'plain')
        If the text is unicode, the utf-8 charset is used.
        r   )_subtype_charset)r   r   )r    r   r   r   s       r"   	_mimetextzMessage._mimetextT  s%     ,)'wAAAAr#   r	   c           
        t           j        d         j        }| j        pd}| j        pg }t          |          dk    r"| j        s|                     | j                  }nt          |          dk    rC| j        s<t                      }|
                    |                     | j                             nt                      }t          d          }|
                    |                     | j        d                     | j                                        D ].\  }}|
                    |                     ||                     /|
                    |           | j        r%t          t          | j                  |          |d<   t          | j        |          |d<   d                    t%          t'          t)          | j        |                                        |d	<   t-          | j        d
          |d<   | j        |d<   | j        rEd                    t%          t'          t)          | j        |                                        |d<   | j        rt          | j        |          |d<   | j        r$| j                                        D ]
\  }}	|	||<   t9          j        dt8          j                  }
|D ]v}t?          |j         !                    d           }|"                    |j#                   tI          |           |j%        |j%        }|rktM          j'        d|j%                  }|(                    dd          )                    d          }|
*                    d|          +                                }	 |(                    d           |,                    d|j-        |           n0# t\          $ r# |,                    d|j-        dd|f           Y nw xY w|j/                                        D ]\  }}|,                    ||           |
                    |           xt`          j1        |_0        |S )zCreates the emailrb   r   r   alternativer   SubjectFromz, ToT)	localtimeDatez
Message-IDCczReply-Toz[\s]+/NNFKDrD   ignorer4   zContent-Disposition)r   UTF8r   )2r   r   ascii_attachmentsr   r   lenr   r   r   r
   attachitemsrB   rG   r7   rS   r   r?   r   r   rY   r   r   r   r   r   r   r   recompileUNICODEr	   r   rN   set_payloadr   r   r   unicodedata	normalizerE   rO   substrip
add_headerr   rF   r   r   r}   )r    r   r1   r   msgr   mimetypecontentkvSPACESr   fr   keyr   s                   r"   _messagezMessage._message[  s!   '26:L<*7&," {q   ..++CC!!$)!//CJJt~~di001111  //C'66Kt~~diAABBB%)Y__%6%6 F F!'""4>>'8#D#DEEEEJJ{###< 	R-j.F.FQQC	N&t{H==FIId3'9$/8'T'T#U#UVVWWD	 d;;;F JL7 	T		$s+=dgx+P+P'Q'Q"R"RSSCI= 	H.t}hGGC
O 	*0022  1AHbj11% 	 	J*177<<=AMM*/***!".%.$ A*4VZ=PQQH'wAAHHQQH%zz#x88>>@@HOOG,,, LL-z/EPX !     *   LL-"."("h!7 !      )06688 ) )
US%((((JJqMMMM[

s   	N<<*O)(O)c                N    |                                                                  S r   )r   	as_stringrl   s    r"   r   zMessage.as_string  s    }}((***r#   r<   c                N    |                                                                  S r   )r   r   rl   s    r"   r   zMessage.as_bytes  s    }}'')))r#   c                *    |                                  S r   )r   rl   s    r"   r'   zMessage.__str__  s    ~~r#   c                *    |                                  S r   )r   rl   s    r"   	__bytes__zMessage.__bytes__  s    }}r#   r[   c                   | j         g| j        }| j        r|                    | j                   |D ]=}t	          |t
                    r|d          d|d          d}t          |          r dS >| j        rt          | j                  rt          | j        	                    d                    D ]W\  }}|s dS |dk    r|d         dvr dS t          |          r dS t          |                                          dk    r dS XdS )	zChecks for bad headers i.e. newlines in subject, sender or recipients.
        RFC5322: Allows multiline CRLF with trailing whitespace (FWS) in headers
        r   r   rL   r   Tz
z	 F)r   r   r   appendr;   r   r_   rB   	enumeraterN   r   r   )r    r   headerlinenumrZ   s        r"   r   zMessage.has_bad_headers  sI    ;11= 	*NN4=))) 	 	F&%(( 6"1I55555F## tt < 
	$DL)) 	$%.t|/A/A&/I/I%J%J $ $MGT $#tt{{tAwe';';#tt#D)) $#tt4::<<((A--#tt . ur#   c                b    t          j        dt          d           |                                 S )Nzs'is_bad_headers' is renamed to 'has_bad_headers'. The old name is deprecated and will be removed in Flask-Mail 1.0.   
stacklevel)warningswarnDeprecationWarningr   rl   s    r"   is_bad_headerszMessage.is_bad_headers  s;    A		
 	
 	
 	
 ##%%%r#   
connectionra   c                0    |                     |            dS )zVerifies and sends the message.N)r   )r    r  s     r"   r   zMessage.send  s     	r#   	recipientrI   c                :    | j                             |           dS )zfAdds another recipient to the message.

        :param recipient: email address of recipient.
        N)r   r  )r    r  s     r"   add_recipientzMessage.add_recipient  s      	y)))))r#   r   r   r   r   r   r   c           	     \    | j                             t          |||||                     dS )zAdds an attachment to the message.

        :param filename: filename of attachment
        :param content_type: file mimetype
        :param data: the raw file data
        :param disposition: content-disposition (if any)
        N)r   r  r   r   s         r"   r   zMessage.attach  s<     	xt['JJ	
 	
 	
 	
 	
r#   )r   NNNNNNNNNNNNNN)rB   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   r$   r   r   )r   r	   r*   )r   r<   )r   r[   )r  ra   r   r   )r  rI   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r+   r,   r-   r   r   propertyr   r   setterr   r   r   r   r'   r  r   r  r   r  r   r6   r#   r"   r   r      s        , 9=DH/31526/315!"/3)-)-!&? &? &? &? &?P 	 	 	 X	 % % % X% 
[& & & [&B B B B BO O O Ob+ + + +* * * *             <& & & &   
* * * *  $#'#'"&)-
 
 
 
 
 
 
r#   r   c                  >    e Zd Zedd            ZddZddZddZdS )
_MailMixinr   c.Iterator[list[Message]]c              #     K   g d	fd}t                               |          5  V  ddd           dS # 1 swxY w Y   dS )
a3  Records all messages. Use in unit tests for example::

            with mail.record_messages() as outbox:
                response = app.test_client.get("/email-sending-view/")
                assert len(outbox) == 1
                assert outbox[0].subject == "testing"

        :versionadded: 0.4
        r   r   r   r   r   r   c                2                         |           d S r   )r  )r   r   outboxs     r"   recordz*_MailMixin.record_messages.<locals>.record  s    MM'"""""r#   N)r   r   r   r   r   r   )r   connected_to)r    r  r  s     @r"   record_messagesz_MailMixin.record_messages  s       	# 	# 	# 	# 	# 	# **622 	 	LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   8<<r   r   r   c                    |                                  5 }|                    |           ddd           dS # 1 swxY w Y   dS )zSends a single message instance. If TESTING is True the message will
        not actually be sent.

        :param message: a Message instance.
        N)connectr   )r    r   r  s      r"   r   z_MailMixin.send  s     \\^^ 	%zLL$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   8<<r   r   r   c                D    |                      t          |i |           dS r   r   r   s      r"   r   z_MailMixin.send_message  s)     			'4*6**+++++r#   ra   c                    t          | dd          pt          }	 t          |j        d                   S # t          $ r}t          d          |d}~ww xY w)z$Opens a connection to the mail host.r   Nrb   z:The current application was not configured with Flask-Mail)getattrr   ra   r   KeyErrorRuntimeError)r    r   errs      r"   r#  z_MailMixin.connect(  si    dE4((7K	cnV4555 	 	 	L 	s   4 
AAAN)r   r  )r   r   r   r   r   )r   ra   )r+   r,   r-   r   r!  r   r   r#  r6   r#   r"   r  r     sn           ^$% % % %, , , ,	 	 	 	 	 	r#   r  c                      e Zd ZddZdS )_Mailr{   r$   r   r   r   r|   
int | Noner   r[   rx   r   r   r   r   rj   r   c                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        d S r   )r{   r   r   r|   r   rx   r   r   r   rj   r   )r    r{   r   r   r|   r   rx   r   r   r   rj   r   s               r"   r   z_Mail.__init__5  sY       	,
$ !2r#   N)r{   r$   r   r   r   r   r|   r,  r   r[   rx   r[   r   r   r   r   r   r,  rj   r[   r   r[   )r+   r,   r-   r   r6   r#   r"   r+  r+  4  s(        3 3 3 3 3 3r#   r+  c                  8    e Zd ZdZdddZ	 dddZddZddZdS )rc   zManages email messaging.Nr   Flask | Noner   r   c                ^    || _         ||                     |          | _        d S d | _        d S r   )r   init_appstate)r    r   s     r"   r   zMail.__init__S  s0    ?'+}}S'9'9DJJJDJJJr#   Fconfigdict[str, t.Any]r   
bool | inttestingr[   r+  c                   t          |                    dd          |                    d          |                    d          |                    dd          |                    dd          |                    d	d          |                    d
          t          |                    d|                    |                    d          |                    d|          |                    dd                    S )NMAIL_SERVERz	127.0.0.1MAIL_USERNAMEMAIL_PASSWORD	MAIL_PORT   MAIL_USE_TLSFMAIL_USE_SSLMAIL_DEFAULT_SENDER
MAIL_DEBUGMAIL_MAX_EMAILSMAIL_SUPPRESS_SENDMAIL_ASCII_ATTACHMENTS)r+  r   r   )r    r3  r   r6  s       r"   	init_mailzMail.init_mail[  s     JJ}k22JJ''JJ''JJ{B''JJ~u--JJ~u--JJ,--

<//00JJ())JJ+W55JJ/77
 
 	
r#   r   c                    |                      |j        |j        |j                  }t	          |di           |_        ||j        d<   |S )zInitializes your mail settings from the application settings.

        You can use this if you want to set up your Mail instance
        at configuration time.
        r   rb   )rD  r3  r   r6  r&  r   )r    r   r2  s      r"   r1  zMail.init_appl  sE     sz39ckBB !lB77!&vr#   namer$   r   c                .    t          | j        |d           S r   )r&  r2  )r    rF  s     r"   __getattr__zMail.__getattr__y  s    tz4...r#   r   )r   r/  r   r   )FF)r3  r4  r   r5  r6  r[   r   r+  )r   r   r   r+  rF  r$   r   r   )r+   r,   r-   r   r   rD  r1  rH  r6   r#   r"   rc   rc   P  s{        ""     TY
 
 
 
 
"   / / / / / /r#   rc   zblinker.Namespacesignalszemail-dispatchedz
Signal sent when an email is dispatched. This signal will also be sent
in testing mode, even though the email will not actually be sent.
)doczblinker.NamedSignalr   rF  c                    | dk    r:dd l }t          j        dt          d           |j                            d          S t          |           )N__version__r   zThe '__version__' attribute is deprecated and will be removed in Flask-Mail 1.0. Use feature detection or 'importlib.metadata.version("flask-mail")' instead.r
  r  z
flask-mail)importlib.metadatar  r  r  metadataversionAttributeError)rF  	importlibs     r"   rH  rH    sg    }!!!!E 	
 	
 	
 	
 !)),777


r#   )r   r/   )r0   r   r1   r$   r2   r$   r   r$   )r   )rB   r$   r1   r$   r   r$   )rH   rI   r1   r$   r   r$   )rT   rU   r1   r$   r   rV   )rZ   r$   r   r[   rI  )B
__future__r   collections.abcabccr   ry   r   typingtr   r  
contextlibr   emailr   r   email.encodersr   email.headerr   email.mime.baser	   email.mime.multipartr
   email.mime.textr   email.utilsr   r   r   r   	mimetypesr   typesr   blinkerflaskr   r   TYPE_CHECKINGtyping_extensionsteadd_charsetSHORTESTr=   r   r7   rG   rS   rY   r_   ra   r>   r   r   r   r  r+  rc   	NamespacerJ  __annotations__signalr   rH  r6   r#   r"   <module>rm     s   " " " " " " "       				            % % % % % %             ( ( ( ( ( (       $ $ $ $ $ $ . . . . . . $ $ $ $ $ $ " " " " " " " " " " " " " " " " " " ! ! ! ! ! !                               ? #""""  GW-tW = = =L L L L L"4 L L L    ,	 	 	 	 	" " " " "4 CJ> > > > >( ( ( (
X, X, X, X, X, X, X, X,v	 	 	 	 	Y 	 	 	+/ +/ +/ +/ +/ +/ +/ +/\}
 }
 }
 }
 }
 }
 }
 }
@1 1 1 1 1 1 1 1h3 3 3 3 3J 3 3 38*/ */ */ */ */: */ */ */Z /W.00 0 0 0 0(/	 )7 ) )          r#   