Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
§

iµµhڇãó0—dZddlZddlZddlZddlZddlmZddlmZddl	m
Z
mZmZm
Z
mZmZmZmZmZmZddlmZddlmZdd	lmZmZmZmZmZmZmZdd
l m!Z!m"Z"m#Z#dZ$dZ%d
Z&dZ'dZ(dZ)dZ*dZ+Gd„de¦«Z,eGd„d¦«¦«Z-eGd„d¦«¦«Z.Gd„d¦«Z/Gd„de0¦«Z1de2dee2e2ffd„Z3d„Z4d „Z5d!„Z6d"e7de-fd#„Z8d$e-d"e7ddfd%„Z9Gd&„d'e0¦«Z:d(edee-fd)„Z;de
e2ee.e/fffd*„Z<	ded(ed+ee-d"ee7fd,„Z=	ded(ed+e
e2ee.e/ffd"ee7ddfd-„Z>d.e7de7fd/„Z?Gd0„d1¦«Z@d2e!d3eee2e2e7fde2fd4„ZAd2e!d5e@de2fd6„ZB	dfd8ee2d9ee2gee2e7ffd2e!d:ee2deeeee2ee2feee7ee7feee2ee2fff
d;„ZC	ded<e2d.ee7fd=„ZDejEd>krGd?„d@eF¦«ZGdfddAœdB„ZHnejHZHdCdDddEœdFed.e7dGe2fdH„ZIdIZJdJe2deKfdK„ZLdJe2deKfdL„ZMeLfde2deKfdM„ZNdCeLdfdNeeOe2fdOeeOe2fd2e!dPe2dQeKf
dR„ZPdgdSe2d.e7fdT„ZQdgdSe2fdU„ZRdeeOe2fdee2fdV„ZSdWe2fdX„ZT	ded5e@dNeeOe2ffdY„ZUejV WdZ¦«ZXdNe2dWe2fd[„ZYdSeeOe2fde2fd\„ZZde2dee.fd]„Z[	dede2d2ee!dee.fd^„Z\	ded_ee2dNe2d2ee!deee2ee.ffd`„Z]	dhd_ee2dNe2deee2ee2ee7ffda„Z^d5e@dNe2fdb„Z_Gdc„dd¦«Z`dS)iz%Parser for the git index file format.éN)Ú	dataclass)ÚEnum)
ÚAnyÚBinaryIOÚCallableÚDictÚIterableÚIteratorÚListÚOptionalÚTupleÚUnioné)ÚGitFile)Úiter_tree_contents)ÚS_IFGITLINKÚS_ISGITLINKÚBlobÚObjectIDÚTreeÚ
hex_to_shaÚ
sha_to_hex)ÚObjectContainerÚ
SHA1ReaderÚ
SHA1Writeri0éiÿi€i@i écó—eZdZdZdZdZdZdS)ÚStagerrréN)Ú__name__Ú
__module__Ú__qualname__ÚNORMALÚMERGE_CONFLICT_ANCESTORÚMERGE_CONFLICT_THISÚMERGE_CONFLICT_OTHER©óú8/usr/local/lib/python3.11/site-packages/dulwich/index.pyrrKs'€€€€€Ø
€FØÐØÐØÐÐÐr)rcóؗeZdZUeed<eeeeeeffed<eeeeeeffed<eed<eed<eed<eed<eed<eed	<eed
<eed<eed<d
e	fd„Z
dS)ÚSerializedIndexEntryÚnameÚctimeÚmtimeÚdevÚinoÚmodeÚuidÚgidÚsizeÚshaÚflagsÚextended_flagsÚreturncóJ—t|jtztz	¦«S©N)rr7ÚFLAG_STAGEMASKÚFLAG_STAGESHIFT©Úselfs r*ÚstagezSerializedIndexEntry.stageas€Ýd”j¥>Ñ1µoÑEÑFÔFÐFr)N)r!r"r#ÚbytesÚ__annotations__rÚintÚfloatr
rr@r(r)r*r,r,RsՀ€€€€€à
€K€KKؐe˜U 3¨ 8œ_Ð,Ô-Ð-Ð-Ñ-ؐe˜U 3¨ 8œ_Ð,Ô-Ð-Ð-Ñ-Ø	€H€HHØ	€H€HHØ

€I€IIØ	€H€HHØ	€H€HHØ

€I€IIØ	€J€JJØ€J€JJØÐÐÑðGuðGðGðGðGðGðGr)r,cóâ—eZdZUeeeeeeffed<eeeeeeffed<eed<eed<eed<eed<eed<eed<eed	<e	d
e
ddfd„¦«Zd
edede
fd„Z
dS)Ú
IndexEntryr.r/r0r1r2r3r4r5r6Ú
serializedr9có„—||j|j|j|j|j|j|j|j|j¬¦	«	S)N©	r.r/r0r1r2r3r4r5r6rI)ÚclsrGs  r*Úfrom_serializedzIndexEntry.from_serializedqsJ€àˆsØÔ"ØÔ"ؔؔؔؔؔؔؔð

ñ

ô

ð
	
r)r-r@có¬—t||j|j|j|j|j|j|j|j|j	|j
tzd¬¦«S)Nr)r-r.r/r0r1r2r3r4r5r6r7r8)r,r.r/r0r1r2r3r4r5r6Úvaluer=)r?r-r@s   r*Ú	serializezIndexEntry.serializesV€Ý#ØØ”*Ø”*ؔؔؔؔؔؔؔؔ+¥Ñ0Øð

ñ

ô

ð
	
r)N)r!r"r#rrCrDr
rBrAÚclassmethodr,rKrrNr(r)r*rFrFes쀀€€€€àe˜U 3¨ 8œ_Ð,Ô-Ð-Ð-Ñ-ؐe˜U 3¨ 8œ_Ð,Ô-Ð-Ð-Ñ-Ø	€H€HHØ	€H€HHØ

€I€IIØ	€H€HHØ	€H€HHØ

€I€IIØ	€J€JJàð
Ð)=ð
À,ð
ð
ð
ñ„[ð
ð
˜eð
¨Eð
Ð6Jð
ð
ð
ð
ð
ð
r)rFc	óš—eZdZUdZeeed<eeed<eeed<			ddeedeedeeddfd„ZdS)	ÚConflictedIndexEntryz'Index entry that represents a conflict.ÚancestorÚthisÚotherNr9có0—||_||_||_dSr;)rRrSrT)r?rRrSrTs    r*Ú__init__zConflictedIndexEntry.__init__—s€ð!ˆŒ
؈Œ	؈Œ
ˆ
ˆ
r))NNN)r!r"r#Ú__doc__rrFrBrVr(r)r*rQrQs¨€€€€€€Ø1Ð1àzÔ"Ð"Ð"Ñ"Ø
:Ô
ÐÐÑØJÔÐÐÑð*.Ø%)Ø&*ð	ðà˜:Ô&ððzÔ"ðð˜
Ô#ð	ð

