§
    ŠŠtj��  ã                   óV  — U 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Zd dlZd dl	Z	d dl
Z
d dlmZmZ d dlmZmZ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 d dlmZ d d	lmZmZmZm Z  d d
l!m"Z" d dl#Z#d dl#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) d dl*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d dl@mAZA d dlBmCZCmDZDmEZE d dlFmGZG d dlHmIZI g d¢ZJdZKeLeMd<   dZNeeL         eMd<   e G d„ d¦  «        ¦   «         ZOe G d„ d¦  «        ¦   «         ZP G d„ d e¦  «        ZQd!ZRd"eLfd#„ZS G d$„ d%e¦  «        ZT G d&„ d'eT¦  «        ZU G d(„ d)eT¦  «        ZV G d*„ d+¦  «        ZWd,e>d"eXfd-„ZYd.eXd/eZe>         d"eZeZe>                  fd0„Z[d1eWd2ej\        d3ej]        e#j$        z  d4e>d5eLd6eQd"eEfd7„Z^d8ed9ej_        d:ej_        d;e=d1eWd<eXd=e`d>eXd6eQd"dfd?„Za G d@„ dAe¦  «        Zb G dB„ dCeb¦  «        Zc G dD„ dEeD¦  «        Zd G dF„ dG¦  «        Ze G dH„ dIeC¦  «        Zf G dJ„ dKedeA¦  «        ZgdS )Lé    N)ÚABCÚabstractmethod)ÚCallableÚ	GeneratorÚIterableÚIteratorÚSequence)Úcontextmanager)Ú	dataclass)ÚEnum)ÚUnsupportedOperation)ÚPath)ÚAnyÚcastÚFinalÚIO)ÚBuffer)ÚTensor)Ú_get_available_device_typeÚ_get_device_module)Únarrow_tensor_by_index)ÚExtensionRegistryÚStreamTransformExtension)ÚCUSTOM_METADATA_KEYÚDCP_VERSION_KEYÚ
FORMAT_KEYÚFORMAT_VALUEÚHF_DCP_VERSION)ÚMetadataÚSTATE_DICT_TYPEÚStorageMeta)ÚLoadItemTypeÚLoadPlanÚLoadPlannerÚReadItemÚSavePlanÚSavePlannerÚ	WriteItemÚWriteItemType)ÚBlockingAsyncStager)ÚStorageReaderÚStorageWriterÚWriteResult)Ú_create_file_view)ÚFuture)ÚFileSystemWriterÚFileSystemReaderÚ
FileSystemÚFileSystemBaseÚSerializationFormatz	.metadataÚ_metadata_fnz1.0.0ÚCURRENT_DCP_VERSIONc                   óX   — e Zd ZU dZeed<   eed<   eed<   dZee         dz  ed<   d„ Z	dS )Ú_StorageInfoz#This is the per entry storage info.Úrelative_pathÚoffsetÚlengthNÚtransform_descriptorsc                 óH   — d„ | j                              ¦   «         D ¦   «         S )Nc                 ó   — i | ]
\  }}|®||“ŒS ©N© )Ú.0ÚkÚvs      úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/distributed/checkpoint/filesystem.pyú
<dictcomp>z-_StorageInfo.__getstate__.<locals>.<dictcomp>T   s   € ÐHÐHÐH™˜˜A¸!¸-��1¸-¸-¸-ó    )Ú__dict__Úitems©Úselfs    rD   Ú__getstate__z_StorageInfo.__getstate__S   s$   € ØHÐH ¤×!4Ò!4Ñ!6Ô!6ÐHÑHÔHÐHrF   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__Úintr<   r	   rK   r@   rF   rD   r8   r8   J   sh   € € € € € € à-Ð-àÐÐÑØ€K€K�KØ€K€K�KØ26Ð˜8 Cœ=¨4Ñ/Ð6Ð6Ñ6ðIð Ið Ið Ið IrF   r8   c                   ó   — e Zd ZU eed<   dS )Ú_StoragePrefixÚprefixN)rL   rM   rN   rP   rQ   r@   rF   rD   rT   rT   W   s   € € € € € € à€K€K�K€K€KrF   rT   c                   ó   — e Zd ZdZdZdS )r4   Ú
torch_saveÚsafetensorsN)rL   rM   rN   Ú
TORCH_SAVEÚSAFETENSORSr@   rF   rD   r4   r4   \   s   € € € € € Ø€JØ€K€K€KrF   r4   z.distcpÚreturnc                  óB   — t          t          j        ¦   «         ¦  «        S r?   )rP   ÚuuidÚuuid4r@   rF   rD   Ú_generate_uuidr_   d   s   € Ý�tŒz‰|Œ|ÑÔÐrF   c                   óŒ   — e Zd Zedededdfd„¦   «         Zedd„¦   «         Zedee	e
j        ef                  fd„¦   «         ZdS )	Ú_TensorLoaderÚsizeÚobjr[   Nc                 ó   — d S r?   r@   ©rJ   rb   rc   s      rD   Úaddz_TensorLoader.addi   ó   € àˆrF   c                 ó   — d S r?   r@   rI   s    rD   Ústart_loadingz_TensorLoader.start_loadingm   rg   rF   c                 ó   — d S r?   r@   rI   s    rD   Úvaluesz_TensorLoader.valuesq   rg   rF   ©r[   N)rL   rM   rN   r   rR   Úobjectrf   ri   r   ÚtupleÚtorchr   rk   r@   rF   rD   ra   ra   h   sŸ   € € € € € Øð˜ð  &ð ¨Tð ð ð ñ „^ðð ðð ð ñ „^ðð ð˜  u¤|°VÐ';Ô!<Ô=ð ð ð ñ „^ðð ð rF   ra   c                   ól   — e Zd Zdeddfd„Zdededdfd„Zd
d„Zde	e
ej        ef                  fd	„ZdS )Ú_SerialCpuLoaderÚresolve_funr[   Nc                 ó"   — || _         g | _        d S r?   )rr   rH   )rJ   rr   s     rD   Ú__init__z_SerialCpuLoader.__init__w   s   € Ø&ˆÔØ/1ˆŒ
ˆ
ˆ
rF   rb   rc   c                 ó>   — | j                              ||f¦  «         d S r?   )rH   Úappendre   s      rD   rf   z_SerialCpuLoader.add{   s"   € ØŒ
×Ò˜4 ˜+Ñ&Ô&Ð&Ð&Ð&rF   c                 ó   — d S r?   r@   rI   s    rD   ri   z_SerialCpuLoader.start_loading~   s   € ØˆrF   c              #   ó,  K  — | j         D ]‰\  }}|                      |¦  «                             ¦   «         }|                     ¦   «         }|                     ¦   «                              ¦   «         |j        k    r|                     ¦   «         }||fV — ŒŠd S r?   )rH   rr   ÚdetachÚcpuÚuntyped_storagerb   ÚnbytesÚclone©rJ   Ú_rc   Útensors       rD   rk   z_SerialCpuLoader.values�   s¢   è è € Ø”jð 		ð 		‰FˆAˆsØ×%Ò% cÑ*Ô*×1Ò1Ñ3Ô3ˆFØ—Z’Z‘\”\ˆFØ×%Ò%Ñ'Ô'×,Ò,Ñ.Ô.°&´-Ò?Ð?àŸš™œ�àØðð ð ð ð ð		ð 		rF   rl   )rL   rM   rN   r   rt   rR   rm   rf   ri   r   rn   ro   r   rk   r@   rF   rD   rq   rq   v   sŸ   € € € € € ð2 Hð 2°ð 2ð 2ð 2ð 2ð'˜ð ' &ð '¨Tð 'ð 'ð 'ð 'ðð ð ð ð
˜  u¤|°VÐ';Ô!<Ô=ð 
ð 
ð 
ð 
ð 
ð 
rF   rq   c            	       ó  — e Zd Z	 	 ddedej        dz  deddfd„Zede	fd„¦   «         Z
deeej        ef                  fd	„Zdd
„Zdeeej        ef                  fd„Zdededdfd„Zdd„Zdeeej        ef                  fd„ZdS )Ú_OverlappingCpuLoaderNé@B rr   ÚstreamÚinflight_threshholdr[   c                 ó  — || _         g | _        || _        d| _        t	          j        ¦   «         | _        d| _        d| _        |r|j	        nt          ¦   «         | _	        t          | j	        ¦  «        | _        t          t          j        j        |p| j                             ¦   «         ¦  «        | _        | j        | j                             ¦   «         k    r3| j                             | j                             ¦   «         ¦  «         d S d S )Nr   F)rr   rH   r…   Úin_flight_dataÚcollectionsÚdequeÚcurrent_itemsÚidxÚstartedÚdevice_typer   r   Údevice_moduler   ro   ÚcudaÚStreamÚcurrent_streamr„   Úwait_stream)rJ   rr   r„   r…   s       rD   rt   z_OverlappingCpuLoader.__init__�   sö   € ð 'ˆÔØ/1ˆŒ
Ø#6ˆÔ ØˆÔÝ0;Ô0AÑ0CÔ0CˆÔØˆŒØˆŒà"(ÐJˆFÔÐÕ.HÑ.JÔ.Jð 	Ôõ 0°Ô0@ÑAÔAˆÔÝÝŒJÔ˜vÐL¨Ô);×)JÒ)JÑ)LÔ)Lñ
ô 
ˆŒð Œ;˜$Ô,×;Ò;Ñ=Ô=Ò=Ð=ØŒK×#Ò# DÔ$6×$EÒ$EÑ$GÔ$GÑHÔHÐHÐHÐHð >Ð=rF   c                 ó<   — | j         t          | j        ¦  «        k    S r?   )r‹   ÚlenrH   rI   s    rD   Ú_donez_OverlappingCpuLoader._done¦   s   € àŒx�3˜tœz™?œ?Ò*Ð*rF   c                 ó~  — g }| j         | j        k    r| j                             ¦   «          | j         | j        k    r�| j                             ¦   «         }| xj         |d                              ¦   «         |d                              ¦   «         z  z  c_         |                     |¦  «         | j         | j        k    °�|S )Nr   )	r‡   r…   r„   ÚsynchronizerŠ   ÚpopleftÚnumelÚelement_sizerv   )rJ   ÚdrainedÚvals      rD   Ú_drainz_OverlappingCpuLoader._drainª   s²   € ØˆØÔ $Ô":Ò:Ð:ØŒK×#Ò#Ñ%Ô%Ð%ØÔ! TÔ%=Ò=Ð=ØÔ$×,Ò,Ñ.Ô.ˆCØÐÔ 3 q¤6§<¢<¡>¤>°C¸´F×4GÒ4GÑ4IÔ4IÑ#IÑIÐÔØ�NŠN˜3ÑÔÐð Ô! TÔ%=Ò=Ð=ð ˆrF   c                 óZ  — | j                              | j        ¦  «        5  | j        �sj| j        | j        k     �rY| j        | j                 \  }}| xj        dz  c_        |                      |¦  «                             ¦   «         }|j	        j
        | j        k    r|                     dd¬¦  «        }nu|j	        t          j	        d¦  «        k    rX|                     ¦   «                              ¦   «         |                     ¦   «         |j        z  k    r|                     ¦   «         }| j                             ||f¦  «         | xj        |                     ¦   «         |                     ¦   «         z  z  c_        | j        s| j        | j        k     �°Yd d d ¦  «         d S # 1 swxY w Y   d S )Né   rz   T)ÚdeviceÚnon_blocking)rŽ   r„   r•   r‡   r…   rH   r‹   rr   ry   r    Útyper�   Útoro   r{   rb   r™   Úitemsizer}   rŠ   rv   rš   r~   s       rD   Ú_refillz_OverlappingCpuLoader._refill´   sç  € ØÔ×&Ò& t¤{Ñ3Ô3ð 	Nð 	NØ”jñ N TÔ%8¸4Ô;SÒ%SÑ%SØœ D¤HÔ-‘��3Ø�”˜A‘�”Ø×)Ò)¨#Ñ.Ô.×5Ò5Ñ7Ô7�Ø”=Ô%¨Ô)9Ò9Ð9Ø#ŸYšY¨eÀ$˜YÑGÔG�F�FØ”]¥e¤l°5Ñ&9Ô&9Ò9Ð9à×.Ò.Ñ0Ô0×5Ò5Ñ7Ô7Ø!Ÿ<š<™>œ>¨F¬OÑ;ò<ð <ð "(§¢¡¤˜àÔ"×)Ò)àØðñô ð ð Ð#Ô# v§|¢|¡~¤~¸×8KÒ8KÑ8MÔ8MÑ'MÑMÐ#Ô#ð) ”jð N TÔ%8¸4Ô;SÒ%SÑ%Sð	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nð 	Nð 	Ns    E3F Æ F$Æ'F$c                 óž   — | j         st          d¦  «        ‚t          | j        ¦  «        dk    r| j                             ¦   «          | j        S )Nz._finish called before all items were processedr   )r•   ÚAssertionErrorr”   rŠ   r„   r—   rI   s    rD   Ú_finishz_OverlappingCpuLoader._finishÌ   sO   € ØŒzð 	SÝ Ð!QÑRÔRÐRÝˆtÔ!Ñ"Ô" QÒ&Ð&ØŒK×#Ò#Ñ%Ô%Ð%ØÔ!Ð!rF   rb   rc   c                 ój   — | j         rt          d¦  «        ‚| j                             ||f¦  «         d S )Nz&cannot add items after loading started)rŒ   ÚRuntimeErrorrH   rv   re   s      rD   rf   z_OverlappingCpuLoader.addÓ   s<   € ØŒ<ð 	IÝÐGÑHÔHÐHØŒ
