Ë
    œ.æjŽ†  ã                  óZ  — U d dl mZ g d¢Zd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZ 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mZmZmZmZ d dlmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ejR                  dk(  rd dl*m+Z+ d dl*m,Z- nd dl m-Z- dZ.de/d<   dZ0de/d<   dZ1de/d<   dZ2de/d<   ejf                  ejh                  z  Z5de/d<   dZ6de/d<    e7«       Z8de/d <    ejr                  «       Z:d!e/d"<    G d#„ d$e«      Z;d.d%„Z<d/d&„Z=d0d'„Z>d1d(„Z?d2d)„Z@d3d*„ZAd4d+„ZBd5d,„ZCg d-¢ZDy)6é    )Úannotations)	Ú
contextlibzfilelock._identityzfilelock._soft_protocolzfilelock._utilÚ	itertoolsÚpathlibÚreÚsecretsÚtypingN)Úsuppress)ÚEACCESÚEEXISTÚEPERM)Úislice)ÚPath)ÚFinal)ÚBaseFileLockÚ_raise_grouped_errors)Ú	host_nameÚowner_is_current_processÚowner_is_staleÚprocess_start_token)ÚSTRICT_SOFT_SENTINEL_RECORD)Úbreak_lock_fileÚexchange_backÚexchange_namesÚexchange_supportedÚ	pin_inodeÚraise_on_not_writable_fileÚremove_own_fileÚ	write_allÚwin32)Úopen_read_without_oplock_wait)Úunlink_without_oplock_wait)Úunlink_pathg       @zFinal[float]ÚMALFORMED_LOCK_AGE_THRESHOLDi   z
Final[int]Ú_MAX_LOCK_FILE_SIZEé
   Ú_UNLINK_MAX_RETRIESé   Ú#_MARKER_WITH_START_TOKEN_LINE_COUNTÚ_OTHERS_WRITEÚ z
Final[str]Ú_RECORDLESS_MARKERzFinal[set[str]]Ú_CLAIMS_IN_PROGRESSzFinal[threading.Lock]Ú_CLAIMS_LOCKc                  óª  ‡ — e Zd ZU dZdZded<   dZded<   dZded	<   dZded
<   dZ	ded<   dZ
ded<   ded<   d/d„Zd0d„Zd/d„Zd/d„Zd1d„Zd1d„Zd2d„Zd3d„Z	 	 	 	 	 	 	 	 	 	 d4d„Zd5d„Zd6d„Zed7d„«       Zd8d„Zd9d„Zd:d „Zed;d!„«       Zed0d"„«       Zed<d#„«       Zed=d$„«       Z d/d%„Z!d>ˆ fd&„Z"d/d'„Z#d?d(„Z$d@d)„Z%dAd*„Z&d/d+„Z'd/d,„Z(dBd-„Z)dCd.„Z*ˆ xZ+S )DÚSoftFileLockaz  
    Cooperative file lock based on a shared existence marker.

    Unlike :class:`UnixFileLock <filelock.UnixFileLock>` and :class:`WindowsFileLock <filelock.WindowsFileLock>`, this
    lock does not use OS-level locking primitives. Instead, it creates the lock file with ``O_CREAT | O_EXCL`` and
    treats its existence as the lock indicator. The filesystem must provide coherent exclusive creation and directory
    updates to each participating process. A crash can leave the marker behind.

    The marker contains the holder's PID and hostname. A contender may remove it when it can no longer find a same-host
    process with that PID. A configured :attr:`~filelock.BaseFileLock.lifetime` also permits removal based on marker
    age, including while the holder remains alive. Age-based expiry can overlap protected operations and does not
    provide strict mutual exclusion.

    TÚboolÚ_lifetime_supported)ÚStrictSoftFileLockÚSoftFileLeaseztuple[str, str] | NoneÚ_lifetime_replacementsFÚ_preserve_lock_file_supportedÚ_on_acquired_supportedNz+tuple[tuple[float, int, int], float] | NoneÚ_marker_seenútuple[int, int] | NoneÚ_marker_cleanupz	list[int]Ú_marker_fdsc                ó  — | j                  «        t        | j                  «       t        j                  t        j
                  z  t        j                  z  t        j                  z  }t        t        dd «      x}�||z  }	 t        j                  | j                  || j                  «       t         z  «      }d }	 t'        t        j(                  |«      «      }| j+                  |«       | j-                  |«       | j/                  |«       | j1                  ||«       y # t        $ rT}|j                  t        k(  s'|j                  t        k(  rt         j"                  dk(  s‚ | j%                  «        Y d }~y d }~ww xY w# t2        $ �ru | j5                  «        	 |€Ct7        t        «      5  t'        t        j(                  |«      «      }d d d «       n# 1 sw Y   nxY wt         j"                  dk7  r;t7        t        «      5  t9        | j                  |«       d d d «       n# 1 sw Y   nxY w	 t        j:                  |«       t         j"                  dk(  r<| j=                  |«       ‚ # t         j"                  dk(  r| j=                  |«       w w xY w‚ # 	 t        j:                  |«       t         j"                  dk(  r| j=                  |«       w w # t         j"                  dk(  r| j=                  |«       w w xY wxY ww xY w)NÚ
O_NOFOLLOWr    )Ú_finish_marker_cleanupr   Ú
_lock_pathÚosÚO_WRONLYÚO_CREATÚO_EXCLÚO_TRUNCÚgetattrÚopenÚ
_open_moder*   ÚOSErrorÚerrnor   r   ÚsysÚplatformÚ_try_break_stale_lockÚ_file_identityÚfstatÚ_mark_descriptor_pendingÚ_apply_explicit_modeÚ_write_lock_infoÚ_mark_descriptor_ownedÚBaseExceptionÚ_mark_descriptor_releasedr
   r   ÚcloseÚ_unlink_held_marker)ÚselfÚflagsÚ