ððððððr)rQcó—eZdZdZdS)ÚUnmergedEntriesz$Unmerged entries exist in the index.N)r!r"r#rWr(r)r*rYrY¢s€€€€€Ø.Ð.Ð.Ð.r)rYÚpathr9cóf—	| dd¦«\}}||fS#t$rd|fcYSwxYw)z¨Split a /-delimited path into a directory part and a basename.

    Args:
      path: The path to split.

    Returns:
      Tuple with directory name and basename
    ó/rr))ÚrsplitÚ
ValueError)rZÚdirnameÚbasenames   r*Ú	pathsplitra¦sY€ð#Ø"Ÿkšk¨$°Ñ2Ô2ш(ð˜Ð"Ð"øõðððؐTˆ{ÐÐÐðøøøs‚Ÿ0¯0có@—d d„|D¦«¦«S)zJoin a /-delimited path.r\có—g|]}|¯|‘ŒSr(r()Ú.0Úps  r*ú
<listcomp>zpathjoin.<locals>.<listcomp>¹s€Ð+Ð+Ð+˜A¨Ð+aÐ+Ð+Ð+r))Újoin)Úargss r*Úpathjoinri·s#€à9Š9Ð+Ð+ Ð+Ñ+Ô+Ñ,Ô,Ð,r)cóR—tjd| d¦«¦«S)zRead a cache time.

    Args:
      f: File-like object to read from
    Returns:
      Tuple with seconds and nanoseconds
    ú>LLé)ÚstructÚunpackÚread)Úfs r*Úread_cache_timerq¼s €õŒ=˜ §¢ q¡	¤	Ñ*Ô*Ð*r)có`—t|t¦«r|df}nnt|t¦«r5t|d¦«\}}t|¦«t|dz¦«f}n$t|t¦«st|¦«‚| tjdg|¢Rަ«dS)zWrite a cache time.

    Args:
      f: File-like object to write to
      t: Time to write (as int, float or tuple with secs and nsecs)
    rgð?iʚ;rkN)	Ú
isinstancerCrDÚdivmodÚtupleÚ	TypeErrorÚwritermÚpack)rpÚtÚsecsÚnsecss    r*Úwrite_cache_timer|Çs«€õ!•SÑÔðØ
ˆFˆˆÝ	A•uÑ	Ô	ðݘq #™œ‰
ˆˆuÝ
‰YŒY˜E JÑ.Ñ/Ô/Ð0ˆˆÝ
˜5Ñ
!Ô
!ðݘ‰lŒlÐØ‡G‚GFŒK˜Ð" Ð"Ð"Ð"Ñ#Ô#Ð#Ð#Ð#r)Úversioncóš—| ¦«}t|¦«}t|¦«}tjd| d¦«¦«\}}}}}	}
}}|t
zr@|dkrt
d¦«‚tjd| d¦«¦«\}
nd}
| |tz¦«}|dkrJ| ¦«|z
d	zd
z}| ||z| ¦«z
¦«t||||||||	|
t|¦«|tz|
¦«S)zWRead an entry from a cache file.

    Args:
      f: File-like object to read from
    z>LLLLLL20sHé.r z+extended flag set in index with version < 3z>Hrrérléøÿÿÿ)
ÚtellrqrmrnroÚ
FLAG_EXTENDEDÚAssertionErrorÚ
FLAG_NAMEMASKr,r)rpr}Úbeginoffsetr.r/r0r1r2r3r4r5r6r7r8r-Ú	real_sizes                r*Úread_cache_entryrˆØsQ€ð—&’&‘(”(€KÝ˜AÑÔ€EÝ˜AÑÔ€Eõ	Œ
m Q§V¢V¨NÑ%;Ô%;Ñ<Ô<ñ	ØØØØØØØØ
à}ÑðؐQŠ;ˆ;Ý Ð!NÑOÔOÐOÝ"œM¨$°·²°q±	´	Ñ:Ô:шˆàˆØ6Š6%-Ñ'Ñ(Ô(€Dà‚{€{Ø—V’V‘X”X Ñ+¨aÑ/°2Ñ5ˆ	Ø	Š˜iÑ'¨1¯6ª6©8¬8Ñ3Ñ4Ô4Ð4ÝØØ
Ø
ØØØØØØݐ3‰ŒØ
•ÑØñ
ô
ð
r)ÚentrycóF—| ¦«}t||j¦«t||j¦«t	|j¦«|jtzz}|jr
|tz}|tzr||dkrtd¦«‚| tj
d|jdz|jdz|j|j|j|jt)|j¦«|¦	«	¦«|tzr-| tj
d|j¦«¦«| |j¦«|dkrO| ¦«|z
dzd	z}| d
||z| ¦«z
z¦«dSdS)zrWrite an index entry to a file.

    Args:
      f: File object
      entry: IndexEntry to write, tuple with:
    Nr z+unable to use extended flags in version < 3s>LLLLLL20sHlÿÿs>Hr€rlró)r‚r|r.r/Úlenr-r7r…r8rƒr„rwrmrxr0r1r2r3r4r5rr6)rpr‰r}r†r7r‡s      r*Úwrite_cache_entryrsŽ€ð—&’&‘(”(€KݐQ˜œÑ$Ô$Ð$ݐQ˜œÑ$Ô$Ð$Ý”
‰OŒO˜uœ{­m¨^Ñ;Ñ<€EØÔðØ
•шØ}ÑðL Ð!4¸À1º¸ÝÐJÑKÔKÐK؇G‚GÝŒØØŒI˜
Ñ"ØŒI˜
Ñ"ØŒJØŒIØŒIØŒJÝu”yÑ!Ô!Øñ
	
ô
	
ñôðð
}Ñð:Ø	Š•”˜E 5Ô#7Ñ8Ô8Ñ9Ô9Ð9؇G‚GˆEŒJÑÔÐØ‚{€{Ø—V’V‘X”X Ñ+¨aÑ/°2Ñ5ˆ	Ø	Š˜+¨	Ñ1°Q·V²V±X´XÑ=Ñ>Ñ?Ô?Ð?Ð?Ð?ð€{r)có—eZdZdZdd„ZdS)ÚUnsupportedIndexFormatz,An unsupported index format was encountered.r9Ncó—||_dSr;)Úindex_format_version)r?r}s  r*rVzUnsupportedIndexFormat.__init__-s€Ø$+ˆÔ!Ð!Ð!r)©r9N)r!r"r#rWrVr(r)r*rr*s.€€€€€Ø6Ð6ð,ð,ð,ð,ð,ð,r)rrpc#ó(K—| d¦«}|dkrtd|z¦«‚tjd| d¦«¦«\}}|dvrt	|¦«‚t|¦«D]}t
||¦«V—ŒdS)z4Read an index file, yielding the individual entries.r€óDIRCzInvalid index file header: %ró>LLrl)rrr N)ror„rmrnrÚrangerˆ)rpÚheaderr}Únum_entriesÚis     r*Ú
read_indexrš1s§èè€à
VŠVA‰YŒY€FØ
ÒÐÝÐ<¸vÑEÑFÔFÐFÝ#œ]¨6°1·6²6¸%±=´=ÑAÔAÑ€WˆkؐiÐÐÝ$ WÑ-Ô-Ð-Ý
;Ñ
Ô
ð+ð+ˆÝ˜q 'Ñ*Ô*Ð*Ð*Ð*Ð*ð+ð+r)có„—i}t|¦«D],}| ¦«}|tjkr#t |¦«||j<ŒJ| |jt¦«¦«}t|t¦«rtd|jz¦«‚|tjkr t |¦«|_ŒÍ|tj
kr t |¦«|_Œý|tjkrt |¦«|_Œ.|S)zÀRead an index file and return it as a dictionary.
       Dict Key is tuple of path and stage number, as
            path alone is not unique
    Args:
      f: File object to read fromls.
    z"Non-conflicted entry for %r exists)ršr@rr$rFrKr-Ú
setdefaultrQrsr„r%rRr&rSr'rT)rpÚretr‰r@Úexistings     r*Úread_index_dictrŸ=s€ðAC€CݘA‘”ð
Cñ
CˆØ—’‘
”
ˆØ•E”LÒ Ð Ý(×8Ò8¸Ñ?Ô?ˆC”
‰OˆOà—~’~ e¤jÕ2FÑ2HÔ2HÑIÔIˆHݘ(¥JÑ/Ô/ð
XÝ$Ð%IÈEÌJÑ%VÑWÔWÐW؝Ô5Ò5Ð5Ý$.×$>Ò$>¸uÑ$EÔ$EÔ!Ð!؝%Ô3Ò3Ð3Ý *× :Ò :¸5Ñ AÔ A”

؝%Ô4Ò4Ð4Ý!+×!;Ò!;¸EÑ!BÔ!B”ùØ€Jr)Úentriesc	óڗ|€t}| d¦«| tjd|t	|¦«¦«¦«|D]}t|||¦«ŒdS)z£Write an index file.

    Args:
      f: File-like object to write to
      version: Version number to write
      entries: Iterable over the entries to write
    Nr”r•)ÚDEFAULT_VERSIONrwrmrxrŒr)rpr r}r‰s    r*Úwrite_indexr£Vst€ð€Ý!ˆØ‡G‚GˆGÑÔÐØ‡G‚GFŒK˜ ­¨W©¬Ñ6Ô6Ñ7Ô7Ð7Øð-ð-ˆÝ˜!˜U GÑ,Ô,Ð,Ð,ð-ð-r)cór—g}t|¦«D]}||}t|t¦«r¾|j8| |j |tj¦«¦«|j8| |j |tj	¦«¦«|j
8| |j
 |tj¦«¦«ŒÞ| | |tj¦«¦«Œt|||¬¦«dS)ztWrite an index file based on the contents of a dictionary.
    being careful to sort by path and then by stage.
    N©r})ÚsortedrsrQrRÚappendrNrr%rSr&rTr'r$r£)rpr r}Úentries_listÚkeyrMs      r*Úwrite_index_dictrªhs.€ð€Lݐg‰ŒðDñDˆØ˜”ˆÝeÕ1Ñ2Ô2ð	DØŒ~Ð)Ø×#Ò#Ø”N×,Ò,¨Sµ%Ô2OÑPÔPñôððŒzÐ%Ø×#Ò#Ø”J×(Ò(¨­eÔ.GÑHÔHñôððŒ{Ð&Ø×#Ò#Ø”K×)Ò)¨#­uÔ/IÑJÔJñôðøð
×Ò §¢°µU´\Ñ BÔ BÑCÔCÐCÑCݐ<¨Ð1Ñ1Ô1Ð1Ð1Ð1r)r2cóä—tj|¦«rtjStj|¦«rtjSt|¦«rtStjdz}|dzr|dz}|S)zžCleanup a mode value.

    This will return a mode that can be stored in a tree object.

    Args:
      mode: Mode to clean up.

    Returns:
      mode
    i¤é@éI)ÚstatÚS_ISLNKÚS_IFLNKÚS_ISDIRÚS_IFDIRrrÚS_IFREG)r2rs  r*Úcleanup_moder´…st€õ„|DÑÔðÝŒ|ÐÝ	
ŒdÑ	Ô	ðÝŒ|ÐÝ	TÑ	Ô	ðÝÐÝ
Œ,˜Ñ
€C؈e|ð؈u‰ˆØ€Jr)có&—eZdZUdZeeeeeffe	d<d%deee
fddfd„Zed„¦«Z
de
fd	„Zd&d
„Zd„Zdefd„Zd
edeeeffd„Zdeefd„Zd„Zdedefd„Zdedefd„Zdeeeeeffd„Zdefd„Zd„Zdedeeefddfd„Zdeddfd„Z deeeeeefffd„Z!deeeeeefffd„Z"deeeeefffd„Z#d„Z$	d'd!e%d"efd#„Z&d$„Z'dS)(ÚIndexzA Git Index file.Ú_bynameTÚfilenamer9Ncóz—||_d|_| ¦«|r| ¦«dSdS)zÓCreate an index object associated with the given filename.

        Args:
          filename: Path to the index file
          read: Whether to initialize the index from the given file, should it exist.
        N)Ú	_filenameÚ_versionÚclearro)r?r¸ros   r*rVzIndex.__init__¡sB€ð"ˆŒàˆŒ
Ø
Š
‰ŒˆØð	ØIŠI‰KŒKˆKˆKˆKð	ð	r)có—|jSr;)rºr>s r*rZz
Index.path¯s
€àŒ~Ðr)có0—|jj›d|j›dS)Nú(ú))Ú	__class__r!rºr>s r*Ú__repr__zIndex.__repr__³s €Ø”.Ô)Ð?Ð?¨D¬NÐ?Ð?Ð?Ð?r)cóâ—t|jd¦«}	t|¦«}t||j|j¬¦«| ¦«dS#| ¦«wxYw)z(Write current contents of index to disk.Úwbr¥N)rrºrrªr·r»Úclose©r?rps  r*rwzIndex.write¶s_€åD”N DÑ)Ô)ˆð	ݘ1‘
”
ˆAÝ˜Q ¤°d´mÐDÑDÔDÐDà
GŠG‰IŒIˆIˆIˆIøˆAGŠG‰IŒIˆIˆIøøøs—+AÁA.có—tj |j¦«sdSt	|jd¦«}	t|¦«}| t|¦«¦«| tj 	|j¦«| 
¦«z
dz
¦«| ¦«| ¦«dS#| ¦«wxYw)z)Read current contents of index from disk.NÚrbé)
ÚosrZÚexistsrºrrÚupdaterŸroÚgetsizer‚Ú	check_sharÅrÆs  r*roz
Index.read¿s¾€åŒw~Š~˜dœnÑ-Ô-ð	ØˆFÝD”N DÑ)Ô)ˆð	ݘ1‘
”
ˆAØKŠK¨Ñ*Ô*Ñ+Ô+Ð+à
FŠF•2”7—?’? 4¤>Ñ2Ô2°Q·V²V±X´XÑ=ÀÑBÑCÔCÐCØ
KŠK‰MŒMˆMà
GŠG‰IŒIˆIˆIˆIøˆAGŠG‰IŒIˆIˆIøøøs½BC'Ã'C=có*—t|j¦«S)z%Number of entries in this index file.)rŒr·r>s r*Ú__len__z
Index.__len__Ís€å4”<Ñ Ô Ð r)r©có—|j|S)z¨Retrieve entry by relative path and stage.

        Returns: Either a IndexEntry or a ConflictedIndexEntry
        Raises KeyError: if the entry does not exist
        ©r·©r?r©s  r*Ú__getitem__zIndex.__getitem__Ñs€ðŒ|˜CÔ Ð r)có*—t|j¦«S)z0Iterate over the paths and stages in this index.)Úiterr·r>s r*Ú__iter__zIndex.__iter__Ùs€åD”LÑ!Ô!Ð!r)có—||jvSr;rÒrÓs  r*Ú__contains__zIndex.__contains__Ýs€Ød”lÐ"Ð"r)rZcóX—||}t|t¦«rt‚|jS)z6Return the (git object) SHA1 for the object at a path.)rsrQrYr6©r?rZrMs   r*Úget_sha1zIndex.get_sha1às,€àT”
ˆÝeÕ1Ñ2Ô2ð	"Ý!Ð!ØŒyÐr)cóX—||}t|t¦«rt‚|jS)z4Return the POSIX file mode for the object at a path.)rsrQrYr2rÛs   r*Úget_modezIndex.get_modeçs,€àT”
ˆÝeÕ1Ñ2Ô2ð	"Ý!Ð!ØŒzÐr)c#ó˜K—|D]D}||}t|t¦«rt‚||jt	|j¦«fV—ŒEdS)z=Iterate over path, sha, mode tuples for use with commit_tree.N)rsrQrYr6r´r2)r?rZr‰s   r*ÚiterobjectszIndex.iterobjectsîscèè€àð	<ð	<ˆDؘ”JˆEݘ%Õ!5Ñ6Ô6ð
&Ý%Ð%ؘœ	¥<°´
Ñ#;Ô#;Ð;Ð;Ð;Ð;Ð;ð		<ð	<r)cón—|j ¦«D]}t|t¦«rdSŒdS)NTF)r·ÚvaluesrsrQ)r?rMs  r*Ú
has_conflictszIndex.has_conflictsösC€Ø”\×(Ò(Ñ*Ô*ð	ð	ˆEݘ%Õ!5Ñ6Ô6ð
ؐttð
àˆur)có—i|_dS)z$Remove all contents from this index.NrÒr>s r*r¼zIndex.clearüs
€àˆŒˆˆr)r-rMcóH—t|t¦«sJ‚||j|<dSr;)rsrAr·)r?r-rMs   r*Ú__setitem__zIndex.__setitem__s,€õ˜$¥Ñ&Ô&Ð&Ð&Ð&Ø"ˆŒTÑÐÐr)có—|j|=dSr;rÒ)r?r-s  r*Ú__delitem__zIndex.__delitem__s€ØŒL˜ÐÐÐr)cóN—t|j ¦«¦«Sr;©rÖr·Úitemsr>s r*Ú	iteritemszIndex.iteritems	s €õD”L×&Ò&Ñ(Ô(Ñ)Ô)Ð)r)cóN—t|j ¦«¦«Sr;rêr>s r*rëzIndex.itemss€ÝD”L×&Ò&Ñ(Ô(Ñ)Ô)Ð)r)r cóD—| ¦«D]
\}}|||<ŒdSr;)rë)r?r r©rMs    r*rÌzIndex.updates2€Ø!Ÿ-š-™/œ/ð	ð	‰JˆCØˆD‰IˆIð	ð	r)c#óHK—|j ¦«Ed{V—†dSr;)r·Úkeysr>s r*ÚpathszIndex.pathss2èè€Ø”<×$Ò$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r)FÚtreeÚwant_unchangedc#ón‡K—ˆfd„}t‰ ¦«||||¬¦«Ed{V—†dS)aFind the differences between the contents of this index and a tree.

        Args:
          object_store: Object store to use for retrieving tree contents
          tree: SHA1 of the root tree
          want_unchanged: Whether unchanged files should be reported
        Returns: Iterator over tuples with (oldpath, newpath), (oldmode,
            newmode), (oldsha, newsha)
        cóJ•—‰|}|jt|j¦«fSr;)r6r´r2)rZr‰r?s  €r*Úlookup_entryz-Index.changes_from_tree.<locals>.lookup_entry%s#ø€Ø˜”JˆEØ”9l¨5¬:Ñ6Ô6Ð6Ð6r))róN)Úchanges_from_treerñ)r?Úobject_storeròrórös`    r*r÷zIndex.changes_from_treesxøèè€ð	7ð	7ð	7ð	7ð	7õ%ØJŠJ‰LŒLØØØØ)ð
