+
    il  c                   s$   R t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
Ht . R+Ot ! R R]P                  4      t ! R R]P                  4      t ! R R
]4      t ! R R]4      t ! R R4      t ! R R]]]4      t ! R R]]]4      tR tR t ! R R]4      t ! R R]4      t ! R  R!]4      t ! R" R]4      t ! R# R]4      t ! R$ R]4      t ! R% R&4      t ! R' R]]4      t ! R( R	]]4      t  ! R) R]]4      t! ! R* R]4      t"R# ),z4Utilities for with-statement contexts.  See PEP 343.N)dequewraps)
MethodTypeGenericAliasclosingnullcontextAbstractContextManagerAbstractAsyncContextManagerAsyncExitStackContextDecorator	ExitStackredirect_stdoutredirect_stderrsuppressaclosingchdirc                   sr   a  ] tR t^t o Rt]! ]4      tRtR t	]
P                  R 4       t]R 4       tRtV tR# )r   z,An abstract base class for context managers.c                    V # z0Return `self` upon entering the runtime context. self   &#/usr/lib64/python3.14/contextlib.py	__enter__Z AbstractContextManager.__enter__   s        c                s    R# z9Raise any exception triggered within the runtime context.Nr   r   exc_typeZ	exc_value	traceback   &&&&r   __exit__ZAbstractContextManager.__exit__   s     r   c                R    V \         J d   \        P                  ! VR R4      # \        # )r   r   )r   _collections_abc_check_methodsNotImplementedclsZC   &&r   __subclasshook__Z'AbstractContextManager.__subclasshook__"   s&    ((#221k:NNr   r   N)__name__
__module____qualname____firstlineno____doc__classmethodr   __class_getitem__	__slots__r   abcabstractmethodr   r'   __static_attributes____classdictcell__Z__classdict__   @r   r   r      sK     6#L1I 	   r   c                   sr   a  ] tR t^)t o Rt]! ]4      tRtR t	]
P                  R 4       t]R 4       tRtV tR# )r   z9An abstract base class for asynchronous context managers.c                   "   V # 5ir   r   r   r   r   
__aenter__Z&AbstractAsyncContextManager.__aenter__1   s
        c                s   "   R# 5ir   r   r   r   r   	__aexit__Z%AbstractAsyncContextManager.__aexit__5   s
      r8   c                r    )r7   r9   )r   r!   r"   r#   r$   r&   r   r'   Z,AbstractAsyncContextManager.__subclasshook__:   s-    --#221l3>@ @r   r   N)r(   r)   r*   r+   r,   r-   r   r.   r/   r7   r0   r1   r9   r'   r2   r3   r4   r5   r   r   r   )   sK     C#L1I 	   r   c                   s0   a  ] tR t^Bt o RtR tR tRtV tR# )r
   zJA base class or mixin that enables context managers to work as decorators.c                r   )a  Return a recreated instance of self.

Allows an otherwise one-shot context manager like
_GeneratorContextManager to support use as
a decorator via implicit recreation.

This is a private interface just for _GeneratorContextManager.
See issue #11647 for details.
r   r   r   r   _recreate_cmZContextDecorator._recreate_cmE   s	     r   c                4   a a \        S4      VV 3R  l4       pV# )c                  s   < SP                  4       ;_uu_ 4        S! V / VB uuR R R 4       #   + '       g   i     R # ; iNr:   argskwdsfuncr      *,r   innerZ(ContextDecorator.__call__.<locals>.innerR   s.    ""$$T*T* %$$$s   ->	r   r   rA   rC      ff r   __call__ZContextDecorator.__call__Q   s     	t	+ 
	+ r   r   N	r(   r)   r*   r+   r,   r:   rF   r2   r3   r4   r5   r   r
   r
   B   s     P
 r   c                   s0   a  ] tR t^Yt o RtR tR tRtV tR# )AsyncContextDecoratorzPA base class or mixin that enables async context managers to work as decorators.c                r   )z-Return a recreated instance of self.
        r   r   r   r   r:   Z"AsyncContextDecorator._recreate_cm\   s	     r   c                r;   )c                  s   <"   SP                  4       ;_uu_4       GR j  xL
  S! V / VB G R j  xL
 uuR R R 4      GR j  xL
  #  L& L L	  + GR j  xL 
 '       g   i     R # ; i5ir<   r=   r>   rB   r   rC   Z-AsyncContextDecorator.__call__.<locals>.innerb   sD     ((***!40400 +**0 +***sY   A*AA*AA	AA*AA*	AA*A'	A