o_nofollowÚfdÚ	exceptionÚidentitys         úQ/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/filelock/_soft.pyÚ_acquirezSoftFileLock._acquirea   s^  € Ø×#Ñ#Ô%Ü" 4§?¡?Ô3ô —‘œbŸj™jÑ(¬2¯9©9Ñ4´r·z±zÑAˆÜ!¤" l°DÓ9Ð9ˆJÐFØ�ZÑˆEð	Ü—‘˜Ÿ™¨%°·±Ó1BÄmÀ^Ñ1SÓTˆBð ,0ˆð	Ü%¤b§h¡h¨r£lÓ3ˆHØ×)Ñ)¨"Ô-Ø×%Ñ% bÔ)Ø×!Ñ! "Ô%Ø×'Ñ'¨¨HÕ5øô# ò 	à—‘¤6Ò)¨i¯o©oÄÒ.GÌCÏLÉLÐ\cÒLcàØ×&Ñ&Ô(Üûð	ûô$ ó 	Ø×*Ñ*Ô,ð;ØÐ#ô
 "¤'Ó*ñ @Ü#1´"·(±(¸2³,Ó#?˜÷@÷ @ñ @úä—<‘< 7Ò*ô "¤'Ó*ñ =Ü'¨¯©¸Ô<÷=÷ =ñ =úð;Ü—H‘H˜R”Lä—|‘| wÒ.Ø×0Ñ0°Ô:Øøô —|‘| wÒ.Ø×0Ñ0°Õ:ð /úàøð;Ü—H‘H˜R”Lä—|‘| wÒ.Ø×0Ñ0°Õ:ð /ø”s—|‘| wÒ.Ø×0Ñ0°Õ:ð /ýð'	ús˜   Â7D  Â<A#F  Ä 	E=Ä)A
E8Å8E=Æ K?ÆJÆ,GÇ	JÇG	Ç)JÈH"È	JÈ"H+	È'JÈ/I)É%K?É)'JÊK?ÊK;ÊKÊ+&K;Ë'K8	Ë8K;Ë;K?c                óò   — | j                   r_t        j                  dk7  rKt        t        «      5  t        j                  || j                  j                  t         z  «       d d d «       y y y # 1 sw Y   y xY w©Nr    )
Úhas_explicit_moderJ   rK   r
   ÚPermissionErrorr@   ÚfchmodÚ_contextÚmoder*   )rW   rZ   s     r]   rP   z!SoftFileLock._apply_explicit_mode”   sf   € ð ×!Ò!¤c§l¡l°gÒ&=Üœ/Ó*ñ CÜ—	‘	˜"˜dŸm™m×0Ñ0´M°>ÑAÔB÷Cð Cð '>Ð!÷Cð Cús   ¯3A-Á-A6c                óh  — t        t        t        «      5  t        | j                  «      5 }t        | j                  «      \  }}|d |j                  hvr	 d d d «       d d d «       y |t        k(  r	 d d d «       d d d «       y |t        k(  r	 d d d «       d d d «       y t        |«      }|€E| j                  |«      t        k\  r| j                  |t        |«      «       	 d d d «       d d d «       y t        |Ž r| j                  ||d   «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w©Nr   )r
   rH   Ú
ValueErrorr   r?   Ú_read_lock_fileÚst_inor   r,   Ú_parse_lock_holderÚ_marker_unchanged_forr$   Ú
_take_overÚ_placeholder_breakerr   )rW   ÚpinnedÚcontentÚmarkerÚholders        r]   rL   z"SoftFileLock._try_break_stale_lock›   s  € Ü”gœzÓ*ñ 	3¬I°d·o±oÓ,Fð 	3È&Ü-¨d¯o©oÓ>‰OˆG�VØ˜d F§M¡MÐ2Ñ2Ø÷	3÷ 	3ð 	3ð Ô5Ò5Ø÷	3÷ 	3ð 	3ð Ô,Ò,Ø÷	3÷ 	3ð 	3ô (¨Ó0ˆFàˆ~ð ×-Ñ-¨fÓ5Ô9UÒUØ—O‘O FÔ,@ÀÓ,IÔJØ÷#	3÷ 	3ð 	3ô& ˜vÑ&Ø—‘ ¨¨q©	Ô2÷)	3÷ 	3÷ 	3ñ 	3ú÷ 	3ð 	3úsS   •D(«*DÁD(Á&
DÁ0D(Â
DÂD(ÂADÃD(Ã.DÄD(ÄD%	Ä!D(Ä(D1c                óâ  — | j                   j                  x}€y t        t        «      5  t	        | j
                  «      5 }t        | j
                  «      \  }}|d |j                  hvs$t        j                  «       |j                  z
  |k  r	 d d d «       d d d «       y | j                  |«      }| j                  ||€d n|d   «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY wrg   )rd   Úlifetimer
   rH   r   r?   ri   rj   ÚtimeÚst_mtimeÚ_recorded_holderrm   )rW   rt   ro   rp   rq   rr   s         r]   Ú_try_break_expired_lockz$SoftFileLock._try_break_expired_lock²   sÚ   € ØŸ™×.Ñ.Ð.ˆHÐ7ØÜ”gÓñ 	K¤	¨$¯/©/Ó :ð 	K¸fä-¨d¯o©oÓ>‰OˆG�VØ˜d F§M¡MÐ2Ñ2´d·i±i³kÀFÇOÁOÑ6SÐV^Ò6^Ø÷		K÷ 	Kð 	Kð
 ×*Ñ*¨7Ó3ˆFØ�O‰O˜F¨F¨N¡DÀÀqÁ	ÔJ÷	K÷ 	K÷ 	Kñ 	Kú÷ 	Kð 	Kús/   ©C%¿ACÂC%Â*CÃC%ÃC"	ÃC%Ã%C.c                ó”   — t        «       r| j                  ||«       y t        | j                  |j                  |j
                  «       y ©N)r   Ú_take_over_by_exchanger   r?   rv   rj   )rW   rq   Úbreaker_pids      r]   rm   zSoftFileLock._take_over½   s2   € ô ÔØ×'Ñ'¨°Õ<ä˜DŸO™O¨V¯_©_¸f¿m¹mÕLó    c                óŒ  — t        j                  | j                  «      x}j                  |j                  k7  s|j                  |j                  k7  ry |�| j                  ||«      ry | j                  › dt        j                  «       › dt        j                  d«      › �}t         j                  t         j                  z  t         j                  z  t        t         dd«      z  }t        j                  ||| j                  «       t         z  «      }| j!                  |«       dx}}	 t#        t        j$                  |«      «      }	| j'                  |«       | j)                  |«       t        j                  | j                  «      x}j                  |j                  k7  s|j                  |j                  k7  r	 |s| j+                  |||¬«       y y t-        || j                  «      s	 |s| j+                  |||¬«       y y d}t        j                  |«      x}