ñ
ô
ð	
ð	
ð	
ð	
ð	
ð	
ð	
ð	
ð	
r)cóF—t|| ¦«¦«S)zšCreate a new tree from an index.

        Args:
          object_store: Object store to save the tree in
        Returns:
          Root tree SHA
        ©Úcommit_treerà)r?røs  r*ÚcommitzIndex.commit1s €õ˜<¨×)9Ò)9Ñ);Ô);Ñ<Ô<Ð<r))Tr’©F)(r!r"r#rWrrArrFrQrBÚstrrVÚpropertyrZrÂrwrorCrÐrÔr
r×rÙrÜrÞr	r
ràÚboolrãr¼rærèrìrërÌrñrr÷rür(r)r*r¶r¶œs€€€€€€ØÐà
%˜˜zÐ+?Ð?Ô@Ð@Ô
AÐAÐAÑAðð  u¨c zÔ!2ðÀ$ðððððððñ„Xðð@˜#ð@ð@ð@ð@ðððððððð!˜ð!ð!ð!ð!ð!˜uð!¨¨zÐ;OÐ/OÔ)Pð!ð!ð!ð!ð"˜( 5œ/ð"ð"ð"ð"ð#ð#ð#ð˜Uð uððððð˜Uð sððððð<˜X e¨E°5¸#Ð,=Ô&>Ô?ð<ð<ð<ð<ð˜tðððððððð#Øð#Ø"'¨
Ð4HÐ(HÔ"Ið#à	
ð#ð#ð#ð#ð ð¨$ððððð*à	%˜˜u ZÐ1EÐ%EÔFÐFÔGÔ	Hð*ð*ð*ð*ð
*x  e¨U°:Ð?SÐ3SÔ-TÐ&TÔ UÔVð*ð*ð*ð*ð˜d 5¨%°
Ð<PÐ0PÔ*QÐ#QÔRððððð'ð'ð'ðDIð
ð
Ø"*ð
Ø<@ð
ð
ð
ð
ð2=ð=ð=ð=ð=r)r¶røÚblobsc󜇇‡	‡
—diiŠ
ˆˆ
fd„Š|D]*\}}}t|¦«\}}‰|¦«}||f||<Œ+ˆ	ˆˆ
fd„Š	‰	d¦«S)z¸Commit a new tree.

    Args:
      object_store: Object store to add trees to
      blobs: Iterable over blob path, sha, mode entries
    Returns:
      SHA1 of the created tree.
    r)có •—|‰vr‰|St|¦«\}}‰|¦«}t|t¦«sJ‚i}|||<|‰|<|Sr;)rarsrA)rZr_r`ryÚnewtreeÚadd_treeÚtreess     €€r*rzcommit_tree.<locals>.add_treeIsgø€Ø5ˆ=ˆ=ؘ”;ÐÝ% d™OœOшØˆHWÑÔˆÝ˜(¥EÑ*Ô*Ð*Ð*Ð*؈؈ˆ(‰Øˆˆd‰Øˆr)cóF•—t¦«}‰| ¦«D]\\}}t|t¦«r&tj}‰t
||¦«¦«}n|\}}| |||¦«Œ]‰ |¦«|j	Sr;)
rrërsÚdictr®r²riÚaddÚ
add_objectÚid)	rZròr`r‰r2r6Ú
build_treerørs	      €€€r*rzcommit_tree.<locals>.build_treeYs ø€Ý‰vŒvˆØ$ Tœ{×0Ò0Ñ2Ô2ð	*ð	*‰OˆHeݘ%¥Ñ&Ô&ð
$Ý”|Ø j¥¨$°Ñ!9Ô!9Ñ:Ô:à#‘sØHŠHX˜t SÑ)Ô)Ð)Ð)Ø×Ò Ñ%Ô%Ð%ØŒwˆr))ra)rørrZr6r2Ú	tree_pathr`ròrrrs`       @@@r*rûrû<s§øøøø€ð # B˜i€Eð	ð	ð	ð	ð	ð	ð!ð%ð%‰ˆˆc4Ý'¨™oœoш	8؈x˜	Ñ"Ô"ˆØ ˜ˆˆX‰ˆð
ð
ð
ð
ð
ð
ð
ðˆ:c‰?Œ?Ðr)ÚindexcóF—t|| ¦«¦«S)zÜCreate a new tree from an index.

    Args:
      object_store: Object store to save the tree in
      index: Index file
    Note: This function is deprecated, use index.commit() instead.
    Returns: Root tree sha.
    rú)rørs  r*Úcommit_indexrhs €õ| U×%6Ò%6Ñ%8Ô%8Ñ9Ô9Ð9r)FÚnamesröròc#ótK—t|¦«}|st||¦«D]b\}}}	||¦«\}	}