A'	A'	!	A*r   rD   rE   r   rF   ZAsyncContextDecorator.__call__a   s     	t	1 
	1 r   r   NrG   r4   r5   r   rH   rH   Y   s     V
 r   rH   c                   s0   a  ] tR t^it o RtR tR tRtV tR# )_GeneratorContextManagerBasezBShared functionality for @contextmanager and @asynccontextmanager.c                s    V! V/ VB V n         WVuV n        V n        V n        \	        VR R4      pVf   \        V 4      P                  pW@n        R# )r,   N)genrA   r?   r@   getattrtyper,   )r   rA   r?   r@   Zdoc   &&&& r   __init__Z%_GeneratorContextManagerBase.__init__l   sN    &&*.d'	49didIt,;t*$$Cr   c                sd    V P                  V P                  V P                  V P                  4      # r<   )Z	__class__rA   r?   r@   r   r   r   r:   Z)_GeneratorContextManagerBase._recreate_cmz   s#     ~~diiDII>>r   )r,   r?   rA   rJ   r@   N)	r(   r)   r*   r+   r,   rN   r:   r2   r3   r4   r5   r   rI   rI   i   s     L? ?r   rI   c                   s0   a  ] tR t^t o RtR tR tRtV tR# )_GeneratorContextManagerz%Helper for @contextmanager decorator.c                sp    V = V =V = \        V P                  4      #   \
         d    \        R 4      Rhi ; i)generator didn't yieldN)r?   r@   rA   nextrJ   StopIterationRuntimeErrorr   r   r   r   Z"_GeneratorContextManager.__enter__   sD     Ity$)	C>! 	C78dB	Cs    5c                sn   Vf#    \        V P                  4        \        R4      hVf   V! 4       p V P                  P                  V4        \        R4      h  T P                  P                  4        i ; i  \         d     R# i ; i  \         d   pYBJu R p?# R p?i\         dJ   pYBJ d   Y4n         R p?R# \        T\        4      '       d   TP                  TJ d   Y2n         R p?R# h R p?i\         d   pYBJd   h Y4n         R p?R# R p?ii ; i  T P                  P                  4        i ; i)Ngenerator didn't stopFz#generator didn't stop after throw())
