§
    ÎÐjÈ.  ã                   óì  — 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	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ dZd	Zd
ZdZddgd„ eD ¦   «         ¢R Z ej        ¦   «         Z edd¬¦  «        Z edd¬¦  «        Z ej        ¦   «         Z ej        ¦   «         Zi Z d„ Z!d„ Z"d„ Z#d%d„Z$e	d„ ¦   «         Z%d„ Z&d„ Z'e	d„ ¦   «         Z(dddœd„Z)d„ Z* G d„ d¦  «        Z+d%ddœd „Z,d!„ Z-d"„ Z.d#„ Z/d$„ Z0dS )&zEIndependent media bundles and execution-local workspace destinations.é    N)ÚcontextmanagerÚnullcontext)Ú
ContextVar)Úwraps)ÚPath)ÚGALLERY_SOURCESÚworkspace_storage_modeÚworkspaces_dir)ÚsharedÚ	dedicated)Ú	save_pathÚimage_save_pathÚaudio_save_pathÚmesh_save_pathÚcurrent_gallery_sourceÚselected_video_timec              #   óT   K  — | ]#}|j         |j        |j        |j        fD ]}|V — ŒŒ$d S ©N)Ú	files_keyÚsettings_keyÚselected_keyÚlast_selected_key)Ú.0ÚsourceÚkeys      úFC:\Users\johnn\OneDrive\Documents\AI\shared\utils\workspace_storage.pyú	<genexpr>r      s•   è è € ð  CHð  CHÈ6Ðqwô  rBð  DJô  DWð  Y_ô  Ylð  ntô  nFð  qGð  CHð  CHÐilÀ3ð  CHð  CHð  CHð  CHð  CHð  CHð  CHó    Úwangp_workspace)ÚdefaultÚwangp_workspace_backgroundc                 óJ   — | t           t          | j        d         ¦  «        <   d S ©NÚgen)Ú_hostsÚidÚ_state)Úhosts    r   Úregister_hostr)      s!   € Ø%)…F�2ˆdŒk˜%Ô Ñ!Ô!Ñ"Ð"Ð"r   c                 óP   — t                                t          | ¦  «        ¦  «        S r   )r%   Úgetr&   )r$   s    r   Úhost_for_genr,   "   s   € Ý�:Š:•b˜‘g”gÑÔÐr   c                 ó  — ddl m} t          | ¦  «        }|€| S t          ||¦  «        x}�|S t	          t          |dd¦  «        x}¦  «        r ||¦  «        S |j        |k    r) ||j                             |¦  «        |j	        ¦  «        S | S )zJRead an assigned gallery without changing the visible/executing workspace.r   ©Úload_galleryNÚread_workspace_gallery)
Úshared.utils.workspacesr/   r,   Úbackground_galleryÚcallableÚgetattrÚworkspace_idÚ
workspacesr+   Ú_workspace_settings)r$   r5   r/   r(   ÚliveÚreaders         r   Úworkspace_galleryr:   &   s¯   € à4Ð4Ð4Ð4Ð4Ð4Ý˜ÑÔ€DØ€|Øˆ
Ý" 4¨Ñ6Ô6Ð6ˆÐCØˆÝ�' $Ð(@À$ÑGÔGÐG�ÑHÔHð $Øˆv�lÑ#Ô#Ð#ØÔ˜LÒ(Ð(Øˆ|˜DœO×/Ò/°Ñ=Ô=¸tÔ?WÑXÔXÐXØ€Jr   c                 óˆ   — t                                ¦   «         }|�|S | �t          | d         ¦  «        nd }|�	||j        fnd S r#   )Ú
_executionr+   r,   r5   )ÚstateÚbindingr(   s      r   Úcurrent_bindingr?   5   sO   € Ý�nŠnÑÔ€GØÐØˆØ).Ð):�<˜˜eœÑ%Ô%Ð%À€DØ(,Ð(8ˆD�$Ô#Ð$Ð$¸dÐBr   c              #   óò   K  — | j                              |¦  «         t                               | |f¦  «        }	 d V — t                               |¦  «         d S # t                               |¦  «         w xY wr   )r6   r+   r<   ÚsetÚreset)r(   r5   Útokens      r   Úexecution_workspacerD   =   st   è è € à„O×Ò˜Ñ%Ô%Ð%Ý�NŠN˜D ,Ð/Ñ0Ô0€Eð Øˆˆˆå×Ò˜ÑÔÐÐÐø�
×Ò˜ÑÔÐÐøøøs   ºA ÁA6c                 ól   — t                                t          | ¦  «        |f¦  «        }|€d n|d         S )Nr   )Ú_liver+   r&   )r(   r5   Úentrys      r   r2   r2   G   s0   € Ý�IŠI•r˜$‘x”x Ð.Ñ/Ô/€EØ�=ˆ4ˆ4 e¨A¤hÐ.r   c                 ó`   — t                                ¦   «         }|�|d         | u r|d         n| S )z`Gallery receiving new outputs: the assigned workspace's own lists during a background operation.Nr   é   )Ú_backgroundr+   )r$   Ú
backgrounds     r   Úrecording_galleryrL   L   s3   € å—’Ñ"Ô"€JØ&Ð2°zÀ!´}ÈÐ7KÐ7Kˆ:�aŒ=ˆ=ÐQTÐTr   c           
   #   ó|  ‡K  — ddl m} t          | ¦  «        |f}| j        5  t          5  t
                               |¦  «        }|€b| j        d         Š| j        |k    rˆfd„t          D ¦   «         n( || j
                             |¦  «        | j        ¦  «        }|dgx}t
          |<   |dxx         dz  cc<   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   t                               | j        d         |d         f¦  «        }	 t          | |¦  «        5  dV — ddd¦  «         n# 1 swxY w Y   t                               |¦  «         	 |                      ||d         ¦  «         t          5  |dxx         dz  cc<   |d         st
          |= ddd¦  «         n# 1 swxY w Y   dS dS # t          5  |dxx         dz  cc<   |d         st
          |= ddd¦  «         w # 1 swxY w Y   w xY w# t                               |¦  «         	 |                      ||d         ¦  «         t          5  |dxx         dz  cc<   |d         st
          |= ddd¦  «         w # 1 swxY w Y   w # t          5  |dxx         dz  cc<   |d         st
          |= ddd¦  «         w # 1 swxY w Y   w xY wxY w)a  Execute in an assigned workspace while the host keeps showing the gallery its user selected.

    Concurrent operations on one workspace share its lists, and so does the host when its user opens
    that workspace meanwhile; outputs stay in this workspace if the user switches away.
    r   r.   Nr$   c                 ó"   •— i | ]}|‰|         “ŒS © rO   )r   Únamer$   s     €r   ú