j                  |j                  k7  s|
j                  |j                  k7  r	 |s| j+                  |||¬«       y y t/        |«      j1                  «        d}| j3                  ||	«       d}|s| j+                  |||¬«       y y # |s| j+                  |||¬«       w w xY w)	Nú.break.ú.é   r=   r   F)Úput_backT)r@   Úlstatr?   rv   rj   Ú_restore_stranded_markerÚgetpidr   Ú	token_hexrA   rB   rC   rE   rF   rG   r*   rO   rM   rN   rP   rQ   Ú_abandon_take_overr   r   ÚunlinkrR   )rW   rq   r|   ÚcurrentÚasiderX   rZ   Ú	exchangedÚheldr\   Útakens              r]   r{   z#SoftFileLock._take_over_by_exchangeÈ   sk  € Ü—x‘x §¡Ó0Ð0ˆG×:Ñ:¸f¿o¹oÒMÐQX×Q_ÑQ_Ðci×cpÑcpÒQpØØÐ" t×'DÑ'DÀ[ÐRXÔ'YØØŸ/™/Ð*¨'´"·)±)³+°¸aÄ×@QÑ@QÐRTÓ@UÐ?VÐWˆÜ—{‘{¤R§Z¡ZÑ/´"·)±)Ñ;¼gÄbÈ,ÐXYÓ>ZÑZˆÜ—G‘G˜E 5¨$¯/©/Ó*;¼}¸nÑ*LÓMˆØ×%Ñ% bÔ)Ø Ð ˆ	�Dð	GÜ,¬R¯X©X°b«\Ó:ˆHØ×%Ñ% bÔ)Ø×!Ñ! "Ô%ô Ÿ8™8 D§O¡OÓ4Ð4�×>Ñ>À&Ç/Á/ÒQÐU\×UcÑUcÐgm×gtÑgtÒUtØñ Ø×'Ñ'¨¨E¸IÐ'ÕFð ô " %¨¯©Ô9Øñ Ø×'Ñ'¨¨E¸IÐ'ÕFð ð ˆIÜŸ™ %›Ð(�×2Ñ2°f·o±oÒEÈÏÉÐY_×YfÑYfÒIfØñ Ø×'Ñ'¨¨E¸IÐ'ÕFð ô �‹K×ÑÔ ØˆIØ×'Ñ'¨¨HÔ5ØˆDáØ×'Ñ'¨¨E¸IÐ'ÕFð ø‘4Ø×'Ñ'¨¨E¸IÐ'ÕFð ús    Ä(BJ* ÇJ* ÈA	J* É#/J* Ê*Kc                ó\   ‡ ‡‡— ‰ j                  ‰«      x}€yt        ˆˆˆ fd„|D «       «      S )NTc              3  óN   •K  — | ]  \  }}‰j                  |‰‰|¬ «      –— Œ y­w))ÚadoptN)Ú_recover_claimed)Ú.0ÚpathÚ	abandonedr|   rq   rW   s      €€€r]   ú	<genexpr>z8SoftFileLock._restore_stranded_marker.<locals>.<genexpr>ð   s,   øè ø€ ÒwÑYhÐY]Ð_h�4×(Ñ(¨¨{¸FÈ)Ð(×TÑwùs   ƒ"%)Ú_stranded_candidatesÚany)rW   r|   rq   Ú
candidatess   ``` r]   r„   z%SoftFileLock._restore_stranded_markerç   s0   ú€ ð ×3Ñ3°KÓ@Ð@ˆJÐIØÜÕwÐlvÔwÓwÐwr}   c                ó”  — t         j                  j                  | j                  «      \  }}t	        j
                  t	        j                  |«      › d|› d�«      }t	        j
                  t	        j                  |«      › d�«      }g }t        j                  |xs t         j                  «      5 }|D ]ë  }|j                  d¬«      sŒt        t        |«      |j                  z  «      }	|j                  |j                  «      r|j                  |	df«       Œf|j                  |j                  «      x}
sŒ„dt        |
d   «      x}cxk  rdk  sŒžn Œ¡|t        j                   «       k(  }|st#        |t%        «       d «      s
 d d d «       y |j                  |	|f«       Œí 	 d d d «       t'        |«      S # 1 sw Y   t'        |«      S xY w)Nz	\.break\.z\.[0-9a-f]{32}z!\.restore\.([0-9]+)\.[0-9a-f]{32}F)Úfollow_symlinksé   éÿÿÿ)r@   r“   Úsplitr?   r   ÚcompileÚescapeÚscandirÚcurdirÚis_fileÚstrr   ÚnameÚ	fullmatchÚappendÚintr…   r   r   Úsorted)rW   r|   Ú	directoryr¤   ÚstrandedÚclaimedr˜   ÚentriesÚentryr“   ÚfoundÚ	recovererÚourss                r]   r–   z!SoftFileLock._stranded_candidatesò   s{  € ÜŸ'™'Ÿ-™-¨¯©Ó8‰ˆ	�4ÜŸ*™*¬¯©°4«Ð(9¸À;À-ÐO_Ð%`ÓaˆäŸ™¬¯	©	°$«Ð'8Ð8[Ð$\Ó]ˆØ-/ˆ