| |¦«|s|	|ks|
|kr
||f||
f||	ffV—ŒF#t$r|df|df|dffV—YŒ_wxYw|D].}	||¦«\}	}
d|fd|
fd|	ffV—Œ#t$rYŒ+wxYwdS)aýFind the differences between the contents of a tree and
    a working copy.

    Args:
      names: Iterable of names in the working copy
      lookup_entry: Function to lookup an entry in the working copy
      object_store: Object store to use for retrieving tree contents
      tree: SHA1 of the root tree, or None for an empty tree
      want_unchanged: Whether unchanged files should be reported
    Returns: Iterator over tuples with (oldpath, newpath), (oldmode, newmode),
        (oldsha, newsha)
    N)ÚsetrÚremoveÚKeyError)rrörøròróÚother_namesr-r2r6Ú	other_shaÚ
other_modes           r*r÷r÷tspèè€õ4e‘*”*€KàÐÝ1°,ÀÑEÔEð		Oð		O‰OˆD$˜ð
OØ*6¨,°tÑ*<Ô*<Ñ'˜Jð
×"Ò" 4Ñ(Ô(Ð(Ø!ðO Y°#Ò%5Ð%5¸ÀtÒ9KÐ9KØ  $˜<¨$°
Ð);¸cÀ9Ð=MÐNÐNÐNÐNøøõ
ð
@ð
@ð
@à˜d| d¨D \°C¸°;Ð?Ð?Ð?Ð?Ð?Ð?ð
@øøøððHðHˆð	HØ&2 l°4Ñ&8Ô&8Ñ#ˆY˜
ð˜$< $¨
Ð!3°d¸IÐ5FÐGÐGÐGÐGÐGøõð	ð	ð	ØˆDð	øøøðHðHs#«A*Á*BÂBÂB(Â(
B5Â4B5Úhex_shacó¢—|€t|j¦«}t|j|j|j|j||j|j|j	|¦	«	S)z‹Create a new index entry from a stat value.

    Args:
      stat_val: POSIX stat_result instance
      hex_sha: Hex sha of the object
    )