×Ò˜4 ˜+Ñ&Ô&Ð&Ð&Ð&rF   c                 ó¨   — | j         rd S d| _         | j                             t          j        d¦  «        ¬¦  «         |                      ¦   «          d S )NTr   ©Úkey)rŒ   rH   ÚsortÚoperatorÚ
itemgetterr¥   rI   s    rD   ri   z#_OverlappingCpuLoader.start_loadingØ   sJ   € ØŒ<ð 	ØˆFØˆŒØŒ
�Š�HÔ/°Ñ2Ô2ˆÑ3Ô3Ð3Ø�Š‰ŒˆˆˆrF   c              #   óâ   K  — |                       ¦   «          | j        s7|                      ¦   «         }|                      ¦   «          |E d {V —† | j        ¯7|                      ¦   «         E d {V —† d S r?   )ri   r•   r�   r¥   r¨   )rJ   r›   s     rD   rk   z_OverlappingCpuLoader.valuesß   sˆ   è è € Ø×ÒÑÔÐØ”*ð 	Ø—k’k‘m”mˆGØ�LŠL‰NŒNˆNØÐÐÐÐÐÐÐð ”*ð 	ð
 —<’<‘>”>Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!rF   )Nrƒ   rl   )rL   rM   rN   r   ro   r�   rR   rt   ÚpropertyÚboolr•   Úlistrn   r   rm   r�   r¥   r   r¨   rf   ri   r   rk   r@   rF   rD   r‚   r‚   Ž   sk  € € € € € ð '+Ø#,ð	Ið IàðIð ”˜tÑ#ðIð !ð	Ið
 
ðIð Ið Ið Ið. ð+�tð +ð +ð +ñ „Xð+ð˜˜U 5¤<°Ð#7Ô8Ô9ð ð ð ð ðNð Nð Nð Nð0"˜ %¨¬°fÐ(<Ô"=Ô>ð "ð "ð "ð "ð'˜ð ' &ð '¨Tð 'ð 'ð 'ð 'ð
ð ð ð ð"˜  u¤|°VÐ';Ô!<Ô=ð "ð "ð "ð "ð "ð "rF   r‚   c            	       ó~   — e Zd ZdZ	 d	dee         dz  ddfd„Zdedej	        de
ee         ee         f         fd„ZdS )
Ú_StorageWriterTransformsú¬
    This is experimental, and will likely move elsewhere in the
    future.  It lives here to minimize changes while we are still
    learning and gathering feedback.
    NÚ
extensionsr[   c                 ó   — |€dn|| _         dS )a  
        If the extensions arg is None, this means the implementation
        should provide whatever defaults it chooses.  An empty
        sequence indicates no extensions should be used.  At this
        time, the default extensions sequence is empty.
        Nr@   )r¸   )rJ   r¸   s     rD   rt   z!_StorageWriterTransforms.__init__ð   s   € ð !+Ð 2˜"˜"¸