Ü�Z‰Z˜	Ò.¤R§Y¡YÓ/ð 	4°7Ø ò 4�Ø—}‘}°U�}Ô;ØÜœ4 	›?¨U¯Z©ZÑ7Ó8�Ø×%Ñ% e§j¡jÔ1Ø×%Ñ% t¨U mÕ4Ø&×0Ñ0°·±Ó<Ð<�eÑ<À!ÔUXÐY^Ð_`ÑYaÓUbÐHbÈ	ÔBpÐgpÖBpà$¬¯	©	«Ñ3�DÙ ¤N°9¼i»kÈ4Ô$PØ#÷	4ð 	4ð ×%Ñ% t¨T lÕ3ñ4÷	4ô �jÓ!Ð!÷	4ô �jÓ!Ð!ús   Â/BF4Ä6F4Å2F4ÆF4Æ4Gc               ó`  — |r|n8| j                   › dt        j                  «       › dt        j                  d«      › �}t        |«      sy	 |s	 t        |«      j                  |«       | j                  |||«      t        |«       S # t        $ r Y t        |«       yw xY w# t        |«       w xY w)Nz	.restore.r€   r�   T)r?   r@   r…   r   r†   Ú_begin_claimr   ÚrenamerH   Ú
_end_claimÚ_restore_claimed)rW   r“   r|   rq   r�   Úowns         r]   r‘   zSoftFileLock._recover_claimed  s¤   € ñ
 #‘T¨4¯?©?Ð*;¸9ÄRÇYÁYÃ[ÀMÐQRÔSZ×SdÑSdÐegÓShÐRiÐ(jˆÜ˜CÔ Øð	Ùð Ü˜“J×%Ñ% cÔ*ð ×(Ñ(¨¨k¸6ÓBä�s�Oøô	 ò  Øô �s�Oð	 ûô �s�Oús0   ÁB  ÁB Á(B  Â	BÂB  ÂBÂB  Â B-c                ó  — 	 t        |«      \  }}| j                  ||«      s2t	        t        «      5  t        |«      j                  «        d d d «       yt	        t        «      5  t        j                  | j                  «      }|j                  |j                  f|j                  |j                  fk(  r{t        || j                  «      ret        j                  |«      j                  |j                  k(  r#t        |«      j                  «        	 d d d «       yt        || j                  «       d d d «       | j                  ||«       y# t        $ r | j                  ||«       Y yw xY w# 1 sw Y   yxY w# 1 sw Y   ŒIxY w©NTF)ri   rH   Ú_return_claimÚ_marker_is_liver
   r   rˆ   r@   rƒ   r?   rj   rv   r   )rW   r¶   r|   rq   rp   Ú_r‰   s          r]   rµ   zSoftFileLock._restore_claimed  s<  € ð	Ü(¨Ó-‰JˆG�Qð ×#Ñ# G¨[Ô9Üœ'Ó"ñ #Ü�S“	× Ñ Ô"÷#àä”gÓñ 		5Ü—h‘h˜tŸ™Ó/ˆGØ—‘ × 0Ñ 0Ð1°f·m±mÀVÇ_Á_Ð5UÒUÔZhØ�T—_‘_ô[ô —8‘8˜C“=×'Ñ'¨6¯=©=Ò8Ü˜“I×$Ñ$Ô&Ø÷		5ð 		5ô ˜s D§O¡OÔ4÷		5ð 	×Ñ˜3 Ô,Øøô' ò 	Ø×Ñ˜s KÔ0Ùð	ú÷#àú÷		5ð 		5ús/   ‚E
 ±E+Á#B-E7ÄE7Å
E(Å'E(Å+E4Å7F c           
     óÊ   — t        t        «      5  t        |«      j                  | j                  › d|› dt        j                  d«      › �«       d d d «       y # 1 sw Y   y xY w)Nr   r€   r�   )r
   rH   r   r³   r?   r   r†   )rW   r¶   r|   s      r]   r¹   zSoftFileLock._return_claim1  sX   € ä”gÓñ 	_Ü�‹I×Ñ §¡Ð0°¸°}ÀAÄg×FWÑFWÐXZÓF[ÐE\Ð]Ô^÷	_÷ 	_ñ 	_ús   �A AÁA"c                ó–   — |t         k(  ry|t        k(  ryt        |«      x}d uxr% |d   |k7  xs |d   t        «       k7  xr	 t	        |Ž  S )NTr   r›   )r   r,   rk   r   r   )Úclsrp   r|   rr   s       r]   rº   zSoftFileLock._marker_is_live6  sd   € àÔ1Ò1ØØÔ(Ò(àô *¨'Ó2Ð2ˆV¸4Ð?ò ,Ø˜‘˜kÑ)ÒE¨V°A©Y¼)»+Ñ-Eò,ä" FÐ+Ð+ð	