r´Úst_moderFÚst_ctimeÚst_mtimeÚst_devÚst_inoÚst_uidÚst_gidÚst_size)Ústat_valrr2s   r*Úindex_entry_from_statr$¦sW€ð€|ݘHÔ,Ñ-Ô-ˆåØÔØÔ،،Ø،،ØÔØñ
ô
ð
r)Úwin32có ‡—eZdZdˆfd„ZˆxZS)ÚWindowsSymlinkPermissionErrorr9Ncób•—tt|¦« |d|z|¦«dS)Nz@Unable to create symlink; do you have developer mode enabled? %s)ÚsuperÚPermissionErrorrV)r?ÚerrnoÚmsgr¸rÁs    €r*rVz&WindowsSymlinkPermissionError.__init__ÉsBø€Ý•/ 4Ñ(Ô(×1Ò1Øð9Ø;>ñ?àñ	
ô
ð
ð
ð
r)r’)r!r"r#rVÚ
__classcell__)rÁs@r*r'r'Ès=ø€€€€€ð	ð	ð	ð	ð	ð	ð	ð	ð	ð	r)r')Údir_fdcóš—	tj||||¬¦«S#t$r&}t|j|j|j¦«|‚d}~wwxYw)N)Útarget_is_directoryr.)rÊÚsymlinkr*r'r+Ústrerrorr¸)ÚsrcÚdstr0r.Úes     r*r1r1Ñsk€ð	XÝ”:ؐSÐ.AÈ&ðñôð
øõð	Xð	Xð	XÝ/°´¸¼ÀQÄZÑPÔPÐVWÐWøøøøð	Xøøøs‚š
A
¤!AÁA
Túutf-8)Úhonor_filemodeÚ
tree_encodingÚ
symlink_fnÚblobÚtarget_pathcó—	tj|¦«}n#t$rd}YnwxYw| ¦«}t	j|¦«rd|rtj|¦«tjdkr*| 	|¦«}| 	|¦«}|pt||¦«n½|g|jt|¦«krOt|d¦«5}| ¦«|kr|cddd¦«S	ddd¦«n#1swxYwYt|d¦«5}| |¦«ddd¦«n#1swxYwY|rtj||¦«tj|¦«S)a‰Build a file or symlink on disk based on a Git object.

    Args:
      blob: The git object
      mode: File mode
      target_path: Path to write to
      honor_filemode: An optional flag to honor core.filemode setting in
        config file, default is core.filemode=True, change executable bit
      symlink: Function to use for creating symlinks
    Returns: stat object for the file
    Nr%rÈrÄ)rÊÚlstatÚFileNotFoundErrorÚ