ˆŒˆˆrF   Ú
write_itemÚ
raw_streamc                 ó  —  G d„ dt           j        ¦  «        }t          t          t                    ||¦  «        ¦  «        }| j        D ]}|                     |¦  «        }Œ|d„ t          | j        ¦  «        D ¦   «         fS )Nc                   óF   — e Zd Zdej        fd„Zdefd„Zdede	fd„Z
d„ ZdS )	úE_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriterÚrawc                 ó   — || _         d S r?   )r¿   )rJ   r¿   s     rD   rt   zN_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.__init__  s   € Ø�”��rF   r[   c                 ó   — dS ©NTr@   rI   s    rD   Ú	writeablezO_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.writeable	  s   € Ø�trF   Úbc                 ó6   — | j                              |¦  «        S r?   )r¿   Úwrite)rJ   rÄ   s     rD   rÆ   zK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.write  s   € Ø”x—~’~ aÑ(Ô(Ð(rF   c                 ó`   — |                       ¦   «          | j                              ¦   «          d S r?   )Úflushr¿   rI   s    rD   ÚclosezK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.close  s'   € Ø—
’
‘”�Ø”—’Ñ Ô Ð Ð Ð rF   N)rL   rM   rN   ÚioÚIOBasert   r³   rÃ   r   rR   rÆ   rÉ   r@   rF   rD   ÚNoCloseWriterr¾     s}   € € € € € ð B¤Ið ð ð ð ð 4ð ð ð ð ð)˜vð )¨#ð )ð )ð )ð )ð!ð !ð !ð !ð !rF   rÌ   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r@   )Úget_descriptor)rA   Úexs     rD   ú
<listcomp>zB_StorageWriterTransforms.transform_save_stream.<locals>.<listcomp>  s$   € ÐWÐWÐW°r˜r×0Ò0Ñ2Ô2ÐWÐWÐWrF   )rÊ   rË   r   r   Úbytesr¸   Útransform_toÚreversed)rJ   rº   r»   rÌ   rÒ   rÏ   s         rD   Útransform_save_streamz._StorageWriterTransforms.transform_save_streamû   s•   € ð	!ð 	!ð 	!ð 	!ð 	!�BœIñ 	!ô 	!ð 	!õ �B�uœI } }°ZÑ'@Ô'@ÑAÔAˆà”/ð 	9ð 	9ˆBØŸ?š?¨<Ñ8Ô8ˆLˆLàÐWÐW½XÀdÄoÑ=VÔ=VÐWÑWÔWÐXÐXrF   r?   )rL   rM   rN   rO   r	   r   rt   r(   rÊ   rË   rn   r   rÑ   r´   rP   rÔ   r@   rF   rD   r¶   r¶   é   s©   € € € € € ðð ð GKð	Cð 	CØ"Ð#;Ô<¸tÑCð	Cà	ð	Cð 	Cð 	Cð 	CðYØ#ðYØ13´ðYà	ˆr�%Œy˜$˜sœ)Ð#Ô	$ðYð Yð Yð Yð Yð YrF   r¶   Úitemc                 óÀ   — d}| j         €t          d¦  «        ‚| j         j        D ]}||z  }Œ| j         j        j        }|t
          j                             |¦  «        z  S )NrŸ   z&WriteItem tensor_data must not be None)Útensor_datar§   rb   Ú
propertiesÚdtypero   Ú_utilsÚ_element_size)rÕ   rb   ÚsrÙ   s       rD   Ú
_item_sizerÝ     sh   € Ø€DØÔÐÝÐEÑFÔFÐFàÔÔ"ð ð ˆØ�‰	ˆˆàÔÔ'Ô-€EØ•%”,×,Ò,¨UÑ3Ô3Ñ3Ð3rF   ÚbinsrH   c                 ó0  — | dk    r|gS d„ |D ¦   «         }d„ |D ¦   «         }d„ t          | ¦  «        D ¦   «         }d„ t          | ¦  «        D ¦   «         }|                     t          d¬¦  «         t          |¦  «        D ]#\  }}||| z                                |¦  «         Œ$|D ]p}t          t          |¦  «        t          j        d¦  «        ¬¦  «        d	         }||                              |¦  «         ||xx         t          |¦  «        z  cc<   Œq|S )
NrŸ   c                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r@   ©r¢   r)   ÚBYTE_IO©rA   Úwis     rD   rÐ   z+_split_by_size_and_type.<locals>.<listcomp>,  s'   € ÐFÐFÐF�b R¤WµÔ0EÒ%EÐ%EˆrÐ%EÐ%EÐ%ErF   c                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r@   rá   rã   s     rD   rÐ   z+_split_by_size_and_type.<locals>.<listcomp>-  s'   € ÐGÐGÐG�r b¤gµÔ1FÒ&FÐ&F�Ð&FÐ&FÐ&FrF   c                 ó   — g | ]}g ‘ŒS r@   r@   ©rA   r   s     rD   rÐ   z+_split_by_size_and_type.<locals>.<listcomp>/  s   € Ð%>Ð%>Ð%>¨Q bÐ%>Ð%>Ð%>rF   c                 ó   — g | ]}d ‘ŒS )r   r@   rç   s     rD   rÐ   z+_split_by_size_and_type.<locals>.<listcomp>0  s   € Ð+Ð+Ð+˜!�AÐ+Ð+Ð+rF   T)r­   Úreverser¬   r   )Úranger®   rÝ   Ú	enumeraterv   Úminr¯   r°   )	rÞ   rH   Úbytes_wÚtensor_wÚbucketsÚbucket_sizesÚirä   r‹   s	            rD   Ú_split_by_size_and_typerò   (  s6  € Øˆq‚y€yØˆwˆàFÐF˜EÐFÑFÔF€GØGÐG˜UÐGÑGÔG€Hà%>Ð%>µ%¸±+´+Ð%>Ñ%>Ô%>€GØ+Ð+�u T™{œ{Ð+Ñ+Ô+€Là‡M‚M•j¨$€MÑ/Ô/Ð/å˜7Ñ#Ô#ð %ð %‰ˆˆ2Ø��D‘Ô× Ò  Ñ$Ô$Ð$Ð$àð ,ð ,ˆå•)˜LÑ)Ô)­xÔ/BÀ1Ñ/EÔ/EÐFÑFÔFÀqÔIˆØ�Œ×Ò˜BÑÔÐØ�SÐÐÔ�Z¨™^œ^Ñ+ÐÐÑÐà€NrF   Ú
transformsr„   Údatarº   Ústorage_keyÚserialization_formatc           
      ó˜  — |                      ¦   «         }|                      ||¦  «        \  }}|j        t          j        k    rQt          |t          j        ¦  «        st          d¦  «        ‚| 	                    | 
                    ¦   «         ¦  «         nzt          |t          j        ¦  «        st          d¦  «        ‚|j        t          j        d¦  «        k    rt          d¦  «        ‚|t          j        k    rt          j        ||¦  «         |                     ¦   «          |t          j        k    st          |t          j        ¦  «        r|                      ¦   «         |z
  }	n)|                     ¦   «         |                     ¦   «         z  }	t)          |¦  «        dk    rd n|}
t+          |j        |	t/          |||	|
¬¦  «        ¬¦  «        S )Nz/Data must be io.BytesIO for BYTE_IO write itemsz5Data must be torch.Tensor for non-BYTE_IO write itemsrz   zTensor must be on CPU devicer   )r<   )ÚindexÚsize_in_bytesÚstorage_data)ÚtellrÔ   r¢   r)   râ   Ú
isinstancerÊ   ÚBytesIOr§   rÆ   Ú	getbufferro   r   r    r4   rY   ÚsaverÉ   r™   rš   r”   r-   rø   r8   )ró   r„   rô   rº   rõ   rö   r:   rÒ   r<   r;   Úinfo_transform_descriptorss              rD   Ú_write_itemr  @  sÉ  € ð �[Š[‰]Œ]€Fà,6×,LÒ,LØ�Fñ-ô -Ñ)€\Ð(ð „�-Ô/Ò/Ð/Ý˜$¥¤
Ñ+Ô+ð 	TÝ Ð!RÑSÔSÐSØ×Ò˜4Ÿ>š>Ñ+Ô+Ñ,Ô,Ð,Ð,å˜$¥¤Ñ-Ô-ð 	Ý ØGñô ð ð Œ;�%œ, uÑ-Ô-Ò-Ð-Ý Ð!?Ñ@Ô@Ð@ØÕ#6Ô#AÒAÐAÝŒJ�t˜\Ñ*Ô*Ð*à×ÒÑÔÐàÕ2Ô=Ò=Ð=ÅØ�bŒjñBô BÐ=ð —’‘” Ñ'ˆˆà—’‘” × 1Ò 1Ñ 3Ô 3Ñ3ˆõ
 Ð)Ñ*Ô*¨aÒ/Ð/ˆˆÐ5Jð õ ØÔØÝ!ØØØØ"<ð	
ñ 
ô 
ð	ñ 	ô 	ð 	rF   Úcreate_streamÚ
file_queueÚresult_queueÚplannerr…   Ú	use_fsyncÚthread_countc	                 ó  — 	 	 |                      ¦   «         \  }	}
}t          j                             ¦   «         }t	          t          |d ¦  «        }|dk    rQt          j                             ¦   «         s|r1|                     ¦   «         r|dk    rt          |j        |¬¦  «        }nt          |j        ¦  «        }d„ |D ¦   «         }|D ]%}| 
                    t          |¦  «        |¦  «         Œ&|                     ¦   «          d„ |D ¦   «         }g } | |	d¦  «        5 }|D ]>}|                     |¦  «        }|                     t          |||||
|¦  «        ¦  «         Œ?i }i }|                     ¦   «         D ]q\  }}|j        st#          d¦  «        ‚|                     t          |||||
|¦  «        ¦  «         |||j        j        <   d	|j        j        j        i||j        j        <   Œr|t.          j        k    rddd
lm} |                      ||t8          t;          j        |¦  «        t>          tA          tB          ¦  «        tD          tF          i¬¦  «        ¦  «         |rR	 tI          j%        | &                    ¦   «         ¦  «         n*# tN          tP          f$ r tI          j)        ¦   «          Y nw xY w| *                    ¦   «          d d d ¦  «         n# 1 swxY w Y   | +                    |¦  «         �Œï# tX          j-        $ r Y d S w xY w)NTrŸ   r   )r…   c                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r@   rá   rã   s     rD   rÐ   z+_write_files_from_queue.<locals>.<listcomp>ž  s'   € ÐUÐUÐU˜r°B´G½}Ô?TÒ4TÐ4T˜Ð4TÐ4TÐ4TrF   c                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r@   rá   rã   s     rD   rÐ   z+_write_files_from_queue.<locals>.<listcomp>£  s'   € ÐTÐTÐT˜b°2´7½mÔ>SÒ3SÐ3S�rÐ3SÐ3SÐ3SrF   ÚwbzTensor must be on CPUÚsaved_offsets)rÿ   )Úmetadata).Ú
get_nowaitro   Ú_CÚ_get_privateuse1_backend_nameÚgetattrr�   Úis_availabler‚   Úresolve_datarq   rf   rÝ   ri   rv   r  rk   Úis_cpur§   rø   Úfqnr×   ÚchunkÚoffsetsr4   rZ   Úsafetensors.torchrÿ   rÆ   r   ÚjsonÚdumpsr   rP   r   r   r   ÚosÚfsyncÚfilenoÚAttributeErrorr   ÚsyncrÉ   ÚputÚqueueÚEmpty)r  r  r  r  ró   r…   r  r  rö   Ú	file_namerõ   Úwrite_itemsÚcustom_backend_nameÚcustom_device_modÚloaderrî   rº   rí   Úwrite_resultsr„   rô   Útensor_dictÚmetadata_dictr€   rÿ   s                            rD   Ú_write_files_from_queuer+  w  s×  € ð\ðY	,Ø2<×2GÒ2GÑ2IÔ2IÑ/ˆI�{ Kõ #(¤(×"HÒ"HÑ"JÔ"JÐÝ '­Ð/BÀDÑ IÔ IÐð  Ò!Ð!å”J×+Ò+Ñ-Ô-ð "ð *ð "ð /@×.LÒ.LÑ.NÔ.Nð "ð
 (¨!Ò+Ð+å.ØÔ(Ø(;ðñ ô ��õ
 *ØÔ(ñô �ð VÐU [ÐUÑUÔUˆHØ&ð ?ð ?�
Ø—
’
�: jÑ1Ô1°:Ñ>Ô>Ð>Ð>Ø× Ò Ñ"Ô"Ð"àTÐT KÐTÑTÔTˆGØˆMà�˜y¨$Ñ/Ô/ð 5°6Ø")ð ð �JØ"×/Ò/°
Ñ;Ô;�DØ!×(Ò(Ý#Ø&Ø"Ø Ø&Ø'Ø0ñô ñ	ô 	ð 	ð 	ð !�Ø "�Ø*0¯-ª-©/¬/ð ð Ñ&�F˜JØ!œ=ð FÝ,Ð-DÑEÔEÐEØ!×(Ò(Ý#Ø&Ø"Ø"Ø&Ø'Ø0ñô ñ	ô 	ð 	ð 9?�K 
Ô 0Ô 4Ñ5à'¨Ô)?Ô)EÔ)Mð;�M *Ô"2Ô"6Ñ7Ð7ð (Õ+>Ô+JÒJÐJØ6Ð6Ð6Ð6Ð6Ð6à—L’LØ˜Ø'å 3µT´ZÀÑ5NÔ5NÝ /µµ^Ñ1DÔ1DÝ *­Lð&ðñ ô ñ	ô 	ð 	ð ð "ð"Ýœ §¢¡¤Ñ1Ô1Ð1Ð1øÝ*Õ,@ÐAð "ð "ð "Ýœ™	œ	˜	˜	˜	ð"øøøà—’‘”�ðk5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ðl ×Ò˜]Ñ+Ô+Ð+ñsY	,øõt Œ;ð ð ð Øˆˆðøøøs[   ‚DK2 ÄEKÉ&JÊKÊ$J-Ê*KÊ,J-Ê-KËK2 ËKËK2 ËKËK2 Ë2LÌLc                   ó  — e Zd Zeedeej        z  dedee	j
        ddf         fd„¦   «         ¦   «         Zedeej        z  dedeej        z  fd„¦   «         Zedeej        z  deej        z  ddfd	„¦   «         Zedeej        z  deej        z  fd
„¦   «         Zedeej        z  ddfd„¦   «         Zeedeej        z  defd„¦   «         ¦   «         Zedeej        z  defd„¦   «         Zedeej        z  ddfd„¦   «         ZdS )r3   ÚpathÚmoder[   Nc                 ó   — d S r?   r@   )rJ   r-  r.  s      rD   r  zFileSystemBase.create_streamâ  s	   € ð ,/¨3rF   Úsuffixc                 ó   — d S r?   r@   ©rJ   r-  r0  s      rD   Úconcat_pathzFileSystemBase.concat_pathè  s	   € ð  ˜CrF   Únew_pathc                 ó   — d S r?   r@   ©rJ   r-  r4  s      rD   ÚrenamezFileSystemBase.renameí  s   € ØTWÐTWrF   c                 ó   — d S r?   r@   ©rJ   r-  s     rD   Ú	init_pathzFileSystemBase.init_pathð  s   € ØGJÀsrF   c                 ó   — d S r?   r@   r9  s     rD   ÚmkdirzFileSystemBase.mkdiró  s   € Ø69°crF   Úcheckpoint_idc                 ó   — d S r?   r@   ©Úclsr=  s     rD   Úvalidate_checkpoint_idz%FileSystemBase.validate_checkpoint_idö  s   € àORÈsrF   c                 ó   — d S r?   r@   r9  s     rD   ÚexistszFileSystemBase.existsú  s   € Ø7:°srF   c                 ó   — d S r?   r@   r9  s     rD   Úrm_filezFileSystemBase.rm_fileý  s   € Ø8;¸rF   )rL   rM   rN   r
   r   rP   r  ÚPathLiker   rÊ   rË   r  r3  r7  r:  r<  Úclassmethodr³   rA  rC  rE  r@   rF   rD   r3   r3   á  s´  € € € € € ØØð/Ø˜"œ+Ñ%ð/Ø-0ð/à	�2”9˜d DÐ(Ô	)ð/ð /ð /ñ „^ñ „^ð/ð ð Ø˜"œ+Ñ%ð Ø/2ð à	ˆrŒ{Ñ	ð ð  ð  ñ „^ð ð ØW˜3 ¤Ñ,ÐW¸¸b¼kÑ8IÐWÈdÐWÐWÐWñ „^ØWàØJ˜c B¤KÑ/ÐJ°C¸"¼+Ñ4EÐJÐJÐJñ „^ØJàØ9˜# ¤Ñ+Ð9°Ð9Ð9Ð9ñ „^Ø9àØØR°3¸¼Ñ3DÐRÈÐRÐRÐRñ „^ñ „[àRàØ:˜3 ¤Ñ,Ð:°Ð:Ð:Ð:ñ „^Ø:àØ;˜C "¤+Ñ-Ð;°$Ð;Ð;Ð;ñ „^Ø;Ð;Ð;rF   r3   c            
       ó²  — e Zd Zedeej        z  dedeej	        ddf         fd„¦   «         Z
deej        z  dedeej        z  fd„Zdeej        z  deej        z  fd„Zdeej        z  d	eej        z  ddfd
„Zdeej        z  ddfd„Zedeej        z  defd„¦   «         Zdeej        z  defd„Zdeej        z  ddfd„Zdeej        z  dee         fd„ZdS )r2   r-  r.  r[   Nc              #   óæ   K  — t          |t          ¦  «        st          |¦  «        }|                     |¦  «        5 }t          t          j        |¦  «        V — d d d ¦  «         d S # 1 swxY w Y   d S r?   )rü   r   Úopenr   rÊ   rË   )rJ   r-  r.  r„   s       rD   r  zFileSystem.create_stream  s®   è è € õ ˜$¥Ñ%Ô%ð 	Ý˜‘:”:ˆDØ�YŠY�t‰_Œ_ð 	* Ý•r”y &Ñ)Ô)Ð)Ð)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   ¼A&Á&A*Á-A*r0  c                 óT   — t          |t          ¦  «        st          |¦  «        }||z  S r?   ©rü   r   r2  s      rD   r3  zFileSystem.concat_path  s)   € Ý˜$¥Ñ%Ô%ð 	Ý˜‘:”:ˆDØ�f‰}ÐrF   c                 óN   — t          |t          ¦  «        st          |¦  «        }|S r?   rL  r9  s     rD   r:  zFileSystem.init_path  s$   € Ý˜$¥Ñ%Ô%ð 	Ý˜‘:”:ˆDØˆrF   r4  c                 óž   — t          |t          ¦  «        st          |¦  «        }|                     t          t          |¦  «        ¦  «         d S r?   )rü   r   r7  r   r6  s      rD   r7  zFileSystem.rename  sA   € Ý˜$¥Ñ%Ô%ð 	Ý˜‘:”:ˆDà�Š•D�˜xÑ(Ô(Ñ)Ô)Ð)Ð)Ð)rF   c                 ó|   — t          |t          ¦  «        st          |¦  «        }|                     dd¬¦  «         d S )NT)ÚparentsÚexist_ok)rü   r   r<  r9  s     rD   r<  zFileSystem.mkdir  s;   € Ý˜$¥Ñ%Ô%ð 	Ý˜‘:”:ˆDØ�
Š
˜4¨$ˆ
Ñ/Ô/Ð/Ð/Ð/rF   r=  c                 ó  — t          |t          ¦  «        rdS dt          |¦  «        v rdS t          |¦  «        j        D ]E}|                     ¦   «         r/t          j        t          |¦  «        t
          j        ¦  «        r dS ŒFdS )NTz://F)rü   r   rP   rP  rC  r  ÚaccessÚW_OK)r@  r=  Úps      rD   rA  z!FileSystem.validate_checkpoint_id   sƒ   € å�m¥TÑ*Ô*ð 	Ø�4à•C˜Ñ&Ô&Ð&Ð&Ø�5å�mÑ$Ô$Ô,ð 	ð 	ˆAØ�xŠx‰zŒzð �bœi­¨A©¬µ´Ñ8Ô8ð Ø�t�tøàˆurF   c                 ór   — t          |t          ¦  «        st          |¦  «        }|                     ¦   «         S r?   )rü   r   rC  r9  s     rD   rC  zFileSystem.exists.  s-   € Ý˜$¥Ñ%Ô%ð 	Ý˜‘:”:ˆDØ�{Š{‰}Œ}ÐrF   c                 óv   — t          |t          ¦  «        st          |¦  «        }|                     ¦   «          d S r?   )rü   r   Úunlinkr9  s     rD   rE  zFileSystem.rm_file3  s0   € Ý˜$¥Ñ%Ô%ð 	Ý˜‘:”:ˆDØ�Š‰ŒˆˆˆrF   c                 ó†   — t          |t          ¦  «        st          |¦  «        }d„ |                     ¦   «         D ¦   «         S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r@   )rP   )rA   rU  s     rD   rÐ   z!FileSystem.ls.<locals>.<listcomp>;  s   € Ð/Ð/Ð/˜1•�A‘”Ð/Ð/Ð/rF   )rü   r   Úiterdirr9  s     rD   ÚlszFileSystem.ls8  s;   € Ý˜$¥Ñ%Ô%ð 	Ý˜‘:”:ˆDØ/Ð/ §¢¡¤Ð/Ñ/Ô/Ð/rF   )rL   rM   rN   r
   rP   r  rF  r   rÊ   rË   r  r3  r:  r7  r<  rG  r³   rA  rC  rE  r´   r\  r@   rF   rD   r2   r2     sÚ  € € € € € Øð*Ø˜"œ+Ñ%ð*Ø-0ð*à	�2”9˜d DÐ(Ô	)ð*ð *ð *ñ „^ð*ð  b¤kÑ 1ð ¸3ð À3ÈÌÑCTð ð ð ð ð
˜c B¤KÑ/ð °C¸"¼+Ñ4Eð ð ð ð ð
*˜3 ¤Ñ,ð *¸¸b¼kÑ8Ið *Èdð *ð *ð *ð *ð0˜# ¤Ñ+ð 0°ð 0ð 0ð 0ð 0ð
 ð°3¸¼Ñ3Dð Èð ð ð ñ „[ðð˜3 ¤Ñ,ð °ð ð ð ð ð
˜C "¤+Ñ-ð °$ð ð ð ð ð
0�s˜Rœ[Ñ(ð 0¨T°#¬Yð 0ð 0ð 0ð 0ð 0ð 0rF   r2   c                   ó.  ‡ — e Zd ZdZddddddej        fdeej        z  de	de	d	e
d
e
de	dee         dz  dedededdfˆ fd„Zd'deej        z  dz  ddfd„Zde	dededdfd„Zde	fd„Zdedefd„Zdee         dee         fd„Zdededeee                  fd„Zdedej        deee                  fd„Zded eee                  ddfd!„Zdedz  fd"„Z d'd#e
dz  dej        fd$„Z!e"deej        z  fd%„¦   «         Z#e$deej        z  de	fd&„¦   «         Z%ˆ xZ&S )(Ú_FileSystemWriteraa  
    Basic implementation of StorageWriter using file IO.

    This implementation makes the following assumptions and simplifications:

    * The checkpoint path is an empty or non-existing directory.
    * File creation is atomic

    The checkpoint consist of one file per write request plus
    a `.metadata` file with the serialized metadata.

    TrŸ   é€–˜ Nr-  Úsingle_file_per_rankÚ
sync_filesr  Úper_thread_copy_aheadÚ	overwriteÚ_extensionsrö   ÚargsÚkwargsr[   c	                 ój  •— t          ¦   «                              ¦   «          t          ¦   «         | _        | j                             |¦  «        | _        || _        || _        || _        || _	        t          ¦   «         | _        || _        t          |¦  «        | _        || _        d| _        d| _        dS )a=  
        Initialize the writer pointing to `path`.

        Args:
            path: directory where the checkpoint will be written to.
            single_file_per_rank: Produce one file per rank instead of one file per tensor/blob. Default to True.
            sync_files : force files to be synced to permanent storage. Default to True.
            thread_count: Number of IO threads to use to write. Default to 1.
            per_thread_copy_ahead: How many bytes to copy from the GPU ahead of saving them. Default 10Mb.
            overwrite: Whether to allow overwriting existing checkpoints. Defaults to True.
            _extensions: Extensions to apply to output streams (EXPERIMENTAL)

        N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
        NT)Úsuperrt   r2   Úfsr:  r-  r`  ra  r  rb  r_   Úsave_idrc  r¶   ró   rö   ÚrankÚuse_collectives)rJ   r-  r`  ra  r  rb  rc  rd  rö   re  rf  Ú	__class__s              €rD   rt   z_FileSystemWriter.__init__L  sœ   ø€ õ6 	‰Œ×ÒÑÔÐÝ‘,”,ˆŒØ”G×%Ò% dÑ+Ô+ˆŒ	Ø$8ˆÔ!Ø$ˆŒØ(ˆÔØ%:ˆÔ"Ý%Ñ'Ô'ˆŒØ"ˆŒÝ2°;Ñ?Ô?ˆŒØ$8ˆÔ!Ø $ˆŒ	Ø%)ˆÔÐÐrF   r=  c                 ón   — |r| j                              |¦  «        | _        t          ¦   «         | _        d S r?   )ri  r:  r-  r_   rj  ©rJ   r=  s     rD   Úresetz_FileSystemWriter.resetu  s2   € Øð 	9Øœ×)Ò)¨-Ñ8Ô8ˆDŒIÝ%Ñ'Ô'ˆŒˆˆrF   Úis_coordinatorc                 óp   — |                      d¦  «        | _        |                      dd¦  «        | _        d S )Nrk  rl  T)Úgetrk  rl  )rJ   rq  re  rf  s       rD   Úset_up_storage_writerz'_FileSystemWriter.set_up_storage_writerz  s4   € ð —J’J˜vÑ&Ô&ˆŒ	Ø%ŸzšzÐ*;¸TÑBÔBˆÔÐÐrF   c                 óž   — | j         r|                      d ¬¦  «        }n|                      d¬¦  «        }| j                             |¦  «        S )N)rk  r   )rl  Ú_get_metadata_pathri  rC  )rJ   Úmetadata_paths     rD   Ú_metadata_existsz"_FileSystemWriter._metadata_exists€  sQ   € ØÔð 	<à ×3Ò3¸Ð3Ñ>Ô>ˆMˆMð !×3Ò3¸Ð3Ñ;Ô;ˆMàŒw�~Š~˜mÑ,Ô,Ð,rF   Úplanc                 ón  — | j                              | j        ¦  «         |                      ¦   «         rG| j        r(t          j        d| j        › d| j        ›d�d¬¦  «         nt          d| j        ›d�¦  «        ‚| j        �3| j	        s,t          j        |t          d| j        › d	�¦  «        ¬
¦  «        }|S )Nz#Detected an existing checkpoint in z#, overwriting since self.overwrite=z². Past version 2.5 of PyTorch, `overwrite` will default to False. Set this variable to True to maintain this functionality or False to raise when an existing checkpoint is found.é   )Ú
stacklevelz-Checkpoint already exists and self.overwrite=ú.Ú__r   ©rú   )ri  r<  r-  rx  rc  ÚwarningsÚwarnrª   rk  rl  ÚdataclassesÚreplacerT   ©rJ   ry  s     rD   Úprepare_local_planz$_FileSystemWriter.prepare_local_plan‹  sð   € ØŒ�Š�d”iÑ Ô Ð Ø× Ò Ñ"Ô"ð 		XØŒ~ð XÝ”ðk¸$¼)ð kð kÐY]ÔYgð kð kð kð  !ð	ñ ô ð ð õ #Ð#VÀDÄNÐ#VÐ#VÐ#VÑWÔWÐWàŒ9Ð ¨Ô)=Ð ÝÔ&Ø¥>Ð2C°t´yÐ2CÐ2CÐ2CÑ#DÔ#Dðñ ô ˆDð ˆrF   Úplansc                 ó8   — d„ t          |¦  «        D ¦   «         }|S )Nc           
      ót   — g | ]5\  }}|j         €'t          j        |t          d|› d�¦  «        ¬¦  «        n|‘Œ6S )Nr~  r   r  )rú   r‚  rƒ  rT   )rA   rñ   ry  s      rD   rÐ   z9_FileSystemWriter.prepare_global_plan.<locals>.<listcomp>   s_   € ð 
ð 
ð 
ñ ��4ð Ô Ð(õ Ô µ>À)ÀqÀ)À)À)Ñ3LÔ3LÐMÑMÔMÐMàð
ð 
ð 
rF   )rë   )rJ   r†  Ú	new_planss      rD   Úprepare_global_planz%_FileSystemWriter.prepare_global_planŸ  s2   € ð
ð 
õ % UÑ+Ô+ð	
ñ 
ô 
ˆ	ð ÐrF   r  c                 óÞ  ‡	‡
— |j         Š
dŠ	ˆ	ˆ
fd„}t          j        ¦   «         }| j        r`t	          | j        |j        ¦  «        D ]D} |¦   «         }| j                             | j	        |¦  «        }| 
                    |||f¦  «         ŒEnM|j        D ]E} |¦   «         }| j                             | j	        |¦  «        }| 
                    |||gf¦  «         ŒF|                      ||¦  «        S )Nr   c                  ó6   •— ‰j         › ‰› t          › �} ‰dz  Š| S )NrŸ   )rU   ÚDEFAULT_SUFFIX)r#  Ú