r}   c          	     óÔ  — | j                  «        | }	 |rt        | j                  ||«      }	 t        j                  |«      }| j                  |fD ]x  }|| j                  k(  r|sŒt        t        «      5  t        j                  j                  t        j                  |«      |«      rt        |«      j                  «        d d d «       Œz 	 t        j                  |«       y # 1 sw Y   Œ›xY w# t        j                  |«       w xY w# 	 t        j                  |«      }| j                  |fD ]„  }|| j                  k(  r|sŒt        t        «      5  t        j                  j                  t        j                  |«      |«      rt        |«      j                  «        d d d «       Œz# 1 sw Y   ŒƒxY w 	 t        j                  |«       w # t        j                  |«       w xY wxY wrz   )rT   r   r?   r@   rN   r
   ÚFileNotFoundErrorr“   Úsamestatrƒ   r   rˆ   rU   )rW   rZ   rŠ   r‚   Úput_back_doner¶   r¤   s          r]   r‡   zSoftFileLock._abandon_take_overD  sr  € Ø×&Ñ&Ô(Ø$˜ˆð	ÙÜ -¨d¯o©o¸uÀbÓ I�ð
äŸX™X b›\�Ø!Ÿ_™_¨eÐ4ò 0�DØ˜tŸ™Ò.±}Ø Ü!Ô"3Ó4ñ 0ÜŸ7™7×+Ñ+¬B¯H©H°T«N¸CÔ@Ü  ›J×-Ñ-Ô/÷0ð 0ñ0ô —‘˜•÷	0ð 0ûô —‘˜•ûð
äŸX™X b›\�Ø!Ÿ_™_¨eÐ4ò 0�DØ˜tŸ™Ò.±}Ø Ü!Ô"3Ó4ñ 0ÜŸ7™7×+Ñ+¬B¯H©H°T«N¸CÔ@Ü  ›J×-Ñ-Ô/÷0÷ 0ñ 0úñ0ô —‘˜•ø”—‘˜•ýsb   •D
 ¯AC0 Á6AC$Ã
C0 Ã$C-	Ã)C0 Ã0DÄ
G'ÄAGÅAF)	Æ 	GÆ)F2Æ.GÆ7G'ÇG$Ç$G'c                óÀ   — t        j                  «       }|j                  |j                  |j                  f}| j
                  x}�|d   |k7  r
||f| _        y||d   z
  S )Nr   g        r›   )ru   Ú	monotonicrv   rj   Úst_ctime_nsr8   )rW   rq   ÚnowÚkeyÚseens        r]   rl   z"SoftFileLock._marker_unchanged_forW  sb   € ô
 —^‘^Ó%ˆØ—_‘_ f§m¡m°V×5GÑ5GÐGˆØ×%Ñ%Ð%ˆDÐ.°$°q±'¸S².Ø # S ˆDÔØØ�T˜!‘W‰}Ðr}   c                ó   — t        t        t        «      5  t        | j                  «      d   x}t
        k(  r
	 d d d «       y| j                  |«      x}r'|d   t        «       k7  rd|d   › d|d   › �cd d d «       S d d d «       y # 1 sw Y   y xY w)Nr   z_an owner that recorded no PID (a filelock release before 3.22, or one still writing its record)r›   zpid z on )r
   rH   rh   ri   r?   r,   rw   r   )rW   rp   rr   s      r]   Ú_unprobeable_holderz SoftFileLock._unprobeable_holderc  s–   € ä”gœzÓ*ñ 	9Ü*¨4¯?©?Ó;¸AÑ>Ð>�ÔCUÒUØx÷	9ð 	9ð ×/Ñ/°Ó8Ð8�Ð8¸fÀQ¹iÌ9Ë;Ò>VØ˜f Q™i˜[¨¨V°A©Y¨KÐ8÷		9÷ 	9ñ 	9ð
 ÷	9ð
 ús   •#BÁ0BÂBc                ó*   — t        |«      x}€d S |d d S )Né   )rk   )r¾   rp   rr   s      r]   rw   zSoftFileLock._recorded_holderl  s$   € ä"4°WÓ"=Ð=˜ÐFˆtÐVÈFÐSUÐTUÈJÐVr}   c                óÊ   — t        j                  «       › dt        «       › d�}t        t        j                  «       «      x}�||› d�z  }t	        | |j                  «       «       y )Nú
)r@   r…   r   r   r   Úencode)rZ   ÚinfoÚtokens      r]   rQ   zSoftFileLock._write_lock_infop  sT   € ô
 —)‘)“+�˜b¤£ ¨RÐ0ˆÜ(¬¯©«Ó5Ð5ˆEÐBØ�u�g˜R�LÑ ˆDÜ�"�d—k‘k“mÕ$r}   c                óº   — t        t        t        «      5  t        t	        | j
                  «      d   «      }|�|d   cddd«       S 	 ddd«       y# 1 sw Y   yxY w)z¿
        The PID of the process holding this lock, read from the lock file.

        :returns: the PID as an integer, or ``None`` if the lock file does not exist or cannot be parsed

        r   N)r
   rH   rh   rk   ri   r?   ©rW   rr   s     r]   ÚpidzSoftFileLock.pidz  sZ   € ô ”gœzÓ*ñ 	!Ü'¬¸¿¹Ó(HÈÑ(KÓLˆFØÐ!Ø˜a‘y÷	!ñ 	!à!÷	!ð ÷		!ð ús   •(AÁAc                óÀ   — t        t        t        «      5  t        t	        | j
                  «      d   «      x}�t        |Ž cddd«       S 	 ddd«       y# 1 sw Y   yxY w)zÒ
        Whether this lock is held by the current process.

        :returns: ``True`` if the lock file exists and names the current process's PID, hostname and, when recorded,
            start token

        r   NF)r
   rH   rh   rk   ri   r?   r   rÓ   s     r]   Úis_lock_held_by_uszSoftFileLock.is_lock_held_by_usˆ  s[   € ô ”gœzÓ*ñ 	9Ü,¬_¸T¿_¹_Ó-MÈaÑ-PÓQÐQ�Ð^Ü/°Ð8÷	9ñ 	9Ø^÷	9ð ÷	9ð ús   •+AÁAc                ó’   — t        t        «      5  t        | j                  «      j	                  «        ddd«       y# 1 sw Y   yxY w)zNForcibly break the lock by removing the lock file, regardless of who holds it.N)r
   rH   r   r?   rˆ   ©rW   s    r]   Ú
