o
    @Bi2                     @   s  d dl mZ d dlmZ d dlmZ d dlmZmZ d dlZG dd de	Z
G dd	 d	ejZG d
d dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG d d! d!ejZG d"d# d#ejZG d$d% d%ejZG d&d' d'ejZG d(d) d)ejZG d*d+ d+ejZG d,d- d-ejZG d.d/ d/ejZG d0d1 d1ejZ G d2d3 d3ejZ!dS )4    )absolute_import)role)message)ProtocolErrorInvalidUriErrorNc                   @   s   e Zd ZdS )FooN)__name__
__module____qualname__ r   r   _/var/www/html/Trade-python/venv/lib/python3.10/site-packages/autobahn/wamp/test/test_message.pyr   $   s    r   c                   @      e Zd Zdd Zdd ZdS )TestIdsc                 C       dD ]}|  |t| qd S )N)r         i l          )assertEqualr   check_or_raise_idselfvalr   r   r   test_valid_ids*   s   zTestIds.test_valid_idsc                 C   s:   ddd dddddt  dd	g i fD ]
}| ttj| qd S )
Nl              abc abcg?FT)r   assertRaisesr   r   r   r   r   r   r   test_invalid_ids.   s   $zTestIds.test_invalid_idsN)r   r	   r
   r   r   r   r   r   r   r   (   s    r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestUrisc                 C   r   )N)	com.myapp.topic1com.myapp.product.123com.myapp.product.1.deleteCom-star.MyApp.**+$for   Îºá½¹ÏÎ¼Îµhello$world   helloÂ¢world   helloâ¬world   helloð¤­¢worldr   r   check_or_raise_urir   ur   r   r   test_valid_uris_loose_nonempty5   s   
z'TestUris.test_valid_uris_loose_nonemptyc                 C   s@   dd ddddt  dddd	d
ddddfD ]
}| ttj| qd S )Nr   TF皙?r   r   .com.com..productcom.my app.productcom.my	app.productcom.my
app.productcom.myapp.product#com.#.productr   r   r   r   r*   r+   r   r   r    test_invalid_uris_loose_nonemptyB   s&   z)TestUris.test_invalid_uris_loose_nonemptyc                 C   $   dD ]}|  |tj|dd qd S )N)r    com.myapp..123com.myapp.product.1.r0   r/   r   Com-star.MyApp.**+$for..foo   Îºá½¹ÏÎ¼Îµ..foohello$world..foo   helloÂ¢world..foo   helloâ¬world..foo   helloð¤­¢world..fooTallow_empty_componentsr)   r+   r   r   r   test_valid_uris_loose_emptyV   s   z$TestUris.test_valid_uris_loose_emptyc                 C   s<   dd ddddt  dddd	d
fD ]}| jttj|dd qd S )Nr   TFr.   r   r2   r3   r4   r5   r6   rB   r7   r+   r   r   r   test_invalid_uris_loose_emptyf   s   z&TestUris.test_invalid_uris_loose_emptyc                 C   r9   )N)r    r!   r"   Tstrictr)   r+   r   r   r   test_valid_uris_strict_nonemptyv   s   z(TestUris.test_valid_uris_strict_nonemptyc                 C   sP   dd ddddt  dddd	d
ddddddddddfD ]}| jttj|dd qd S )Nr   TFr.   r   r   r/   r0   r1   r2   r3   r4   r5   r6   r#   r$   r%   r&   r'   r(   rF   r7   r+   r   r   r   !test_invalid_uris_strict_nonempty}   s2   z*TestUris.test_invalid_uris_strict_nonemptyc              	   C   s&   dD ]}|  |tj|ddd qd S )N)r    r:   r;   r0   r/   r   TrG   rC   r)   r+   r   r   r   test_valid_uris_strict_empty   s   z%TestUris.test_valid_uris_strict_emptyc                 C   sJ   dd ddddt  dddd	d
ddddddfD ]}| jttj|ddd qd S )Nr   TFr.   r   r2   r3   r4   r5   r6   r<   r=   r>   r?   r@   rA   rJ   r7   r+   r   r   r   test_invalid_uris_strict_empty   s*   z'TestUris.test_invalid_uris_strict_emptyN)r   r	   r
   r-   r8   rD   rE   rH   rI   rK   rL   r   r   r   r   r   3   s    