file_countÚstorage_plans    €€rD   Úgen_filez._FileSystemWriter.write_data.<locals>.gen_file°  s*   ø€ à'Ô.ÐL°
ÐL½NÐLÐLˆIØ˜!‰OˆJØÐrF   )rú   r!  ÚQueuer`  rò   r  rH   ri  r3  r-  r   Ú_write_data)rJ   ry  r  r�  r  Úbucketr#  r-  rÕ   rŽ  r�  s            @@rD   Ú
write_dataz_FileSystemWriter.write_data¨  s  øø€ ð
 (,Ô'8ˆØˆ
ð	ð 	ð 	ð 	ð 	ð 	õ #(¤+¡-¤-ˆ
ØÔ$ð 		:Ý1°$Ô2CÀTÄZÑPÔPð :ð :�Ø$˜H™JœJ�	Ø”w×*Ò*¨4¬9°iÑ@Ô@�Ø—’  i°Ð8Ñ9Ô9Ð9Ð9ð:ð
 œ
ð :ð :�Ø$˜H™JœJ�	Ø”w×*Ò*¨4¬9°iÑ@Ô@�Ø—’  i°$°Ð8Ñ9Ô9Ð9Ð9à×Ò ¨Ñ4Ô4Ð4rF   r  c                 ó�  — t          j        ¦   «         }g }t          d| j        ¦  «        D ]r}t	          j        t          | j        j        |||| j	        | j
        | j        | j        | j        f	¬¦  «        }|                     ¦   «          |                     |¦  «         Œst          | j        j        |||| j	        | j
        | j        | j        | j        ¬¦	  «	         |D ]}|                     ¦   «          Œg }	 	 ||                     ¦   «         z  }Œ# t           j        $ r( t%          ¦   «         }|                     |¦  «         |cY S w xY w)NrŸ   )Útargetre  )	r  r  r  r  ró   r…   r  r  rö   )r!  r‘  rê   r  Ú	threadingÚThreadr+  ri  r  ró   rb  ra  rö   Ústartrv   Újoinr  r"  r/   Ú
set_result)	rJ   r  r  r  Úthreadsr   ÚtÚresÚfuts	            rD   r’  z_FileSystemWriter._write_dataÄ  so  € õ
 %*¤K¡M¤MˆàˆÝ�q˜$Ô+Ñ,Ô,ð 	ð 	ˆAÝÔ Ý.à”GÔ)ØØ ØØ”OØÔ.Ø”OØÔ%ØÔ-ð
ðñ ô ˆAð �GŠG‰IŒIˆIØ�NŠN˜1ÑÔÐÐåØœ'Ô/Ø!Ø%ØØ”Ø $Ô :Ø”oØÔ*Ø!%Ô!:ð
	
ñ 
	
ô 
	
ð 
	
ð ð 	ð 	ˆAØ�FŠF‰HŒHˆHˆHàˆð	ð1Ø�|×.Ò.Ñ0Ô0Ñ0�ð1øåŒ{ð 	ð 	ð 	Ý-3©X¬XˆCØ�NŠN˜3ÑÔÐØˆJˆJˆJð	øøøs   Ã5D Ä4EÅEr  Úresultsc                 ó¾  — t           |_        i }|D ]!}|                     d„ |D ¦   «         ¦  «         Œ"||_        |                      ¦   «         |_        | j        s| j        �d| j        › t          › d�n	t          › d�}t          t          | j
                             | j        |¦  «        ¦  «        }| j
                             |d¦  «        5 }t          j        ||¦  «         | j        rR	 t#          j        |                     ¦   «         ¦  «         n*# t(          t*          f$ r t#          j        ¦   «          Y nw xY wd d d ¦  «         n# 1 swxY w Y   | j        s"| j        �|                      | j        ¦  «        }n|                      ¦   «         }| j
                             |¦  «        r| j
                             |¦  «         | j
                             ||¦  «         d S )Nc                 ó(   — i | ]}|j         |j        “ŒS r@   )rø   rú   )rA   Úwrs     rD   rE   z,_FileSystemWriter.finish.<locals>.<dictcomp>û  s   € ÐKÐKÐK¸R˜rœx¨¬ÐKÐKÐKrF   r~  z.tmpr  )r6   ÚversionÚupdaterú   Ústorage_metarl  rk  r5   r   r   ri  r3  r-  r  ÚpickleÚdumpra  r  r  r  r  r   r  rv  rC  rE  r7  )	rJ   r  r   Ú
storage_mdÚwr_listÚtmp_filenameÚtmp_pathÚmetadata_filerw  s	            rD   Úfinishz_FileSystemWriter.finishö  s#  € Ý.ˆÔàˆ
Øð 	Mð 	MˆGØ×ÒÐKÐKÀ7ÐKÑKÔKÑLÔLÐLÐLØ *ˆÔà $× 1Ò 1Ñ 3Ô 3ˆÔð Ô'ð'Ø,0¬IÐ,Að /�”Ð.�LÐ.Ð.Ð.Ð.å Ð&Ð&Ð&ð 	õ
 �˜dœg×1Ò1°$´)¸\ÑJÔJÑKÔKˆØŒW×"Ò" 8¨TÑ2Ô2ð 	°mÝŒK˜ -Ñ0Ô0Ð0ØŒð ðÝ”H˜]×1Ò1Ñ3Ô3Ñ4Ô4Ð4Ð4øÝ&Õ(<Ð=ð ð ð Ý”G‘I”I�I�I�Iðøøøð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð Ô#ð 	6¨¬	Ð(=Ø ×3Ò3°D´IÑ>Ô>ˆMˆMà ×3Ò3Ñ5Ô5ˆMàŒ7�>Š>˜-Ñ(Ô(ð 	+ØŒG�OŠO˜MÑ*Ô*Ð*àŒ�Š�x Ñ/Ô/Ð/Ð/Ð/s6   ÃEÃ)&DÄEÄ$D7Ä4EÄ6D7Ä7EÅE
ÅE
c                 ó8   — t          | j        | j        ¬¦  «        S )N)r=  rj  )r!   r=  rj  rI   s    rD   r¦  z_FileSystemWriter.storage_meta  s   € Ý¨Ô);ÀTÄ\ÐRÑRÔRÐRrF   rk  c                 ó”   — |€t           › nd|› t           › �}t          t          | j                             | j        |¦  «        ¦  «        S ©Nr~  ©r5   r   r   ri  r3  r-  ©rJ   rk  Úfilenames      rD   rv  z$_FileSystemWriter._get_metadata_path  óE   € Ø(,¨•lÐ$Ð$Ð:S¸tÐ:SÅ\Ð:SÐ:SˆÝ•D˜$œ'×-Ò-¨d¬i¸ÑBÔBÑCÔCÐCrF   c                 ó   — | j         S )zT
        return the checkpoint_id that will be used to save the checkpoint.
        ©r-  rI   s    rD   r=  z_FileSystemWriter.checkpoint_id  ó   € ð
 ŒyÐrF   c                 ó6   — t                                |¦  «        S r?   ©r2   rA  r?  s     rD   rA  z(_FileSystemWriter.validate_checkpoint_id&  ó   € å×0Ò0°Ñ?Ô?Ð?rF   r?   )'rL   rM   rN   rO   r4   rY   rP   r  rF  r³   rR   r	   r   r   rt   rp  rt  rx  r&   r…  r´   rŠ  r'   r/   r-   r”  r!  r‘  r’  r   r®  r!   r¦  rv  r²   r=  rG  rA  Ú__classcell__©rm  s   @rD   r^  r^  >  s,  ø€ € € € € ðð ð  &*ØØØ%/ØØAEØ4GÔ4Rð'*ð '*à�B”KÑð'*ð #ð'*ð ð	'*ð
 ð'*ð  #ð'*ð ð'*ð Ð6Ô7¸$Ñ>ð'*ð 2ð'*ð ð'*ð ð'*ð 
ð'*ð '*ð '*ð '*ð '*ð '*ðR(ð ( 3¨¬Ñ#4°tÑ#;ð (Àtð (ð (ð (ð (ð
CØ"ðCØ+.ðCØ:=ðCà	ðCð Cð Cð Cð	- $ð 	-ð 	-ð 	-ð 	-ð xð °Hð ð ð ð ð(¨¨h¬ð ¸DÀ¼Nð ð ð ð ð5àð5ð ð5ð 
��[Ô!Ô	"ð	5ð 5ð 5ð 5ð80àð0ð ”Kð0ð 
��[Ô!Ô	"ð	0ð 0ð 0ð 0ðd 0˜xð  0°$°t¸KÔ7HÔ2Ið  0Èdð  0ð  0ð  0ð  0ðDS˜k¨DÑ0ð Sð Sð Sð SðDð D s¨T¡zð D¸R¼[ð Dð Dð Dð Dð ð˜s R¤[Ñ0ð ð ð ñ „Xðð ð@°3¸¼Ñ3Dð @Èð @ð @ð @ñ „[ð@ð @ð @ð @ð @rF   r^  c            	       óf   — e Zd ZdZd
dedz  ddfd„Zdedee         de	e
         de	e
         fd	„ZdS )Ú_StorageReaderTransformsr·   NÚextension_registryr[   c                 ó4   — |€t          ¦   «         n|| _        d S r?   )r   rÀ  )rJ   rÀ  s     rD   rt   z!_StorageReaderTransforms.__init__2  s%   € à#5Ð#=ÕÑÔÐÐCUð 	ÔÐÐrF   Ú	read_itemr<   r»   c                 óœ   — | j                              |¦  «        }|}|D ],}t          |t          ¦  «        r|                     |¦  «        }Œ-|S r?   )rÀ  Úfrom_descriptor_listrü   r   Útransform_from)rJ   rÂ  r<   r»   r¸   rÅ  rÏ   s          rD   Útransform_load_streamz._StorageReaderTransforms.transform_load_stream7  s_   € ð Ô,×AÒAÐBWÑXÔXˆ
Ø#ˆØð 	Cð 	CˆBÝ˜"Õ6Ñ7Ô7ð CØ!#×!2Ò!2°>Ñ!BÔ!B�øØÐrF   r?   )rL   rM   rN   rO   r   rt   r%   r	   rP   r   rÑ   rÆ  r@   rF   rD   r¿  r¿  +  s‘   € € € € € ðð ð
ð 
Ð+<¸tÑ+Cð 
Ètð 
ð 
ð 
ð 
ð
àðð  (¨œ}ðð �u”Ið	ð
 
ˆEŒðð ð ð ð ð rF   r¿  c            
       ó�  ‡ — e Zd Z	 ddeej        z  dedz  ddfˆ fd„Zdede	e
         fd„Zddeej        z  dz  ddfd	„Zd
ededed         fd„Zddedz  dej        fd„Zdededefd„Zdededededdf
d„Zd
edefd„Zdee         dee         fd„Zedeej        z  fd„¦   «         Zedeej        z  defd„¦   «         Zˆ xZS )r1   Nr-  Ú_extension_registryr[   c                 ó$  •— t          ¦   «                              ¦   «          t          ¦   «         | _        | j                             |¦  «        | _        i | _        t          ¦   «         | _        t          |¦  «        | _
        d | _        d| _        d S rÂ   )rh  rt   r2   ri  r:  r-  rú   r_   Úload_idr¿  ró   rk  rl  )rJ   r-  rÈ  rm  s      €rD   rt   zFileSystemReader.__init__F  sw   ø€ õ
 	‰Œ×ÒÑÔÐÝ‘,”,ˆŒØ”G×%Ò% dÑ+Ô+ˆŒ	Ø,.ˆÔÝ%Ñ'Ô'ˆŒÝ2Ð3FÑGÔGˆŒØˆŒ	Ø#ˆÔÐÐrF   Úsinfoc                 ót   — t          t          t                   t          ||j        |j        ¦  «        ¦  «        S r?   )r   r   rÑ   r.   r:   r;   )rJ   ÚfilerË  s      rD   Ú_slice_filezFileSystemReader._slice_fileT  s'   € Ý•B•u”IÕ0°°u´|ÀUÄ\ÑRÔRÑSÔSÐSrF   r=  c                 ó|   — i | _         |r| j                             |¦  «        | _        t	          ¦   «         | _        d S r?   )rú   ri  r:  r-  r_   rÊ  ro  s     rD   rp  zFileSystemReader.resetW  s:   € ØˆÔØð 	9Øœ×)Ò)¨-Ñ8Ô8ˆDŒIÝ%Ñ'Ô'ˆŒˆˆrF   ry  r  c                 óæ  — i }|j         D ]D}| j        |j                 }|j        }|                     |g ¦  «                             |¦  «         ŒE|                      ¦   «         D �]i\  }}| j                             | j        |¦  «        }	| j         	                    |	d¦  «        5 }
|D �]}| j        |j                 }|  
                    |
|¦  «        }| j                             ||j        pd|¦  «        }|j        t          j        k    rSt#          j        |                     d¦  «        ¦  «        }|                     d¦  «         |                     ||¦  «         Œ¶|                     ¦   «         r|}n<t#          j        |                     d¦  «        ¦  «        }|                     d¦  «         t/          t0          t3          j        |dd¬¦  «        ¦  «        }t7          ||j        |j        ¦  «        }|                     |¦  «                             ¦   «         }|                      ¦   «         |                      ¦   «         k    rAtC          d|j        › d	|                      ¦   «         › d
|                      ¦   «         › �¦  «        ‚| "                    |¦  «         | #                    ||¦  «         �Œ	 d d d ¦  «         n# 1 swxY w Y   �ŒktI          ¦   «         }| %                    d ¦  «         |S )NÚrbr@   éÿÿÿÿr   rz   T)Úmap_locationÚweights_onlyzreq z mismatch sizes z vs )&rH   rú   Ústorage_indexr9   Ú
setdefaultrv   ri  r3  r-  r  rÎ  ró   rÆ  r<   r¢   r"   râ   rÊ   rý   ÚreadÚseekÚ
load_bytesÚseekabler   r   ro   Úloadr   Ústorage_offsetsÚlengthsÚresolve_tensorry   rb   r§   Úcopy_Úcommit_tensorr/   r›  )rJ   ry  r  Úper_filerÂ  Úitem_mdr-  r9   Úreqsr4  r„   ÚreqÚ
file_slicerÅ  Ú
read_bytesrÚ  r€   Útarget_tensorrŸ  s                      rD   Ú	read_datazFileSystemReader.read_data]  s?  € à.0ˆØœð 	<ð 	<ˆIØ$(Ô$5°iÔ6MÔ$NˆGØÔ(ˆDØ×Ò  bÑ)Ô)×0Ò0°Ñ;Ô;Ð;Ð;à#+§>¢>Ñ#3Ô#3ð .	Bñ .	BÑˆM˜4Ø”w×*Ò*¨4¬9°mÑDÔDˆHØ”×&Ò& x°Ñ6Ô6ð ,B¸&àð *Bñ *B�CØ"Ô/°Ô0AÔB�GØ!%×!1Ò!1°&¸'Ñ!BÔ!B�JØ%)¤_×%JÒ%JØð  Ô5Ð;¸Ø"ñ&ô &�Nð ”x¥<Ô#7Ò7Ð7Ý%'¤Z°×0CÒ0CÀBÑ0GÔ0GÑ%HÔ%H˜
Ø"Ÿš¨Ñ*Ô*Ð*Ø×*Ò*¨3°
Ñ;Ô;Ð;Ð;à)×2Ò2Ñ4Ô4ð -Ø'5˜H˜Hõ (*¤z°.×2EÒ2EÀbÑ2IÔ2IÑ'JÔ'J˜HØ$ŸMšM¨!Ñ,Ô,Ð,å!%Ý"Ý!œJØ (Ø-2Ø-1ðñ ô ñ"ô "˜õ "8Ø" CÔ$7¸¼ñ"ô "˜ð )0×(>Ò(>¸sÑ(CÔ(C×(JÒ(JÑ(LÔ(L˜à(×-Ò-Ñ/Ô/°6·;²;±=´=Ò@Ð@Ý"0Ø s sÔ'8Ð sÐ sÈ-×J\ÒJ\ÑJ^ÔJ^Ð sÐ sÐdj×doÒdoÑdqÔdqÐ sÐ sñ#ô #ð ð &×+Ò+¨FÑ3Ô3Ð3Ø×-Ò-¨c°=ÑAÔAÐAÑAðU*Bð,Bð ,Bð ,Bñ ,Bô ,Bð ,Bð ,Bð ,Bð ,Bð ,Bð ,Bøøøð ,Bð ,Bð ,Bð ,Bùõ\ ‘h”hˆØ�Š�tÑÔÐØˆ
s   Â$HKËK	ËK	rk  c                 ó”   — |€t           › nd|› t           › �}t          t          | j                             | j        |¦  «        ¦  «        S r±  r²  r³  s      rD   rv  z#FileSystemReader._get_metadata_path™  rµ  rF   re  rf  c                 óR  — |                      d¦  «        }|                      |¦  «        }| j                             |d¦  «        5 }t	          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   t          |dd ¦  «        €t          ¦   «         |_        | j	        |j        _	        |S )Nrk  rÑ  r¦  )
rs  rv  ri  r  r§  rÛ  r  r!   r¦  rÊ  )rJ   re  rf  rk  r-  r­  r  s          rD   Úread_metadatazFileSystemReader.read_metadataž  sÑ   € Ø�zŠz˜&Ñ!Ô!ˆØ×&Ò& tÑ,Ô,ˆØŒW×"Ò" 4¨Ñ.Ô.ð 	2°-Ý”{ =Ñ1Ô1ˆHð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2õ �8˜^¨TÑ2Ô2Ð:Ý$/¡M¤MˆHÔ!Ø(,¬ˆÔÔ%àˆs   ÁA'Á'A+Á.A+r  rq  c                 ó´   — |j         | _         |                     d¦  «        | _        |                     dd¦  «        | _        | j         €t	          d¦  «        ‚d S )Nrk  rl  Tz)storage_data must not be None in metadata)rú   rs  rk  rl  r§   )rJ   r  rq  re  rf  s        rD   Úset_up_storage_readerz&FileSystemReader.set_up_storage_readerª  sY   € ð %Ô1ˆÔØ—J’J˜vÑ&Ô&ˆŒ	Ø%ŸzšzÐ*;¸TÑBÔBˆÔØÔÐ$Ý Ð!LÑMÔMÐMð %Ð$rF   c                 ó   — |S r?   r@   r„  s     rD   r…  z#FileSystemReader.prepare_local_plan³  s   € ØˆrF   r†  c                 ó   — |S r?   r@   )rJ   r†  s     rD   rŠ  z$FileSystemReader.prepare_global_plan¶  s   € ØˆrF   c                 ó   — | j         S )zT
        return the checkpoint_id that will be used to load the checkpoint.
        r·  rI   s    rD   r=  zFileSystemReader.checkpoint_id¹  r¸  rF   c                 ó6   — t                                |¦  «        S r?   rº  r?  s     rD   rA  z'FileSystemReader.validate_checkpoint_idÀ  r»  rF   r?   ) rL   rM   rN   rP   r  rF  r   rt   r8   r   rÑ   rÎ  rp  r#   r$   r/   rè  rR   rv  r   r   rë  r³   rí  r…  r´   rŠ  r²   r=  rG  rA  r¼  r½  s   @rD   r1   r1   E  sW  ø€ € € € € ð 9=ð$ð $à�B”KÑð$ð /°Ñ5ð$ð 
ð	$ð $ð $ð $ð $ð $ðT |ð T¸¸5¼	ð Tð Tð Tð Tð(ð ( 3¨¬Ñ#4°tÑ#;ð (Àtð (ð (ð (ð (ð:˜hð :°ð :ÀÈÄð :ð :ð :ð :ðxDð D s¨T¡zð D¸R¼[ð Dð Dð Dð Dð

 3ð 
°#ð 
¸(ð 
ð 
ð 
ð 
ðNØ ðNØ26ðNØ?BðNØNQðNà	ðNð Nð Nð Nð xð °Hð ð ð ð ð¨¨h¬ð ¸DÀ¼Nð ð ð ð ð ð˜s R¤[Ñ0ð ð ð ñ „Xðð ð@°3¸¼Ñ3Dð @Èð @ð @ð @ñ „[ð@ð @ð @ð @ð @rF   r1   c                   óš   ‡ — e Zd ZdZdddddddej        fdeej        z  de	d	e	d
e
de
de	de	dee         dz  deddfd„Zdedefˆ fd„Zˆ xZS )r0   aô  
    Basic implementation of StorageWriter using file IO.

    This implementation makes the following assumptions and simplifications:

    * The checkpoint path is an empty or non-existing directory.
    * File creation is atomic

    The checkpoint consist of one file per write request plus
    a global `.metadata` file with the serialized metadata if rank coordination is enabled.
    a rank local `__{rank}.metadata` file with the serialized metadata if rank coordination is NOT enabled.

    TrŸ   r_  FNr-  r`  ra  r  rb  Úcache_staged_state_dictrc  rd  rö   r[   c
                 óx   — t                                | ||||||||	¬¦	  «	         t          j        | |¬¦  «         dS )aš  
        Initialize the writer pointing to `path`.

        Args:
            path: directory where the checkpoint will be written to.
            single_file_per_rank: Produce one file per rank instead of one file per tensor/blob. Default to True.
            sync_files : force files to be synced to permanent storage. Default to True.
            thread_count: Number of IO threads to use to write. Default to 1.
            per_thread_copy_ahead: How many bytes to copy from the GPU ahead of saving them. Default 10Mb.
            cache_staged_state_dict: Whether to cache the staged state_dict. This option decreases staging latency
                at the cost of increased memory usage. Additionally, if this parameter is set to True, it's the expectation
                that the stager is maintained and reused for multiple dcp.async_save calls. Default to False.
            overwrite: Whether to allow overwriting existing checkpoints. Defaults to True.
            _extensions: Extensions to apply to output streams (EXPERIMENTAL)

        N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
        )r-  r`  ra  r  rb  rc  rd  rö   )ró  N)r^  rt   r*   )
rJ   r-  r`  ra  r  rb  ró  rc  rd  rö   s
             rD   rt   zFileSystemWriter.__init__Ô  sh   € õ: 	×"Ò"ØØØ!5Ø!Ø%Ø"7ØØ#Ø!5ð 	#ñ 
	
