
    @OOfqg              )          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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 ej                         v xs d ej                         v Zd Zd~dZdZ	 	 	 ddeeedez  ej@                  z  f      dedede!de"ejF                     f
dZ$dededeee!ejJ                  f   fdZ&ejN                  jP                  rdZ)dZ*dZ+dZ,d Z-d!Z.d"Z/d#Z0nd$Z)d%Z*d&Z+d'Z,d(Z-d)Z.d*Z/d%Z0d+d,d-d.d/d0d1d2d3Z1d4d5d6d7d8d9Z2d:d;d<d=d>Z3 G d? d@e jh                        Z5dedAe!defdBZ6dedAe!defdCZ7dDedefdEZ8 G dF dGej@                        Z9ddHZ:dI Z;dJefdKZ<defdLZ=dM Z>dNedeeef   fdOZ?dPe@deeef   fdQZAdRe!deeef   fdSZBdTeCdUeCdVe@fdWZDdXeCdYefdZZE ed[\      d]e5dTeCdYed^eCd_ed`edaedbedceddedee@dfeCdUeCdge!dz  dhedz  die!dz  djedz  dPe@dz  dkedz  dej@                  f(dl       ZF ed[\      d]e5dTeCdYed^edz  d_ed`edaedbedceddedee@dfeCdUeCdge!dz  dhedz  die!dz  djedz  dPe@dz  dkedz  dej@                  f(dm       ZG ed[\      d]e5dTeCdne@dYedoedpe!dPe@dz  dkedz  fdq       ZH ed[\      d]e5dTeCdUeCdYed^edz  dredee@dsedtedgedz  due!dvedz  dkedPe@dz  fdw       ZIdxdydzd{ej                  d]e5d|eCdTeCdej@                  f
d}ZKy)    N)Iterable)	lru_cache)get_sld)get_tld)dns)flow)DNSFlow)HTTPFlow)TCPFlow)UDPFlow)emoji)human	MicrosoftWindowsc                 &    t        | t              ryy)z)
    Is this input event a keypress?
    TN)
isinstancestr)ks    _/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/tools/console/common.pyis_keypressr      s     !S     c                     g }| j                  |d      }|d   r|j                  ||d   f       |j                  ||f       |d   r|j                  ||d   f       |S )N   r   )splitappend)textkeytextattrkeyattrlstpartss         r   highlight_keyr"   "   sd    
CJJsAEQx

HeAh'(JJ~Qx

HeAh'(Jr      entries
key_formatvalue_formatindentreturnc                    t        d | D        d      }t        |t              }|dkD  r|dz  }g }| D ]  \  }}|t        j                  d      }n2t        |t        j                        st        j                  ||fg      }|j                  t        j                  d|t        j                  d      fd|t        j                  ||fg      f|gd              |S )a  
    Format a list of (key, value) tuples.

    Args:
        entries: The list to format. keys must be strings, values can also be None or urwid widgets.
            The latter makes it possible to use the result of format_keyvals() as a value.
        key_format: The display attribute for the key.
        value_format: The display attribute for the value.
        indent: Additional indent to apply.
    c              3   >   K   | ]  \  }}|	t        |        y wN)len).0r   vs      r   	<genexpr>z!format_keyvals.<locals>.<genexpr>@   s     C$!QQ]s1vCs   
r   )default    fixeddividechars)	maxminKEY_MAXurwidTextr   Widgetr   Columns)r$   r%   r&   r'   max_key_lenretr   r.   s           r   format_keyvalsr?   0   s      C'CQOKk7+Kz!
C 
19

2AAu||,

\1-./A

