+
    5mj  c                  ^   ^ RI Ht ^ RIt^ RIHu Ht ^ RIt^ RI	t	^ RI
t
^ RIt^ RIHt ]P                  P                  ^ ]! ]! ]4      P%                  4       P&                  ^,          4      4       ^ RIHtHt ^ RIHtHt R R ltRR ltR	 tR
 R ltR tR tR t R t!R t"R t#R t$R t%R# )    )annotationsN)Path)DeviceAuthFlowDeviceAuthSession)DeviceAuthProtocolDeviceAuthPromptPartsc                    V ^8  d   QhRRRR/# )   payloadstrreturn )formats   "`/home/user/overdeck-private-tests/workstation-ai-broad/modules/systray/tests/test_device_auth.py__annotate__r      s     ) )C )C )    c                    \         P                  ! V P                  R 4      4      P                  R4      P	                  R4      pRV R2# )utf-8ascii=zheader.z
.signature)base64urlsafe_b64encodeencodedecoderstrip)r
   encodeds   & r   _make_fake_jwtr      sA    &&w~~g'>?FFwOVVWZ[GWIZ((r   c                T   a aaaaa  ! R  R4      o ! VVV VVV3R lR4      pV! 4       # )c                  &    ] tR t^tR tRR ltRtR# )'_build_fake_process.<locals>.FakeStreamc                	&    \        V4      V n        R # N)list_chunks)selfchunkss   &&r   __init__0_build_fake_process.<locals>.FakeStream.__init__   s    <DLr   c                	`    V P                   '       g   R # V P                   P                  ^ 4      # ) )r#   pop)r$   _sizes   &&r   read,_build_fake_process.<locals>.FakeStream.read   s#    <<<<<##A&&r   )r#   N))__name__
__module____qualname____firstlineno__r&   r,   __static_attributes__r   r   r   
FakeStreamr      s    	(	' 	'r   r4   c                  R   < ] tR t^$tV VV3R ltRVV3R lltR tV3R ltR tRt	R# )	(_build_fake_process.<locals>.FakeProcessc                	f   < S! S4      V n         S! S4      V n        R V n        RV n        . V n        R # )NF)stdoutstderr
returncode
terminated
wait_calls)r$   r4   stderr_chunksstdout_chunkss   &r   r&   1_build_fake_process.<locals>.FakeProcess.__init__%   s0    $]3DK$]3DK"DO#DO DOr   Nc                	X   < V P                   P                  V4       Se   ShSV n        S# r!   )r<   appendr:   )r$   timeoutwait_raiseswait_results   &&r   wait-_build_fake_process.<locals>.FakeProcess.wait,   s.    OO""7+&!!)DOr   c                	    V P                   # r!   r:   r$   s   &r   poll-_build_fake_process.<locals>.FakeProcess.poll3   s    ??"r   c                	0   < R V n         Se
   SV n        R# R# )TN)r;   r:   )r$   terminate_changes_returncodes   &r   	terminate2_build_fake_process.<locals>.FakeProcess.terminate6   s    "DO+7"> 8r   c                	    RV n         R# )	   NirH   rI   s   &r   kill-_build_fake_process.<locals>.FakeProcess.kill;   s	     DOr   )r:   r9   r8   r;   r<   r!   )
r/   r0   r1   r2   r&   rE   rJ   rN   rR   r3   )r4   r=   r>   rM   rC   rD   s   r   FakeProcessr6   $   s!    	!	 		#	?
	!r   rT   r   )r>   r=   rD   rC   rM   rT   r4   s   fffff @r   _build_fake_processrU      s&    ' '! ! !4 =r   c           	       a . ROp\        V4      oV3R lpVP                  \        RV4       \        4       P	                  V RR7      p\        4       P                  VRR7      pVP                  pRqvV8H  q'       g   \        P                  ! RV3RWg34      RR	\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR	R
