ó
    ×›‘h™8  ã                  óˆ  • S r SSKJr  SSKrSSKrSSKrSSKJrJr  SSK	J
r
  SSKJrJrJrJrJr  SSKJrJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"J#r#  Sr$\%" \RL                  5      r'\RP                  RS                  \RT                  5      \'S'    " S S\R*                  5      r+ " S S\#5      r,g)z¯
Tests for L{twisted.internet.stdio}.

@var properEnv: A copy of L{os.environ} which has L{bytes} keys/values on POSIX
    platforms and native L{str} keys/values on Windows.
é    )ÚannotationsN)ÚAnyÚCallable)ÚskipIf)ÚdeferÚerrorÚprotocolÚreactorÚstdio)ÚIProcessTransportÚIReactorProcess)ÚProcessProtocol)ÚfilepathÚlog)ÚFailure)ÚrequireModule)Úplatform)ÚConnectionLostNotifyingProtocol)ÚSkipTestÚTestCases   xyz123abc Twisted is great!Ú
PYTHONPATHc                  óN   • \ rS rSr% SrSrS\S'   S\S'   SS jrS	 rS
 r	S r
Srg)ÚStandardIOTestProcessProtocolé'   a¥  
Test helper for collecting output from a child process and notifying
something when it exits.

@ivar onConnection: A L{defer.Deferred} which will be called back with
L{None} when the connection to the child process is established.

@ivar onCompletion: A L{defer.Deferred} which will be errbacked with the
failure associated with the child process exiting when it exits.

@ivar onDataReceived: A L{defer.Deferred} which will be called back with
this instance whenever C{childDataReceived} is called, or L{None} to
suppress these callbacks.