as_raw_stringr®r¯ÚunlinkÚsysÚplatformÚdecoder1r"rŒÚopenrorwÚchmod)	r:r2r;r7r8r9ÚoldstatÚcontentsrps	         r*Úbuild_file_from_blobrHÜs€ð(Ý”(˜;Ñ'Ô'ˆˆøÝðððØˆˆˆðøøøà×!Ò!Ñ#Ô#€HÝ„|DÑÔð(Øð	#ÝŒIkÑ"Ô"Ð"ÝŒ<˜7Ò"Ð"à—’ }Ñ5Ô5ˆHØ%×,Ò,¨]Ñ;Ô;ˆKØ	ˆÐ	•w ¨+Ñ6Ô6Ð6Ð6àР7¤?µc¸(±m´mÒ#CÐ#Cݐk 4Ñ(Ô(ð
#¨AØ—6’6‘8”8˜xÒ'Ð'Ø"ð
#ð
#ð
#ð
#ñ
#ô
#ð
#ð
#Ø'ð
#ð
#ð
#ñ
#ô
#ð
#ð
#ð
#ð
#ð
#ð
#øøøð
#ð
#ð
#ð
#õ+˜tÑ
$Ô
$ð	¨à
GŠGHÑÔÐð	ð	ð	ñ	ô	ð	ð	ð	ð	ð	ð	øøøð	ð	ð	ð	ðð	(ÝŒH[ $Ñ'Ô'Ð'å
Œ8KÑ Ô Ð s0‚—&¥&ÃDÄDÄDÄ.EÅEÅE)ó.gitó.s..r)Úelementcó8—| ¦«tvSr;)ÚlowerÚINVALID_DOTNAMES)rKs r*Úvalidate_path_element_defaultrOs€Ø=Š=‰?Œ?Õ"2Ð2Ð2r)cóz—| d¦« ¦«}|tvrdS|dkrdSdS)Ns. Fsgit~1T)ÚrstriprMrN)rKÚstrippeds  r*Úvalidate_path_element_ntfsrSsE€Ø~Š~˜eÑ$Ô$×*Ò*Ñ,Ô,€HØÕ#Ð#Ð#؈uؐ8ÒÐØˆu؈4r)cóV—| d¦«}|D]}||¦«sdSŒdS)z2Default path validator that just checks for .git/.r\FT)Úsplit)rZÚelement_validatorÚpartsres    r*Ú
validate_pathrXsH€àJŠJtÑÔ€EØ
ððˆØ Ð  Ñ#Ô#ð	ؐ55ð	ðˆtr)Ú	root_pathÚ
index_pathÚtree_idr7có:—t|d¬¦«}t|t¦«stj|¦«}t||¦«D]º}t
|j|¦«sŒt||j¦«}	tj 	tj 
|	¦«¦«s1tjtj 
|	¦«¦«t|j
¦«rHtj |	¦«stj|	¦«tj|	¦«}
n=||j}t|t$¦«sJ‚t'||j
|	||¬¦«}
|rt|j
¦«rS|j
|
j|
j|
j|
j|
j|
j|
j|
j|
jf
}|
 |¦«}
t=|
|j¦«||j<Œ¼| ¦«dS)ašGenerate and materialize index from a tree.

    Args:
      tree_id: Tree to materialize
      root_path: Target dir for materialized index files
      index_path: Target path for generated index
      object_store: Non-empty object store holding tree contents
      honor_filemode: An optional flag to honor core.filemode setting in
        config file, default is core.filemode=True, change executable bit
      validate_path_element: Function to validate path elements to check
        out; default just refuses .git and .. directories.

    Note: existing index is wiped and contents are not merged
        in a working dir. Suitable only for fresh clones.
    F)ro)r7r9N) r¶rsrArÊÚfsencoderrXrZÚ_tree_to_fs_pathrËr_Úmakedirsrr2ÚisdirÚmkdirr=r6rrHrrÚst_nlinkr r!r"Úst_atimerrrÁr$rw)
rYrZrør[r7Úvalidate_path_elementr9rr‰Ú	full_pathÚstÚobjÚst_tuples
             r*Úbuild_index_from_treeri'sè€õ0
* 5Ð)Ñ)Ô)€Eݐi¥Ñ'Ô'ð+Ý”K 	Ñ*Ô*ˆ	å# L°'Ñ:Ô:ð-Añ-AˆÝ˜UœZÐ)>Ñ?Ô?ð	ØÝ$ Y°´
Ñ;Ô;ˆ	åŒw~Š~bœgŸošo¨iÑ8Ô8Ñ9Ô9ð	4ÝŒKœŸš¨	Ñ2Ô2Ñ3Ô3Ð3õu”zÑ"Ô"ð	Ý”7—=’= Ñ+Ô+ð
$Ý”˜Ñ#Ô#Ð#Ý”˜)Ñ$Ô$ˆBˆBð˜uœyÔ)ˆCݘc¥4Ñ(Ô(Ð(Ð(Ð(Ý%ØØ”
ØØ-Ø%ðñôˆBðð	(¥¨U¬ZÑ!8Ô!8ð	(ð
”
ؔ	ؔ	ؔؔ	ؔ	ؔ
ؔؔؔðˆHð—’˜hÑ'Ô'ˆBõ2°"°e´iÑ@Ô@ˆˆeŒjÑÑà	‡K‚KM„M€M€M€Mr)Úfs_pathcóÌ—t|t¦«sJ‚t¦«}tj|¦«rit
jdkr?tjtj	|¦«¦« 
|¦«|_n[tj|¦«|_nAt|d¦«5}| 
¦«|_ddd¦«n#1swxYwY|S)zœCreate a blob from a path and a stat object.

    Args:
      fs_path: Full file system path to file
      mode: File mode
    Returns: A `Blob` object
    r%rÈN)rsrArr®r¯rArBrÊÚreadlinkÚfsdecodeÚencodeÚdatarDro)rjr2r8r:rps     r*Úblob_from_path_and_moderpusö€õguÑ%Ô%Ð%Ð%Ð%݉6Œ6€DÝ„|DÑÔð!ÝŒ<˜7Ò"Ð"圥B¤K°Ñ$8Ô$8Ñ9Ô9×@Ò@ÀÑOÔOˆDŒIˆI圠GÑ,Ô,ˆDŒIˆIå
'˜4Ñ
 Ô
 ð	! AØŸš™œˆDŒIð	!ð	!ð	!ñ	!ô	!ð	!ð	!ð	!ð	!ð	!ð	!øøøð	!ð	!ð	!ð	!à€KsÂ3CÃCà Ccó.—t||j|¦«S)zžCreate a blob from a path and a stat object.

    Args:
      fs_path: Full file system path to file
      st: A stat object
    Returns: A `Blob` object
    )rpr)rjrfr8s   r*Úblob_from_path_and_statrr‹s€õ# 7¨B¬J¸
