
    ^hE                        S r SSKJr  SSKrSSKJr  SSKJr  SSKrSSK	r
SSKJrJr  SSK	JrJrJrJrJrJr  S r " S	 S
\5      rS\S\S\S\S\SS4S jr/ q\R8                  " 5       S 5       rS rS rS r S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S  r+S! r,S" r-S# r.S$ r/S% r0S& r1S' r2S( r3S) r4S* r5S+ r6S, r7S- r8S. r9S/ r:S0 r;S1 r<S2 r=S3 r>S4 r?S5 r@S6 rAS7 rBS8 rCS9 rDS: rEg);zTest interact and interactive.    )patchN)EnumOrderedDict)
TraitErrorFloat)interactinteract_manualinteractiveinteractionOutputWidgetc                      g N )kwargss    c/home/james-whalen/.local/lib/python3.13/site-packages/ipywidgets/widgets/tests/test_interaction.pyfr              c                        \ rS rSrSrSrSrSrg)Color   r         r   N)__name__
__module____qualname____firstlineno__redgreenblue__static_attributes__r   r   r   r   r      s    
CEDr   r   abcdereturnc                     g r   r   r$   r%   r&   r'   r(   s        r   gr,   !   r   r   c                      / q g r   )	displayedr   r   r   clear_displayr/   &   s	     Ir   c                  .    [         R                  U 5        g r   )r.   extend)argss    r   record_displayr3   +   s    Tr   c                    UR                  5        H  u  p#US:X  a  U R                  UL d   eM  [        X5      nXC:X  d,   SR                  U R                  R                  X$U5      5       e[        U[        [        45      (       d  Mw  [        U5      n[        U5      nXVL a  M   SR                  U R                  R                  X%U5      5       e   g)z$Check a single widget against a dictclsz{}.{} = {!r} != {!r}ztype({}.{}) = {!r} != {!r}N)	items	__class__getattrformatr   
isinstanceintfloattype)wr'   attrexpectedvaluetvtes          r   check_widgetrD   2   s    '')5=;;(***A$E$p&<&C&CAKKDXDXZ^go&pp$ %#u..%[(^xh!=!D!DQ[[EYEY[_eg!hhx $r   c                     0 nU R                    H(  n[        U[        5      (       a  M  X2UR                  '   M*     UR	                  5        H  u  pEXB;   d   e[        X$   40 UD6  M     g)z*Check that widgets are created as expectedN)childrenr:   r   descriptionr6   rD   )	containerto_checkwidgetsr>   keyr'   s         r   check_widget_childrenrL   A   s`     G!V$$%&AMM"   .."~~W\'Q' #r   c                  v    Sn [        [        U S9nUR                  S   n[        U[        R
                  SU S9  g Nhellor$   r   r$   r5   rG   rA   r   r   rF   rD   rJ   Textr$   r&   r>   s      r   test_single_value_stringrU   N   s7    AAA	