@ivar data: A C{dict} mapping file descriptors to strings containing all
bytes received from the child process on each file descriptor.
Nzdefer.Deferred[None] | NoneÚonDataReceivedr   Ú	transportc                óz   • [         R                  " 5       U l        [         R                  " 5       U l        0 U l        g ©N)r   ÚDeferredÚonConnectionÚonCompletionÚdata©Úselfs    Ú[C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/test/test_stdio.pyÚ__init__Ú&StandardIOTestProcessProtocol.__init__=   s'   € Ü27·.².Ó2BˆÔÜ27·.².Ó2BˆÔØ&(ˆ�	ó    c                ó:   • U R                   R                  S 5        g r   )r    Úcallbackr#   s    r%   ÚconnectionMadeÚ,StandardIOTestProcessProtocol.connectionMadeB   s   € Ø×Ñ×"Ñ" 4Õ(r(   c                óÀ   • U R                   R                  US5      U-   U R                   U'   U R                  b%  U R                  Sso0l        UR                  U 5        gg)z{
Record all bytes received from the child process in the C{data}
dictionary.  Fire C{onDataReceived} if it is not L{None}.
r(   N)r"   Úgetr   r*   )r$   ÚnameÚbytesÚds       r%   ÚchildDataReceivedÚ/StandardIOTestProcessProtocol.childDataReceivedE   sU   € ð
 Ÿ)™)Ÿ-™-¨¨cÓ2°UÑ:ˆ�	‰	�$‰Ø×ÑÑ*Ø%)×%8Ñ%8¸$Ð"ˆAÔ"Ø�J‰J�tÕð +r(   c                ó:   • U R                   R                  U5        g r   )r!   r*   )r$   Úreasons     r%   ÚprocessEndedÚ*StandardIOTestProcessProtocol.processEndedO   s   € Ø×Ñ×"Ñ" 6Õ*r(   )r"   r!   r    r   )ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__annotations__r&   r+   r2   r6   Ú__static_attributes__© r(   r%   r   r   '   s.   ‡ ñð$ 37€NÐ/Ó6Ø Ó ô)ò
)òõ+r(   r   c                  ó.  • \ rS rSr\R
                  " 5       (       a  \" S5      c  Sr          SS jr      SS jr	S r
 S     SS jjrSS	 jrSS
 jrSS jrS rS rS rS rS rS rS r\" \R
                  " 5       S5      S 5       rSrg)ÚStandardInputOutputTestséS   Úwin32processNzIOn windows, spawnProcess is not available in the absence of win32process.c                ó.  • [        U[        5      (       a  UR                  5       n[        R                  SSU-   [
        R                  R                  /[        U5      -   n[        [
        5      R                  " U[        R                  U4S[        0UD6$ )a  
Launch a child Python process and communicate with it using the given
ProcessProtocol.

@param proto: A L{ProcessProtocol} instance which will be connected to
    the child process.

@param sibling: The basename of a file containing the Python program to
    run in the child process.

@param *args: strings which will be passed to the child process on the
    command line as C{argv[2:]}.

@param **kw: additional arguments to pass to L{reactor.spawnProcess}.

@return: The L{IProcessTransport} provider for the spawned process.
z-mztwisted.test.Úenv)Ú
isinstancer0   ÚdecodeÚsysÚ
executabler
   Ú	__class__r;   Úlistr   ÚspawnProcessÚ	properEnv)r$   ÚprotoÚsiblingÚargsÚkwÚprocargss         r%   Ú_spawnProcessÚ&StandardInputOutputTests._spawnProcessZ   sˆ   € ô( �gœu×%Ñ%Ø—n‘nÓ&ˆGä�N‰NØØ˜gÑ%Ü×Ñ×(Ñ(ð	
ô
 �‹Jñˆô œwÓ'×4Ò4Ø”3—>‘> 8ñ
Ü1:ð
Ø>@ñ
ð 	
r(   c                ó@   ^ ^• U 4S jnU4S jnUR                  X45      $ )Nc                ó0   >• TR                  SU < 35        g )Nz%Process terminated with non-Failure: )Úfail)Úresultr$   s    €r%   ÚcbÚ4StandardInputOutputTests._requireFailure.<locals>.cb}   s   ø€ Ø�I‰IÐ=¸f¹ZÐHÕIr(   c                ó   >• T" U 5      $ r   rA   )Úerrr*   s    €r%   ÚebÚ4StandardInputOutputTests._requireFailure.<locals>.eb€   s   ø€ Ù˜C“=Ð r(   )ÚaddCallbacks)r$   r1   r*   r[   r_   s   ` `  r%   Ú_requireFailureÚ(StandardInputOutputTests._requireFailurez   s   ù€ õ	Jõ	!ð �~‰~˜bÓ%Ð%r(   c                óÞ   ^ ^^• T R                  5       m[        R                  " ST-   5        [        5       mTR                  nT R                  TST5        UUU 4S jnT R                  X5      $ )zl
Verify that a protocol connected to L{StandardIO} can disconnect
itself using C{transport.loseConnection}.
zChild process logging to s   stdio_test_loseconnc                ó&  >• [        T5       nU H*  n[        R                  " SUR                  5       -   5        M,     S S S 5        TR	                  STR
                  5        U R                  [        R                  5        g ! , (       d  f       NJ= f)NzChild logged: é   )	Úopenr   ÚmsgÚrstripÚfailIfInr"   Útrapr   ÚProcessDone)r5   ÚfÚlineÚerrorLogFileÚpr$   s      €€€r%   r6   ÚBStandardInputOutputTests.test_loseConnection.<locals>.processEnded�   sc   ø€ ä�lÔ# qÛ�DÜ—G’GÐ,¨t¯{©{«}Ñ<Ö=ñ ÷ $ð �M‰M˜!˜QŸV™VÔ$Ø�K‰Kœ×)Ñ)Õ*÷ $Õ#ús   �1BÂ
B)Úmktempr   rh   r   r!   rU   rb   )r$   r1   r6   ro   rp   s   `  @@r%   Útest_loseConnectionÚ,StandardInputOutputTests.test_loseConnection…   s^   ú€ ð
 —{‘{“}ˆÜ�ŠÐ+¨lÑ:Ô;Ü)Ó+ˆØ�N‰NˆØ×Ñ˜1Ð4°lÔC÷	+ð ×#Ñ# AÓ4Ð4r(   c                ó  ^^• U R                  5       n[        5       m[        R                  " 5       Tl        SUU4S jjnTR                  R                  U5        S nU R                  TR                  U5      nU R                  TX5        U$ )Nc                óš   >• TR                   nT(       a  TR                  R                  5         U$ TR                  R                  5         U$ r   )r!   r   ÚcloseStdoutÚ
closeStdin)Úignoredr1   Úoutrp   s     €€r%   ÚcbBytesÚGStandardInputOutputTests.exampleOutputsAndZeroExitCode.<locals>.cbBytes¢   s=   ø€ Ø—‘ˆAÞØ—‘×'Ñ'Ô)ð ˆHð —‘×&Ñ&Ô(ØˆHr(   c                óB   • U R                  [        R                  5        g r   )rk   r   rl   )r5   s    r%   r6   ÚLStandardInputOutputTests.exampleOutputsAndZeroExitCode.<locals>.processEnded¬   s   € Ø�K‰Kœ×)Ñ)Õ*r(   )ry   r9   r8   údefer.Deferred[None])rr   r   r   r   r   ÚaddCallbackrb   rU   )r$   Úexamplerz   ro   r{   r6   r1   rp   s     `    @r%   ÚexampleOutputsAndZeroExitCodeÚ6StandardInputOutputTests.exampleOutputsAndZeroExitCode›   s{   ù€ ð —{‘{“}ˆÜ)Ó+ˆÜ Ÿ>š>Ó+ˆÔ÷	ð 	ð 	
×Ñ×$Ñ$ WÔ-ò	+ð × Ñ  ×!1Ñ!1°<Ó@ˆà×Ñ˜1˜gÔ4Øˆr(   c                ó$   • U R                  S5      $ )z”
When stdin is closed and the protocol connected to it implements
L{IHalfCloseableProtocol}, the protocol's C{readConnectionLost} method
is called.
Ústdio_test_halfclose©r‚   r#   s    r%   Útest_readConnectionLostÚ0StandardInputOutputTests.test_readConnectionLost´   s   € ð ×1Ñ1Ð2HÓIÐIr(   c                ó$   • U R                  S5      $ )úË
When stdin is closed and the protocol connnected to it implements
L{IHalfCloseableProtocol} but its C{readConnectionLost} method raises
an exception its regular C{connectionLost} method will be called.
Ústdio_test_halfclose_buggyr†   r#   s    r%   Útest_buggyReadConnectionLostÚ5StandardInputOutputTests.test_buggyReadConnectionLost¼   s   € ð ×1Ñ1Ð2NÓOÐOr(   c                ó"   • U R                  SSS9$ )rŠ   Ú stdio_test_halfclose_buggy_writeT)rz   r†   r#   s    r%   Útest_buggyWriteConnectionLostÚ6StandardInputOutputTests.test_buggyWriteConnectionLostÄ   s!   € ð ×1Ñ1Ø.°Dð 2ð 
ð 	
r(   c                óÚ   ^ ^• [        5       m T R                  TS[        SS9  UU 4S jnT R                  TR                  U5      $ ! [         a  n[	        [        U5      5      eSnAff = f)z–
Verify that a write made directly to stdout using L{os.write}
after StandardIO has finished is reliably received by the
process reading that stdout.
s   stdio_test_lastwriteT)ÚusePTYNc                óÆ   >• TR                  TR                  S   R                  [        5      STR                  < S35        U R	                  [
        R                  5        g)ze
Asserts that the parent received the bytes written by the child
immediately after the child starts.
rf   z	Received z) from child, did not find expected bytes.N)Ú
assertTruer"   ÚendswithÚUNIQUE_LAST_WRITE_STRINGrk   r   rl   ©r5   rp   r$   s    €€r%   r6   ÚEStandardInputOutputTests.test_lastWriteReceived.<locals>.processEndedè   sM   ø€ ð
 �O‰OØ—‘�q‘	×"Ñ"Ô#;Ó<Ø˜AŸF™F™:Ð%NÐOôð �K‰Kœ×)Ñ)Õ*r(   )r   rU   r—   Ú
ValueErrorr   Ústrrb   r!   )r$   Úer6   rp   s   `  @r%   Útest_lastWriteReceivedÚ/StandardInputOutputTests.test_lastWriteReceivedÎ   so   ù€ ô *Ó+ˆð	#Ø×ÑØÐ*Ô,DÈTð ñ ö		+ð ×#Ñ# A§N¡N°LÓAÐAøô ó 	#äœ3˜q›6Ó"Ð"ûð	#ús   ŽA Á
A*ÁA%Á%A*c                ó†   ^ ^• [        5       mTR                  nT R                  TS5        UU 4S jnT R                  X5      $ )zk
Verify that the transport of a protocol connected to L{StandardIO}
has C{getHost} and C{getPeer} methods.
s   stdio_test_hostpeerc                óÆ   >• TR                   S   R                  5       u  pTR                  U5        TR                  U5        U R                  [        R
                  5        g )Nrf   )r"   Ú
splitlinesr•   rk   r   rl   )r5   ÚhostÚpeerrp   r$   s      €€r%   r6   Ú?StandardInputOutputTests.test_hostAndPeer.<locals>.processEndedþ   sE   ø€ ØŸ™ ™×-Ñ-Ó/‰JˆDØ�O‰O˜DÔ!Ø�O‰O˜DÔ!Ø�K‰Kœ×)Ñ)Õ*r(   ©r   r!   rU   rb   ©r$   r1   r6   rp   s   `  @r%   Útest_hostAndPeerÚ)StandardInputOutputTests.test_hostAndPeerõ   s?   ù€ ô
 *Ó+ˆØ�N‰NˆØ×Ñ˜1Ð4Ô5ö	+ð ×#Ñ# AÓ4Ð4r(   c                ó†   ^ ^• [        5       mTR                  nT R                  TS5        UU 4S jnT R                  X5      $ )zx
Verify that the C{write} method of the transport of a protocol
connected to L{StandardIO} sends bytes to standard out.
s   stdio_test_writec                ó‚   >• TR                  TR                  S   S5        U R                  [        R                  5        g ©Nrf   s   ok!©ÚassertEqualr"   rk   r   rl   r˜   s    €€r%   r6   Ú9StandardInputOutputTests.test_write.<locals>.processEnded  ó-   ø€ Ø×Ñ˜QŸV™V A™Y¨Ô/Ø�K‰Kœ×)Ñ)Õ*r(   r¥   r¦   s   `  @r%   Ú
test_writeÚ#StandardInputOutputTests.test_write  s?   ù€ ô
 *Ó+ˆØ�N‰Nˆà×Ñ˜1Ð1Ô2ö	+ð ×#Ñ# AÓ4Ð4r(   c                ó†   ^ ^• [        5       mTR                  nT R                  TS5        UU 4S jnT R                  X5      $ )z€
Verify that the C{writeSequence} method of the transport of a
protocol connected to L{StandardIO} sends bytes to standard out.
s   stdio_test_writeseqc                ó‚   >• TR                  TR                  S   S5        U R                  [        R                  5        g r«   r¬   r˜   s    €€r%   r6   ÚAStandardInputOutputTests.test_writeSequence.<locals>.processEnded   r¯   r(   r¥   r¦   s   `  @r%   Útest_writeSequenceÚ+StandardInputOutputTests.test_writeSequence  s?   ù€ ô
 *Ó+ˆØ�N‰Nˆà×Ñ˜1Ð4Ô5ö	+ð ×#Ñ# AÓ4Ð4r(   c                óÂ   • U R                  5       n[        US5       n[        S5       H  nUR                  SU4-  5        M     S S S 5        U$ ! , (       d  f       U$ = f)NÚwbi   ó   %d
)rr   rg   ÚrangeÚwrite)r$   ÚjunkPathÚjunkFileÚis       r%   Ú	_junkPathÚ"StandardInputOutputTests._junkPath&  sU   € Ø—;‘;“=ˆÜ�(˜DÔ! XÜ˜4–[�Ø—‘˜w¨!¨™~Ö.ñ !÷ "ð ˆ÷ "Ô!ð ˆús   �(AÁ
Ac                ó  ^ ^^^^^• [        5       mTR                  n/ m[        [        S5      5      mUUUU4S jmT R	                  TS5      mTR
                  R                  T5        UU UU4S jnT R                  X5      $ )zh
Verify that the transport of a protocol connected to L{StandardIO}
is a working L{IProducer} provider.
éd   c                ó´   >• T(       aP  TR                  STR                  5       4-  5        TR                  TS   5        [        R                  " STS 5        g g )Nr¹   éÿÿÿÿg{®Gáz„?)ÚappendÚpopr»   r
   Ú	callLater)Úignr+   ÚprocÚtoWriteÚwrittens    €€€€r%   r+   Ú>StandardInputOutputTests.test_producer.<locals>.connectionMade8  sG   ø€ ÞØ—‘˜w¨'¯+©+«-Ð)9Ñ9Ô:Ø—
‘
˜7 2™;Ô'Ü×!Ò! $¨¸Õ=ð r(   s   stdio_test_producerc                óÞ   >• TR                  TR                  S   SR                  T5      5        TR                  TS[	        T5      4-  5        U R                  [        R                  5        g )Nrf   r(   z*Connection lost with %d writes left to go.)r­   r"   ÚjoinÚassertFalseÚlenrk   r   rl   )r5   rp   r$   rÊ   rË   s    €€€€r%   r6   Ú<StandardInputOutputTests.test_producer.<locals>.processEndedB  sW   ø€ Ø×Ñ˜QŸV™V A™Y¨¯©°Ó(9Ô:Ø×ÑØÐEÌÈWËÈÑWôð �K‰Kœ×)Ñ)Õ*r(   )r   r!   rM   rº   rU   r    r€   rb   )r$   r1   r6   r+   rp   rÉ   rÊ   rË   s   `  @@@@@r%   Útest_producerÚ&StandardInputOutputTests.test_producer-  sw   ý€ ô
 *Ó+ˆØ�N‰NˆàˆÜ”u˜S“zÓ"ˆ÷	>ð 	>ð ×!Ñ! !Ð%;Ó<ˆà	�‰×"Ñ" >Ô2÷	+ð 	+ð ×#Ñ# AÓ4Ð4r(   c                ó¬   ^ ^^• [        5       mTR                  nT R                  5       mT R                  TST5        UUU 4S jnT R	                  X5      $ )zh
Verify that the transport of a protocol connected to L{StandardIO}
is a working L{IConsumer} provider.
s   stdio_test_consumerc                óê   >• [        TS5       nTR                  TR                  S   UR                  5       5        S S S 5        U R	                  [
        R                  5        g ! , (       d  f       N.= f)NÚrbrf   )rg   r­   r"   Úreadrk   r   rl   )r5   rm   r¼   rp   r$   s     €€€r%   r6   Ú<StandardInputOutputTests.test_consumer.<locals>.processEndedW  sM   ø€ Ü�h Ô%¨Ø× Ñ  §¡¨¡¨A¯F©F«HÔ5÷ &à�K‰Kœ×)Ñ)Õ*÷ &Õ%ús   Ž.A$Á$
A2)r   r!   r¿   rU   rb   )r$   r1   r6   r¼   rp   s   `  @@r%   Útest_consumerÚ&StandardInputOutputTests.test_consumerK  sM   ú€ ô
 *Ó+ˆØ�N‰Nˆà—>‘>Ó#ˆà×Ñ˜1Ð4°hÔ?÷	+ð
 ×#Ñ# AÓ4Ð4r(   zpStandardIO does not accept stdout as an argument to Windows.  Testing redirection to a file is therefore harder.c                óè  ^ ^^	^
^^• [         R                  " 5       n[        U5      n[        R                  " T R                  5       5      mTR                  S5      =T l        nT R                  UR                  5        [        UR                  5       S9n[        R                  " 5       (       d[  [        R                  " 5       u  pVT R                  [        R                  U5        T R                  [        R                  U5        XTS'   [         R"                  " U40 UD6mSm
[$        R&                  " 5       m	UU	U
U4S jm[(        R*                  " ST5        U	U
UU 4S jnUR-                  U5        U$ )a  
If L{StandardIO} is created with a file descriptor which refers to a
normal file (ie, a file from the filesystem), L{StandardIO.write}
writes bytes to that file.  In particular, it does not immediately
consider the file closed or call its protocol's C{connectionLost}
method.
r¸   )ÚstdoutÚstdiné   c                 ó    >• T H0  n U T:X  a  TR                  5           g TR                  SU 4-  5          O   [        R                  " ST5        g )Nó   %dr   )ÚloseConnectionr»   r
   rÇ   )ÚvalueÚ
connectionÚcountÚhowManyÚspins    €€€€r%   ræ   ÚAStandardInputOutputTests.test_normalFileStandardOut.<locals>.spin‚  sN   ø€ Û�Ø˜GÓ#Ø×-Ñ-Ô/ÙØ× Ñ  ¨%¨Ñ!1Ô2Ùñ ô ×Ò˜a Õ&r(   r   c           	     óÀ   >• TR                  [        T5      TS-   5        TR                  TR                  5       SR                  S [	        T5       5       5      5        g )Nrf   r(   c              3  ó.   #   • U  H  nS U4-  v •  M     g7f)rà   NrA   )Ú.0r¾   s     r%   Ú	<genexpr>ÚVStandardInputOutputTests.test_normalFileStandardOut.<locals>.cbLost.<locals>.<genexpr>’  s   é € Ð+QÂ.¸Q¨E°Q°D®LÂ.ùs   ‚)r­   ÚnextÚ
getContentrÎ   rº   )r5   rä   rå   Úpathr$   s    €€€€r%   ÚcbLostÚCStandardInputOutputTests.test_normalFileStandardOut.<locals>.cbLost�  sH   ø€ Ø×ÑœT %›[¨'°A©+Ô6Ø×ÑØ—‘Ó! 3§8¡8Ñ+QÄ%ÈÄ.Ó+QÓ#Qõr(   )r   r   r   r   ÚFilePathrr   rg   ÚnormalÚ
addCleanupÚcloseÚdictÚfilenor   Ú	isWindowsÚosÚpiper   Ú
StandardIOÚ	itertoolsrä   r
   rÇ   r€   )r$   Ú
onConnLostrP   ró   ÚkwargsÚrÚwrð   rã   rä   rå   rï   ræ   s   `       @@@@@r%   Útest_normalFileStandardOutÚ3StandardInputOutputTests.test_normalFileStandardOut^  s  ý€ ô —^’^Ó%ˆ
Ü/°
Ó;ˆÜ× Ò  §¡£Ó/ˆØ#Ÿy™y¨›Ð.ˆŒ�fØ�‰˜Ÿ™Ô%ä˜VŸ]™]›_Ñ-ˆÜ×!Ò!×#Ñ#ô —7’7“9‰DˆAØ�O‰OœBŸH™H aÔ(Ø�O‰OœBŸH™H aÔ(Ø�7‰OÜ×%Ò% eÑ6¨vÑ6ˆ
ð ˆÜ—’Ó!ˆ÷	'ð 	'ô 	×Ò˜!˜TÔ"÷	ð 	ð 	×Ñ˜vÔ&ØÐr(   )ró   )
rP   r   rQ   zstr | bytesrR   r›   rS   r   r8   r   )r1   r   r*   zCallable[[Failure], object]r8   r   )F)r�   r›   rz   Úboolr8   r   )r8   r   )r:   r;   r<   r=   r   rø   r   ÚskiprU   rb   rs   r‚   r‡   rŒ   r�   r�   r§   r°   rµ   r¿   rÒ   rÙ   r   r  r@   rA   r(   r%   rC   rC   S   s÷   † Ø×Ò×Ñ¡¨nÓ =Ñ Eð'ð 	ð

Ø$ð
Ø/:ð
ØCFð
ØNQð
à	ô
ð@	&Ø%ð	&Ø1Lð	&à	ô	&ò5ð. ).ðØðØ!%ðà	õô2JôPô
ò%BòN5ò"5ò 5ò ò5ò<5ñ& Ø×ÒÓð	=óñ
3óó
3r(   rC   )-r>   Ú
__future__r   rü   rù   rJ   Útypingr   r   Úunittestr   Útwisted.internetr   r   r	   r
   r   Útwisted.internet.interfacesr   r   Útwisted.internet.protocolr   Útwisted.pythonr   r   Útwisted.python.failurer   Útwisted.python.reflectr   Útwisted.python.runtimer   Útwisted.test.test_tcpr   Útwisted.trial.unittestr   r   r—   rö   ÚenvironrO   ÚpathseprÎ   rï   r   rC   rA   r(   r%   Ú<module>r     sŽ   ðñõ #ã Û 	Û 
ß  Ý ç CÕ Cß JÝ 5ß (Ý *Ý 0Ý +Ý Aß 5ð :Ð á�—‘Ó€	ØŸ*™*Ÿ/™/¨#¯(©(Ó3€	ˆ,Ñ ô)+ H×$<Ñ$<ô )+ôXC˜xõ Cr(   