Ë
    xWåj.:  ã                   ó  — d Z ddlZddlZddlZddlZddlmZ ddlmZ  ee«      j                  «       j                  j                  j                  Zedz  edz  fD ]9  Z ee«      ej                  vsŒej                  j                  d ee«      «       Œ; ddlZddlZddlmZ ddlmZ dd	lmZ ed
z  dz  ZdZ ee«      D � �ci c]  \  } }|| “Œ
 c}} Zdedefd„Zdeddfd„Zdde fd„Z!dde"fd„Z#dd„Z$	 	 dde"fd„Z%yc c}} w )aV  
runner: ejecuta un plan del planner y escribe los artefactos del lote.

Mismos artefactos que `batch_poses_chars` (para no tener dos verdades):

    Output/ui_runs/<stamp>/
        <clave>/img/*.png
        <clave>/pack_manifest.json
        <clave>/metrics.json
        manifest_all.json
        plan.json
        ui_spec.json
        audit_1.jpg ... + contact_all.jpg

La generacion NO se reimplementa: es `pack_builder.generate()` job a job. Lo
unico propio es el volcado de artefactos (y las hojas, que aqui van a 6
columnas porque un lote de 45 de un solo personaje no cabe en la hoja de 3).
é    N)Údatetime)ÚPathÚEngineÚArchivos)ÚPromptBuilder)Úfs_name)ÚSTAGESÚOutputÚui_runs)Ú	sugerenteÚspicyÚ	explicitoÚpathÚreturnc                 ó  — | j                  «       s| j                  d¬«       | S t        | j                  «       «      s| S d}	 | j	                  d| j
                  |fz  «      }|j                  «       s|j                  d¬«       |S |dz  }ŒJ)zDCrea la carpeta; si ya tiene algo dentro, le anade sufijo (no pisa).T)Úparentsé   z%s_%dé   )ÚexistsÚmkdirÚanyÚiterdirÚ	with_nameÚname)r   ÚnÚalts      úEngine/ui/runner.pyÚ	_safe_dirr   +   s~   € à�;‰;Œ=Ø�
‰
˜4ˆ
Ô ØˆÜˆt�|‰|‹~ÔØˆØ	€AØ
Ø�n‰n˜W¨¯	©	°1 ~Ñ5Ó6ˆØ�z‰zŒ|Ø�I‰I˜dˆIÔ#ØˆJØ	ˆQ‰ˆð ó    c                 óV   — | j                  t        j                  |dd¬«      d¬«       y )NFr   )Úensure_asciiÚindentúutf-8©Úencoding)Ú
write_textÚjsonÚdumps)r   Údatas     r   Ú_write_jsonr*   ;   s%   € Ø‡O�O”D—J‘J˜t°%ÀÔBØ$ð õ &r   c                 óZ  ‡ ‡‡‡‡‡‡— 	 ddl mŠmŠ t	        ‰ «      Š i Šg }|D ]A  }|j                  d«      }|‰vrg ‰|<   |j                  |«       ‰|   j                  |«       ŒC |D ]  }‰|   j                  d„ ¬«       Œ t        ‰dz  «      Šˆˆˆˆˆ ˆˆfd„}g }	d}
t        dt        |«      |«      D ]9  }|
dz  }
 |||||z    ‰ d	|
z  z  «      }|sŒ |	j                  t        |«      «       Œ;  ||‰ d
z  «      }|r|	j                  t        |«      «       |	S # t        $ r g cY S w xY w)z›Hojas de contacto: bloques de `per_sheet` personajes, `cols` por fila.

    `audit_N.jpg` por bloque y `contact_all.jpg` con todo. Devuelve las rutas.
    r   )ÚImageÚ	ImageDrawÚchar_dirc                 óL   — t         j                  | j                  d«      d«      S )NÚstageéc   )ÚSTAGE_ORDERÚget)Úrs    r   Ú<lambda>zwrite_sheets.<locals>.<lambda>T   s   € ¬¯©¸¿¹¸w»ÈÔ)Lr   )Úkeygffffff÷?c                 ó  •— | D �cg c]  }‰j                  |«      sŒ|‰|   df‘Œ }}|sy t        d„ |D «       «      }t        dt        ‰|«      «      }|D ���cg c]  \  }}}||t        |«      |z   dz
  |z  f‘Œ }}}}|‰z  }t	        ˆfd„|D «       «      }	‰j                  d||	fd«      }
‰j                  |
«      }d}|D �]  \  }}}t        |«      D ]ì  \  }}‰|d   z  }|j                  «       sŒ	 ‰j                  |«      }|j                  ‰‰f«       |j                  d«      }||z  ‰z  }|||z  ‰dz   z  z   }|
j                  |||f«       |j                  |d	z   |‰z   d
z   f|j                  d«      xs |d d ›d|j                  d«      xs |j                  d«      ›d|j                  d«      ›�d¬«       Œî ||‰dz   z  z  }�Œ |
j                  |d¬«       |S c c}w c c}}}w # t        $ r Y �Œ*w xY w)Nr   c              3   ó:   K  — | ]  \  }}}t        |«      –— Œ y ­w)N©Úlen)Ú.0Ú_Úrecss      r   Ú	<genexpr>z.write_sheets.<locals>.sheet.<locals>.<genexpr>^   s   è ø€ Ð8±¡: 1 d¨A”S˜—Y±ùs   ‚r   c              3   ó6   •K  — | ]  \  }}}|‰d z   z  –— Œ y­w)é   N© )r;   r<   ÚrowsÚthumb_hs      €r   r>   z.write_sheets.<locals>.sheet.<locals>.<genexpr>c   s!   øè ø€ ÐD¹V©z¨q°!°T�T˜W r™\Õ*¹Vùs   ƒÚRGBÚwhiteÚfiler@   é   r   Úcharé   z | r0   ÚnivelÚ Úpose_idÚblack)ÚfilléX   )Úquality)r3   ÚmaxÚminr:   ÚsumÚnewÚDrawÚ	enumerater   ÚopenÚ	thumbnailÚconvertÚ	ExceptionÚpasteÚtextÚsave)ÚcharsÚout_pathÚchÚblocksÚwidestÚuse_colsr=   r<   ÚwidthÚheightÚcanvasÚdrawÚyrH   rB   ÚiÚrecr   ÚimÚxÚyyr,   r-   Úby_charÚcolsÚrun_dirÚthumbrC   s                        €€€€€€€r   Úsheetzwrite_sheets.<locals>.sheetX   sC  ø€ Ù16ÓJ±¨2¸'¿+¹+Àb½/�2�w˜r‘{ AÒ&°ˆÐJÙØô Ñ8±Ó8Ó8ˆÜ�qœ#˜d FÓ+Ó,ˆá%+õ-Ù%+‘k�b˜$ ð �tœc $›i¨(Ñ2°QÑ6¸8ÑCÒDØ%+ð 	ò -à˜5Ñ ˆÜÓD¹VÓDÓDˆØ—‘˜5 5¨& /°7Ó;ˆØ�~‰~˜fÓ%ˆØˆÜ &ÑˆD�$˜Ü# Dž/‘��3Ø  V¡Ñ,�Ø—{‘{”}ØðØŸ™ DÓ)�BØ—L‘L %¨Ð!1Ô2ØŸ™ EÓ*�Bð ˜‘\ UÑ*�Ø˜!˜x™-¨G°b©LÑ9Ñ9�Ø—‘˜R ! R Ô)Ø—	‘	˜1˜q™5 " w¡,°Ñ"2Ð3Ø+.¯7©7°6«?Ò+B¸dÀCÀRÒ*HØ*-¯'©'°'Ó*:ò +;Ø*-¯'©'°'Ó*:ñ+;Ø<?¿G¹GÀIÔ<NðPð  'ð	 õ (ð *ð$ �˜ 2™Ñ&Ñ&ŠAð' !'ð( 	�‰�H bˆÔ)ØˆùòG Kùô-øô  !ò Úðús"   †G(�
G(Á"G-Ã65G4Ç4	HÈ Hr   zaudit_%d.jpgzcontact_all.jpg)ÚPILr,   r-   ÚImportErrorr   r3   ÚappendÚsortÚintÚranger:   Ústr)rp   Úrecordsro   Ú	per_sheetrq   Úorderrj   rH   rr   Úoutr   ri   Úgotr,   r-   rn   rC   s   ` ` `        @@@@r   Úwrite_sheetsr   @   sG  þ€ ð
ß(ô �7‹m€GØ€GØ€EÛˆØ�w‰w�zÓ"ˆØ�wÑØˆG�D‰MØ�L‰L˜ÔØ�‰×Ñ˜SÕ!ð ó ˆØ�‰×ÑÑLÐÕMð ô �%˜&‘.Ó!€G÷$ò $ðL €CØ	€AÜ�1”c˜%“j )Ö,ˆØ	ˆQ‰ˆÙ�E˜!˜A 	™MÐ*¨G°~ÈÑ7IÑ,JÓKˆÚØ�J‰J”s˜3“xÕ ð	 -ñ
 ��wÐ!2Ñ2Ó
3€CÙ
Ø�
‰
”3�s“8ÔØ€JøôC ò ØŠ	ðús   ‰D ÄD*Ä)D*c                 ó0  ‡‡‡— t        t        | d   «      «      }t        t        t        «      «      }| d   }| d   }|j                  d«      }t        |dz  i |¥| j                  d«      | j                  d«      t        |«      dœ¥«       t        d	„ |D «       «      }	g g }}
d
}t        |d«      D �]d  \  }}|d   Š|d   }|j                  d«      xs t        ‰«      Š|‰z  }|dz  }|D �cg c]  }|j                  ‘Œ }}‰r! ‰d‰‰|t        |«      t        |«      dœ«       |rt        j                  ||«      nd}|�>|dz  j                  «       r(t        j                   |dz  j#                  d¬«      «      ni }nšt%        dt        |«      z  d«      }t'        j(                  ||d   |j*                  |j,                  |||‰ˆˆˆfd„|¬«
      \  }}|j/                  dd¬«       t        |dz  |«       t        |dz  |«       |j                  d«      rd}|D ]#  }|
j1                  d‰i|¥d ‰›d!|d    ›�i¥«       Œ% i }|D ]R  }|j3                  |j4                  xs |j6                  g «      j1                  |j                  |j8                  d"œ«       ŒT |j1                  ‰‰|d#   |d$   ||D �cg c]-  }|d%   |j                  d&«      |d'   |d(   |d)   |d   |d    d*œ‘Œ/ c}d+œ«       ‰r  ‰d,‰|t        |«      t        |«      d-œ«       |s�Œe n t        |d.z  |
«       t        |d/z  t;        j<                  «       j?                  d0«      t        |«      |	|| j                  d«      |j                  d$«      |j                  d1«      |d2œ«       g }|
r	 tA        ||
«      }t        |«      |	t        |
«      t        |«      ||d4œ}t        |d5z  |«       ‰r ‰d6d7i|¥«       |S c c}w c c}w # tB        $ r}tE        d3|z  «       Y d}~Œid}~ww xY w)8zÎGenera los jobs del plan. -> resumen de la corrida.

    `on_event` recibe dicts con `event` (`char_start`, `image`, `char_done`,
    `done`) y `should_stop()` se consulta entre imagenes para cancelar.
    rp   ÚitemsÚspecÚseedzui_spec.jsonÚ	pick_seedÚquotas)r„   r…   rp   c              3   ó8   K  — | ]  }t        |d    «      –— Œ y­w)ÚjobsNr9   )r;   Úitems     r   r>   zrun_plan.<locals>.<genexpr>š   s   è ø€ Ð;±U¨T”s˜4 ™<×(±Uùs   ‚Fr   rH   r‡   ÚdirÚimgÚ
char_start)ÚeventrH   r‰   ÚindexÚtotalÚimagesNzmetrics.jsonr#   r$   r   rG   Ú	char_linec                 ó4   •— ‰r ‰t        | ‰‰¬«      «      S d S )N)rH   r‰   )Údict)ÚevÚfolderr6   Úon_events    €€€r   r5   zrun_plan.<locals>.<lambda>³   s&   ø€ Ù%ñ &.¬d°2¸CÀVÔ.LÓ%Mð &0Ø+/ð&0r   )rH   Úon_imageÚshould_stopT©r   Úexist_okúpack_manifest.jsonÚstoppedr.   rF   Ú/)ÚidÚlineÚthemeÚstagesrJ   r0   rL   ÚcameraÚdress)rJ   r0   rL   r¡   r¢   rƒ   rF   )rH   r.   rŸ   r    Úposesr‡   Ú	char_done)rŒ   rH   r�   rŽ   Úsavedúmanifest_all.jsonú	plan.jsonz%Y-%m-%d %H:%M:%SÚmode)Ú	generatedr^   r�   rƒ   r„   r    r¨   Úplanz[!] hojas de contacto: %s)rp   Úplannedr©   r^   r›   Úsheetszsummary.jsonrŒ   Údone)#r   r   r   ry   ÚBASE_DIRr3   r*   rS   rV   r   rL   r:   ÚbpcÚ	load_doner   r'   ÚloadsÚ	read_textrQ   ÚpbÚgenerateÚmaster_promptÚnegative_promptr   ru   Ú
setdefaultr0   rJ   Ú	pose_liner   ÚnowÚstrftimer   rZ   Úprint)rª   r•   r—   Úresumerp   Úmasterr�   r‚   rƒ   Útotal_imagesÚall_recordsÚplan_outr›   r   rˆ   r‡   r.   Úimg_dirÚjobÚidsrz   ÚmetricsÚbudgetrj   r£   r¬   ÚexcÚsummaryr”   r6   s    `                          @@r   Úrun_planrÈ   ‹   sk  ú€ ô œ˜T )™_Ó-Ó.€GÜœ3œx›=Ó)€FØ�‰M€EØ�‰<€DØ�8‰8�FÓ€DÜ�˜.Ñ(ðH�4ð H d§h¡h¨{Ó&;ØŸ8™8 HÓ-¼#¸g»,òHôIô Ñ;±UÓ;Ó;€LØ �€KØ€Gä˜U A×&‰ˆˆ4Ø�6‰lˆØ�F‰|ˆØ—‘˜%“Ò0¤G¨C£LˆØ˜VÑ#ˆØ˜UÑ"ˆÙ&*Ó+¡d˜sˆs�{‹{ dˆÐ+áÙ˜|°SÀØ ¬3¨u«:ÄÀTÃñLô Mñ 39”#—-‘- ¨#Ô.¸dˆØÐà'/°.Ñ'@×&HÑ&HÔ&Jô —j‘j (¨^Ñ";×!FÑ!FØ ð "Gó ""ô #ØPRñ ô ˜œS ›Y™¨Ó*ˆFÜ!Ÿ{™{Ø�d˜;Ñ'¨×)=Ñ)=Ø×&Ñ&¨°°vÀCõ0à'ô )ÑˆG�Wð �N‰N 4°$ˆNÔ7Ü˜Ð#7Ñ7¸ÔAÜ˜ >Ñ1°7Ô;Ø�{‰{˜9Ô%Ø�ãˆCØ×Ñ 
¨Fð  I°cð  IØ &²6¸3¸vº;Ð(Gñ Iõ Jð ð ˆÛˆCØ×Ñ˜SŸY™YÒ3¨#¯)©)°RÓ8×?Ñ?Ø—{‘{¨C¯M©MÑ:õ<ð ð 	�‰ØØØ˜'‘]Ø˜8‘nØñ 7>ó?ñ 7>¨sð  # 7™|°c·g±g¸gÓ6FØ!$ Y¡¸3¸x¹=Ø" 7™|°S¸±[Ø! &™kó+ð 7>ñ?ñ

ô 
	ñ Ù˜{°CÀ!Ü" 5›z´C¸³LñBô CãÙðm 'ôp �Ð-Ñ-¨{Ô;Ü�˜+Ñ%Ü&Ÿl™l›n×5Ñ5Ð6IÓJÜ˜h›-°<Ø¨D¯H©H°[Ó,AØŸ8™8 HÓ-°t·x±xÀÓ7GØ!ñ	#ô$ð €FÙð	5Ü! '¨;Ó7ˆFô
 �w“<ØÜ˜Ó%Ü�X“ØØñ€Gô �˜.Ñ(¨'Ô2ÙÙ�'˜6Ð- WÐ-Ô.Ø€NùòY ,ùòL?øô0 ò 	5ÜÐ-°Ñ3×4Ñ4ûð	5ús$   Ã-O*Ê42O/ÎO4 Ï4	PÏ=PÐPc                 óü   — | D ]w  }|j                  d«      |k7  r|j                  d«      |k7  rŒ,|r|j                  d«      |k(  r|c S |sŒI|j                  d«      |k(  sŒ^|r|j                  d«      |k7  rŒu|c S  y )Nr.   rH   rF   rL   r0   )r3   )r¿   rH   rL   r0   rF   rj   s         r   Úfind_recordrÊ   õ   s{   € Ûˆð �7‰7�:Ó $Ò&¨3¯7©7°6«?¸dÒ+BØÙ�C—G‘G˜F“O tÒ+ØŠJÚ�s—w‘w˜yÓ)¨WÓ4Ù˜Ÿ™ Ó)¨UÒ2ØØŠJð ð r   c	                 óŠ  — t        | «      } | dz  }	| dz  }
|	j                  «       r|
j                  «       st        d| z  «      ‚t        j                  |	j                  d¬«      «      }t        j                  |
j                  d¬«      «      }t        |||||«      }|st        d|›d|›d|›d	�«      ‚|j                  d
«      xs t        |«      }t        t        t        «      «      }ddl}|j                  «       }|j                  «       }t        j                   «       }t"        D �ci c]  }|t        j$                  |«      “Œ }}|j&                  }|r|r|›d|›�n|}|j)                  |«      }|st        d|z  «      ‚|d   }t"        D �ci c]  }|||k(  rdnd“Œ }}|j                  d«      xs i j+                  «       D ��ci c]  \  }}|sŒ	||“Œ }}}|j                  d«      }i }|j                  d«      r|d   di|d<   d|d<   t        j,                  |gd|d||d   d||||t/        j0                  d«      fd|d   gdœ|¤Ž}t3        |«      dk7  rt        d||d   t3        |«      fz  «      ‚|d   } |d   | _        || _        t        j8                  |j:                  |d   | «      }!|!j=                  «       |j                  d«      xs d j=                  «       k7  }"|||j                  d«      |d   |d!   || j4                  | j>                  |!|"tA        |«      ddd"œ}#|r|#S | |z  }$|$d#z  }%|$d$z  }&|&j                  «       rtC        jD                  |&«       t        jF                  | g|d   |j:                  ||&|||¬%«      \  }'}(|'s+tC        jD                  |&d¬&«       t        d'|›d(|d   ›�«      ‚|'d   })t        |d!   «      jH                  }*t        |)d!   «      jH                  }+d)|*v r0d)|+v r,|*jK                  d)«      d   ›d)|+jK                  d)d«      d   ›�}+tC        jL                  t        |&t        |)d!   «      jH                  z  «      t        |%|+z  «      «       tC        jD                  |&d¬&«       |%|*z  },|,j                  «       rC|$d*z  }-|-jO                  dd¬+«       tC        jL                  t        |,«      t        |-|*z  «      «       tQ        |)d,|+z  ¬-«      })|$d.z  }.t        j                  |.j                  d¬«      «      }/|/D �0cg c]@  }0|0j                  d«      |d   k(  r%|0j                  d«      |j                  d«      k(  r|)n|0‘ŒB }/}0tS        |.|/«       |D �0cg c]c  }0|0j                  d
«      |k(  rK|0j                  d«      |d   k(  r4|0j                  d«      |j                  d«      k(  ri |)¥||›d(|)d!   ›�d/œ¥n|0‘Œe }}0tS        |
|«       |j                  d0g «      D ]�  }1|1j                  d1«      |k7  rŒ|1j                  d2g «      D ]d  }2|2j                  d«      |d   k(  sŒ|2j                  d«      |j                  d«      k(  sŒ?|2jU                  |)d   |)d   |)d   |)d3   |)d!   d4œ«       Œf Œ’ tS        |	|«       |›d(|)d!   ›�|#d5<   |)d3   |#d3<   |#S c c}w c c}w c c}}w c c}0w c c}0w )6aa  Regenera UNA imagen: mismo job, misma camara, semilla nueva.

    Reconstruye el job desde `plan.json`/`manifest_all.json` (el prompt sale
    de la linea ACTUAL del banco y del outfit ACTUAL del tema) y compara el
    prompt nuevo con el guardado: si cambia, se avisa (`drift`) pero manda el
    nuevo. Lo viejo se mueve a `<char>/_reemplazadas/`.
    r§   r¦   z:%s no parece un lote (falta plan.json o manifest_all.json)r#   r$   z)no encuentro esa imagen en el lote (char=z pose=z stage=Ú)r.   r   Nz, z'%s' no esta en personajes.txtrJ   r   ÚvariantsrŸ   r0   Ústage_quotasTÚallow_legacy_outfitÚfixedr¢   g        rL   )Úmax_variantsÚbank_idsz%s/%s: salieron %d jobsr¡   ÚbaseÚpromptÚ rF   )rH   rJ   r0   rL   Úold_filerŸ   r¡   r¢   rÔ   ÚdriftÚdry_runÚnew_filerƒ   rŠ   Ú
_regen_tmp)rH   )Úignore_errorszno se genero nada para rœ   r<   Ú_reemplazadasr˜   zimg/%s)rF   rš   )r.   rF   rª   rH   r‡   rƒ   )rJ   r¡   r¢   rƒ   rF   rÙ   )+r   r   Ú
ValueErrorr'   r±   r²   rÊ   r3   r   r   ry   r®   Ú	pose_bankÚ	load_bankÚ
load_avoidr³   Úload_camerasÚLEVELSÚload_pool_linesr¶   Úget_characterr�   Úcompose_theme_jobsÚrandomÚRandomr:   r¡   rƒ   Úbuild_run_promptrµ   Ústripr¢   ÚboolÚshutilÚrmtreer´   r   ÚsplitÚmover   r’   r*   Úupdate)3rp   rH   rL   r0   rF   rƒ   rÅ   Ú	neg_extrarØ   Ú	plan_pathÚall_pathÚplan_docr¿   rj   r”   ÚBrÞ   ÚbankÚavoidÚcamerasÚlvÚpoolsÚneg_baseÚ	char_datarJ   r…   ÚkÚvrÍ   rŸ   Úextrar‡   rÂ   rÔ   r×   Úresultr.   rÁ   Útmp_dirrz   r<   Únew_recÚold_nameÚnew_nameÚold_pngÚhistÚchar_manÚ	char_recsr4   rˆ   Úentrys3                                                      r   Ú	regen_oner	    sï  € ô �7‹m€GØ˜+Ñ%€IØÐ,Ñ,€HØ×ÑÔ X§_¡_Ô%6Üð .Ø07ñ8ó 9ð 	9ä�z‰z˜)×-Ñ-°wÐ-Ó?Ó@€HÜ—*‘*˜X×/Ñ/¸Ð/ÓAÓB€Kä
�k 4¨°%¸Ó
>€CÙÝÚ9=ºwÊðOó Pð 	Pà�W‰W�ZÓ Ò1¤G¨D£M€Fä”cœ(“mÓ$€AÛØ×ÑÓ €DØ× Ñ Ó"€EÜ�o‰oÓ€GÝ28Ó9±&¨BˆR”×#Ñ# BÓ'Ñ'°&€EÐ9Ø× Ñ €HÙÙ7?šx©Ñ3ÀYˆà—‘ Ó%€IÙÜÐ9¸DÑ@ÓAÐAà�‰L€EÝ6<Ó=±f°ˆb˜˜eš‘1¨Ñ*°f€FÐ=Ø"%§'¡'¨*Ó"5Ò";¸×!BÑ!BÔ!DÔJÑ!D™˜˜AÊ��1‘Ð!D€HÑJØ�G‰G�GÓ€EØ€EØ
‡w�wˆwÔØ!$ W¡¨qÐ 1ˆˆnÑØ'+ˆÐ#Ñ$ä× Ñ Ø	ˆ��F˜G X¨s°7©|¸SØˆe�U˜G¤V§]¡]°1Ó%5ð<ð  # i¡.Ð!1ñ<ð 6;ñ<€Dô ˆ4ƒy�A‚~ÜÐ2Ø  # i¡.´#°d³)Ð<ñ=ó >ð 	>à
ˆq‰'€CØ�X‘€C„JØ€C„Hä× Ñ  §¡°)¸FÑ2CÀSÓI€FØ�L‰L‹N˜sŸw™w xÓ0Ò6°B×=Ñ=Ó?Ñ?€Eð ˜u¨s¯w©w°wÓ/?Ø�y‘>¨s°6©{Ø #§*¡*°s·y±yØ 5´T¸'³]Ø $ñ€Fñ Øˆà˜Ñ€HØ˜Ñ€GØ˜Ñ%€GØ‡~�~ÔÜ�‰�gÔä—‘˜c˜U I¨fÑ$5°q·±Ø% w°°fÀ4ôI�J€GˆQáÜ�‰�g¨TÕ2ÝÚ  # i¢.ð2ó 3ð 	3ð �a‰j€GÜ�C˜‘KÓ ×%Ñ%€HÜ�G˜F‘OÓ$×)Ñ)€HØ
ˆh�˜3 (™?Ø&Ÿn™n¨SÓ1°!Ó4Ø&Ÿn™n¨S°!Ó4°QÒ7ð9ˆä
‡K�K”�Gœd 7¨6¡?Ó3×8Ñ8Ñ8Ó9Ü�G˜hÑ&Ó'ô)ä
‡M�M�'¨Õ.à˜Ñ €GØ‡~�~ÔØ˜/Ñ)ˆØ�
‰
˜4¨$ˆ
Ô/Ü�‰”C˜“L¤# d¨X¡oÓ"6Ô7ä�7 ¨HÑ!4Ô5€GØÐ.Ñ.€HÜ—
‘
˜8×-Ñ-°wÐ-Ó?Ó@€Iñ "+ó,á!*˜Að ŸU™U 9Ó-°°Y±Ò?Ø!"§¡ w£°3·7±7¸7Ó3CÒ!Cñ àñà!*ð ð ,ô �˜)Ô$ñ (ó)ñ
 (�qð Ÿ™˜jÓ)¨VÒ3ØŸE™E )Ó,°°I±Ò>ØŸE™E '›N¨c¯g©g°gÓ.>Ò>ð	B�wð B¨FÚ(.°¸²Ð@óBð FGñ	Gð
 (ð ð )ô �˜+Ô&à—‘˜V RÖ(ˆØ�8‰8�FÓ˜tÒ#ØØ—X‘X˜f bÖ)ˆEØ—	‘	˜)Ó$¨¨I©Ó6ØŸ	™	 'Ó*¨c¯g©g°gÓ.>Ó>Ø—‘ w¨wÑ'7Ø(/°Ñ(9Ø'.¨wÑ'7Ø&-¨f¡oØ&-¨f¡oñ	7õ 8ñ *ð )ô �	˜8Ô$â$*¨G°FªOÐ<€Fˆ:ÑØ˜V‘_€Fˆ6�NØ€MùòM :ùò >ùÛJùò~,ùò
)s&   Ä*Z+ÆZ0Ç	
Z5ÇZ5ÔAZ;Õ-A([ )é   é   i@  )NNF)NNN)NNNNrG   NF)&Ú__doc__r'   ræ   rë   Úsysr   Úpathlibr   Ú__file__ÚresolveÚparentr®   Ú_extrary   r   ÚinsertÚpack_builderr³   Úbatch_poses_charsr¯   Úprompt_builderr   Úplannerr   r    r	   ÚUI_RUNSrâ   rV   r2   r   r*   Úlistr   r’   rÈ   rÊ   r	  )ri   r0   s   00r   Ú<module>r     s1  ðñó$ Û Û Û 
Ý Ý á�‹>×!Ñ!Ó#×*Ñ*×1Ñ1×8Ñ8€Ø˜(Ñ" H¨zÑ$9Ó:€FÙ
ˆ6ƒ{˜#Ÿ(™(Ò"Ø�‰�‰˜™3˜v›;Õ'ð ;ó Û Ý (Ý Ý à
�XÑ
 	Ñ
)€Ø	,€á(1°&Ô(9Ô:Ñ(9™H˜A˜uˆu�a‰xÐ(9Ò:€ð�Dð ˜Tó ð &�dð & Tó &ñ
HÀdó HñVeÀTó eóTð HLØ05ñCØ:>ôCùóy ;s   ÃD