\        P                  ! V4      R\        P                  ! V4      /,          p	RRV	/,          p
\        \        P                  ! V
4      4      hR;p;rVP                  pRqvV8H  q'       g   \        P                  ! RV3RWg34      RR	\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR	R
\        P                  ! V4      R\        P                  ! V4      /,          p	RRV	/,          p
\        \        P                  ! V
4      4      hR;p;rRqP                   q{V9   q'       g   \        P                  ! RV3RW34      R\        P                  ! V4      RR	\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR	R\        P                  ! V4      /,          p	RRV	/,          p
\        \        P                  ! V
4      4      hR;p;rRqP                   q{V9  q'       g   \        P                  ! RV3RW34      R\        P                  ! V4      RR	\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR	R\        P                  ! V4      /,          p	RRV	/,          p
\        \        P                  ! V
4      4      hR;p;rR# )$[32mOpen this URL to continue:[0m
c                    < S# r!   r   )argskwargsfake_processs   *,r   
fake_popenJtest_read_prompt_strips_ansi_and_extracts_url_and_code.<locals>.fake_popenI   s	    r   PopenFbackup_existingg?timeout_secs$https://auth.openai.com/codex/devicepy0promptpy2py5assert %(py7)spy7N
H6NU-AJGZ0zOpen this URL to continuepy1py3z[)rW   z/  [1mhttps://auth.openai.com/codex/device[0m
z2Then enter code [33mH6NU-AJGZ0[0m to authorize.
==)z+%(py2)s
{%(py2)s = %(py0)s.url
} == %(py5)s)z,%(py2)s
{%(py2)s = %(py0)s.code
} == %(py5)s)in)z0%(py1)s in %(py5)s
{%(py5)s = %(py3)s.raw_text
})not in)z4%(py1)s not in %(py5)s
{%(py5)s = %(py3)s.raw_text
})rU   setattr
subprocessr   startread_prompturl
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationcoderaw_text)tmp_pathmonkeypatchoutputr\   sessionre   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert2r[   s   &&           @r   6test_read_prompt_strips_ansi_and_extracts_url_and_coder   A   s(   F
 'v.L 
GZ8$$Xu$EG))')DF::?????????:??????6????6???:????????????;;&,&,&&&&&;&&&&&&6&&&&6&&&;&&&,&&&&&&&&&9//9/99999&999&999999&9999&999/99999999)//)/)))))7)))7))))))&))))&)))/))))))))r   c                   V ^8  d   QhRR/# )r	   r   Noner   )r   s   "r   r   r   W   s      D r   c                    \        4       p V P                  R R4      w  rV P                  VR4      w  rRq1V8H  qD'       g   \        P                  ! RV3RW34      RR\        P
                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR	;rCR
pRpRp	\        VVV	R7      qV
8H  qD'       EgI   \        P                  ! RV3RW*34      RR\        P
                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRRR\        P
                  ! 4       9   g!   \        P                  ! \        4      '       d   \        P                  ! \        4      MRR\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V	4      R\        P                  ! V