break_lockzSoftFileLock.break_lock–  s4   € ä”gÓñ 	+Ü�—‘Ó!×(Ñ(Ô*÷	+÷ 	+ñ 	+ús	   �$=½Ac               ór   •— 	 t         ‰| �  |¬«       | j                  «        y # | j                  «        w xY w)N)Úforce)ÚsuperÚ_release_currentr>   )rW   rÛ   Ú	__class__s     €r]   rÝ   zSoftFileLock._release_current›  s3   ø€ ð	*Ü‰GÑ$¨5Ð$Ô1ð ×'Ñ'Õ)øˆD×'Ñ'Õ)ús   ƒ$ ¤6c                óÒ  — | j                   j                  }|€J ‚d }t        t        «      5  t	        t        j                  |«      «      }d d d «       t        j                  dk(  r| j                  ||«       y | j                  ||«      }| j                  «        	 | j                  |d¬«       |s| j                  |«       y y # 1 sw Y   ŒzxY w# |s| j                  |«       w w xY w)Nr    F©Údefault_suppresses)rd   Úlock_file_fdr
   rH   rM   r@   rN   rJ   rK   Ú_release_then_unlinkÚ_unlink_open_markerrT   Ú_close_released_fdrV   )rW   rZ   r\   Úunlinkeds       r]   Ú_releasezSoftFileLock._release¢  sØ   € Ø�]‰]×'Ñ'ˆØˆ~Ðˆ~ð ,0ˆÜ”gÓñ 	4Ü%¤b§h¡h¨r£lÓ3ˆH÷	4ä�<‰<˜7Ò"Ø×%Ñ% b¨(Õ3ð #×6Ñ6°r¸8ÓDˆHð ×*Ñ*Ô,ð7Ø×'Ñ'¨¸uÐ'ÔEñ  Ø×,Ñ,¨XÕ6ð  ÷!	4ð 	4ûñ   Ø×,Ñ,¨XÕ6ð  ús   ¬CÂC ÃCÃC&c                óR  — | j                   5  |g| _        || _        | j                  «        	 | j	                  «        | j                  «        d d d «       y # t
        $ r:}	 | j                  «        ‚ # t
        $ r}t        d||«       Y d }~‚ d }~ww xY wd }~ww xY w# 1 sw Y   y xY w)Nz4lock descriptor close and marker cleanup both failed)Ú_transition_lockr;   r:   rT   Ú_close_marker_fdrS   r>   r   )rW   rZ   r\   Úclose_errorÚcleanup_errors        r]   rã   z!SoftFileLock._release_then_unlink¼  s¸   € ð ×"Ñ"ñ 	*Ø "˜tˆDÔØ#+ˆDÔ Ø×*Ñ*Ô,ðØ×%Ñ%Ô'ð ×'Ñ'Ô)÷#	*ð 	*øô !ò 	ðØ×/Ñ/Ô1ð øô %ò Ü)ØNØ#Ø%÷ð ð
 ûðþð	ú÷	*ð 	*úsQ   � B®A¾BÁ	BÁ!A2Á1BÁ2	BÁ;BÂBÂBÂBÂBÂBÂB&c                ój   — t        t        j                  | j                  | j                  f«      «      S rz   )ÚtupleÚdictÚfromkeysr?   Ú	lock_filerØ   s    r]   Ú_marker_nameszSoftFileLock._marker_namesÒ  s%   € ô ”T—]‘] D§O¡O°T·^±^Ð#DÓEÓFÐFr}   c                ó&  — |€yd}| j                  «       D ]A  }	 t        t        j                  |«      «      |k(  rt	        |«      j                  «         yd}ŒC |r	 t        |«       yy# t        $ r Y Œ_t        $ r Y  yw xY w# t        $ r Y yw xY wr¸   )	rò   rM   r@   rƒ   r   rˆ   rÀ   rH   Ú_leave_released_record)rW   rZ   r\   Úreplacedr¤   s        r]   rä   z SoftFileLock._unlink_open_marker×  s£   € ØÐØØˆØ×&Ñ&Ó(ò 		ˆDðÜ!¤"§(¡(¨4£.Ó1°XÒ=Ü˜“J×%Ñ%Ô'ÙØ‘ð		ñ ðÜ& rÔ*ñ øô %ò ÙÜò Úðûô
 ò Ùðús/   š:A*ÁA*ÁB Á*	BÁ5BÂ BÂ	BÂBc                ór  — | j                   �€| j                  j                  d¬«      rc	 t        t        «      5  | j                  «        d d d «       | j                   x}�| j                  |«       | j                  j                  «        y y y # 1 sw Y   ŒExY w# | j                  j                  «        w xY w)NF)Úblocking)r:   ré   Úacquirer
   rH   rê   Ú_windows_unlink_if_oursÚrelease)rW   r\   s     r]   r>   z#SoftFileLock._finish_marker_cleanupì  s¢   € à×ÑÐ+°×0EÑ0E×0MÑ0MÐW\Ð0MÔ0]ð0äœgÓ&ñ ,Ø×)Ñ)Ô+÷,à $× 4Ñ 4Ð4�HÐAØ×0Ñ0°Ô:à×%Ñ%×-Ñ-Õ/ð 1^Ð+÷,ð ,ûð
 ×%Ñ%×-Ñ-Õ/ús"   ªB ¹BÁ