<dictcomp>z(background_workspace.<locals>.<dictcomp>_   s   ø€ Ð@Ð@Ð@¨4�t˜S œYÐ@Ð@Ð@r   rI   )r1   r/   r&   Ú_mutation_lockÚ
_live_lockrF   r+   r'   r5   ÚGALLERY_KEYSr6   r7   rJ   rA   rD   rB   Úsave_background)r(   r5   r/   r   rG   ÚgalleryrC   r$   s          @r   Úbackground_workspacerW   R   sÝ  øè è € ð 5Ð4Ð4Ð4Ð4Ð4Ý
ˆT‰(Œ(�LÐ
 €CØ	Ô	ð ð �jð ð Ý—	’	˜#‘”ˆØˆ=Ø”+˜eÔ$ˆCØDHÔDUÐYeÒDeÐDeÐ@Ð@Ð@Ð@µ<Ð@Ñ@Ô@Ð@ÐkwÐkwÐx|ô  yH÷  yLò  yLð  MYñ  yZô  yZð  \`ô  \tñ  luô  luˆGØ")¨1 Ð-ˆE•E˜#‘JØˆaˆˆŒ�A‰ˆˆ‰ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ �OŠO˜Tœ[¨Ô/°°q´Ð:Ñ;Ô;€Eð#Ý   |Ñ4Ô4ð 	ð 	ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ 	×Ò˜%Ñ Ô Ð ð	#Ø× Ò  ¨u°Q¬xÑ8Ô8Ð8åð #ð #Ø�a��”˜A‘��‘Ø˜Q”xð #Ý˜c˜
ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #ð #ð #ð #ø•ð #ð #Ø�a��”˜A‘��‘Ø˜Q”xð #Ý˜c˜
ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #øøøøõ	 	×Ò˜%Ñ Ô Ð ð	#Ø× Ò  ¨u°Q¬xÑ8Ô8Ð8åð #ð #Ø�a��”˜A‘��‘Ø˜Q”xð #Ý˜c˜
ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #ø•ð #ð #Ø�a��”˜A‘��‘Ø˜Q”xð #Ý˜c˜
ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #øøøøøøs  ¢CªBCÂ9CÃC		Ã	CÃC		ÃCÃC Ã#C ÄG? Ä%D6Ä*G? Ä6D:Ä:G? Ä=D:Ä>G? ÅF; Å?!F,Æ,F0Æ3F0Æ;G<Ç!G0Ç$G<Ç0G4Ç4G<Ç7G4Ç8G<Ç?J;ÈI7È7J;È>!I+ÉJ;É+I/É/J;É2I/É3J;É7J8É?!J,Ê J8Ê,J0Ê0J8Ê3J0Ê4J8Ê8J;)r=   r>   c                óÔ   — |pt          |¦  «        }|€| S |\  }}|j                             |¦  «        }|�1i | ¥t                               t
          t          |¦  «        ¦  «        ¥n| S r   )r?   r6   Ú	media_dirÚdictÚfromkeysÚOUTPUT_KEYSÚstr)Úconfigr=   r>   r(   r5   Ú	directorys         r   Úoutput_configr`   q   sm   € ØÐ/�¨Ñ/Ô/€GØ€ØˆØ Ñ€Dˆ,Ø”×)Ò)¨,Ñ7Ô7€IØGPÐG\ÐCˆfÐC�Ÿš¥kµ3°y±>´>ÑBÔBÐCÐCÐbhÐhr   c                 ó`   — t          |¦  «        }|�|                      d|d         ¦  «         | S )Nr5   rI   )r?   Ú