ÑFÔFÐFr)cóê—ddlm}ddlm}t	|t
¦«st
j|¦«}	||¦«}n#|$rYdSwxYw	| ¦«S#t$rYdSwxYw)z‘Read the head commit of a submodule.

    Args:
      path: path to the submodule
    Returns: HEAD sha, None if not a valid head/repository
    r)ÚNotGitRepository)ÚRepoN)
ÚerrorsrtÚreporursrþrÊrmÚheadr)rZrtrurws    r*Úread_submodule_headry–s¶€ð)Ð(Ð(Ð(Ð(Ð(ØÐÐÐÐÐõdCÑ Ô ð!ÝŒ{˜4Ñ Ô ˆð؈tD‰zŒzˆˆøØððð؈tˆtðøøøð؏yŠy‰{Œ{ÐøÝððð؈tˆtðøøøs#·AÁAÁAÁA$Á$
A2Á1A2r
có¾—tj tj |d¦«¦«rt	|¦«}|j|krdSndSdS)aôCheck if a directory has changed after getting an error.

    When handling an error trying to create a blob from a path, call this
    function. It will check if the path is a directory. If it's a directory
    and a submodule, check the submodule head to see if it's has changed. If
    not, consider the file as changed as Git tracked a file and not a
    directory.

    Return true if the given path should be considered as changed and False
    otherwise or if the path is not a directory.
    rITF)rÊrZrËrgryr6)r
r‰rxs   r*Ú_has_directory_changedr{®sZ€õ
„w‡~‚~•b”g—l’l 9¨gÑ6Ô6Ñ7Ô7ðå" 9Ñ-Ô-ˆØŒ9˜ÒÐØ4ððˆtàˆ5r)c#ó\K—t|t¦«stj|¦«}| ¦«D]ë\}}t||¦«}t|t¦«r|V—Œ/	tj|¦«}tj	|j
¦«rt||¦«r|V—Œrtj|j
¦«stj
|j
¦«sŒ¥t||¦«}||||¦«}|j|jkr|V—ŒØ#t"$r|V—YŒèwxYwdS)zÕWalk through an index and check for differences against working tree.

    Args:
      index: index to check
      root_path: path in which to find files
    Returns: iterator over paths with unstaged changes
    N)rsrArÊr]rìr^rQr=r®r±rr{ÚS_ISREGr¯rrrr6r>)rrYÚfilter_blob_callbackr
r‰rerfr:s        r*Úget_unstaged_changesrÇs]èè€õi¥Ñ'Ô'ð+Ý”K 	Ñ*Ô*ˆ	à!ŸOšOÑ-Ô-ð ð ш	5Ý$ Y°	Ñ:Ô:ˆ	ݐeÕ1Ñ2Ô2ð	àˆOˆOˆOØð	 Ý”˜)Ñ$Ô$ˆBÝŒ|˜BœJÑ'Ô'ð
Ý)¨)°UÑ;Ô;ð$Ø#OOOØå”< ¤
Ñ+Ô+ð
µD´LÀÄÑ4LÔ4Lð
Øå*¨9°bÑ9Ô9ˆDà#Ð/Ø+Ð+¨D°)Ñ<Ô<ðŒw˜%œ)Ò#Ð#ؐøøõ
!ð	ð	ð	ðˆOˆOˆOˆOˆOð	øøøð+ ð sÁ0ADÂ22DÃ%DÄD)Ä(D)Úasciicó—t|t¦«sJ‚tdkr| dt¦«}n|}tj ||¦«S)z¬Convert a git tree path to a file system path.

    Args:
      root_path: Root filesystem path
      tree_path: Git tree path as bytes

    Returns: File system path.
    r\)rsrAÚos_sep_bytesÚreplacerÊrZrg)rYr
Úsep_corrected_paths   r*r^r^ös[€õi¥Ñ'Ô'Ð'Ð'Ð'ݐtÒÐØ&×.Ò.¨tµ\ÑBÔBÐÐà&ÐÝ
Œ7<Š<˜	Ð#5Ñ6Ô6Ð6r)có°—t|t¦«stj|¦«}n|}tdkr| td¦«}n|}|S)z…Convert a file system path to a git tree path.

    Args:
      fs_path: File system path.

    Returns:  Git tree path as bytes
    r\)rsrArÊr]r‚rƒ)rjÚ
fs_path_bytesr
s   r*Ú_fs_to_tree_pathr‡sY€õguÑ%Ô%ð Ýœ GÑ,Ô,ˆ
ˆ
àˆ
ݐtÒÐØ!×)Ò)­,¸Ñ=Ô=ˆ	ˆ	à!ˆ	ØÐr)cóԗtj tj |d¦«¦«r*t	|¦«}|€dSt||t¬¦«SdS)NrI)r2)rÊrZrËrgryr$r)rfrZrxs   r*Úindex_entry_from_directoryr‰sZ€Ý	„w‡~‚~•b”g—l’l 4¨Ñ1Ô1Ñ2Ô2ðAÝ" 4Ñ(Ô(ˆØˆ<ؐ4Ý$ R¨µKÐ@Ñ@Ô@Ð@؈4r)cóŠ—t|t¦«sJ‚tj|¦«}t	j|j¦«rt||¦«St	j|j¦«st	j	|j¦«r<t||¦«}|| |¦«t||j
¦«SdS)agCreate an index from a filesystem path.

    This returns an index value for files, symlinks
    and tree references. for directories and
    non-existent files it returns None

    Args:
      path: Path to create an index entry for
      object_store: Optional object store to
        save new blobs in
    Returns: An index entry; None for directories
    N)rsrArÊr=r®r±rr‰r}r¯rrr
r$r)rZrørfr:s    r*Úindex_entry_from_pathr‹#s²€õdEÑ"Ô"Ð"Ð"Ð"Ý	Œ$‰Œ€BÝ„|B”JÑÔð4Ý)¨"¨dÑ3Ô3Ð3å„|B”JÑÔð2¥4¤<°´
Ñ#;Ô#;ð2Ý& t¨RÑ0Ô0ˆØÐ#Ø×#Ò# DÑ)Ô)Ð)Ý$ R¨¬Ñ1Ô1Ð1àˆ4r)rñc#ó˜K—|D]D}t||¦«}	t||¬¦«}n#ttf$rd}YnwxYw||fV—ŒEdS)zùIterate over current versions of index entries on disk.

    Args:
      paths: Paths to iterate over
      root_path: Root path to access from
      object_store: Optional store to save new blobs in
    Returns: Iterator over path, index_entry
    ©røN)r^r‹r>ÚIsADirectoryError)rñrYrørZrer‰s      r*Úiter_fresh_entriesr@s†èè€ðððˆÝ˜Y¨Ñ-Ô-ˆð	Ý)¨!¸,ÐGÑGÔGˆEˆEøÝ!Õ#4Ð5ð	ð	ð	؈EˆEˆEð	øøøàEˆkÐÐÐÐð