4      /,          pRRV/,          p\        \        P                  ! V4      4      hR	;p;p;p;rR	# )zOpen z.[32mhttps://auth.openai.com/codex/device[0m
z)Then enter code H6NU-AJGZ0 to authorize.
zSOpen https://auth.openai.com/codex/device
Then enter code H6NU-AJGZ0 to authorize.
rd   bufferedrl   assert %(py5)srg   Nrc   rj   )ru   r~   r   re   rf   r   py4py6py8py10assert %(py12)spy12rm   )z%(py0)s == %(py3)s)zV%(py0)s == %(py10)s
{%(py10)s = %(py2)s(url=%(py4)s, code=%(py6)s, raw_text=%(py8)s)
})r   feedrv   rw   rx   ry   rz   r{   r|   r}   r   )protocolr   re   r   r   @py_format4r   r   @py_assert5@py_assert7@py_assert9@py_format11@py_format13s                r   :test_device_auth_protocol_feeds_chunks_and_extracts_promptr   W   s   !#H}}W.efH}}X/[\Hnnnnnnnn8nnnnnn8nnnn8nnnnnnnnnnnn2 i*2h      	6   	  	6   	6   	  	*   	*   	2  	  	 i  	       	  r   c                l  a aaa S R ,          oSP                  R4       \        . 4      o. oVVVV 3R lpVP                  \        RV4       \	        4       P                  S RR7      pVP                  pRqTVJ qf'       g   \        P                  ! RV3RWE34      RR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      R	\        P                  ! V4      /,          pR
RV/,          p\        \        P                  ! V4      4      hR;p;reSP                  qD! 4       qf'       * q'       g   RRR\        P                  ! 4       9   g   \        P                  ! S4      '       d   \        P                  ! S4      MRR\        P                  ! V4      R\        P                  ! V4      /,          p\        \        P                  ! V4      4      hR;p;riRpS V,          qfP                   qU! 4       p
RqV8H  q'       g   \        P                  ! RV3RW34      RR\        P                  ! 4       9   g   \        P                  ! S 4      '       d   \        P                  ! S 4      MRR\        P                  ! V4      R	\        P                  ! V4      R\        P                  ! V
4      R\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR;p;p;p;p
;rS'       gw   RRR\        P                  ! 4       9   g   \        P                  ! S4      '       d   \        P                  ! S4      MR/,          p\        \        P                  ! V4      4      hR# )	auth.json   {"token":"before"}c                   < SP                  W34       SP                  q"! 4       q3'       * qD'       g   RRR\        P                  ! 4       9   g   \        P
                  ! S4      '       d   \        P                  ! S4      MRR\        P                  ! V4      R\        P                  ! V4      /,          p\        \        P                  ! V4      4      hR;p;r4RpSV,          q3P                  qf! 4       pRqV8H  q'       g   \        P                  ! RV	3RWx34      RR	\        P                  ! 4       9   g   \        P
                  ! S4      '       d   \        P                  ! S4      MR	R\        P                  ! V4      R