r   c                   @   r   )TestErrorMessagec                 C   sB  t t jjdd}| }| t|d | |d t jj | |d t jj | |d d | |d i  | |d d t jt jjddg d	d
ddd}| }| t|d | |d t jj | |d t jj | |d d | |d i  | |d d | |d g d	 | |d d
dd d S )N@ com.myapp.error1   r   r            r   rQ   rR   r   hellofoobarargskwargs      )r   ErrorCallMESSAGE_TYPEmarshalr   lenr   emsgr   r   r   	test_ctor   s$   "zTestErrorMessage.test_ctorc              	   C   s0  t jjt jjdi dg}t j|}| |t j | |jt jj | |jd | |j	d | |j
d  | |jd  | | | t jjt jjdi dg ddddg}t j|}| |t j | |jt jj | |jd | |j	d | |j
g d | |jddd | | | d S )NrN   rO   rT   r   rU   rV   )r   r^   r`   r_   parseassertIsInstancer   request_typerequesterrorrZ   r[   ra   r   wmsgre   r   r   r   test_parse_and_marshal   s$   $z'TestErrorMessage.test_parse_and_marshalNr   r	   r
   rf   rn   r   r   r   r   rM          rM   c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestSubscribeMessagec                 C   s   t dd}| }| t|d | |d t jj | |d d | |d i  | |d d t jddt jjd}| }| t|d | |d t jj | |d d | |d d	d
i | |d d d S )NrN   r    rS   r   r   rQ   rR   matchrt   prefix)r   	Subscribera   r   rb   r`   MATCH_PREFIXrc   r   r   r   rf      s   zTestSubscribeMessage.test_ctorc                 C   s   t jjdi dg}t j|}| |t j | |jd | |jd | |jt jj	 | |
 | t jjdddidg}t j|}| |t j | |jd | |jd | |jt jj | |
 | d S )NrN   r    rt   ru   )r   rv   r`   rg   rh   r   rj   topicrt   MATCH_EXACTra   rw   rl   r   r   r   rn      s   z+TestSubscribeMessage.test_parse_and_marshalc                 C   s   t jjdddidg}t j|}| |t j | |jd | |jd | |jd  | 	|jd | |j
t jj | | | d S )NrN   rt   ru   r    Tr   rv   r`   rg   rh   r   rj   rx   get_retainedassertNotEqualrt   rw   ra   rl   r   r   r   test_get_retained_default_false	  s   z4TestSubscribeMessage.test_get_retained_default_falsec                 C   s   t jjdddddg}t j|}| |t j | |jd | |jd | |jd | 	|jd | |j
t jj | | | d S )NrN   ru   Frt   r{   r    Trz   rl   r   r   r    test_get_retained_explicit_false  s   z5TestSubscribeMessage.test_get_retained_explicit_falsec                 C   s   t jjdddddg}t j|}| |t j | |jd | |jd | |jd | |j	t jj
 | | | d S )NrN   ru   Tr~   r    )r   rv   r`   rg   rh   r   rj   rx   r{   rt   rw   ra   rl   r   r   r   test_get_retained_explicit_true  s   z4TestSubscribeMessage.test_get_retained_explicit_trueN)r   r	   r
   rf   rn   r}   r   r   r   r   r   r   rr      s    rr   c                   @   r   )TestSubscribedMessagec                 C   \   t dd}| }| t|d | |d t jj | |d d | |d d d S NrN   
 rR   r   r   rQ   )r   
Subscribedra   r   rb   r`   rc   r   r   r   rf   ,     zTestSubscribedMessage.test_ctorc                 C   X   t jjddg}t j|}| |t j | |jd | |jd | | | d S NrN   r   )	r   r   r`   rg   rh   r   rj   subscriptionra   rl   r   r   r   rn   4     z,TestSubscribedMessage.test_parse_and_marshalNro   r   r   r   r   r   *      r   c                   @   r   )TestUnsubscribeMessagec                 C   r   r   )r   Unsubscribera   r   rb   r`   rc   r   r   r   rf   ?  r   z TestUnsubscribeMessage.test_ctorc                 C   r   r   )	r   r   r`   rg   rh   r   rj   r   ra   rl   r   r   r   rn   G  r   z-TestUnsubscribeMessage.test_parse_and_marshalNro   r   r   r   r   r   =  r   r   c                   @   r   )TestUnsubscribedMessagec                 C   
  t d}| }| t|d | |d t jj | |d d t jddd}| }| t|d | |d t jj | |d d | |d ddi t jdddd	}| }| t|d | |d t jj | |d d | |d ddd	 d S )
NrN   rQ   r   r   )r   rR   r   wamp.subscription.revokedr   reason)r   Unsubscribedra   r   rb   r`   rc   r   r   r   rf   R  "   
z!TestUnsubscribedMessage.test_ctorc                 C   2  t jjdg}t j|}| |t j | |jd | |jd  | |jd  | |	 | t jjdddig}t j|}| |t j | |jd | |jd | |jd  | |	 | t jjddddg}t j|}| |t j | |jd | |jd | |jd | |	 | d S )NrN   r   r   r   r   )
r   r   r`   rg   rh   r   rj   r   r   ra   rl   r   r   r   rn   g  *   z.TestUnsubscribedMessage.test_parse_and_marshalNro   r   r   r   r   r   P  rp   r   c                   @   rq   )TestPublishMessagec                 C   s  t dd}| }| t|d | |d t jj | |d d | |d i  | |d d t jddg dd	d
dd}| }| t|d | |d t jj | |d d | |d i  | |d d | |d g d | |d d	d
d t jddddgg dd}| }| t|d | |d t jj | |d d | |d ddgg dd | |d d d S )NrN   r    rS   r   r   rQ   rR   rT   r   rU   rV   rY   r]   rP   F,  d      r   
exclude_meexcludeeligible)r   Publishra   r   rb   r`   rc   r   r   r   rf     s.   zTestPublishMessage.test_ctorc                 C   s  t jjdi dg}t j|}| |t j | |jd | |jd | |jd  | |j	d  | |j
d  | |jd  | |jd  | | | t jjdi dg ddddg}t j|}| |t j | |jd | |jd | |jg d | |j	ddd | |j
d  | |jd  | |jd  | | | t jjdddgg d	d
dg}t j|}| |t j | |jd | |jd | |jd  | |j	d  | |j
d | |jdg | |jg d	 | | | d S )NrN   r    rT   r   rU   rV   Fr   r   r   )r   r   r`   rg   rh   r   rj   rx   rZ   r[   r   r   r   ra   rl   r   r   r   rn     sB   z)TestPublishMessage.test_parse_and_marshalc                 C   sh   t jjdddgg dddg}t j|}| |t j | |jd | |jd | | | dS )	zD
        Retain, when not specified, is False-y by default.
        rN   Fr   r   r   r    NT	r   r   r`   rg   rh   r   retainassertIsNotra   rl   r   r   r   test_retain_default_false  s   z,TestPublishMessage.test_retain_default_falsec                 C   sj   t jjddddgg dddg}t j|}| |t j | |jd | |jd | | | dS )	zK
        Retain, when specified as False, shows up in the message.
        rN   Fr   r   r   r   r   r   r    TNr   rl   r   r   r   test_retain_explicit_false      z-TestPublishMessage.test_retain_explicit_falsec                 C   sj   t jjddddgg dddg}t j|}| |t j | |jd | |jd | | | dS )	zJ
        Retain, when specified as True, shows up in the message.
        rN   FTr   r   r   r    N)	r   r   r`   rg   rh   r   r   assertIsra   rl   r   r   r   test_retain_explicit_true  r   z,TestPublishMessage.test_retain_explicit_trueN)r   r	   r
   rf   rn   r   r   r   r   r   r   r   r     s    %r   c                   @   r   )TestPublishedMessagec                 C   r   r   )r   	Publishedra   r   rb   r`   rc   r   r   r   rf     r   zTestPublishedMessage.test_ctorc                 C   r   r   )	r   r   r`   rg   rh   r   rj   publicationra   rl   r   r   r   rn     r   z+TestPublishedMessage.test_parse_and_marshalNro   r   r   r   r   r     r   r   c                   @   rq   )TestEventMessagec                 C   ~  t dd}| }| t|d | |d t jj | |d d | |d d | |d i  t jddg dd	d
dd}| }| t|d | |d t jj | |d d | |d d | |d i  | |d g d | |d d	d
d t jdddd}| }| t|d | |d t jj | |d d | |d d | |d ddi d S )NrN   r   rS   r   r   rQ   rR   rT   r   rU   rV   rY   r]   rP   r   )	publisherr   )r   Eventra   r   rb   r`   rc   r   r   r   rf     .   zTestEventMessage.test_ctorc                 C     t jjddi g}t j|}| |t j | |jd | |jd | |jd  | |j	d  | |j
d  | | | t jjddi g ddddg}t j|}| |t j | |jd | |jd | |jg d | |j	ddd | |j
d  | | | t jjddddig}t j|}| |t j | |jd | |jd | |jd  | |j	d  | |j
d | | | d S )	NrN   r   rT   r   rU   rV   r   r   )r   r   r`   rg   rh   r   r   r   rZ   r[   r   ra   rl   r   r   r   rn     6   z'TestEventMessage.test_parse_and_marshalc                 C   sZ   t jjddi g}t j|}| |t j | |jd  | |jd | | | d S )NrN   r   T	r   r   r`   rg   rh   r   retainedr|   ra   rl   r   r   r   test_retained_default_false4  s   z,TestEventMessage.test_retained_default_falsec                 C   s^   t jjddddig}t j|}| |t j | |jd | |jd | | | d S )NrN   r   r   FTr   rl   r   r   r   test_retained_explicit_false<  s   z-TestEventMessage.test_retained_explicit_falsec                 C   sP   t jjddddig}t j|}| |t j | |jd | | | d S )NrN   r   r   T)r   r   r`   rg   rh   r   r   ra   rl   r   r   r   test_retained_explicit_trueD  s
   z,TestEventMessage.test_retained_explicit_trueN)r   r	   r
   rf   rn   r   r   r   r   r   r   r   r     s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestRegisterMessagec                 C   s   t dd}| }| t|d | |d t jj | |d d | |d i  | |d d t jdddd	}| }| t|d | |d t jj | |d d | |d d
di | |d d d S )NrN   com.myapp.procedure1rS   r   r   rQ   rR   wildcardrs   rt   )r   Registerra   r   rb   r`   rc   r   r   r   rf   N  s   zTestRegisterMessage.test_ctorc                 C   s   t jdddd}| }| t|d | |d t jj | |d d | |d d	di | |d
 d t j|}t| d S )NrN   r   T)force_reregisterrS   r   r   rQ   r   rR   )r   r   ra   r   rb   r`   rg   str)r   rd   re   e2r   r   r   test_ctor_reregister_  s   z(TestRegisterMessage.test_ctor_reregisterc                 C   s`   t jjdddidg}| t}t j| W d    n1 s w   Y  | dt|j d S )NrN   r   truthyr   zinvalid type)	r   r   r`   r   r   rg   assertInr   	exception)r   re   ctxr   r   r   #test_parse_reregister_illegal_forcek  s   z7TestRegisterMessage.test_parse_reregister_illegal_forcec                 C   s   t jjdi dg}t j|}| |t j | |jd | |jd | |jd | |	 | t jjdddidg}t j|}| |t j | |jd | |jd | |jd | |	 | d S )NrN   r   exactrt   r   )
r   r   r`   rg   rh   r   rj   	procedurert   ra   rl   r   r   r   rn   w  s   z*TestRegisterMessage.test_parse_and_marshalN)r   r	   r
   rf   r   r   rn   r   r   r   r   r   L  s
    r   c                   @   r   )TestRegisteredMessagec                 C   r   r   )r   