1ALLr   c                      S H:  n [        [        U S9nUR                  S   n[        U[        R
                  SU S9  M<     g )N)TFrP   r   r$   rQ   )r   r   rF   rD   rJ   CheckboxrT   s      r   test_single_value_boolrX   X   s>    QJJqMQ  	
 r   c                      S Ha  n U (       d  SnSnOU S:  a	  U * nSU -  nOSU -  nU * n[        [        U S9nUR                  S   n[        U[        R
                  SU UUSS	S
9  Mc     g )N)g      @      ?g              r[   rZ   r      rP   r$   皙?Tr5   rG   rA   minmaxstepreadout)r   r   rF   rD   rJ   FloatSliderr$   expected_minexpected_maxr&   r>   s        r   test_single_value_floatrg   b   s~    #LLU2LQ3LQ3L2LQJJqMQ##	
 $r   c                     S H|  n U (       d  SnSnOU S:  a	  U * nSU -  nOSU -  nU * n[        [        U S9n[        UR                  5      S:X  d   eUR                  S   n[	        U[
        R                  SU UUSSS	9  M~     g )
N)r      r   r   r   r\   rP   r   r$   Tr^   )r   r   lenrF   rD   rJ   	IntSliderrd   s        r   test_single_value_intrm   y   s    LLU2LQ3LQ3L2LQ1::!###JJqMQ!!	
 r   c            	          / SQn U S   n[        [        U S9n[        UR                  5      S:X  d   e[	        [
        R                  U[        U 5      [        U 5      [        U 5      S9n[        X#S9  g )N)rO   thereguyr   lisr   r5   rA   options_options_labels_options_values	r   r   rk   rF   dictrJ   DropdowntuplerL   valuesfirstr&   r'   s       r   test_list_strr~      sg    &F1IEA6"Aqzz?afff	A !#r   c            	          / SQn U S   n[        [        U S9n[        UR                  5      S:X  d   e[	        [
        R                  U[        U 5      [        S U  5       5      [        U 5      S9n[        X#S9  g )Nr\   r   r   r   rq   r   c              3   8   #    U  H  n[        U5      v   M     g 7fr   )str).0vs     r   	<genexpr> test_list_int.<locals>.<genexpr>   s     5fc!fffs   rs   rw   r{   s       r   test_list_intr      sn    F1IEA6"Aqzz?af5f55f	A !#r   c                      / SQn U S   S   n[        [        U S9n[        UR                  5      S:X  d   e[	        [
        R                  U[        U 5      SSS9n[        X#S9  g 	N)r\   ,  )r   d   )r      r   r   rq   r   312r   r   r   rs   rw   r{   s       r   test_list_tupler      sc    +F1IaLEA6"Aqzz?af''	A !#r   c                      S H?  n [         R                  " [        5         [        U 5        [	        [
        U S9nS S S 5        MA     g ! , (       d  f       MS  = f)N)r   )tup)pytestraises
ValueErrorprintr   r   )badr&   s     r   test_list_tuple_invalidr      s@     ]]:&#JA3'A '& '&s   A
A	c                  h   [        SS9[        SS[         S94 H  n [        [        U S9nUR                  S   n[        [        R
                  S[        [        U R                  5       5      5      U [        U R                  5       5      [        U R                  5       5      S9n[        U40 UD6  M     g )	Nri   rP   r%   )r$   r%   r&   )r'   r   r'   )r5   rG   rA   rt   ru   rv   )rx   r   r   rF   rJ   ry   nextiterr|   rz   keysrD   )r'   r&   r>   checks       r   	test_dictr      s    q	qC4  QJJqM  tAHHJ'(!!&&(O!!((*-
 	Q % r   c                      SSK Jn   / SQnUS   S   nU " U5      n[        [        US9n[	        UR
                  5      S:X  d   e[        [        R                  UUSSS	9n[        XES9  g )
Nr   r   r   r   rq   r   r   r   rs   )
collectionsr   r   r   rk   rF   rx   rJ   ry   rL   )r   r6   r}   r|   r&   r'   s         r   test_ordereddictr      sl    '*E!HQKEFA6"Aqzz?a''	A !#r   c                      S n [        U " 5       5      n[        [        U " 5       S9n[        UR                  5      S:X  d   e[        [        R                  USSSS9n[        X#S9  g )Nc               3   $   #    Sv   Sv   Sv   g 7f)Nr\   r   r   r   r   r   r   yield_values#test_iterable.<locals>.yield_values   s     s   rq   r   r   r   rs   )	r   r   r   rk   rF   rx   rJ   ry   rL   )r   r}   r&   r'   s       r   test_iterabler      sb      EA<>*Aqzz?a'!	A !#r   c                      / SQn U S   S   n[        [        [        U 5      S9n[        UR                  5      S:X  d   e[        [        R                  U[        U 5      SSS9n[        X#S9  g r   )
r   r   r   rk   rF   rx   rJ   ry   rz   rL   r{   s       r   test_iterable_tupler      sg    +F1IaLEA4<(Aqzz?af''	A !#r   c                     SSK Jn   SSKJn   " S SU 5      n/ SQnUS   S   nU" U5      n[	        [
        US9n[        UR                  5      S	:X  d   e[        [        R                  U[        U5      S
SS9n[        XgS9  g )Nr   )Mappingr   c                   2    \ rS rSrS rS rS rS rS rSr	g)	!test_mapping.<locals>.TestMappingi  c                     Xl         g r   r|   )selfr|   s     r   __init__*test_mapping.<locals>.TestMapping.__init__  s     Kr   c                     [         er   NotImplementedErrorr   s    r   __getitem__-test_mapping.<locals>.TestMapping.__getitem__	      %%r   c                     [         er   r   r   s    r   __len__)test_mapping.<locals>.TestMapping.__len__  r   r   c                     [         er   r   r   s    r   __iter__*test_mapping.<locals>.TestMapping.__iter__  r   r   c                     U R                   $ r   r   r   s    r   r6   'test_mapping.<locals>.TestMapping.items  s    ;;r   r   N)
r   r   r   r   r   r   r   r   r6   r#   r   r   r   TestMappingr     s    	!	&	&	&	r   r   r   r   rq   r   r   r   rs   )collections.abcr   r   r   r   r   rk   rF   rx   rJ   ry   rz   rL   )r   r   r   r6   r}   r|   r&   r'   s           r   test_mappingr     s    ''
g 
 +E!HQKEFA6"Aqzz?ae''	A !#r   c                    [         R                  " [        S[        5         [	        SS9S 5       nS S S 5        [        [        5      S:X  d   e[        S   R                  S   n[        U[        R                  SS9  g ! , (       d  f       NS= f)Ndisplayri   rP   c                     g r   r   rP   s    r   foo!test_decorator_kwarg.<locals>.foo"      r   r   r   r5   rA   r   objectr   r3   r	   rk   r.   rF   rD   rJ   rl   r/   r   r>   s      r   test_decorator_kwargr      st    	k9n	=	A	 
	 
> y>Q!a A 
>	=s   A>>
Bc                 J    " S S5      nU" 5       n[         R                  " [        S[        5         [	        UR
                  SS9nS S S 5        [        [        5      S:X  d   e[        S   R                  S   n[        U[        R                  SS	9  g ! , (       d  f       NS= f)
Nc                       \ rS rSrS rSrg))test_interact_instancemethod.<locals>.Fooi-  c                     [        U5        g r   )r   )r   xs     r   show.test_interact_instancemethod.<locals>.Foo.show.  s	    !Hr   r   N)r   r   r   r   r   r#   r   r   r   Foor   -  s    	r   r   r   )r   
   r   r   r   ri   r   )r   r   r   r3   r	   r   rk   r.   rF   rD   rJ   rl   )r/   r   r   r,   r>   s        r   test_interact_instancemethodr   ,  s      	A	k9n	=QVVv& 
>y>Q!a A	 
>	=s   B
B"c                    [         R                  " [        S[        5         [        SS j5       nS S S 5        [        [        5      S:X  d   e[        S   R                  S   n[        U[        R                  SS9  g ! , (       d  f       NS= f)Nr   defaultc                     g r   r   rP   s    r   r   #test_decorator_no_call.<locals>.foo>  r   r   r   r   r   r   r   r   r   r3   r	   rk   r.   rF   rD   rJ   rS   r   s      r   test_decorator_no_callr   <  sn    	k9n	=		 
	 
> y>Q!a ALL 
>	=s   A==
Bc                     SS jn[         R                  " [        S[        5         [	        U5      nS S S 5        [        [        5      S:X  d   e[        S   R                  S   n[        U[        R                  SS9  g ! , (       d  f       NS= f)Nr   c                     g r   r   rP   s    r   r   test_call_interact.<locals>.fooI      r   r   r   r   r   r   r   r/   r   ifoor>   s       r   test_call_interactr   H  sh    	k9n	=} 
>y>Q!a ALL	 
>	=s   A??
Bc                    SS jn[         R                  " [        S[        5         [	        U5      nS S S 5        [        [        5      S:X  d   e[        S   R                  S   n[        U[        R                  SS9  [         R                  " [        S[        5         SUl        S S S 5        [        [        5      S:X  d   eg ! , (       d  f       N= f! , (       d  f       N5= f)	Nr   c                     g r   r   rP   s    r   r   <test_call_interact_on_trait_changed_none_return.<locals>.fooU  r   r   r   r   r   r   calledr   r   r   r   r3   r	   rk   r.   rF   rD   rJ   rS   rA   r   s       r   /test_call_interact_on_trait_changed_none_returnr   T  s    	k9n	=} 
>y>Q!a ALL 
k9n	= 
>y>Q 
>	= 
>	=s   CC
C
C#c                    SS jn[         R                  " [        S[        5         [	        USS9nS S S 5        [        [        5      S:X  d   e[        S   R                  S   n[        U[        R                  SS9  g ! , (       d  f       NS= f)	Nc                     g r   r   rP   s    r   r   &test_call_interact_kwargs.<locals>.food  r   r   r   r   rP   r   r   r   r   r   r   s       r   test_call_interact_kwargsr   c  sm    	k9n	=r" 
>y>Q!a A	 
>	=s   A>>
Bc                 R  ^ 0 m[         R                  " [        S[        5         [        SU4S jj5       nSSS5        [        [        5      S:X  d   e[        S   R                  S   n[        U[        R                  SS9  W" S	5      nUS	:X  d   eTS
   S	:X  d   e[         R                  " [        S[        5         SUl        SSS5        TS
   S:X  d   e[        [        5      S:X  d   eUR                  [        S   :X  d   eg! , (       d  f       N= f! , (       d  f       NY= f)z*test calling @interact decorated functionsr   r   c                    > U TS'   U $ Nr$   r   r$   r'   s    r   r   0test_call_decorated_on_trait_change.<locals>.foos      AcFHr   Nr   r   r   r   rO   r$   r   r\   r   r   r/   r   r>   r$   r'   s       @r   #test_call_decorated_on_trait_changer   o  s    
A	k9n	=		 
	 
>
 y>Q!a ALL
 	GA<<S6W 
k9n	= 
>S6Xy>Q77im###+ 
>	=" 
>	=s   D=D
D
D&c                 X  ^ 0 m[         R                  " [        S[        5         [	        SS9SU4S jj5       nSSS5        [        [        5      S:X  d   e[        S   R                  S   n[        U[        R                  SS	9  W" S
5      nUS
:X  d   eTS   S
:X  d   e[         R                  " [        S[        5         SUl        SSS5        TS   S:X  d   e[        [        5      S:X  d   eUR                  [        S   :X  d   eg! , (       d  f       N= f! , (       d  f       NY= f)z3test calling @interact(foo=bar) decorated functionsr   kwargrP   c                    > U TS'   U $ r   r   r   s    r   r   7test_call_decorated_kwargs_on_trait_change.<locals>.foo  r   r   Nr   r   r   r   rO   r$   r   r\   r   r   r   r   s       @r   *test_call_decorated_kwargs_on_trait_changer    s   
A	k9n	=	G		 
	 
>
 y>Q!a ALL
 	GA<<S6W 
k9n	= 
>S6Xy>Q77im###+ 
>	=" 
>	=s   D
 D

D
D)c                      [        [        [        R                  " S5      SS9n [	        U R
                  5      S:X  d   eU R
                  S   n[        U[        R                  SSS9  g )Nri   text)r$   r%   r   r   r%   r5   rA   rG   )r   r   rJ   fixedrk   rF   rD   rS   r&   r>   s     r   
test_fixedr    sS    Aq)V4Aqzz?a	

1ALLr   c                  r    [        [        SS9n U R                  S   n[        U[        R
                  SSS9  g )Nr  r%   r   r%   r  rR   r  s     r   test_default_descriptionr    s2    A A	

1ALLr   c                     ^ 0 mU4S jn [        U [        R                  " SSS9S9nUR                  S   n[	        U[        R                  SSS9  SUl        TS	S0:X  d   eg )
Nc                  H   > TR                  5         TR                  U 5        g r   )clearupdate)r   r'   s    r   record_kwargs.test_custom_description.<locals>.record_kwargs  s    			r   r  r   )rA   rG   r
  r   r  zdifferent textr%   )r   rJ   rS   rF   rD   rA   )r  r&   r>   r'   s      @r   test_custom_descriptionr    sg    
A 	MW\\E%RSA	

1ALL
 AG&''''r   c                       " S S[         5      n [        R                  " [        SS9   [	        [
        U " 5       S9  SSS5        g! , (       d  f       g= f)z8Test that passing in a non-value widget raises an error c                   &    \ rS rSrSr\" 5       rSrg)2test_raises_on_non_value_widget.<locals>.BadWidgeti  z*A widget that contains a `value` traitlet r   N)r   r   r   r   __doc__r   rA   r#   r   r   r   	BadWidgetr    s    9r   r  z.* not a ValueWidget.*)matchr
  N)r   r   r   	TypeErrorr   r   )r  s    r   test_raises_on_non_value_widgetr    s8    F  
y(@	AA% 
B	A	As   A
Ac                      [         R                  " SS9R                  [        5      n U R                  S   n[        U[        R                  S9  g )NTmanualr   )r5   )r	   rt   widgetr   rF   rD   rJ   Buttonr  s     r   test_interact_manual_buttonr     s8    %,,Q/A	

1A'r   c                      Sn S n[         R                  " SS9" USS9R                  nSUR                  S   l        U S:X  d   eg )Nr   c                     WS-  ng )Nr   r   )testarg	callcounts     r   calltest-test_interact_manual_nocall.<locals>.calltest  s    Q	r   Tr  ri   )r#  r   )r	   rt   r  rF   rA   )r$  r%  r&   s      r   test_interact_manual_nocallr'    sE    I%h:AAAAJJqM>>r   c                      [         R                  " [        5      n U R                  5         [        R                  " [        5      n U R                  5         g r   )r	   r  r   r  r
   )r>   s    r   test_interact_callr)    s2    AHHJq!AHHJr   c                     S n [         R                  " SS9R                  SS9" U SS9R                  nUR                  S:X  d   e[        R                  " SS9R                  5       " SS9R                  U 5      nUR                  S:X  d   e[        SS9" 5       R                  SS9" U 5      R                  nUR                  S:X  d   eg )Nc                     U $ r   r   r   s    r   r    test_interact_options.<locals>.f  s    r   Fr  T   r   )r	   rt   r  r  r
   )r   r>   s     r   test_interact_optionsr.    s    &..d.;ADKKA88tu-557"=DDQGA88u2   -a077A88tr   c                      [         R                  " [        5         [        R                  " SS9  S S S 5        g ! , (       d  f       g = f)Nr   )r   )r   r   r   r	   rt   r   r   r   test_interact_options_badr0    s(    	z	"U# 
#	"	"s	   9
Ac                     [         R                  n U " SSSS9n[        XSSSS9  SUl        SUl        [        XSSSS9  SUl        SUl        SUl        S	Ul        [        XSSSS9  S
Ul        [        XS
SSS9  SUl        [        XSSSS9  SUl        [        XSSSS9  [        R                  " [        5         SUl        S S S 5        [        R                  " [        5         SUl        S S S 5        U " SSSS9n[        USSSS9  U " SSSS9n[        USS9  [        R                  " [        5         U " SSS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       Np= f! , (       d  f       g = f)N)r      r      rA   r_   r`   r5   rA   r_   r`   r\   )r   r\   r   r2  )r   r   )ri   r3  )r   r3     r   r_   r`   rA   r   r   )}      rA   r   r_   r`   )rJ   IntRangeSliderrD   upperr`   r_   lowerrA   r   r   r   )irswr>   s     r   test_int_range_logicr@    sK   !!D6qa(AFq9AGAEFq9AEAEAGAGFq9AGFq9AGFq9AGFq9	z	" 
#	z	" 
# 	(Aq/#Z0A*%	z	" 
#	" 
#	"	"	" 
#	"s$   :E$E4E'
E
E$'
E5c                     [         R                  n U " SSSS9n[        XSSSS9  SUl        SUl        SUl        SUl        [        XSSSS9  SUl        [        XSSSS9  S	Ul        [        XS	SSS9  SUl        [        XS
SSS9  [        R                  " [        5         SUl        S S S 5        [        R                  " [        5         SUl        S S S 5        U " SSSS9n[        USSS9  [        R                  " [        5         U " SSS9  S S S 5        g ! , (       d  f       Nv= f! , (       d  f       N]= f! , (       d  f       g = f)N)皙?皙?r[   333333?r4  r5  rB  rC  )r[   r]   )g      ?rD  )rB  rD  gffffff?gr   r\   )g@g      @r7  g       @g      @r;  r]   )rJ   FloatRangeSliderrD   r_   r`   r>  r=  rA   r   r   r   )frswr>   s     r   test_float_range_logicrG    s   ##D8,AH""=AEAEAGAGH""=AGH""=AGH""=AGH""=	z	" 
#	z	" 
# 	,A#	z	" 
#	" 
#	"	"	" 
#	"s$    D
D)D:
D&)
D7:
Ec                     [         R                  n U " 5       n[        U[        5       S9  [        R
                  " [        5         SUl        S S S 5        [        U[        5       S9  U " S/S/S9n[        XSSS9  [        R
                  " [        5         UR                  S-   Ul        S S S 5        [        USS9  UR                  S	-   Ul        [        US
SS9  SUl        [        USS9  SS0Ul        [        USS0S9  SUl        [        R
                  " [        5         SUl        S S S 5        [        USS9  g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N;= f)Nr:  )r   r   r   r   )rt   rA   )r   )rI  )r5   rA   rt   )r   r   )rI  rJ  r   )r   r   )rt   )	rJ   SelectMultiplerD   rz   r   r   r   rA   rt   )smwr>   s     r   test_multiple_selectionrM  5  s$   

 
 C 	A%'" 
z	" 
#%'" 	VHQC(A4; 
z	"''D. 
#$ 		I%AIO26 AG&! AAIQqE" AI	z	" 
#D"; 
#	" 
#	"$ 
#	"s$   D<E!E<
E

E
E,c                  v    Sn [        [        U S9nUR                  S   n[        U[        R
                  SU S9  g rN   )r   rx   rF   rD   rJ   rS   rT   s      r   test_interact_noinspectrO  \  s7    ADAA	

1ALLr   c                     ^ SSK Jn   SSKJm   " U4S jSU 5      nU" 5       n[	        S US9nUR                  5         UR                  S:X  d   eg )	Nr   )ValueWidgetUnicodec                   >   > \ rS rSr Y " S5      r Y " 5       rS rSrg)*test_get_interact_value.<locals>.TheAnswerij  	TheAnswerc                     g)N*   r   r   s    r   get_interact_value=test_get_interact_value.<locals>.TheAnswer.get_interact_valuem  s    r   r   N)r   r   r   r   _model_namerG   rY  r#   rR  s   r   rV  rU  j  s    k*i	r   rV  c                     U $ r   r   r   s    r   <lambda>)test_get_interact_value.<locals>.<lambda>p  s    ar   r]  rX  )ipywidgets.widgetsrQ  	traitletsrS  r   r  result)rQ  rV  r>   r&   rS  s       @r   test_get_interact_valuerc  g  sC    .!K 
 	AK1%AHHJ88r>>r   c            	         SSK Jn Jn  SS KnSS KnU " 5       nUR
                  " SS9n[        [        R                  R                  [        R                  R                  [        R                  R                  [        5      5      SS5      5       nUR                  U5      nS S S 5        UR                  UW5        g ! , (       d  f       N!= f)Nr   )rl   r   T)drop_defaultsz../../zstate.schema.json)r`  rl   r   json
jsonschemaget_manager_stateopenospathjoindirnamerealpath__file__loadvalidate)rl   r   rf  rg  sstater   schemas           r   test_state_schemaru  t  s    4A$$48E	bggll277??277+;+;H+EFRef	gkl1 
hv& 
h	gs   B==
Cc                     [        [        5      n [        U R                  5      S:X  d   e[	        U S[
        R                  0S[
        R                  0S[
        R                  0S[
        R                  0[
        R                  [        R                  [        R                  [        R                  S.S[        R                  [        R                  [        R                  4S.S9  g )Nr3  r5   )r    r!   r"   )r5   rt   ru   rv   r+   )r   r,   rk   rF   rL   rJ   rS   rW   IntText	FloatTextry   r   r    r!   r"   )r&   s    r   test_type_hintsry  ~  s    AAqzz?a	',,
'""
#'//
"'##
$##yy


  8 %		5;;

C	
r   )Fr  unittest.mockr   rj  enumr   r   r   r   
ipywidgetsrJ   ra  r   r   r	   r
   r   r   r   r   r   r   r   boolr;   r<   r,   r.   fixturer/   r3   rD   rL   rU   rX   rg   rm   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.  r0  r@  rG  rM  rO  rc  ru  ry  r   r   r   <module>r     sT   %  	  #   '5 5	D 	 	 	# 	% 	E 	d 	 	 i
(

.
0$$$(!"$ $"$$:
 


$4$8( &(

$D:%#N'r   