ðs˜*ªA¿Ac#óŽK—t|||¬¦«D]/\}}|€
|r|ddfV—Œ||jt|j¦«fV—Œ0dS)a8Iterate over versions of objects on disk referenced by index.

    Args:
      root_path: Root path to access from
      include_deleted: Include deleted entries with sha and
        mode set to None
      object_store: Optional object store to report new items to
    Returns: Iterator over path, sha, mode
    rN)rr6r´r2)rñrYÚinclude_deletedrørZr‰s      r*Úiter_fresh_objectsr’Vswèè€õ*¨%°ÈÐVÑVÔVð<ð<‰ˆˆe؈=Øð
'ؘD $Ð&Ð&Ð&Ð&øà˜œ	¥<°´
Ñ#;Ô#;Ð;Ð;Ð;Ð;Ð;ð<ð<r)có@—t||¦«D]\}}|r|||<Œ
dS)z¬Refresh the contents of an index.

    This is the equivalent to running 'git commit -a'.

    Args:
      index: Index to update
      root_path: Root filesystem path
    N)r)rrYrZr‰s    r*Ú
refresh_indexr”js=€õ*¨%°Ñ;Ô;ð 𠉈ˆeØð	 ؈E$‰Køð ð r)có>—eZdZdZdeeefddfd„Zd„Zd„Z	dS)Úlocked_indexzPLock the index while making modifications.

    Works as a context manager.
    rZr9Ncó—||_dSr;)Ú_path)r?rZs  r*rVzlocked_index.__init__~s
€ØˆŒ
ˆ
ˆ
r)cóv—t|jd¦«|_t|j¦«|_|jS)NrÄ)rr˜Ú_filer¶Ú_indexr>s r*Ú	__enter__zlocked_index.__enter__s.€Ý˜TœZ¨Ñ.Ô.ˆŒ
ݘDœJÑ'Ô'ˆŒØŒ{Ðr)có—||j ¦«dS	t|j¦«}t||jj¦«| ¦«dS#t$r|j ¦«YdSwxYwr;)ršÚabortrrªr›r·rÅÚ
BaseException)r?Úexc_typeÚ	exc_valueÚ	tracebackrps     r*Ú__exit__zlocked_index.__exit__†s—€ØÐØŒJ×ÒÑÔÐØˆFð	ݘ4œ:Ñ&Ô&ˆAÝ˜Q ¤Ô 3Ñ4Ô4Ð4ð
GŠG‰IŒIˆIˆIˆIøõð	ð	ð	ØŒJ×ÒÑÔÐÐÐÐð	øøøsŸ.A#Á##B
Â	B
)
r!r"r#rWrrArþrVrœr£r(r)r*r–r–xsg€€€€€ððð
˜U 5¨# :Ô.ð°4ðððððððð

ð
ð
ð
ð
r)r–r;rý)r6)FN)arWrÊr®rmrAÚdataclassesrÚenumrÚtypingrrrrr	r
rrr
rÚfilerrørÚobjectsrrrrrrrrxrrrr<r=r…Ú
FLAG_VALIDrƒÚEXTENDED_FLAG_SKIP_WORKTREEÚEXTENDED_FLAG_INTEND_TO_ADDr¢rr,rFrQÚ	ExceptionrYrArarirqr|rCrˆrrršrŸr£rªr´r¶rûrr÷r$rBr*r'r1rHrNrrOrSrXrþrirprrryr{rÚseprnr‚r^r‡r‰r‹rr’r”r–r(r)r*ú<module>r®sM
ðð*,Ð+à	€	€	€	Ø€€€Ø
€
€
€
Ø
€
€
€
Ø!Ð!Ð!Ð!Ð!Ð!ØÐÐÐÐÐðððððððððððððððððððððððððÐÐÐÐÐØ,Ð,Ð,Ð,Ð,Ð,ððððððððððððððððððð:Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ð€Ø€Ø€
ð€
ð€
ð%Ðð%Ðà€ðððððˆDñôðððGðGðGðGðGñGôGñ„ðGð$ð'
ð'
ð'
ð'
ð'
ñ'
ô'
ñ„ð'
ðTððððñôðð$/ð/ð/ð/ð/iñ/ô/ð/ð#Eð#˜e E¨5 LÔ1ð#ð#ð#ð#ð"-ð-ð-ð
+ð+ð+ð$ð$ð$ð"+ ð+Ð)=ð+ð+ð+ð+ð\!@Ð 4ð!@¸sð!@Àtð!@ð!@ð!@ð!@ðH,ð,ð,ð,ð,˜Yñ,ô,ð,ð	+(ð	+˜xÐ(<Ô=ð	+ð	+ð	+ð	+ð˜$˜u e¨JÐ8LÐ,LÔ&MÐMÔNððððð4PTð-ð-Øð-ØÐ3Ô4ð-Ø?Gȼ}ð-ð-ð-ð-ð*"ð2ð2Øð2à
%˜˜zÐ+?Ð?Ô@Ð@Ô
Að2ðcŒ]ð2ð
ð	2ð2ð2ð2ð:sð˜sððððð.]=ð]=ð]=ð]=ð]=ñ]=ô]=ð]=ð@)Ø!ð)Ø*2°5¸ÀÀsÐ9JÔ3KÔ*Lð)à
ð)ð)ð)ð)ðX	:˜ð	:°uð	:Àð	:ð	:ð	:ð	:ð"ð/Hð/HؐEŒ?ð/Hà˜E˜7 E¨%°¨*Ô$5Ð5Ô6ð/Hð"ð/Hð5Œ/ð	/HðØ	Ø
ˆhuŒo˜x¨œÐ.Ô/Ø
ˆhsŒm˜X cœ]Ð*Ô+Ø
ˆhuŒo˜x¨œÐ.Ô/ð	1ôôð
/Hð/Hð/Hð/Hðjððà
ðð3Œ-ððððð6„<7ÒÐððððð¨ñôððX¸tðXðXðXðXðXðXðŒj€GðØØð.!ð.!ð.!Ø
ð.!à

ð.!ðð.!ð.!ð.!ð.!ðb/Ðð3¨5ð3°Tð3ð3ð3ð3ð¨ð°$ððððð2Oðð˜ðÐSWððððð Ø7ØðKðKؐS˜%ZÔ ðKàc˜5jÔ!ðKð"ðKðð	Kð
ðKðKðKðKð\ð Uð°#ððððð,GðG UðGðGðGðGð˜e C¨ JÔ/ð°H¸U´Oððððð0 eððððð4FJð) ð) Øð) Ø" 3¨ :Ô.ð) ð) ð) ð) ðXŒv}Š}˜WÑ%Ô%€ð7 ð7°%ð7ð7ð7ð7ð"˜e C¨ JÔ/ð°Eððððð&¨ð°8¸JÔ3Gððððð<@ððØ
ðØ'¨Ô8ðà
ˆjÔððððð@/3ððؐEŒ?ðàðð˜?Ô+ððˆeE˜8 JÔ/Ð/Ô0Ô1ð	ðððð.SWð<ð<ؐEŒ?ð<Ø',ð<à
ˆeE˜8 Eœ?¨H°S¬MÐ9Ô:Ô;ð<ð<ð<ð<ð( ˜ð ¨5ð ð ð ð ðððððñôðððr)