Registeredra   r   rb   r`   rc   r   r   r   rf     r   zTestRegisteredMessage.test_ctorc                 C   r   r   )	r   r   r`   rg   rh   r   rj   registrationra   rl   r   r   r   rn     r   z,TestRegisteredMessage.test_parse_and_marshalNro   r   r   r   r   r     r   r   c                   @   r   )TestUnregisterMessagec                 C   r   r   )r   
Unregisterra   r   rb   r`   rc   r   r   r   rf     r   zTestUnregisterMessage.test_ctorc                 C   r   r   )	r   r   r`   rg   rh   r   rj   r   ra   rl   r   r   r   rn     r   z,TestUnregisterMessage.test_parse_and_marshalNro   r   r   r   r   r     r   r   c                   @   r   )TestUnregisteredMessagec                 C   r   )
NrN   rQ   r   r   )r   rR   r   wamp.registration.revokedr   r   )r   Unregisteredra   r   rb   r`   rc   r   r   r   rf     r   z!TestUnregisteredMessage.test_ctorc                 C   r   )NrN   r   r   r   r   )
r   r   r`   rg   rh   r   rj   r   r   ra   rl   r   r   r   rn     r   z.TestUnregisteredMessage.test_parse_and_marshalNro   r   r   r   r   r     rp   r   c                   @   r   )TestCallMessagec                 C   s~  t dd}| }| t|d | |d t jj | |d d | |d i  | |d d t jddg dd	d
dd}| }| t|d | |d t jj | |d d | |d i  | |d d | |d g d | |d d	d
d t jdddd}| }| t|d | |d t jj | |d d | |d ddi | |d d d S )NrN   r   rS   r   r   rQ   rR   rT   r   rU   rV   rY   r]   rP   '  timeoutr   )r   r_   ra   r   rb   r`   rc   r   r   r   rf     s.   zTestCallMessage.test_ctorc                 C   s  t jjdi dg}t j|}| |t j | |jd | |jd | |jd  | |j	d  | |j
d  | | | t jjdi dg ddddg}t j|}| |t j | |jd | |jd | |jg d | |j	ddd | |j
d  | | | t jjdddidg}t j|}| |t j | |jd | |jd | |jd  | |j	d  | |j
d | | | d S )	NrN   r   rT   r   rU   rV   r   r   )r   r_   r`   rg   rh   r   rj   r   rZ   r[   r   ra   rl   r   r   r   rn     r   z&TestCallMessage.test_parse_and_marshalNro   r   r   r   r   r         r   c                   @   r   )TestCancelMessagec                 C      t d}| }| t|d | |d t jj | |d d | |d i  t jdt jjd}| }| t|d | |d t jj | |d d | |d dt jji d S NrN   rR   r   r   rQ   )moder   )r   Cancelra   r   rb   r`   KILLrc   r   r   r   rf        
zTestCancelMessage.test_ctorc                 C      t jjdi g}t j|}| |t j | |jd | |jd  | | | t jjddt jj	ig}t j|}| |t j | |jd | |jt jj	 | | | d S NrN   r   )
r   r   r`   rg   rh   r   rj   r   ra   r   rl   r   r   r   rn   .     z(TestCancelMessage.test_parse_and_marshalNro   r   r   r   r   r         r   c                   @   r   )TestResultMessagec                 C   H  t d}| }| t|d | |d t jj | |d d | |d i  t jdg dddd	d
}| }| t|d | |d t jj | |d d | |d i  | |d g d | |d ddd	 t jddd}| }| t|d | |d t jj | |d d | |d ddi d S NrN   rR   r   r   rQ   rT   r   rU   rV   rY   rP   rS   T)progressr   )r   Resultra   r   rb   r`   rc   r   r   r   rf   @  (   
zTestResultMessage.test_ctorc                 C   p  t jjdi g}t j|}| |t j | |jd | |jd  | |jd  | |j	d  | |
 | t jjdi g ddddg}t j|}| |t j | |jd | |jg d | |jddd | |j	d  | |
 | t jjdddig}t j|}| |t j | |jd | |jd  | |jd  | |j	d | |
 | d S NrN   rT   r   rU   rV   r   T)r   r   r`   rg   rh   r   rj   rZ   r[   r   ra   rl   r   r   r   rn   X  0   z(TestResultMessage.test_parse_and_marshalNro   r   r   r   r   r   >      r   c                   @   r   )TestInvocationMessagec                 C   r   )NrN   r   rS   r   r   rQ   rR   rT   r   rU   rV   rY   r]   rP   r   r   r   )r   
Invocationra   r   rb   r`   rc   r   r   r   rf   w  r   zTestInvocationMessage.test_ctorc                 C   r   )	NrN   r   rT   r   rU   rV   r   r   )r   r   r`   rg   rh   r   rj   r   rZ   r[   r   ra   rl   r   r   r   rn     r   z,TestInvocationMessage.test_parse_and_marshalNro   r   r   r   r   r   u  r   r   c                   @   r   )TestInterruptMessagec                 C   r   r   )r   	Interruptra   r   rb   r`   r   rc   r   r   r   rf     r   zTestInterruptMessage.test_ctorc                 C   r   r   )
r   r   r`   rg   rh   r   rj   r   ra   r   rl   r   r   r   rn     r   z+TestInterruptMessage.test_parse_and_marshalNro   r   r   r   r   r     r   r   c                   @   r   )TestYieldMessagec                 C   r   r   )r   Yieldra   r   rb   r`   rc   r   r   r   rf     r   zTestYieldMessage.test_ctorc                 C   r   r   )r   r   r`   rg   rh   r   rj   rZ   r[   r   ra   rl   r   r   r   rn     r   z'TestYieldMessage.test_parse_and_marshalNro   r   r   r   r   r     r   r   c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestHelloMessagec                 C   sZ  t ddt i}| }| t|d | |d t jj | |d d | |d ddi ii t ddtjdd	i}| }| t|d | |d t jj | |d d | |d ddd
ddiiii t jddtjdd	idd}| }| t|d | |d t jj | |d d | |d dd
ddiiidd d S )Nrealm1r   rR   r   r   rQ   rolesTsubscriber_blackwhite_listingfeaturesr   )	resumabler   r   )r   Hellor   RolePublisherFeaturesra   r   rb   r`   rc   r   r   r   rf     s$    &zTestHelloMessage.test_ctorc                 C   s  t jjdddi iig}t j|}| |t j | |jd | |jdt	 i | |j
d  | | | t jjddddddiiiig}t j|}| |t j | |jd | |jdtj	ddi | | | t jjddi idd	g}t j|}| |t j | |jd | |jdt	 i | |j
d | | | t jjddi idd
ddg}t j|}| |t j | |jd | |jdt	 i | |j
d | |jd
 | |jd | | | d S )Nr   r   r   r   r   Tr   Fr   i  dsjgsg)r   r   zresume-sessionzresume-token)r   r   r`   rg   rh   r   realmr   r   r   r   ra   resume_sessionresume_tokenrl   r   r   r   rn   "  s:   z'TestHelloMessage.test_parse_and_marshalc                 C   s(   t ddt i}| t|t d S )Nr   r   )r   r   r   r   rh   r   r   rd   r   r   r   test_strD  s   zTestHelloMessage.test_strNr   r	   r
   rf   rn   r  r   r   r   r   r   
  s    "r   c                   @   r   )TestGoodbyeMessagec                 C   s  d}d}t  }| }| t|d | |d t jj | |d i  | |d t jj t j|d}| }| t|d | |d t jj | |d i  | |d | t j||d}| }| t|d | |d t jj | |d d	|i | |d | d S )
Nwamp.error.system_shutdownThe host is shutting down now.rR   r   r   rQ   )r   r   r   r   )r   Goodbyera   r   rb   r`   DEFAULT_REASON)r   r   
reason_msgrd   re   r   r   r   rf   K  s(   zTestGoodbyeMessage.test_ctorc                 C   s  d}d}t jjg}| tt jj| t jj|g}| tt jj| t jjddi|g}| tt jj| t jji |g}t j|}| |t j | |j| | |j d  | |	 | t jjd|i|g}t j|}| |t j | |j| | |j | | |	 | d S )Nr  r  r   r   )
r   r  r`   r   r   rg   rh   r   r   ra   )r   r   r	  rm   re   r   r   r   rn   d  s(   
z)TestGoodbyeMessage.test_parse_and_marshalc                 C   s"   t jddd}| t|t d S )Nr  r  r  )r   r  rh   r   r   r   r   r   r    s   zTestGoodbyeMessage.test_strNr  r   r   r   r   r  I  s    r  )"
__future__r   autobahn.wampr   r   autobahn.wamp.exceptionr   r   unittestobjectr   TestCaser   r   rM   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   <module>   s:    -E1dT=1=!7=!7?