setdefault)Útaskr=   r>   s      r   Úcapture_taskrd   z   s2   € Ý˜eÑ$Ô$€GØÐØ�Š˜¨°¬
Ñ3Ô3Ð3Ø€Kr   c                   ó4   — e Zd ZdZddœd„ZdZddœd„Zd„ ZdS )	ÚHeadlessWorkspaceHostzEKeep saved queue destinations usable in CLI and Python API execution.F)Úoutput_overridec                óÆ   — ddl m} ddlm} |rt	          d¦  «        ‚| ||¦  «        c| _        | _         ||¦  «        | _        d | _        | |d<   t          | ¦  «         d S )Nr   )ÚWorkspaceStore)ÚMediaSettingsCachezRA workspace-bound queue cannot use --output-dir. Use its original Workspaces Root.Ú_workspace_host)
r1   ri   Úshared.utils.media_settingsrj   Ú
ValueErrorr'   r6   r7   r5   r)   )Úselfr=   ÚrootÚread_settingsrg   ri   rj   s          r   Ú__init__zHeadlessWorkspaceHost.__init__ƒ   s’   € Ø:Ð:Ð:Ð:Ð:Ð:ØBÐBÐBÐBÐBÐBØð 	sÝÐqÑrÔrÐrØ',¨n¨n¸TÑ.BÔ.BÐ$ˆŒ�T”_Ø#5Ð#5°mÑ#DÔ#DˆÔ Ø ˆÔØ#'ˆÐÑ Ý�dÑÔÐÐÐr   ©Ú	executionc                óô   — ddl m} | j                             |¦  «        }| j        |k    rL|                      ¦   «          | j        d                               ||| j        ¦  «        ¦  «         || _        d S d S )Nr   r.   r$   )	r1   r/   r6   r+   r5   Úsave_workspacer'   Úupdater7   )rn   r5   rs   r/   Úrecords        r   Úactivate_workspacez(HeadlessWorkspaceHost.activate_workspace�   s‰   € Ø8Ð8Ð8Ð8Ð8Ð8Ø”×$Ò$ \Ñ2Ô2ˆØÔ Ò,Ð,Ø×ÒÑ!Ô!Ð!ØŒK˜Ô×%Ò% l l°6¸4Ô;SÑ&TÔ&TÑUÔUÐUØ ,ˆDÔÐÐð -Ð,r   c                 óŒ   — ddl m} | j        r6| j                             | j         || j        d         ¦  «        ¦  «         d S d S )Nr   )Úcapture_galleryr$   )r1   rz   r5   r6   Úsaver'   )rn   rz   s     r   ru   z$HeadlessWorkspaceHost.save_workspace˜   s_   € Ø;Ð;Ð;Ð;Ð;Ð;ØÔð 	YØŒO× Ò  Ô!2°O°OÀDÄKÐPUÔDVÑ4WÔ4WÑXÔXÐXÐXÐXð	Yð 	Yr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rq   Úbackground_agentsrx   ru   rO   r   r   rf   rf   �   sn   € € € € € ØOÐOØFKð 	ð 	ð 	ð 	ð 	ð Ðà<Að -ð -ð -ð -ð -ðYð Yð Yð Yð Yr   rf   ©Úheadlessc                óh   ‡ ‡‡— ‰ €ˆfd„S ˆfd„Št          ‰ ¦  «        ˆ ˆfd„¦   «         }‰|_        |S )Nc                 ó&   •— t          | ‰¬¦  «        S )Nr�   )Úworkspace_generation)Úfunctionr‚   s    €r   ú<lambda>z&workspace_generation.<locals>.<lambda>    s   ø€ Õ 4°XÈÐ QÑ QÔ Q€ r   c                 óœ  •— t          |d         ¦  «        }|€"|                      d¦  «        r‰� ‰|¦  «        }|€&|                      d¦  «        rt          d¦  «        ‚d S |                      d¦  «        p|j        }t	          |                      d¦  «        ¦  «        o|j        | d<   | d         s|                     |d¬¦  «         ||fS )Nr$   r5   zYThis queue needs its workspace store. Open it in WanGP with the original Workspaces Root.Úmcp_agent_idÚworkspace_backgroundTrr   )r,   r+   rm   r5   Úboolr€   rx   )rc   r=   r(   r5   r‚   s       €r   Úpreparez%workspace_generation.<locals>.prepare¡   sÜ   ø€ Ý˜E %œLÑ)Ô)ˆØˆ<˜DŸHšH ^Ñ4Ô4ˆ<¸Ð9MØ�8˜E‘?”?ˆDØˆ<Ø�xŠx˜Ñ'Ô'ð ~Ý Ð!|Ñ}Ô}Ð}Ø�4Ø—x’x Ñ/Ô/ÐD°4Ô3Dˆå'+¨D¯HªH°^Ñ,DÔ,DÑ'EÔ'EÐ'`È$ÔJ`ˆÐ#Ñ$ØÐ*Ô+ð 	BØ×#Ò# L¸DÐ#ÑAÔAÐAØ�\Ð!Ð!r   c                 óz  •— t          |d         d         ¦  «        }t          |dt          ¦   «         ¦  «        5   ‰| |d         ¦  «        }|€ ‰| g|¢R i |¤Žcd d d ¦  «         S |\  }}| d         r@t          ||¦  «        5   ‰| g|¢R i |¤Žcd d d ¦  «         cd d d ¦  «         S # 1 swxY w Y   t	          ||¦  «        5  	  ‰| g|¢R i |¤Ž|                     ¦   «          cd d d ¦  «         cd d d ¦  «         S # |                     ¦   «          w xY w# 1 swxY w Y   	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr=   r$   Ú_execution_lockrŠ   )r,   r4   r   rW   rD   ru   )rc   ÚargsÚkwargsr(   r>   r5   r†   rŒ   s         €€r   Úrunz!workspace_generation.<locals>.run°   s˜  ø€ å˜F 7œO¨EÔ2Ñ3Ô3ˆÝ�TÐ,­k©m¬mÑ<Ô<ð 	*ð 	*Ø�g˜d F¨7¤OÑ4Ô4ˆGØˆØ�x Ð6 tÐ6Ð6Ð6¨vÐ6Ð6ð	*ð 	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð ")ÑˆD�,ØÐ*Ô+ð ;Ý)¨$°Ñ=Ô=ð ;ð ;Ø#˜8 DÐ:¨4Ð:Ð:Ð:°6Ð:Ð:ð;ð ;ð ;ð ;ñ ;ô ;ð ;ð	*ð 	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;å$ T¨<Ñ8Ô8ð *ð *ð*Ø#˜8 DÐ:¨4Ð:Ð:Ð:°6Ð:Ð:à×'Ò'Ñ)Ô)Ð)ð	*ð *ð *ð *ñ *ô *ð *ð	*ð 	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*øð ×'Ò'Ñ)Ô)Ð)Ð)øøøð	*ð *ð *ð *øøøð *ð *ð *ð *ð *ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*sw   º D0Á'D0ÂB)ÂD0Â)B-	Â-D0Â0B-	Â1D0ÃDÃC>ÃDÃ%D0Ã>DÄDÄD	ÄD0ÄD	ÄD0Ä0D4Ä7D4)r   Úprepare_workspace)r†   r‚   r‘   rŒ   s   `` @r   r…   r…   ž   sr   øøø€ ØÐØQÐQÐQÐQÐQð"ð "ð "ð "ð "õ ˆ8�_„_ð*ð *ð *ð *ð *ñ „_ð*ð $€CÔØ€Jr   c                 ó8  — t          |¦  «        }|                     ¦   «         sd|j        v sdt          |¦  «        v rt	          d¦  «        ‚| |z                       ¦   «         }|                     |                      ¦   «         ¦  «        st	          d¦  «        ‚|S )Nú..ú:z Invalid relative workspace path.z(Workspace path escapes its media folder.)r   Úis_absoluteÚpartsr]   rm   ÚresolveÚis_relative_to)ro   ÚrelativeÚpathÚresolveds       r   Ú
owned_pathr�   Ä   s”   € Ý�‰>Œ>€DØ×ÒÑÔð =˜T T¤ZÐ/Ð/°3½#¸h¹-¼-Ð3GÐ3GÝÐ;Ñ<Ô<Ð<Ø�t‘×$Ò$Ñ&Ô&€HØ×"Ò" 4§<¢<¡>¤>Ñ2Ô2ð EÝÐCÑDÔDÐDØ€Or   c                 ób  ‡— t          | ¦  «                             ¦   «         } | j        | i}| j                             ¦   «         dv rdndD ]6Š|                      ‰¦  «        }|| k    r|                     ¦   «         r||‰<   Œ7|                      | j        dz   ¦  «        }|                     ¦   «         rüt          j	        | 
                    d¬¦  «        ¦  «        }t          |t          ¦  «        st          d|j        › �¦  «        ‚|D ]¥Št          ‰t          ¦  «        r4‰                     d¦  «        rt!          ˆfd	„d