\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      /,          p
RRV
/,          p\        \        P                  ! V4      4      hR;p;p;p;p;rS# )r)   Eassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}rd   	auth_pathrf   r   Nauth.json.bakr   r   rg   ri   r   r   r   rm   zV%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).read_bytes
}()
} == %(py10)s)rA   existsrx   ry   rv   rz   r{   r|   r}   
read_bytesrw   )rY   rZ   r   r   r   r   r   @py_assert6r   @py_assert8r   r   r   r[   popen_callsr   s   *,          r   r\   Itest_start_moves_existing_auth_to_backup_before_spawn.<locals>.fake_popenk   s,   D>*##%#%%%%%%%%%%%9%%%%9%%%#%%%%%%%%%%*Q?*Q66Q68Q<QQ<QQQQQQ8QQQQQQQQQQQQQ?QQQ6QQQ8QQQ<QQQQQQQQQQr   r^   Tr_   rd   r   rf   rg   rh   ri   Nr   r   r   r   r   r   r   r   zassert %(py0)sr   is)z2%(py2)s
{%(py2)s = %(py0)s.had_backup
} is %(py5)srm   r   )write_bytesrU   rq   rr   r   rs   
had_backuprv   rw   rx   ry   rz   r{   r|   r}   r   r   )r   r   r\   r   r   r   r   r   r   r   r   r   r   r   r   @py_format1r   r[   r   s   f&              @@@r   5test_start_moves_existing_auth_to_backup_before_spawnr   e   s#   ;&I/0&r*LK  
GZ8$$Xt$DG%%%%%%%%%%%%%7%%%%7%%%%%%%%%%%%%%!!!!!!!!!!!!y!!!!y!!!!!!!!!!!!!&MH&M22M24M8MM8MMMMMM4MMMMMMHMMMMHMMMMMM2MMM4MMM8MMMMMMMMMM;;;r   c                "   R pV R,          P                  V4       V R,          P                  R4       \        4       P                  V 4       Rq V,          q3P                  qD! 4       qUV8H  qf'       Eg+   \        P
                  ! RV3RWQ34      RR\        P                  ! 4       9   g   \        P                  ! V 4      '       d   \        P                  ! V 4      MRR\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      R	R
\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR
/,          pRRV/,          p\        \        P                  ! V4      4      hR;p;p;p;rVRq V,          q3P                  qD! 4       qU'       * qf'       g   RRR\        P                  ! 4       9   g   \        P                  ! V 4      '       d   \        P                  ! V 4      MRR\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      /,          p	\        \        P                  ! V	4      4      hR;p;p;p;rVR# )s,   {"id_token":"before","refresh_token":"keep"}r   r   s   {"id_token":"after"}rd   r   rf   rg   ri   py9originalassert %(py11)spy11NQassert not %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).exists
}()
}rm   zU%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).read_bytes
}()
} == %(py9)s)r   r   rollbackr   rv   rw   rx   ry   rz   r{   r|   r}   r   )
r   r   r   r   r   r   r   @py_format10@py_format12@py_format9s
   &         r   +test_rollback_restores_backup_bytes_exactlyr   {   sx   >H,,X6(()@Ah'"<{"<..<.0<H<<<<<0<<<<<<H<<<<H<<<{<<<.<<<0<<<<<<H<<<<H<<<<<<<<<*4?*42242444444444444444444?444244444444444r   c                "   R pV R,          P                  V4       V R,          P                  R4       \        4       P                  V 4       Rq V,          q3P                  qD! 4       qUV8H  qf'       Eg+   \        P
                  ! RV3RWQ34      RR\        P                  ! 4       9   g   \        P                  ! V 4      '       d   \        P                  ! V 4      MRR\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      R	R
\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR
/,          pRRV/,          p\        \        P                  ! V4      4      hR;p;p;p;rVRq V,          q3P                  qD! 4       qU'       * qf'       g   RRR\        P                  ! 4       9   g   \        P                  ! V 4      '       d   \        P                  ! V 4      MRR\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      /,          p	\        \        P                  ! V	4      4      hR;p;p;p;rVR# )s   {"id_token":"live"}r   r   s   {"id_token":"stale"}rd   r   rf   rg   ri   r   
auth_bytesr   r   Nr   rm   r   )r   r   commitr   rv   rw   rx   ry   rz   r{   r|   r}   r   )
r   r   r   r   r   r   r   r   r   r   s
   &         r   test_commit_removes_backup_onlyr      sx   'J((4,,-DEH%">{">..>.0>J>>>>>0>>>>>>H>>>>H>>>{>>>.>>>0>>>>>>J>>>>J>>>>>>>>>*4?*42242444444444444444444?444244444444444r   c           	        \        . \        P                  ! R RR7      R7      p\        WRR7      p\	        4       P                  VRR7      pRqCVJ qU'       g   \        P                  ! RV3RW434      RR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR	\        P                  ! V4      /,          pR