'B ÂBÂB ÂB6c                ó  — 	 t        t        t        j                  t	        t        t        | «      j                  dg «      j                  d «      d«      «      «       y # t        $ r Y y t        $ r | j                  d¬«      s‚ Y y w xY w)Nr;   r›   Frà   )ÚlistÚmapr@   rU   r   ÚiterÚvarsÚ
setdefaultÚpopÚ
IndexErrorrH   Ú_suppresses_close_errorrØ   s    r]   rê   zSoftFileLock._close_marker_fdø  sv   € ð	Ü””R—X‘Xœv¤d¬4°«:×+@Ñ+@ÀÐPRÓ+S×+WÑ+WÐY]Ó&^Ð`aÓbÓcÕdøÜò 	ÙÜò 	Ø×/Ñ/À5Ð/ÔIØñ Jð	ús   ‚AA Á	BÁ(BÂBc                óR  — t         j                  dk(  r|�| j                  |«       y y | j                  «       D ]`  }t	        t
        «      5  t        t        j                  |«      «      |k(  r$t        |«      j                  «        	 d d d «        y 	 d d d «       Œb y # 1 sw Y   ŒmxY wr`   )rJ   rK   rù   rò   r
   rH   rM   r@   rƒ   r   rˆ   )rW   r\   r¤   s      r]   rV   z SoftFileLock._unlink_held_marker  s˜   € Ü�<‰<˜7Ò"ØÐ#Ø×,Ñ,¨XÕ6ð $ð ×*Ñ*Ó,ò �ÜœgÓ&ñ Ü%¤b§h¡h¨t£nÓ5¸ÒAÜ˜T›
×)Ñ)Ô+Ø÷ñ ØA÷ð ñ÷ð ús   Á<BÂB&	c                óò  — d}t        t        «      D ]w  }	 | j                  «       D ]Y  }t        t        «      5  t        t        j                  |«      «      |k(  rd | _        t        |«       	 d d d «        n	 d d d «       Œ[ d | _         y  y # 1 sw Y   ŒpxY w# t        $ rT}|j                  t        t        hv r2|| _        |t        dz
  k  rt        j                  |«       |dz  }Y d }~ŒÚY d }~Œod }~ww xY w)Ngü©ñÒMbP?r›   rÌ   )Úranger'   rò   r
   rÀ   rM   r@   rƒ   r:   r#   rH   rI   r   r   ru   Úsleep)rW   r\   Úretry_delayÚattemptr¤   Úexcs         r]   rù   z$SoftFileLock._windows_unlink_if_ours  sõ   € ØˆÜÔ0Ó1ò 	ˆGðØ ×.Ñ.Ó0ò "�DÜ!Ô"3Ó4ñ "Ü)¬"¯(©(°4«.Ó9¸XÒEð 48˜DÔ0Ü'¨Ô-Ø!÷"ñ "ØE÷"ð "ð"ð  $(ˆDÔ Ùñ+	÷
"ð "ûô ò Ø—9‘9¤¬ Ñ/à+3�DÔ(ØÔ!4°qÑ!8Ò8ÜŸ
™
 ;Ô/Ø# qÑ(˜Üô 0ûðús5   –"B¸5BÁ-
BÁ8
BÂBÂBÂ	C6Â"AC1Ã1C6)ÚreturnÚNone©rZ   r§   r  r  )rq   úos.stat_resultr|   ú
int | Noner  r  )r|   r§   rq   r  r  r1   )r|   r§   r  zlist[tuple[str, bool]] | None)
r“   r£   r|   r§   rq   r  r�   r1   r  r1   )r¶   r£   r|   r§   rq   r  r  r1   )r¶   r£   r|   r§   r  r  )rp   ú
str | Noner|   r§   r  r1   )rZ   r§   rŠ   r£   r‚   r1   r  r  )rq   r  r  Úfloat)r  r  )rp   r  r  ztuple[int, str] | None)r  r  )r  r1   )rÛ   r1   r  r  )rZ   r§   r\   r9   r  r  )r  ztuple[str, ...])rZ   r§   r\   r9   r  r1   )r\   r9   r  r  )r\   útuple[int, int]r  r  ),Ú__name__Ú
__module__Ú__qualname__Ú__doc__r2   Ú__annotations__r5   r6   r7   r8   r:   r^   rP   rL   rx   rm   r{   r„   r–   r‘   rµ   r¹   Úclassmethodrº   r‡   rl   rÊ   rw   ÚstaticmethodrQ   ÚpropertyrÔ   rÖ   rÙ   rÝ   rç   rã   rò   rä   r>   rê   rV   rù   Ú__classcell__)rÞ   s   @r]   r0   r0   <   sp  ø… ñð  !%Ð˜Ó$ð 6]ÐÐ2Ó\ð +0Ð! 4Ó/ð $)Ð˜DÓ(ð AE€LÐ=ÓDð /3€OÐ+Ó2ð Óó1ófCó3ó.	Kó	MóGó>	xó"ð*ØðØ&)ðØ3AðØMQðà	óó$ó0_ð
 ò
ó ð
óó&
óð òWó ðWð ò%ó ð%ð òó ðð òó ðó+õ
*ó7ó4*ó,Gó
ó*
0ó	ó	÷r}   r0   c                ó2   — | j                   | j                  fS rz   )Úst_devrj   )Ústs    r]   rM   rM   (  s   € ð �9‰9�b—i‘iÐÐr}   c                ó´   — t         5  t        | «      j                  x}t        v r
	 d d d «       yt        j	                  |«       	 d d d «       y# 1 sw Y   y xY w)NFT)r.   r   r¤   r-   Úadd)r¤   rÇ   s     r]   r²   r²   .  sP   € ä	ñ Ü˜“:—?‘?Ð"ˆCÔ':Ñ:Ø÷ð ô 	×Ñ Ô$Ø÷	÷ ñ ús   ‡A¯AÁAc                óŠ   — t         5  t        j                  t        | «      j                  «       d d d «       y # 1 sw Y   y xY wrz   )r.   r-   Údiscardr   r¤   )r¤   s    r]   r´   r´   7  s0   € Ü	ñ 5Ü×#Ñ#¤D¨£J§O¡OÔ4÷5÷ 5ñ 5ús	   ‡)9¹Ac                óÔ   — | �$| j                  dx}«      r| j                  d«      sy t        t        «      5  t	        | j                  |«      d d «      cd d d «       S # 1 sw Y   y xY w)Nzfilelock/break