D ¦   «         ¦  «        s‰dv rt          d‰›�¦  «        ‚|                      | j        ‰z   ¦  «        }|                     ¦   «         st%          d|› �¦  «        ‚||‰<   Œ¦|S )zQReturn suffix -> file for known companions; GLB and splat PLY are self-contained.)z.glbz.ply)ú.jsonz.png)rŸ   ú.wangp-files.jsonúutf-8©ÚencodingzInvalid companion index: )ú.Ú_c              3   ó    •K  — | ]}|‰v V — Œ	d S r   rO   )r   ÚcÚsuffixs     €r   r   zbundle_files.<locals>.<genexpr>Ü   s+   øè è € ÐVsÐVsÐghÐWXÐ\bÐWbÐVsÐVsÐVsÐVsÐVsÐVsr   z/\:)r¤   r”   zInvalid companion suffix: zMissing companion: )r   r˜   r¨   ÚlowerÚwith_suffixÚis_fileÚ	with_namerP   ÚjsonÚloadsÚ	read_textÚ
isinstanceÚlistrm   r]   Ú
startswithÚanyÚstemÚFileNotFoundError)r›   ÚfilesÚ	companionÚledgerÚsuffixesr¨   s        @r   Úbundle_filesrº   Î   sç  ø€ å�‰:Œ:×ÒÑÔ€DØŒ[˜$Ð€EØ'+¤{×'8Ò'8Ñ':Ô':Ð>NÐ'NÐ'NÐ#Ð#ÐT^ð &ð &ˆØ×$Ò$ VÑ,Ô,ˆ	Ø˜ÒÐ ×!2Ò!2Ñ!4Ô!4ÐØ%ˆE�&‰MøØ�^Š^˜DœIÐ(;Ñ;Ñ<Ô<€FØ‡~‚~ÑÔð 
&Ý”:˜f×.Ò.¸Ð.Ñ@Ô@ÑAÔAˆÝ˜(¥DÑ)Ô)ð 	HÝÐF¸¼ÐFÐFÑGÔGÐGØð 	&ð 	&ˆFÝ˜f¥cÑ*Ô*ð J°&×2CÒ2CÀJÑ2OÔ2Oð JÕSVÐVsÐVsÐVsÐVsÐlrÐVsÑVsÔVsÑSsÔSsð JÐw}ð  BMð  xMð  xMÝ Ð!H¸fÐ!HÐ!HÑIÔIÐIØŸš t¤y°6Ñ'9Ñ:Ô:ˆIØ×$Ò$Ñ&Ô&ð KÝ'Ð(I¸iÐ(IÐ(IÑJÔJÐJØ%ˆE�&‰MˆMØ€Lr   c                 óÈ   — t          | ¦  «                             d¦  «        5 }t          j        |d¦  «                             ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S )NÚrbÚsha256)r   ÚopenÚhashlibÚfile_digestÚdigest)r›   Ústreams     r   rÁ   rÁ   å   s—   € Ý	ˆd‰Œ�Š˜Ñ	Ô	ð > &ÝÔ" 6¨8Ñ4Ô4×;Ò;Ñ=Ô=ð>ð >ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >ð >ð >s   £'AÁAÁAc           	      ó´  ‡ ‡‡‡— t          ‰ ¦  «                             ¦   «         t          ‰¦  «                             ¦   «         cŠ Š‰                      ‰¦  «        rt          ‰ ¦  «        g fS t	          ‰ ¦  «        Š‰                     dd¬¦  «         g }t          5  d}	 ‰ j        |rd|› d�ndz   Šˆˆfd„‰D ¦   «         }‰‰‰ j        z   dz   z  }d	„ | 	                    ¦   «         D ¦   «         }ˆ fd
„‰D ¦   «         }	 | r| 
                    ¦   «          p?|                     ¦   «         o+t          j        |                     d¬¦  «        ¦  «        |k    }n# t          t          j        f$ r d}Y nw xY w|rdt#          |¦  «        rUt#          ˆfd„|                     ¦   «         D ¦   «         ¦  «        r(t          |‰ j                 ¦  «        g fcddd¦  «         S t'          |¦  «        s| 
                    ¦   «         sn|dz  }�Œf	 t)          j        d‰¬¦  «        5 }	‰                     ¦   «         D ]È\  }
}||
         }t          |	¦  «        |j        z  }t/          j        ||¦  «         t3          |¦  «        t3          |¦  «        k    rt5          d|j        › �¦  «        ‚|                     d¦  «        5  	 ddd¦  «         n# 1 swxY w Y   |                     |¦  «         |                     |¦  «         ŒÉ|rY|                     dd¬¦  «        5 }|                     |¦  «         t          j        ||¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   t          |‰ j                 ¦  «        |fcddd¦  «         S # t>          $ r* tA          |¦  «        D ]}| !                    d¬¦  «         Œ‚ w xY w# 1 swxY w Y   dS )zOCopy a complete bundle, returning its main path and files created by this call.T)ÚparentsÚexist_okr   z (ú)Ú c                 ó"   •— i | ]}|‰‰|z   z  “ŒS rO   rO   )r   r¨   r_   r´   s     €€r   rQ   zcopy_bundle.<locals>.<dictcomp>ö   s$   ø€ ÐOÐOÐO¸v�v˜y¨D°6©MÑ:ÐOÐOÐOr   r    c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rO   )Úexists)r   Útargets     r   ú