RV/,          p\        \        P                  ! V4      4      hR;rTVP                  pRqVJ q'       g   \        P                  ! RV	3RWX34      RR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p
\        \        P                  ! V
4      4      hR;p;rR# )codex{Gz?)cmdrB   )rC   Fprocess
codex_homer   ra   rd   resultrl   r   rg   NTr[   rf   rh   ri   r   )z%(py0)s is %(py3)s)z2%(py2)s
{%(py2)s = %(py0)s.terminated
} is %(py5)s)rU   rr   TimeoutExpiredr   r   await_completionrv   rw   rx   ry   rz   r{   r|   r}   r;   )r   r[   r   r   r   r   r   r   r   r   r   s   &          r   6test_await_completion_times_out_and_terminates_processr      s   &

11gtLL  V[\G..wT.JFU?666U""*d*d*****"******<****<***"***d********r   c                   R pV R,          P                  R\        V4      ,           R,           RR7       \        . ^ R7      p\        W RR7      p\	        4       qDP
                  pR	qe! W6R
7      pRqVJ q'       Eg_   \        P                  ! RV	3RWx34      RR\        P                  ! 4       9   g!   \        P                  ! \        4      '       d   \        P                  ! \        4      MRR\        P                  ! V4      R\        P                  ! V4      RR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      /,          p
RRV
/,          p\        \        P                  ! V4      4      hR;p;p;p;p;rR# ){"email":"user@example.com"}r   z{"id_token":"z"}r   encodingrD   Fr   r   ra   Trd   r   rf   r   rg   r   ri   r   r   assert %(py14)spy14Nr   z%(py9)s
{%(py9)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s()
}.await_completion
}(%(py5)s, timeout_secs=%(py7)s)
} is %(py12)s)
write_textr   rU   r   r   r   rv   rw   rx   ry   rz   r{   r|   r}   )r   r
   r[   r   r   r   r   r   @py_assert11@py_assert10r   @py_format15s   &           r   ;test_await_completion_succeeds_only_with_decodable_id_tokenr      s"   ,G''.11D87 (  'rq9LV[\GP,,P4P,WHPDPDPPPPPHPPPPPP>PPPP>PPPPPP,PPPPPPWPPPPWPPP4PPPHPPPDPPPPPPPPPr   c                   R pRRRRRR\        V4      //pV R,          P                  \        P                  ! V4      RR	7       \	        . ^ R
7      p\        W0RR7      p\        4       qUP                  pRqv! WGR7      pRqV	J q'       Eg_   \        P                  ! RV
3RW34      RR\        P                  ! 4       9   g!   \        P                  ! \        4      '       d   \        P                  ! \        4      MRR\        P                  ! V4      R\        P                  ! V4      RR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V	4      /,          pRRV/,          p\        \        P                  ! V4      4      hR;p;p;p;p;rR# )r   	auth_modechatgptlast_refreshz2026-07-01T00:00:00Ztokensid_tokenr   r   r   r   Fr   r   ra   Trd   r   rf   r   rg   r   ri   r   r   r   r   Nr   r   )r   r   jsondumpsrU   r   r   r   rv   rw   rx   ry   rz   r{   r|   r}   )r   r
   auth_payloadr[   r   r   r   r   r   r   r   r   r   s   &            r   8test_await_completion_accepts_current_codex_tokens_shaper      s8   ,GY.:~g67L
 ''

<(@7'S&rq9LV[\GP,,P4P,WHPDPDPPPPPHPPPPPP>PPPP>PPPPPP,PPPPPPWPPPPWPPP4PPPHPPPDPPPPPPPPPr   c                  aa V R ,          pV R,          pVP                  4        VP                  4        VR,          pVP                  RRR7       VP                  R4       VR,          P                  V4       VR,          pVP                  RRR7       VP                  R4       VP	                  RV R	V 24       VP                  R
RR7       . o\        . 4      oVV3R lpVP                  \        RV4       \        4       P                  V RR7       S^ ,          ^ ,          ^ ,          pV^ ,          qP                  q! 4       p
\        V
4      qV8H  q'       EgI   \        P                  ! R'V3R(W34      R\        P                  ! V4      RR\         P"                  ! 4       9   g!   \        P$                  ! \        4      '       d   \        P                  ! \        4      MRRR\         P"                  ! 4       9   g   \        P$                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V	4      R\        P                  ! V
4      R\        P                  ! V4      /,          pRRV/,          p\'        \        P(                  ! V4      4      hR;p;p;p	;rVR,          pRR.qV8H  q'       gy   \        P                  ! R'V3R)W34      R\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p\'        \        P(                  ! V4      4      hR;p;rS^ ,          ^,          R,          pVR,          p\        V 4      qV	8H  q'       Eg   \        P                  ! R'V3R*W34      R\        P                  ! V4      RR\         P"                  ! 4       9   g!   \        P$                  ! \        4      '       d   \        P                  ! \        4      MRRR \         P"                  ! 4       9   g   \        P$                  ! V 4      '       d   \        P                  ! V 4      MR R\        P                  ! V	4      /,          pR!RV/,          p\'        \        P(                  ! V4      4      hR;p;rVR
,          p\*        P,                  q! 4       p
R"qV,          p\        V4      pVV8H  q'       Egh   \        P                  ! R'V3R+VV34      R\        P                  ! V4      RR\         P"                  ! 4       9   g!   \        P$                  ! \        4      '       d   \        P                  ! \        4      MRRR#\         P"                  ! 4       9   g!   \        P$                  ! \*        4      '       d   \        P                  ! \*        4      MR#R\        P                  ! V	4      R\        P                  ! V
4      R\        P                  ! V4      R$\        P                  ! V4      /,          pR%R&V/,          p\'        \        P(                  ! V4      4      hR;p;p;p	;p
;p;ppR# ),shimreal_tmpjail-shim.sh
#!/bin/sh
r   r     r   PATH:CODEX_SQLITE_HOMEF)raisingc                 ,   < SP                  W34       S# r!   rA   rY   rZ   r[   r   s   *,r   r\   Ptest_start_spawns_resolved_codex_skipping_agent_session_shim.<locals>.fake_popen       D>*r   r^   r_   rk   rl   r   r   r   r   r   r   r   N:   NNloginz--device-authassert %(py6)senv
CODEX_HOMEr   zassert %(py8)sz.codex-shared-stater   py13zassert %(py15)spy15rm   )zf%(py1)s == %(py10)s
{%(py10)s = %(py3)s(%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s.resolve
}()
})
}z%(py1)s == %(py4)s)z0%(py1)s == %(py6)s
{%(py6)s = %(py3)s(%(py4)s)
})zp%(py1)s == %(py13)s
{%(py13)s = %(py3)s((%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s.home
}()
} / %(py10)s))
})mkdirr   chmod
symlink_tosetenvdelenvrU   rq   rr   r   rs   resolver   rv   rw   r{   rx   ry   rz   r|   r}   r   home)r   r   shim_dirreal_dir	shim_bodyr   r\   argvr   r   r   r   r   r   r   r   @py_format5@py_format7r   r   r   @py_assert12@py_format14@py_format16r[   r   s   &&                      @@r   <test_start_spawns_resolved_codex_skipping_agent_session_shimr     s   & H& HNNNN--I9OOE##I.gDOOMGO4JJuv(1XJ78*E:K&r*L 
GZ88U;q>!QD7),,),.)c.))))))))7)))7))))))c))))c)))))))$))))$))),))).))))))))))))811111111181118111111111111
a.
E
"C|-H--------------------------H----H-----------"#O499O9;O9NO9N+NOs+N'OO#'OOOOOO#'OOOO#OOOOOOsOOOOsOOOOOOO4OOOO4OOO9OOO;OOO9NOOO'OOOOOOOOOOr   c                  a
a V R ,          pVP                  4        VR,          pVP                  RRR7       VP                  R4       VR,          P                  V4       VP	                  R\        V4      4       . o\        . 4      o
V
V3R lpVP                  \        R	V4       \        4       P                  V R
R7       S^ ,          ^ ,          ^ ,          ^ ,          pRqeV8H  qw'       gy   \        P                  ! RV3RWV34      R\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p	\        \        P                  ! V	4      4      hR;p;rvR# )r   r   r   r   r   r   r   r   c                 ,   < SP                  W34       S# r!   r   r   s   *,r   r\   Itest_start_falls_back_to_codex_when_only_shim_on_path.<locals>.fake_popen   r   r   r^   Fr_   rk   r   r   r   Nrm   r   )r   r   r   r   r   r   rU   rq   rr   r   rs   rv   rw   r{   r|   r}   )r   r   r  r  r\   r   r   r   r  r	  r[   r   s   &&        @@r   5test_start_falls_back_to_codex_when_only_shim_on_pathr     s   & HNN--I9OOE##I.vs8}-K&r*L 
GZ88U;q>!Q"-g-g-----"---"---g--------r   )r   r   NN)&
__future__r   builtinsrx   _pytest.assertion.rewrite	assertionrewriterv   r   r   rr   syspathlibr   pathinsertr   __file__r  parentsdevice_authr   r   device_auth_protocolr   r   r   rU   r   r   r   r   r   r   r   r   r  r  r   r   r   <module>r     s    "      
  3tH~--/77:; < 9 J)
*Z*,,55	+QQPD.r   