MMfejjn5k5::
A6G+HI
 		

 Jr   sattrc                 `    t        |       } dt        |       t        j                  || fg      fS )Nr3   )r   r,   r9   r:   )r@   rA   s     r   fcolrC   Y   s+    AASVUZZ$455r   u   ↺u   ←u   ●u   ⇧u   ⇩u   …u   ⇒u   ⇐z[r]z<-#^ ~z->scheme_httpscheme_https	scheme_ws
scheme_wss
scheme_tcp
scheme_udp
scheme_dnsscheme_quic)httphttpswswsstcpudpr   quic
method_getmethod_postmethod_deletemethod_head
method_put)GETPOSTDELETEHEADPUTcode_200code_300code_400code_500)r1            c                       e Zd ZdZ	 dZ	 dZy)
RenderModer   r1   re   N)__name__
__module____qualname__TABLELIST
DETAILVIEW r   r   ri   ri      s    E?DPJ+r   ri   maxlenc                 x    t        |       |k  r| j                  |      S | d|t        t              z
   t        z   S Nr   )r,   ljustSYMBOL_ELLIPSISr@   rq   s     r   fixlenrw      s8    
1vwwvVc/223oEEr   c                     t        |       |k  r| j                  |      S t        | t        |       |z
  t        t              z   d  z   S r+   )r,   rjustru   rv   s     r   fixlen_rrz      sA    
1vwwv3q6F?S5I#I#K!LLLr   markerc                 T    t         j                   j                  | t              }|d   S rs   )r   getSYMBOL_MARK)r{   rendereds     r   render_markerr      s"    {{v{3H A;r   c                   8     e Zd Zd fd	ZddZddZddZ xZS )TruncatedTextc                 L    || _         || _        || _        t        |           y r+   )r   rA   alignsuper__init__)selfr   rA   r   	__class__s       r   r   zTruncatedText.__init__   s#    		
r   c                 0    t        | j                        dfS Nr   )r,   r   r   sizefocuss      r   packzTruncatedText.pack   s    DII""r   c                      yr   rp   r   s      r   rowszTruncatedText.rows   s    r   c                    | j                   }| j                  }| j                  dk(  r|d d d   }|d d d   }t        j                  j                  |dt        |            }|t        |      dkD  r|d   }n|}||k\  r ||z
  }|dkD  r|d|z  z   }|d|fgz   }	n|}|}	nt        j                  j                  |d|dz
  d|dz
        }
|d|
d    }|
d   dk(  r|dz  }|t        z   }t        j                  j                  |dt        |j                                     dt        t        j                               fgz   }	| j                  dk(  r|d d d   }|	d d d   }	t        j                  |j                         g|	g|	      S )
Nrightr   rF   r   r   re   r   )maxcol)r   rA   r   r9   util
calc_widthr,   calc_trim_textru   
rle_subsegencode
TextCanvas)r   r   r   r   rA   text_lenwidth	remainingc_textc_attrtrimvisible_texts               r   renderzTruncatedText.render   s   yyyy:: ":D":D::((q#d)<D	AGEEH(I1}i/&)!4 55::,,T1eaiEAINDDG,LAw!|#!O3FZZ**4C8K8K8M4NO#o44678S F :: DbD\FDbD\F 1F8EJJr   left)F)rj   rk   rl   r   r   r   r   __classcell__)r   s   @r   r   r      s    ##Kr   r   c                 P    t        | |t        | j                               fg|      S r+   )r   r,   r   )r   rA   r   s      r   truncated_plainr      s$    s4;;='9 :;UCCr   c                 d    |\  }}| s	||fg| dd y| d   \  }}||k(  r|||z   f| d<   y||fg| dd y)z
    Append (a, r) (unpacked from *a_r*) to BEGINNING of rle.
    Merge with first run when possible

    MODIFIES rle parameter contents. Returns None.
    Nr   rp   )rlea_raralruns         r   rle_append_beginning_modifyr      sU     DAqa&Aa&C7q\CFAxC!Hr   hostc           	      R   t        |       }t        |       }g }t        |      }t        |      |z
  }t        t	        t        |                   D ]U  }| |   }|dkD  rd}|dz  }n|dk(  rd}|dz  }n|dkD  r|dz  }d}nd}t        ||t        |j                               f       W |S )Nr   
url_domainr   r   url_extension)r   r   r,   reversedranger   r   )	r   tldsldrA   tld_sizesld_sizeletter	characterstyles	            r   colorize_hostr      s    
$-C
$-CD3xH3x("H5T+, LL	a< EMH]EMH\MH#EE#D5#i6F6F6H2I*JKL Kr   c           	         | j                  dd      d   }t        |      }|j                  d      }||dz   d  j                  d      }|dk\  r||z   n
t        |       }d}g }t        t        |             D ]  }| |   }||k  r|dk(  s||k  r
||kD  r|dk(  s||k(  rd}	n3||kD  r|r|d	k(  rd}d}	n"d
}	n|dk(  rd}d}	nd}	n||kD  rd}	n
||kD  rd}	nd}	t        j
                  j                  ||	t        |j                               f        |S )N?r1   r   /r   .Furl_punctuation&url_query_value=Turl_query_keyr   url_filenamer   )r   r,   rfindr   r9   r   rle_append_modifyr   )
r@   pathi_queryi_last_slashi_extin_valrA   icr   s
             r   colorize_reqr     s6   773?1D$iG::c?L!#$**3/E$)QJL5 CFEFD3q6] AaD[Q#XGL 0Q#XW!A[8"F)A)A8!F)A'AYAAA

$$TAs188:+?@7A8 Kr   c                 0   | j                  dd      }t        |      dk  st        |d         dkD  s|d   dd  dk7  rdt        |       fgS t        j                  |d   d	      t        |d         dz
  fd
gt	        |d         z   t        d|d   z         z   S )Nr   re   rf   r   r   r   :errorscheme_other)r   re   r1   )r   r,   SCHEME_STYLESr}   r   r   )urlr!   s     r   colorize_urlr   6  s    IIc1E
5zA~U1X*eAhrsms.B#c(#$$ uQx8#eAh-!:KL"	
 a
!		"
 sU1X~
&	'r   content_typec                    | j                  d      d   } | j                  d      rd}| |fS | j                  d      rd}| |fS | j                  d      s&| j                  d      s| j                  d	      sd
| v rd}| |fS | j                  d      s| j                  d      rd}| |fS | j                  d      rd}| |fS d}| |fS )N;r   z/javascriptcontent_scriptztext/content_textzimage/zvideo/zfont/z/x-font-content_mediaz/jsonz/xmlcontent_datazapplication/content_rawcontent_other)r   endswith
startswith)r   r   s     r   format_http_content_typer   D  s   %%c*1-L]+    
	 	 	)  	)""8,""7+%  
		w	'<+@+@+H
 	 
	 	 	0   r   durationc                     t        j                  |       }dt        ddt        t	        j
                  dd| z  z         dz  d      z  z
        z  }||fS )Ngradient_%02dc   d   r   i     Gz?)r   pretty_durationintr7   mathlog2)r   r   r   s      r   format_durationr   Z  s[    ++H5Oc
S3tyyTH_!45:DAAA E E!!r   	num_bytesc                     t        j                  |       }dt        ddt        t	        j
                  d| z         dz  d      z  z
        z  }||fS )Nr   r   r   r      r   )r   pretty_sizer   r7   r   r   )r   r   r   s      r   format_sizer   b  sP    ##I.Kc"sS1y=1IB1NPT-U'U"UVVEr   focusedintercepted	timestampc                    g }| r|j                  d       n|j                  d       t        j                  |      dd  }|r|j                  d|f       n|j                  d|f       ddt        j                  |      fS )N)r   >>  i	interceptr   r3   
   )r   r   format_timestampr9   r:   )r   r   r   
indicatorspretty_timestamps        r   format_left_indicatorsr  h  s    .0J/*$--i8=;(89:6#345B

:...r   replaymarkedc                     g }| r|j                  dt        f       n|j                  d       t        |      r|j                  dt        |      f       n|j                  d       ddt	        j
                  |      fS )Nr  rF   markr   r3   re   )r   SYMBOL_REPLAYboolr   r9   r:   )r  r  r   s      r   format_right_indicatorsr  v  sp    
 /1J8]34#F|6=#89:$Auzz*---r   i   )maxsizerender_mode	is_replayrequest_methodrequest_schemerequest_hostrequest_pathrequest_urlrequest_http_versionrequest_timestamprequest_is_push_promiseresponse_coderesponse_reasonresponse_content_lengthresponse_content_typeerror_messagec                    g }| t         j                  u r/|j                  t        t	        j
                  |
      d             n9|r|j                  t        dd             n|j                  t        dd             t        j                  |d      }|j                  t        ||             |r|j                  t        dd             t        d |D              t        |      z   d	z
  }|	d
vr|d|	z   z  }|r|sd}n	|s|rd}nd}| t         j                  u r(|j                  t        j                  ||fg             n|j                  t        ||             |j                  t        ||             d|t        j                  d      fg}|r3|rd}nd}|xs t        j                  |dz  d      }|j                  t        t        |             |j                  t        t!        |      |             |r-| t         j                  u r|j                  t        ||             |r-t#        |      \  }}|j                  t        ||xs |             |rt%        |      \  }}n|dk(  rd}d}nd}d}|j                  t        ||xs |             |rvt'        |      \  }}|j                  t        ||xs |             nH|rF|j                  t        t        d             |j                  t        j                  d|fg             t        j(                  t        j*                  |d	      t        j*                  |d	      g      S )N	highlightr   r   r   method_otherPUSH_PROMISEmethod_http2_pushc              3   &   K   | ]	  }|d      yw)r   Nrp   r-   xs     r   r/   z(format_http_flow_list.<locals>.<genexpr>  s     )qt)s   r   )zHTTP/1.0zHTTP/1.1rF   r   r   titler  r  r3   r2   r   
code_otherr   [no content][content missing]r   r4   )ri   ro   r   rC   r   r   HTTP_REQUEST_METHOD_STYLESr}   sumr,   r9   r:   r   r  HTTP_RESPONSE_CODE_STYLESYMBOL_RETURNr   r   r   r   Piler<   ) r
  r   r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r  reqmethod_stylepreamble_len	url_stylerespr   status_stylectct_styler   
size_styledur	dur_styles                                    r   format_http_flow_listr6    s   . Cj+++

4../@A;OPJJtD'*+JJtD'*+-11..QLJJtNL12

4(;<=)S))CH4q8L#;;s111=		-		j+++

5::	;789:

?;	:;JJ&iGHlEJJrN34DEE 
 8 < <S ,!
 	D56D]+\:;{j.C.CCKK_l;< 34IJLBKKR!2(34"*+BCD*$)!DJ&DJDu2
34,X6NCKKS%"4956	D01EJJ- 89:;::	s	*EMM$A,NO r   c           
      d   t        |||
      g}|r|sd}nd}|xs t        j                  |d      }|j                  t	        t        |j                         d      |             |rd}n|xs t        j                  |d      }|j                  t	        t        |d      |             |j                  d	d
t        |t        |      d      f       |j                  d	dt        |t        |      d      f       |r|rd}nd}|rWt        |      }|xs t        j                  |dz  d      }|r|rt        |      \  }}|xs |}n)|rd}d}n"|dk(  rd}d}nd}d}n|r	d}d}|}d}nd}d}d}d}|j                  t	        t        |d      |             |j                  d	dt        ||d      f       |r8t        |      \  }}|j                  t	        t!        |d      |xs |             n'|j                  ddt#        j$                  d      f       |r8t'        |      \  }}|j                  t	        t!        |d      |xs |             n'|j                  ddt#        j$                  d      f       |j                  t)        t+        |      |             t#        j,                  |dd      S )Nr   r   r   r   r2   r   rg   r  r  rf   weightg      ?r         ?r   r   r#  content_noner   r$  r%  errr   r   re   g333333?r3   r"  r      r5   	min_width)r  r   r}   r   rC   rw   upperr&  r   r   r   r   r(  r   r   r   rz   r9   r:   r   r  r  r<   ) r
  r   r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r  itemsrequest_stylescheme_styler,  response_stylestatusr0  contentcontent_styler   r3  duration_prettyduration_styles                                    r   format_http_flow_tablerJ    s   0 	@Q	
E =# UM$5$5nn$UL	LLf^113Q7FG*$ 
(B(F(FN)
 
LLf^Q/>?	LL,l(CWM	
 
LL	3lL4NPVWX }$]#% 
)A)E)ES ,*
 #'<%=>S%T"G]*;mM$G*M$)$G*M)G*M	 	LLfVQ'67	LL(D/'='"RST&'>?jT(4+^-IzJKgq%**R.12*9(*C'/1-~/OP	
 	gq%**R.12	LL	?	
 ==A<<r   timestamp_startprotocol
total_sizec        
   	         t        j                  |       dt        j                  |       }
g }| t        j                  t        j                  fv r|j                  t        |d|             n9|r|j                  t        dd             n|j                  t        dd             | t        j                  u r;|j                  t        t        |j                         d      t        |                n0|j                  t        |j                         t        |                |j                  dd	t        |
d
d      f       |	r|j                  dd	t        |	dd      f       |r4t        |      \  }}|j                  t        t        |d      |             n'|j                  ddt        j                  d      f       |r4t!        |      \  }}|j                  t        t        |d      |             n'|j                  ddt        j                  d      f       |j                  t#        d|             t        j$                  t        j&                  |dd      g      S )Nz <-> Fr8  r   r   r   rg   r9  r:  r   r   r   r3   r2   r"  r   r=  r>  )r   format_addressri   rm   ro   r   r  rC   rw   r@  r   r   r   rz   r9   r:   r   r  r*  r<   )r
  r   rK  r  rL  client_addressserver_addressrM  r   r  connrA  r   r3  rH  rI  s                   r   format_message_flowrS  _  s    "">2359M9Mn9]8^_DEz'')>)>??"Uo	
 LLdG,-LLdG,-j&&&T&!115}X7NOPT(..*M(,CDE	LL(Cvv!FGHh_]GV%TUV&z2jT(4+Z89gq%**R.12*9(*C'T(?A6GHgq%**R.12	LL(fEF::u}}URHIJJr   op_codedomaintyperesponse_code_http_equivanswerc           
      h   g }| t         j                  t         j                  fv r|j                  t	        |||             n|j                  t        |rdndd             |rdnt        d   }d| }| t         j                  u rt        |d      }|j                  t        ||             |j                  d	d
t        |t        |      d      f       |j                  t        dt        |d      d t        |       z   dz   d             |j                  d	d|t        |dn|sdn|d      nt        |d      f       |rdnt        j                  |
dz  d      }|j                  t        t        |	dn|	d      |             |r4t        |      \  }}|j                  t        t        |d      |             n'|j                  ddt!        j"                  d      f       |j                  t%        t'        |      |             t!        j(                  t!        j*                  |dd      g      S )Nr8  r   r   r   r   r   zDNS r   r9  g      ?r   (rg   z) =r   r   z...r   r   r   r#  r2   	   r3   r"  r=  r>  )ri   rm   ro   r   r  rC   r   rw   r   r   r,   r   r(  r}   r   rz   r9   r:   r  r  r*  r<   )r
  r   r   r  r  rT  r  rU  rV  r  rW  rX  r  r   rA  rC  tr0  rH  rI  s                       r   format_dns_flowr]    s   $ Ez'')>)>??"[DU	
 	T'$tW=>$/=]55IL
wiAj&&&1bM	LLa&'	LL(Cv}V7Lg!VWX	LLcF4OKc$i885@&IJ	LL
 !(  #^EFPV %]G<
	
  	%))*Bc*I<X 
 
LLV-/B]AFU *9(*C'T(?A6GHgq%**R.12	LL	?	
 ::u}}URHIJJr   FT)
hostheaderr   fr^  c                0   | j                   r| j                   j                  }nd}t        | t        t        f      rd}| j
                  D ]  }|t        |j                        z  } | j
                  r1| j
                  d   j                  | j                  j                  z
  }nd}| j                  j                  dk(  rd}n| j                  }t        ||| j                  j                  | j                  || j                  j                  | j                   j"                  |||
      S t        | t$              r| j&                  r| j&                  j                  | j(                  j                  z
  }t*        j,                  j/                  | j&                  j0                        }	t*        j,                  j3                  | j&                  j0                        }
dj5                  d | j&                  j6                  D              }nd}d}	d}
d}t9        ||| j:                  | j                  | j<                  t*        j>                  j/                  | j(                  j@                        | j(                  j                  | j(                  jB                  r#| j(                  jB                  d   jD                  nd	| j(                  jB                  r@t*        jF                  j/                  | j(                  jB                  d   j                        nd	|	|
|||
      S t        | tH              rd| j:                  }| j&                  r| j&                  jJ                   t        | j&                  jJ                        }nd}| j&                  jL                  }| j&                  jN                  }| j&                  jP                  jS                  d      }| j&                  jT                  r9tW        | j&                  jT                  | j(                  j                  z
  dg      }nd}n
d}d}d}d}d}| j(                  jX                  }| jZ                  |dk(  rd}n|dk(  rd}|t\        j^                  t\        j`                  fv rtb        }ntd        } |d$i d|d|d| j                  d| j<                  d| j(                  jf                  d|d|r| j(                  jh                  n| j(                  jj                  d| j(                  jl                  d|r| j(                  jn                  n| j(                  jp                  d| j(                  jr                  d| j(                  j                  dd| jt                  v d|d|d|d |d!|d"|d#|S tw               )%a  
    This functions calls the proper renderer depending on the flow type.
    We also want to cache the renderer output, so we extract all attributes
    relevant for display and call the render with only that. This assures that rows
    are updated if the flow is changed.
    Nr   r   QUICrV   )
r
  r   rK  r  rL  rP  rQ  rM  r   r  z, c              3   2   K   | ]  }t        |        y wr+   )r   r  s     r   r/   zformat_flow.<locals>.<genexpr>  s     B!s1vBs   r2   )r
  r   r   r  r  rT  r  rU  rV  r  rW  rX  r  r   zcontent-typerQ   rS   rP   rR   r
  r   r  r  r  r  r  r  r  r  r  r  zh2-pushed-streamr   r  r  r  r  r   r  rp   )<r   msgr   r   r   messagesr,   rF  r   client_connrK  tls_versionrV  rS  r  peernameserver_connaddressr	   responserequestr   response_codesto_strr  http_equiv_status_codejoinanswersr]  r   r  op_codesrT  	questionsnametypesr
   raw_contentstatus_codereasonheadersr}   timestamp_endr6   scheme	websocketri   rn   ro   r6  rJ  methodpretty_hostr   r   