<listcomp>zcopy_bundle.<locals>.<listcomp>ø   s    € ÐGÐGÐG¨F˜Ÿš™œÐGÐGÐGr   c                 ó*   •— g | ]}|‰j         k    ¯|‘ŒS rO   )r¨   )r   r¨   r   s     €r   rÌ   zcopy_bundle.<locals>.<listcomp>ù   s%   ø€ ÐPÐPÐP V¸À&Ä-Ò8OÐ8O˜&Ð8OÐ8OÐ8Or   r¡   r¢   Fc              3   ó’   •K  — | ]A\  }}|                      ¦   «         o%t          ‰|         ¦  «        t          |¦  «        k    V — ŒBd S r   )r«   rÁ   )r   r¨   rË   r¶   s      €r   r   zcopy_bundle.<locals>.<genexpr>þ   sw   øè è € ð  5Yð  5Yñ  wEÐv|ð  E°V·^²^Ñ5EÔ5EÐ5qÍ&ÐQVÐW]ÔQ^ÑJ_ÔJ_ÕciÐjpÑcqÔcqÒJqð  5Yð  5Yð  5Yð  5Yð  5Yð  5Yr   NrI   z.copy-)ÚprefixÚdirzCopy verification failed: ÚxbÚx)Ú
missing_ok)"r   r˜   r™   r]   rº   ÚmkdirÚ
_copy_lockr´   r¨   ÚvaluesrÊ   r«   r­   r®   r¯   ÚUnicodeErrorÚJSONDecodeErrorÚallÚitemsr³   ÚtempfileÚTemporaryDirectoryrP   ÚshutilÚcopy2rÁ   ÚOSErrorr¾   ÚappendÚreplaceÚdumpÚBaseExceptionÚreversedÚunlink)r   r_   ÚcreatedÚindexÚtargetsr¸   ÚexistingÚ
companionsÚsame_ledgerÚ	temporaryr¨   ÚoriginalrË   ÚstagedrÂ   r¶   r´   s   ``             @@r   Úcopy_bundlerï   ê   s€  øøøø€ å˜V™œ×,Ò,Ñ.Ô.µ°Y±´×0GÒ0GÑ0IÔ0IÐ€FˆIØ×Ò˜YÑ'Ô'ð Ý�6‰{Œ{˜BˆÐÝ˜Ñ Ô €EØ‡O‚O˜D¨4€OÑ0Ô0Ð0Ø€GÝ	ð %ð %Øˆð	Ø”;°5Ð"@ - u - - - -¸bÑAˆDØOÐOÐOÐOÐOÈÐOÑOÔOˆGØ $¨¬Ñ"6Ð9LÑ"LÑMˆFØGÐG°g·n²nÑ6FÔ6FÐGÑGÔGˆHØPÐPÐPÐP¨uÐPÑPÔPˆJð$Ø#-˜~ÐE°f·m²m±o´oÐ2Eð  ^È6Ï>Ê>ÑK[ÔK[ð  L]Õ`dÔ`jÐkq×k{Òk{ð  FMÐk{ñ  lNô  lNñ  aOô  aOð  S]ò  a]��øÝ ¥$Ô"6Ð7ð $ð $ð $Ø#���ð$øøøàð 7�s 8™}œ}ð 7µð  5Yð  5Yð  5Yð  5Yð  IP÷  IVò  IVñ  IXô  IXð  5Yñ  5Yô  5Yñ  2Yô  2Yð 7Ý˜7 6¤=Ô1Ñ2Ô2°BÐ6ð%ð %ð %ð %ñ %ô %ð %ð %õ �x‘=”=ð ¨¯ª©¬ð ØØ�Q‰JˆEñ	ð	ÝÔ,°HÀ)ÐLÑLÔLð 6ÐPYØ(-¯ª©¬ð 	+ð 	+Ñ$�F˜HØ$ Vœ_�FÝ! )™_œ_¨v¬{Ñ:�FÝ”L ¨6Ñ2Ô2Ð2Ý˜hÑ'Ô'­6°&©>¬>Ò9Ð9Ý%Ð&RÀ8Ä=Ð&RÐ&RÑSÔSÐSØŸš TÑ*Ô*ð ð Øðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à—N’N 6Ñ*Ô*Ð*Ø—N’N 6Ñ*Ô*Ð*Ð*Øð 6ØŸš S°7˜Ñ;Ô;ð 6¸vØŸš vÑ.Ô.Ð.Ýœ	 *¨fÑ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6õ �w˜vœ}Ô-Ñ.Ô.°Ð7ðC%ð %ð %ð %ñ %ô %ð %ð %øõD ð 	ð 	ð 	Ý" 7Ñ+Ô+ð /ð /�Ø—’¨�Ñ.Ô.Ð.Ð.Øð	øøøðE%ð %ð %ð %øøøð %ð %ð %ð %ð %ð %s¿   ÂA!OÃ?AEÅOÅE3Å0OÅ2E3Å3AOÇ+OÈNÈBM#Ê8K	Ê:M#ËK
Ë
M#ËK
ËAM#Ì+MÍ M#ÍMÍM#ÍMÍM#ÍNÍ#M'	Í'NÍ*M'	Í+NÎ4O
Ï
OÏOÏOr   )1r   r¿   r­   ÚosrÝ   rÛ   Ú	threadingÚweakrefÚ
contextlibr   r   Úcontextvarsr   Ú	functoolsr   Úpathlibr   Úshared.utils.gallery_sourcesr   ÚSTORAGE_KEYÚROOT_KEYÚMODESr\   rT   ÚWeakValueDictionaryr%   r<   rJ   ÚRLockrÕ   ÚLockrS   rF   r)   r,   r:   r?   rD   r2   rL   rW   r`   rd   rf   r…   r�   rº   rÁ   rï   rO   r   r   ú<module>rþ      sÅ  ðà KÐ KØ €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 8Ð 8Ð 8Ð 8Ð 8Ð 8à&€Ø€Ø€ØS€Ø(Ð*?ð  Ið  CHð  CHÐUdð  CHñ  CHô  CHð  Ið  I€Ø	$ˆÔ	$Ñ	&Ô	&€ØˆZÐ)°4Ð8Ñ8Ô8€
ØˆjÐ5¸tÐDÑDÔD€ØˆYŒ_ÑÔ€
ØˆYŒ^ÑÔ€
Ø
€ð*ð *ð *ðð ð ðð ð ðCð Cð Cð Cð ð ð  ñ „ð ð/ð /ð /ð
Uð Uð Uð ð#ð #ñ „ð#ð< $(°ð ið ið ið ið iðð ð ðYð Yð Yð Yð Yñ Yô Yð Yð:#°Dð #ð #ð #ð #ð #ðLð ð ðð ð ð.>ð >ð >ð
-ð -ð -ð -ð -r   