rQ   rJ   rS   closerR   Zthrow__traceback__
isinstance	__cause__BaseExceptionr   ZtypZvaluer   excrM   r   r   Z!_GeneratorContextManager.__exit__   s   ;%TXX%&'>?? } #u%F!"#HIIW HHNN$ !  ! ( '' <(1%  um44.*3'   
 #$-!
  su   A9 A B D A69BBDBDD+D,C0=,C0/C00D=D>DDD4r   N)	r(   r)   r*   r+   r,   r   r   r2   r3   r4   r5   r   rO   rO      s     
 0C7! 7!r   rO   c                   s0   a  ] tR t^t o RtR tR tRtV tR# )_AsyncGeneratorContextManagerz*Helper for @asynccontextmanager decorator.c                s   "   V = V =V = \        V P                  4      G R j  xL
 #  L  \
         d    \        R4      R hi ; i5i)NrP   )r?   r@   rA   anextrJ   StopAsyncIterationrS   r   r   r   r7   Z(_AsyncGeneratorContextManager.__aenter__   sL      Ity$)	Ctxx(((! 	C78dB	Cs%   A) ') A) AAc                s  "   Vf+    \        V P                  4      G R j  xL
   \        R4      hVf   V! 4       p V P                  P                  V4      G R j  xL
   \        R4      h LK  T P                  P                  4       G R j  xL 
  i ; i  \         d     R# i ; i LL  \         d   pYBJu R p?# R p?i\         dP   pYBJ d   Y4n         R p?R# \        T\        \        34      '       d   TP                  TJ d   Y2n         R p?R# h R p?i\         d   pYBJd   h Y4n         R p?R# R p?ii ; i  T P                  P                  4       G R j  xL 
  i ; i5i)NrT   Fz$generator didn't stop after athrow())r]   rJ   rS   acloser^   ZathrowrV   rW   rR   rX   rY   rZ   rM   r   r9   Z'_AsyncGeneratorContextManager.__aexit__   s6    ;,DHHo%%,&'>?? } #hhooe,,,F("#IJJe & ((//+++ &  -% ( '' <(1%  u}6H&IJJ.*3'   
 #$-!
 hhoo'''s   E%B A,B A. E%B* B(B* !D= ,B .BBBE%B%!E%$B%%E%(B* *D:5B=7D:8E%=D:
D:DE%2DE%DD:"D:#D5/E%5D::E%=E"EE""E%r   N)	r(   r)   r*   r+   r,   r7   r9   r2   r3   r4   r5   r   r\   r\      s     
 5C7( 7(r   r\   c                0   a  \        S 4      V 3R l4       pV# )a  @contextmanager decorator.

Typical usage:

    @contextmanager
    def some_generator(<arguments>):
        <setup>
        try:
            yield <value>
        finally:
            <cleanup>

This makes this:

    with some_generator(<arguments>) as <variable>:
        <body>

equivalent to this:

    <setup>
    try:
        <variable> = <value>
        <body>
    finally:
        <cleanup>
c                     < \        SW4      # r<   )rO   r?   r@   rA      *,r   helperZcontextmanager.<locals>.helper/  s    'd99r   r   rA   rd      f r   contextmanagerrg     s     6 4[: :Mr   c                r`   )a  @asynccontextmanager decorator.

Typical usage:

    @asynccontextmanager
    async def some_async_generator(<arguments>):
        <setup>
        try:
            yield <value>
        finally:
            <cleanup>

This makes this:

    async with some_async_generator(<arguments>) as <variable>:
        <body>

equivalent to this:

    <setup>
    try:
        <variable> = <value>
        <body>
    finally:
        <cleanup>
c                  ra   r<   )r\   rb   rc   r   rd   Z#asynccontextmanager.<locals>.helperP  s    ,T4>>r   r   re   rf   r   asynccontextmanagerrh   5  s     6 4[? ?Mr   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )r   iV  a
  Context to automatically close something at the end of a block.

Code like this:

    with closing(<module>.open(<arguments>)) as f:
        <block>

is equivalent to this:

    f = <module>.open(<arguments>)
    try:
        <block>
    finally:
        f.close()

c                    Wn         R # r<   thingr   rl   r&   r   rN   Zclosing.__init__g      
r   c                    V P                   # r<   rk   r   r   r   r   Zclosing.__enter__i  s    zzr   c                s:    V P                   P                  4        R # r<   )rl   rU   r   Zexc_info   &*r   r   Zclosing.__exit__k  s    

r   rk   N
r(   r)   r*   r+   r,   rN   r   r   r2   r3   r4   r5   r   r   r   V  s       r   c                   ri   )r   io  ar  Async context manager for safely finalizing an asynchronously cleaned-up
resource such as an async generator, calling its ``aclose()`` method.

Code like this:

    async with aclosing(<module>.fetch(<arguments>)) as agen:
        <block>

is equivalent to this:

    agen = <module>.fetch(<arguments>)
    try:
        <block>
    finally:
        await agen.aclose()

c                rj   r<   rk   rm   r&   r   rN   Zaclosing.__init__  rn   r   c                "   "   V P                   # 5ir<   rk   r   r   r   r7   Zaclosing.__aenter__  s     zz   c                sV   "   V P                   P                  4       G R j  xL
  R #  L5ir<   )rl   r_   rp   rq   r   r9   Zaclosing.__aexit__  s     jj!!!s   )')rk   N)
r(   r)   r*   r+   r,   rN   r7   r9   r2   r3   r4   r5   r   r   r   o  s     "" "r   c                   s6   a  ] tR tRt o RtR tR tR tRtV t	R# )_RedirectStreami  Nc                     Wn         . V n        R # r<   _new_target_old_targets)r   Z
new_targetr&   r   rN   Z_RedirectStream.__init__  s    %r   c                s    V P                   P                  \        \        V P                  4      4       \        \        V P                  V P                  4       V P                  # r<   )ry   appendrK   sys_streamsetattrrx   r   r   r   r   Z_RedirectStream.__enter__  sC      dll!;<T\\4#3#34r   c                sl    \        \        V P                  V P                  P	                  4       4       R # r<   )r}   r{   r|   ry   pop)r   exctypeexcinstexctbr   r   r   Z_RedirectStream.__exit__  s!    T\\4#4#4#8#8#:;r   rw   )
r(   r)   r*   r+   r|   rN   r   r   r2   r3   r4   r5   r   ru   ru     s     G
 
< <r   ru   c                       ] tR tRtRtRtRtR# )r   i  a  Context manager for temporarily redirecting stdout to another file.

# How to send help() to stderr
with redirect_stdout(sys.stderr):
    help(dir)

# How to write help() to a file
with open('help.txt', 'w') as f:
    with redirect_stdout(f):
        help(pow)
Zstdoutr   Nr(   r)   r*   r+   r,   r|   r2   r   r   r   r   r     s    
 Gr   c                   r   )r   i  zCContext manager for temporarily redirecting stderr to another file.Zstderrr   Nr   r   r   r   r   r     s
    MGr   c                   ri   )r   i  a'  Context manager to suppress specified exceptions

After the exception is suppressed, execution proceeds with the next
statement following the with statement.

     with suppress(FileNotFoundError):
         os.remove(somefile)
     # Execution still resumes here if the file was already removed
c                rj   r<   _exceptions)r   Z
exceptionsrq   r   rN   Zsuppress.__init__  s    %r   c                    R # r<   r   r   r   r   r   Zsuppress.__enter__      r   c                s    Vf   R # \        WP                  4      '       d   R# \        V\        4      '       d&   VP                  V P                  4      w  rEVf   R# VhR# )NTF)Z
issubclassr   ZBaseExceptionGroupZsplit)r   r   r   r   ZmatchZrests   &&&&  r   r   Zsuppress.__exit__  sT     ?g//00g122!--(8(89KE|Jr   r   Nrr   r4   r5   r   r   r     s     & r   c                   sr   a  ] tR tRt o Rt]R 4       t]R 4       tR tR t	R t
R tR	 tR
 tRR ltRtV tR# )_BaseExitStacki  z.A base class for ExitStack and AsyncExitStack.c                    \        W4      # r<   r   cmcm_exitr&   r   _create_exit_wrapperZ#_BaseExitStack._create_exit_wrapper      '&&r   c                  a aa VV V3R  lpV# )c                 s   < S! S/ SB  R # r<   r   r   r[   Ztbr?   callbackr@      &&&r   _exit_wrapperZ8_BaseExitStack._create_cb_wrapper.<locals>._exit_wrapper  s    d#d#r   r   r   r?   r@   r      bjl r   _create_cb_wrapperZ!_BaseExitStack._create_cb_wrapper  s    	$r   c                s$    \        4       V n        R # r<   )r    _exit_callbacksr   r   r   rN   Z_BaseExitStack.__init__  s    $wr   c                sf    \        V 4      ! 4       pV P                  Vn        \        4       V n        V# )z@Preserve the context stack by transferring it to a new instance.)rL   r   r    )r   Z	new_stacks   & r   pop_allZ_BaseExitStack.pop_all  s+    JL	$($8$8	!$wr   c                s    \        V4      p VP                  pV P                  W4       V#   \         d    T P	                  T4        T# i ; i)zRegisters a callback with the standard __exit__ method signature.

Can suppress exceptions the same way __exit__ method can.
Also accepts any object with an __exit__ method (registering a call
to the method instead of the object itself).
)rL   r   _push_cm_exitAttributeError_push_exit_callbackr   ZexitZ_cb_typeZexit_method   &&  r   pushZ_BaseExitStack.push  sX     :	2"++K
 t1  	+$$T* 	+s   , AAc                s    \        V4      p VP                  pVP                  pT! T4      pT P                  Y4       T#   \         d)    \	        RTP
                   RTP                   R24      Rhi ; i)zEnters the supplied context manager.

If successful, also pushes its __exit__ method as a callback and
returns the result of the __enter__ method.
'.z6' object does not support the context manager protocolN)rL   r   r   r   	TypeErrorr)   r*   r   r   r   r%   Z_enterZ_exitZresult   &&    r   enter_contextZ_BaseExitStack.enter_context  s     2h	S]]FLLE 2%  	Sa/q1A1A0B CG H INRS	Ss   A   3A3c               s`    V P                   ! V.VO5/ VB pWn        V P                  V4       V# )zLRegisters an arbitrary callback and arguments.

Cannot suppress exceptions.
)r   __wrapped__r   r   r   r?   r@   r      ""*, r   r   Z_BaseExitStack.callback  s9    
 //H4H4H %-!  /r   c                L    V P                  W4      pV P                  VR4       R# )z;Helper to correctly register callbacks to __exit__ methods.TN)r   r   r   r   r   r      &&& r   r   Z_BaseExitStack._push_cm_exit#  s"    11">  5r   c                s>    V P                   P                  W!34       R # r<   )r   rz   )r   r   is_syncs   &&&r   r   Z"_BaseExitStack._push_exit_callback(  s    ##W$78r   )r   N)T)r(   r)   r*   r+   r,   staticmethodr   r   rN   r   r   r   r   r   r   r2   r3   r4   r5   r   r   r     sV     8' '  
'(&6
9 9r   r   c                   ri   )r   i-  ao  Context manager for dynamic management of a stack of exit callbacks.

For example:
    with ExitStack() as stack:
        files = [stack.enter_context(open(fname)) for fname in filenames]
        # All opened files will automatically be closed at the end of
        # the with statement, even if attempts to open files later
        # in the list raise an exception.
c                r   r<   r   r   r   r   r   ZExitStack.__enter__8  s    r   c                s  a V^,          pVRJp\         P                  ! 4       oV3R lpRpRpV P                  '       dR   V P                  P                  4       w  rx Vf   RpM\	        V4      W"P
                  3pV! V!  '       d	   RpRpRpKa  Kc  V'       d    VP                  p
VhT;'       d    T#   \         d   p	T! Y4       RpT	p Rp	?	K  Rp	?	ii ; i  \         d
    X
Tn        h i ; i)   Nc                 Z   <  V P                   pVe   W!J d   R# VSJ d   MTp K#  Wn         R# r   N__context__new_excZold_excZexc_context	frame_exc   && r   _fix_exception_contextZ2ExitStack.__exit__.<locals>._fix_exception_contextB  7    %11&+*@)+% #*r   FTNNNr{   Z	exceptionr   r~   rL   rV   rY   r   )r   exc_detailsr[   received_excr   suppressed_excpending_raiser   cbr   	fixed_ctxr   s   &*         @r   r   ZExitStack.__exit__;  s    !n$ MMO		*  """..224KG;"2K"&s)S2C2C"CK{##%)N$)MC $   OO		 ... ! &w4 $	 ! "+s*   )B4 B4 C 4C?CCC-c                s,    V P                  RRR4       R# z%Immediately unwind the context stack.N)r   r   r   r   rU   ZExitStack.closeq  s    dD$'r   r   N)
r(   r)   r*   r+   r,   r   r   rU   r2   r3   r4   r5   r   r   r   -  s     4/l( (r   c                   sn   a  ] tR tRt o Rt]R 4       t]R 4       tR tR t	R t
R tR	 tR
 tR tRtV tR# )r	   iw  a  Async context manager for dynamic management of a stack of exit
callbacks.

For example:
    async with AsyncExitStack() as stack:
        connections = [await stack.enter_async_context(get_connection())
            for i in range(5)]
        # All opened connections will automatically be released at the
        # end of the async with statement, even if attempts to open a
        # connection later in the list raise an exception.
c                r   r<   r   r   r&   r   _create_async_exit_wrapperZ)AsyncExitStack._create_async_exit_wrapper  r   r   c               r   )c                 s4   <"   S! S/ SB G R j  xL
  R #  L5ir<   r   r   r   r   r   Z>AsyncExitStack._create_async_cb_wrapper.<locals>._exit_wrapper  s     D)D)))s   r   r   r   r   _create_async_cb_wrapperZ'AsyncExitStack._create_async_cb_wrapper  s    	*r   c                s  "   \        V4      p VP                  pVP                  pT! T4      G Rj  xL
 pT P                  Y4       T#   \         d)    \	        RTP
                   RTP                   R24      Rhi ; i LM5i)zEnters the supplied async context manager.

If successful, also pushes its __aexit__ method as a callback and
returns the result of the __aenter__ method.
r   r   zC' object does not support the asynchronous context manager protocolN)rL   r7   r9   r   r   r)   r*   _push_async_cm_exitr   r   r   enter_async_contextZ"AsyncExitStack.enter_async_context  s      2h	'^^FMME
 bz!  +  	'a/q1A1A0B CT U "&'	' "s%   BA
 BB B
3A==Bc                s    \        V4      p VP                  pV P                  W4       V#   \         d    T P	                  TR4        T# i ; i)zRegisters a coroutine function with the standard __aexit__ method
signature.

Can suppress exceptions the same way __aexit__ method can.
Also accepts any object with an __aexit__ method (registering a call
to the method instead of the object itself).
F)rL   r9   r   r   r   r   r   r   push_async_exitZAsyncExitStack.push_async_exit  sZ     :	8",,K
 $$T7  	2$$T51 	2s   , AAc               sb    V P                   ! V.VO5/ VB pWn        V P                  VR4       V# )zVRegisters an arbitrary coroutine function and arguments.

Cannot suppress exceptions.
F)r   r   r   r   r   r   push_async_callbackZ"AsyncExitStack.push_async_callback  s;    
 55hNNN %-!  6r   c                sH   "   V P                  RRR4      G Rj  xL
  R#  L5ir   )r9   r   r   r   r_   ZAsyncExitStack.aclose  s     nnT4...s   " "c                r   )zDHelper to correctly register coroutine function to __aexit__
method.FN)r   r   r   r   r   r   Z"AsyncExitStack._push_async_cm_exit  s$     77D  6r   c                r6   r<   r   r   r   r   r7   ZAsyncExitStack.__aenter__  s
     r8   c                s  a"   V^,          pVRJp\         P                  ! 4       oV3R lpRpRpV P                  '       dk   V P                  P                  4       w  rx Vf   RpM\	        V4      W"P
                  3pV'       d   V! V!  p	MV! V!  G Rj  xL
 p	V	'       d	   RpRpRpKz  K|  V'       d    VP                  pVhT;'       d    T#  L9  \         d   p
T! Y4       RpT
p Rp
?
K  Rp
?
ii ; i  \         d
    XTn        h i ; i5i)r   Nc                 r   r   r   r   r   r   r   Z8AsyncExitStack.__aexit__.<locals>._fix_exception_context  r   r   FTr   r   )r   r   r[   r   r   r   r   r   r   Zcb_suppressr   r   r   s   &*          @r   r9   ZAsyncExitStack.__aexit__  s    !n$ MMO		*  """..224KG;"2K"&s)S2C2C"CK"$k"2K(*K(8"8K%)N$)MC    OO		 ...+ #9 ! &w4 $	 ! "+sq   >DD%C C CC "C (D5C6 DDC C3C.(D.C33D6D

Dr   N)r(   r)   r*   r+   r,   r   r   r   r   r   r   r_   r   r7   r9   r2   r3   r4   r5   r   r	   r	   w  sZ     
 ' '  
$$/78/ 8/r   c                   sF   a  ] tR tRt o RtR
R ltR tR tR tR t	R	t
V tR# )r   i  a7  Context manager that does no additional processing.

Used as a stand-in for a normal context manager, when a particular
block of code is only sometimes used with a normal context manager:

cm = optional_cm if condition else nullcontext()
with cm:
    # Perform operation, using optional_cm if condition is True
Nc                rj   r<   enter_result)r   r   r&   r   rN   Znullcontext.__init__  s    (r   c                ro   r<   r   r   r   r   r   Znullcontext.__enter__  s       r   c                r   r<   r   r   Zexcinforq   r   r   Znullcontext.__exit__  r   r   c                rs   r<   r   r   r   r   r7   Znullcontext.__aenter__  s        rt   c                s   "   R # 5ir<   r   r   rq   r   r9   Znullcontext.__aexit__  s     r8   r   r<   )r(   r)   r*   r+   r,   rN   r   r   r7   r9   r2   r3   r4   r5   r   r   r     s(     )!! r   c                   ri   )r   i"  zHNon thread-safe context manager to change the current working directory.c                rv   r<   )path_old_cwd)r   r   r&   r   rN   Zchdir.__init__%  s    	r   c                s    V P                   P                  \        P                  ! 4       4       \        P                  ! V P
                  4       R # r<   )r   rz   osZgetcwdr   r   r   r   r   r   Zchdir.__enter__)  s*    RYY[)
r   c                sb    \         P                  ! V P                  P                  4       4       R # r<   )r   r   r   r~   r   rq   r   r   Zchdir.__exit__-  s    
""$%r   )r   r   Nrr   r4   r5   r   r   r   "  s     R& &r   )rh   rg   r   r   r   r   r	   r
   r   r   r   r   r   r   )#r,   r0   r   r{   r!   Zcollectionsr    Z	functoolsr   Ztypesr   r   Z__all__ZABCr   r   Zobjectr
   rH   rI   rO   r\   rg   rh   r   r   ru   r   r   r   r   r   r	   r   r   r   r   r   <module>r      s9   : 
 	 
    *SWW 0#'' 2v .F  ? ?0G! G!RG( G(TBB$ 2"* "4<, <$o  o $% $NQ9 Q9jF( 6 F(TM/^%@ M/`(*E 6&" &r   