pretty_urlr   http_versionmetadataNotImplementedError)r_  r
  r^  r   r  rM  messager   rL  response_code_strrW  rX  r   r  r  r  r  rz  render_funcs                      r   format_flowr    s    	ww!gw'(
zz 	/G#goo..J	/::zz"~//!--2O2OOHH==$$.HvvH"#MM9988==11==00!'
 	
 
Aw	::zz++aii.A.AAH,/,>,>,E,E

((- (+'9'9'P'P

((($ YYBqzz/A/ABBFH $'($F#88kkLL''		(9(9:ii1123))2E2E199&&q)..2yy"" !!!))"5"5a"8"="=>+%='!
 	
$ 
Ax	 mm::zz%%1*-ajj.D.D*E'*.'()

(>(>M*+***;*;O$%JJ$6$6$:$:>$J!zz''ZZ--		0I0II1M  &*# M"O$(!H!!;;" 6!:??J,A,ABB/K0K 
#

 88
 kk	

 99++
 "
 3=..!))..
 
 1;		,,		
 "#!7!7
  ii77
 %7!**$D
 $
 (
 ,
  %<!
" #8#
$ %
& ('
 	
. "##r   )r   r   )r   r   r   r   )Lenumr   platformcollections.abcr   	functoolsr   
urwid.utilr9   publicsuffix2r   r   	mitmproxyr   r   mitmproxy.dnsr	   mitmproxy.httpr
   mitmproxy.tcpr   mitmproxy.udpr   mitmproxy.utilsr   r   IS_WINDOWS_OR_WSLr   r"   r8   tupler   r;   r   listr<   r?   r:   rC   r   detected_encodingr  r)  r~   	SYMBOL_UPSYMBOL_DOWNru   SYMBOL_FROM_CLIENTSYMBOL_TO_CLIENTr   r&  r(  Enumri   rw   rz   r   r   r   r   r   r   r   r   floatr   r   r  r  r  r6  rJ  rS  r]  Flowr  rp   r   r   <module>r     s      $   ! !   ! # ! ! ! ! $8$$&&J)7Hx7H7H7J*J 
 
 	&eCell!::;<&& & 	&
 
%--&R6C 6s 6uS#uzz%9: 6
 	::MMKIKO!MMKIKO 
	   	 , ,Fc F3 F3 FM MS MS M# # 0KELL 0KfD
 $ 4$C $N3 5c? ,"e "c3h "3 5c? /t /$ /5 /.. ." 3^^ ^ 	^
 ^ ^ ^ ^ ^ ^ ^ ^ "^ ^ :^  4Z!^" !4Z#^$ :%^& dl'^( :)^* \\+^ ^B 3r=r= r= 	r=
 Tzr= r= r= r= r= r= r= r= "r= r= :r=  4Z!r=" !4Z#r=$ :%r=& dl'r=( :)r=* \\+r= r=j 34K4K 4K 	4K
 4K 4K 4K dl4K :4K 4Kn 3FKFK FK 	FK
 FK TzFK FK FK FK FK :FK "FK $JFK FK dlFK FKZ G$yyG$ G$ 	G$
 G$ \\G$r   