ô 
	
ð 
	
õ 	Ô$ØØ$;ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
rF   Ú
state_dictc                 óT   •— d| _         t          ¦   «                              |¦  «        S )zOverride of AsyncStager.stager   )rb  rh  Ústage)rJ   rõ  rm  s     €rD   r÷  zFileSystemWriter.stage  s#   ø€ ð &'ˆÔ"Ý‰wŒw�}Š}˜ZÑ(Ô(Ð(rF   )rL   rM   rN   rO   r4   rY   rP   r  rF  r³   rR   r	   r   rt   r    r÷  r¼  r½  s   @rD   r0   r0   Å  s   ø€ € € € € ðð ð" &*ØØØ%/Ø(-ØØAEØ4GÔ4Rð+
ð +
à�B”KÑð+
ð #ð+
ð ð	+
ð
 ð+
ð  #ð+
ð "&ð+
ð ð+
ð Ð6Ô7¸$Ñ>ð+
ð 2ð+
ð 
ð+
ð +
ð +
ð +
ðZ) ð )°Oð )ð )ð )ð )ð )ð )ð )ð )ð )ð )rF   r0   )hrˆ   r‚  rÊ   r  r¯   r  r§  r!  r—  r]   r€  Úabcr   r   Úcollections.abcr   r   r   r   r	   Ú
contextlibr
   r   Úenumr   r   Úpathlibr   Útypingr   r   r   r   Útyping_extensionsr   ro   r   Útorch._utilsr   r   Útorch.distributed._shard._utilsr   Ú'torch.distributed.checkpoint._extensionr   r   Ú&torch.distributed.checkpoint._hf_utilsr   r   r   r   r   Ú%torch.distributed.checkpoint.metadatar   r    r!   Ú$torch.distributed.checkpoint.plannerr"   r#   r$   r%   r&   r'   r(   r)   Ú$torch.distributed.checkpoint.stagingr*   Ú$torch.distributed.checkpoint.storager+   r,   r-   Ú"torch.distributed.checkpoint.utilsr.   Útorch.futuresr/   Ú__all__r5   rP   rQ   r6   r8   rT   r4   r�  r_   ra   rq   r‚   r¶   rR   rÝ   r´   rò   rË   rý   r  r‘  r³   r+  r3   r2   r^  r¿  r1   r0   r@   rF   rD   ú<module>r
     s  ðà Ð Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ %Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ð %Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð YÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ Xð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð EÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ð ð ð ð ð ð
 AÐ @Ð @Ð @Ð @Ð @Ø  Ð  Ð  Ð  Ð  Ð  ðð ð €ð  €ˆcÐ Ð Ñ à")Ð �U˜3”ZÐ )Ð )Ñ )ð ð	Ið 	Ið 	Ið 	Ið 	Iñ 	Iô 	Iñ „ð	Ið ðð ð ð ð ñ ô ñ „ðð ð  ð  ð  ð  ˜$ñ  ô  ð  ð
 €ð˜ð ð ð ð ðð ð ð ð �Cñ ô ð ðð ð ð ð �}ñ ô ð ð0X"ð X"ð X"ð X"ð X"˜Mñ X"ô X"ð X"ðv0Yð 0Yð 0Yð 0Yð 0Yñ 0Yô 0Yð 0Yðf	4�Yð 	4 3ð 	4ð 	4ð 	4ð 	4ð #ð ¨d°9¬oð À$ÀtÈIÄÔBWð ð ð ð ð04Ø(ð4àŒIð4ð Œ*�u”|Ñ
#ð4ð ð	4ð
 ð4ð .ð4ð ð4ð 4ð 4ð 4ðngØðgà”ðgð ”+ðgð ð	gð
 )ðgð ðgð ðgð ðgð .ðgð 
ðgð gð gð gðT<ð <ð <ð <ð <�Sñ <ô <ð <ð@:0ð :0ð :0ð :0ð :0�ñ :0ô :0ð :0ðzj@ð j@ð j@ð j@ð j@˜ñ j@ô j@ð j@ðZð ð ð ð ñ ô ð ð4}@ð }@ð }@ð }@ð }@�}ñ }@ô }@ð }@ð@A)ð A)ð A)ð A)ð A)Ð(Ð*=ñ A)ô A)ð A)ð A)ð A)rF   