rÎ   éÿÿÿÿ)Ú
startswithÚendswithr
   rh   Úparse_decimalÚremoveprefix)rp   Úplaceholders     r]   rn   rn   <  sj   € à€˜g×0Ñ0Ð@RÐ1R°ÔSÐ[b×[kÑ[kÐlpÔ[qØÜ	”*Ó	ñ EÜ˜W×1Ñ1°+Ó>¸sÀÐCÓD÷E÷ Eñ Eàús   ·AÁA'c                óœ   — t         j                  dk7  r9t        j                  | dx}d«       t        j                  | t        |«      «       y y )Nr    s   filelock/released
r   )rJ   rK   r@   ÚpwriteÚ	ftruncateÚlen)rZ   Úreleaseds     r]   rô   rô   E  s=   € ô ‡|�|�wÒÜ
�	‰	�"Ð"8Ð8�h¸!Ô<Ü
�‰�Rœ˜X›Õ'ð r}   c           	     ó  — t        j                  | «      }t        j                  |j                  «      sd |fS t
        j                  dk(  rt        | «      }nHt        j                  | t         j                  t        t         dd«      z  t        t         dd«      z  «      }	 t        j                  |«      }t        j                  |j                  «      sd |ft        j                  |«       S t        j                  |t        dz   «      }t        j                  |«       t        |«      t        k  r,t!        t"        «      5  |j%                  d«      |fcd d d «       S d |fS # t        j                  |«       w xY w# 1 sw Y   d |fS xY w)Nr    r=   r   Ú
O_NONBLOCKr›   zutf-8)r@   rƒ   ÚstatÚS_ISREGÚst_moderJ   rK   r!   rF   ÚO_RDONLYrE   rN   rU   Úreadr%   r-  r
   ÚUnicodeDecodeErrorÚdecode)r“   r  rZ   Údatas       r]   ri   ri   N  s+  € ô
 
�‰�$‹€BÜ�<‰<˜Ÿ
™
Ô#Ø�Rˆxˆô ‡|�|�wÒä*¨4Ó0‰ä�W‰W�Tœ2Ÿ;™;¬´°\À1Ó)EÑEÌÔPRÐT`ÐbcÓHdÑdÓeˆðÜ�X‰X�b‹\ˆÜ�|‰|˜BŸJ™JÔ'Ø˜�8ô 	�‰��ô �w‰w�rÔ.°Ñ2Ó3ˆä
�‰�ŒÜ
ˆ4ƒyÔ'Ò'ÜÔ(Ó)ñ 	,Ø—;‘;˜wÓ'¨Ð+÷	,ñ 	,à�ˆ8€Oøô	 	�‰��ú÷	,à�ˆ8€Oús   Â!7E" Ã.E" ÅE<Å"E9Å<Fc                ó,  — | r<| j                  d«      r+t        | j                  «       j                  «       x}«      dvry 	 t	        |d   «      }t        |«      t
        k(  rt	        |d   «      nd }d|cxk  rdk  sy  y ||d   |fS # t        $ r Y y w xY w)NrÎ   >   rÌ   r(   r   rÌ   r›   rœ   )r&  r-  ÚstripÚ
splitlinesr'  r)   rh   )rp   ÚlinesrÔ   Ústart_tokens       r]   rk   rk   k  s§   € ñ ˜'×*Ñ*¨4Ô0´CÀÇÁÃ×A[ÑA[ÓA]Ð8]¸Ó4^ÐflÑ4lØðÜ˜E !™HÓ%ˆÜ14°U³Ô?bÒ1b”m E¨!¡HÔ-Ðhlˆð �Ô �yÒ Øð !ØØ��a‘˜+Ð%Ð%øô ò Ùðús   Á0B Â	BÂBc                óx   — | j                  «       r| j                  «       sd| ›�}t        |«      ‚t        | «      S )zú
    Read a PID or start token as a writer formats it: ASCII digits only.

    :raises ValueError: for anything else ``int()`` would accept, such as ``1_000``, surrounding whitespace, a sign or
        non-ASCII digits; no filelock writes those

    znot a decimal integer: )ÚisasciiÚisdigitrh   r§   )ÚtextÚmsgs     r]   r'  r'  ‚  s5   € ð �L‰LŒN˜tŸ|™|œ~Ø'¨ xÐ0ˆÜ˜‹oÐÜˆt‹9Ðr}   )r$   r0   r'  )r  r  r  r  )r¤   ú
str | Pathr  r1   )r¤   rC  r  r  )rp   r  r  r  r  )r“   r£   r  z!tuple[str | None, os.stat_result])rp   r  r  z"tuple[int, str, int | None] | None)rA  r£   r  r§   )EÚ
__future__r   Ú__lazy_modules__r@   r   r   r1  rJ   Ú	threadingru   r   r
   rI   r   r   r   r   r   r   r   r	   r   Úfilelock._apir   r   Úfilelock._identityr   r   r   r   Úfilelock._soft_protocolr   Úfilelock._utilr   r   r   r   r   r   r   r   rK   Úfilelock._windowsr!   r"   r#   r$   r  r%   r'   r)   ÚS_IWGRPÚS_IWOTHr*   r,   Úsetr-   ÚLockr.   r0   rM   r²   r´   rn   rô   ri   rk   r'  Ú__all__© r}   r]   ú<module>rR     s  ðÞ "ò
Ð ó 
Û 	Û Û Û 
Û Û Ý ß 'Ñ 'Ý Ý Ý ç =ß gÓ gÝ ?÷	÷ 	ó 	ð ‡<�<�7ÒÝ?ÞKå*à-0Ð ˜lÓ 0Ø"&Ð �ZÓ &Ø"$Ð �ZÓ $Ø23Ð # ZÓ 3à ŸL™L¨4¯<©<Ñ7€ˆzÓ 7à!#Ð �JÓ #Ù'*£uÐ �_Ó ,Ø&4 i§n¡nÓ&6€Ð#Ó 6ôi�<ô ióX óó5ó
ó(óó:&ó.ò�r}   