Ë
    Ëá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mZ ddlmZ ej                  j                  dd¬«        ee«      j                  «       j                  j                  Zej                  j!                  d eedz  «      «       ej                  j!                  d eed	z  «      «       ddlZddlZdd
lmZ edz  dz  dz  ZdZddddœZdhZddefd„Zddefd„Zddefd„Z ddefd„Z!defd„Z"dd„Z#dedz  fd„Z$ddd„Z%d„ Z&e'dk(  r e&«        yy) aC  
batch_poses_chars: batch de personajes distintos x poses distintas x entornos
distintos, con la estructura del piloto "Diferent poses".

Estructura (identica al piloto de referencia):
  - 3 imagenes por personaje: 1 sugerente + 1 spicy + 1 explicito
  - camaras en el mismo orden: from above / from front / from side
  - un tema (entorno) distinto por personaje
  - salida consolidada por personaje: <run>/<clave>/img/*.png + manifest

Regla dura: NINGUNA pose se repite en todo el lote. Las poses se reparten a mano
sin reemplazo desde el banco y se fijan con `bank_ids`; no se deja al azar de
`compose_theme_jobs` porque su contador de reuso es por personaje, no global.

La semilla es aleatoria por imagen (`-1`): no se fija ninguna.

    python Engine/batch_poses_chars.py --chars 12 --dry-run
    python Engine/batch_poses_chars.py --chars 12
    python Engine/batch_poses_chars.py --chars 12 --exclude-used --pick-seed 20261028
    python Engine/batch_poses_chars.py --keys Makima_v2,Furina --themes oficina,playa

Salida: Output/pilots/Diferent poses/BATCH_<stamp>/<clave>/img/*.png
é    N)Údatetime)ÚPathúutf-8Úbackslashreplace)ÚencodingÚerrorsÚEngineÚArchivos)ÚPromptBuilderÚOutputÚpilotszDiferent poses)Ú	sugerenteÚspicyÚ	explicitoé   Úonsen_xilonenÚreturnc           
      óX  — |xs g D �ch c]#  }|j                  «       sŒ|j                  «       ’Œ% }}i }t        D ]b  }| D �cg c]Q  }|j                  d«      |k(  r;|j                  d«      |vr(t        j                  |j                  dd«      |«      s|‘ŒS c}||<   Œd |S c c}w c c}w )zH{nivel: [entradas]} sin las blacklisteadas (avoid.jsonl) ni las vetadas.ÚnivelÚidÚ	pose_lineÚ )ÚstripÚLEVELSÚgetÚ	pose_bankÚ
is_avoided)ÚbankÚavoidÚskip_idsÚxÚskipÚoutÚlvÚes           ú9C:\Users\Usuario\Downloads\SD\Engine\batch_poses_chars.pyÚusable_posesr'   1   s§   € à (¢¨B Ó=¡˜!°1·7±7µ9ˆA�G‰G�I €DÐ=Ø
€CßˆÙ"ó P™d˜Ø—e‘e˜G“n¨Ò*Ø—u‘u˜T“{¨$Ñ.Ü$×/Ñ/°·±°kÀ2Ó0FÈÔNò ˜dñ PˆˆBŠð ð
 €Jùò >ùòPs   ‰B"ŸB"ÁAB'c                 óø  — | rt        | «      nt        dz  } t        «       }| j                  d«      D ]y  }	 t	        j
                  |j                  d¬«      «      }|j                  d«      xs g D ]9  }t        |t        «      sŒ|j                  d«      sŒ&|j                  |d   «       Œ; Œ{ | j                  d«      D ]y  }	 t	        j
                  |j                  d¬«      «      }t        |t        «      r|g}|D ]9  }t        |t        «      sŒ|j                  d«      sŒ&|j                  |d   «       Œ; Œ{ |S # t        t        j                  f$ r Y �Œ'w xY w# t        t        j                  f$ r Y Œ¹w xY w)zëClaves ya usadas en cualquier lote/pack de `Output/`.

    Mira dos cosas, porque no todos los runs dejan el mismo artefacto:
      - `plan.json` (batches: `plan[].char`)
      - `pack_manifest.json` (packs: `char` en cada record)
    r   ú	plan.jsonr   ©r   ÚplanÚcharúpack_manifest.json)r   ÚBASE_DIRÚsetÚrglobÚjsonÚloadsÚ	read_textÚOSErrorÚJSONDecodeErrorr   Ú
isinstanceÚdictÚadd)ÚrootÚusedÚpÚdocÚitemÚrecsÚrecs          r&   Úused_charactersr@   =   sH  € ñ Œ4�Œ:¤8¨hÑ#6€DÜ‹5€DØ�Z‰Z˜Ö$ˆð	Ü—*‘*˜QŸ[™[°'˜[Ó:Ó;ˆCð —W‘W˜V“_Ò*¨Ò*ˆDÜ˜$¤Õ%¨$¯(©(°6Õ*:Ø—‘˜˜f™Õ&ñ +ð %ð �Z‰ZÐ,Ö-ˆð	Ü—:‘:˜aŸk™k°7˜kÓ;Ó<ˆDô �dœDÔ!Ø�6ˆDÛˆCÜ˜#œtÕ$¨¯©°­Ø—‘˜˜V™Õ%ñ ð .ð €Køô œ×-Ñ-Ð.ò 	Úð	ûô œ×-Ñ-Ð.ò 	Ùð	ús#   ¶%D=Ã%EÄ=EÅEÅE9Å8E9c           	      óª  — |rCg }|D ]:  }| j                  |«      }|st        d|› d�«      ‚|j                  ||d   f«       Œ< |S ddlm}  |«       }	|xs
 t        «       }g }
d}d}| j                  «       D ]~  }| j                  |«      }|sŒ||v r|dz  }Œ!t        j                  d|d   xs d«      }|r#|	r!|j                  d«      j                  «       |	vr|dz  }Œi|
j                  ||d   f«       Œ€ t        d	t        |
«      › d
|› d|› d�«       |j                  |
«       |t        |
«      kD  rt        d|› dt        |
«      › d�«       |
d| S )zHPersonajes con LoRA en disco (o los pedidos a mano). -> [(clave, linea)]z[!] personaje 'z' no esta en personajes.txtÚbaser   )Ú
lora_stemsr   z<lora:([^:>]+):r   z"[-] personajes con LoRA en disco: ú (z- descartados por LoRA ausente o sin <lora:>, z ya usados)ú[!] pedias z personajes y solo hay z	 con LoRAN)Úget_characterÚ
SystemExitÚappendÚcharacter_keysrC   r/   Úget_character_namesÚreÚsearchÚgroupÚlowerÚprintÚlenÚshuffle)ÚBÚcountÚrngÚkeysÚexcluder#   ÚkÚcrC   Ú	availableÚcandsÚdroppedÚskippedÚms                 r&   Úpick_charactersr^   [   sz  € áØˆÛˆAØ—‘ Ó"ˆAÙÜ  ?°1°#Ð5PÐ!QÓRÐRØ�J‰J˜˜1˜V™9�~Õ&ð	 ð
 ˆ
å)Ù“€IØÒœ›€GØ€EØ€GØ€GØ×"Ñ"Ö$ˆØ�O‰O˜AÓˆÙØØ�‰<Ø�q‰LˆGØÜ�I‰IÐ(¨!¨F©)ª/°rÓ:ˆÙ™	 Q§W¡W¨Q£Z×%5Ñ%5Ó%7¸yÑ%HØ�q‰LˆGØØ�‰�a˜˜6™�^Õ$ð %ô 
Ð.¬s°5«z¨lð ;ØˆYÐCØˆI�[ð"ô #ð ‡K�K�ÔØŒs�5‹zÒÜ�˜E˜7Ð"9¼#¸e»*¸ÀYÐOÔPØ��%ˆ=Ðó    c                 ó¢  — t        j                  «       }|r6|D ]%  }||vsŒt        d|› dt         j                  › �«      ‚ t	        |«      }n)|D �cg c]  }|t
        vsŒ|‘Œ }}|j                  |«       | t        |«      kD  rt        d| › dt        |«      › d�«       t        | «      D �cg c]  }||t        |«      z     ‘Œ c}S c c}w c c}w )zAUn tema distinto por personaje, sin temas ligados a un personaje.z
[!] tema 'z' no existe en rE   z temas y solo hay z disponibles)
ÚpbÚload_themesrG   ÚTHEMES_FILEÚlistÚTHEMES_BLOCKEDrQ   rP   rO   Úrange)rS   rT   ÚwantedÚthemesÚtÚpoolÚis          r&   Úpick_themesrl   �   sÉ   € ä�^‰^Ó€FÙÛˆAØ˜ŠÜ  :¨a¨S°ÄÇÁÐ?OÐ!PÓQÐQð ô �F‹|‰á!Ó=™6�a Q¬nÒ%<’˜6ˆÐ=Ø�‰�DÔØŒs�4‹yÒÜ�˜E˜7Ð"4´S¸³Y°K¸|ÐLÔMä).¨u¬Ó6© AˆD�”S˜“Y‘Ó¨Ñ6Ð6ùò >ùò
 7s   ÁCÁCÂ,Cc                 ó‚  ‡— t        ˆfd„t        D «       «      }t        | «      |kD  rHt        d|› dt        ‰d   «      › dt        ‰d   «      › dt        ‰d   «      › d	|› �
«       | d
| } |d
| }g }t	        | «      D ]:  \  }\  }}|j                  ||||   t        D �	ci c]  }	|	‰|	   |   “Œ c}	dœ«       Œ< |S c c}	w )zâReparte poses sin reemplazo: 1 por nivel y personaje.

    Devuelve [{char, theme, poses: {nivel: entrada}}]. El cuello de botella es
    `sugerente` (16 usables), asi que el tamano maximo del lote lo marca ese
    nivel.
    c              3   ó:   •K  — | ]  }t        ‰|   «      –— Œ y ­w©N)rP   )Ú.0r$   Úposes_by_levels     €r&   Ú	<genexpr>zdeal.<locals>.<genexpr>™   s   øè ø€ Ð9±&¨B”�N 2Ñ&×'±&ùs   ƒz[!] el banco solo permite z( personajes sin repetir pose (sugerente=r   z, spicy=r   z, explicito=r   z); recorto a N)r,   Ú	char_lineÚthemeÚposes)Úminr   rP   rO   Ú	enumeraterH   )
Úcharsrh   rq   rT   Úlimitr+   rk   ÚkeyÚliner$   s
     `       r&   Údealr|   ’   sü   ø€ ô Ó9µ&Ó9Ó9€EÜ
ˆ5ƒz�EÒÜÐ*¨5¨'ð 2Ü ¨{Ñ ;Ó<Ð=ð >Ü˜>¨'Ñ2Ó3Ð4ð 5Ü˜~¨kÑ:Ó;Ð<¸MÈ%ÈðRô 	Sð �f�u�ˆØ˜˜�ˆà€DÜ# EÖ*‰ˆ‰;ˆC�Ø�‰ØØØ˜A‘YÝ:@ÓA¹&°B�b˜.¨Ñ,¨QÑ/Ñ/¸&ÑAñ	
õ 	ð +ð €Kùò Bs   ÂB<c                 ó(  — | D ��cg c]  }t         D ]  }|d   |   d   ‘Œ Œ }}}t        |D �ch c]  }|j                  |«      dkD  sŒ|’Œ c}«      }|rt        d|› �«      ‚t	        dt        |«      › dt        |«      › d�«       y c c}}w c c}w )Nru   r   r   z [!] poses repetidas en el plan: z[-] poses unicas: Ú/z (sin repeticion))r   ÚsortedrS   rG   rO   rP   )r+   r=   r$   Úidsr!   Údupess         r&   Úcheck_no_repeatr‚   ­   s•   € Ù/3Ô
E©t t¿f¸ˆ4�‰=˜Ñ˜TÓ"¸fÐ"¨t€CÑ
EÜ™sÓ7™s˜! c§i¡i°£l°QÓ&6’A˜sÑ7Ó8€EÙÜÐ;¸E¸7ÐCÓDÐDÜ	Ðœs 3›x˜j¨¬#¨c«(¨Ð3DÐ
EÕFùó	 FùÚ7s   †B	¯BÁ	Bc                 óÐ  — t        | «      dz  }|j                  «       sy	 t        j                  |j	                  d¬«      «      }t        |t        «      rt        |«      t        |«      k7  ry|D �cg c]  }|j                  d«      ‘Œ c}t        |«      k7  ry|D ]#  }t        | «      |d   z  j                  «       rŒ# y |S # t
        t        j                  f$ r Y yw xY wc c}w )zèRecords de un personaje ya generado, si su manifest cuadra con el plan.

    Sirve a `--resume`: lo creado se queda creado, no se regenera. Devuelve None
    si falta el manifest, si las poses no coinciden o si falta algun PNG.
    r-   Nr   r*   Úpose_idÚfile)r   Úexistsr1   r2   r3   r4   r5   r6   rd   rP   r   )Úchar_dirr€   ÚmanÚrecordsÚrr?   s         r&   Ú	load_doner‹   µ   sÒ   € ô ˆx‹.Ð/Ñ
/€CØ�:‰:Œ<ØðÜ—*‘*˜SŸ]™]°G˜]Ó<Ó=ˆô �gœtÔ$¬¨G«¼¸C»Ò(@ØÙ")Ó*¡'˜Qˆ�‰ˆiÕ 'Ñ*¬d°3«iÒ7ØÛˆÜ�X“  V¡Ñ,×4Ñ4Õ6Ùð ð €Nøô ”T×)Ñ)Ð*ò Ùðüò +s   ¡%C Á2C#ÃC ÃC c                 óú  — 	 ddl m} g }| D ]E  }	 |j                  |«      }|j	                  d«       |j                  |j                  d«      «       ŒG |sy|d   j                  \  }}t        |«      |z   dz
  |z  }	|j                  d||z  |	|z  fd«      }
t        |«      D ]%  \  }}|
j                  |||z  |z  ||z  |z  f«       Œ' |
j                  |d¬	«       y# t        $ r Y yw xY w# t        $ r Y Œíw xY w)
z(Hoja de contactos del lote (si hay PIL).r   )ÚImageN)i¤  il  ÚRGBr   ÚwhiteéX   )Úquality)ÚPILr�   ÚImportErrorÚopenÚ	thumbnailrH   ÚconvertÚ	ExceptionÚsizerP   Únewrw   ÚpasteÚsave)ÚpathsÚout_pathÚcolsr�   Úthumbsr;   ÚimÚwÚhÚrowsÚsheetrk   s               r&   Úwrite_contactr¥   Ì   s  € ðÝð €FÛˆð	Ø—‘˜A“ˆBØ�L‰L˜Ô$Ø�M‰M˜"Ÿ*™* UÓ+Õ,ð	 ñ ØØ�!‰9�>‰>�D€A€qÜ�‹K˜$Ñ Ñ" tÑ+€DØ�I‰I�e˜d Q™h¨¨q©Ð1°7Ó;€EÜ˜6Ö"‰ˆˆ2Ø�‰�B˜!˜d™( a™¨!¨t©)°q©Ð9Õ:ð #à	‡J�Jˆx €JÕ$øô# ò Ùðûô ò 	Ùð	ús#   ‚C �AC.Ã	C+Ã*C+Ã.	C:Ã9C:c                  ó`  ‡&— t        j                  d¬«      } | j                  dt        dd¬«       | j                  dd d¬	«       | j                  d
dd¬«       | j                  dd d¬	«       | j                  dd d¬	«       | j                  dd d¬	«       | j                  dt        d d¬«       | j                  dt        d d¬«       | j                  dd d¬	«       | j                  dt        d d¬«       | j                  ddd¬«       | j                  ddd¬«       | j	                  «       }t        j                  |j                  «      }t        j                  «       }t        j                  «       }|j                  r7|j                  j                  d «      D �cg c]  }|j                  «       ‘Œ c}nd }t        |||«      }t        D ]4  }t!        d!|› d"t#        ||   «      › d#�«       |j%                  ||   «       Œ6 t'        t)        t*        «      «      }	|j,                  rH|j,                  j                  d «      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% c}nd }
|j.                  rt1        |j2                  «      nd }|
r)|r't5        t7        |
«      |z  «      }|rt9        d$|› �«      ‚t;        |	|j<                  ||
|«      }|st9        d%«      ‚t?        t#        |«      ||j@                  rH|j@                  j                  d «      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% c}nd «      }tC        ||||«      }tE        |«       tG        jH                  «       jK                  d&«      }|jL                  rtO        |jL                  «      }nS|jP                  r;t5        tR        jU                  d'«      d(„ ¬)«      }|st9        d*tR        › �«      ‚|d+   }ntR        d,|› �z  }t!        d-t#        |«      › d.t#        |«      d/z  › d0�«       t!        d1|› �«       |D ];  Š&t!        d2‰&d3   d4›d5‰&d6   d7›d8�d9jW                  ˆ&fd:„t        D «       «      z   «       Œ= |jX                  �rdt[        j\                  «       }t        D �ci c]  }|t[        j^                  |«      “Œ }}|D �]"  Š&t        D �cg c]  }‰&d;   |   d<   ‘Œ }}t[        j`                  ‰&d6   gd/tc        td        «      d=i d>d?|||||d@|¬A«      }t!        dB‰&d3   › dC‰&d6   › dD�«       tg        |d@«      D ]¨  \  }}t[        jh                  |	jj                  ‰&dE   |«      }t!        dF|› dG|jl                  › dH|jn                  › dI|jp                  › dJ|jr                  › dK|jt                  jw                  dL«      › �«       t!        d2|jy                  dMd9«      dNd  z   «       Œª �Œ% y t[        jz                  «       st9        dOtZ        j|                  › dP�«      ‚t[        j\                  «       }t        D �ci c]  }|t[        j^                  |«      “Œ }}|j~                  �|j~                  ndQt#        |«      z  }g g g }}}tg        |d@«      D �]g  \  }Š&‰&d3   }t        D �cg c]  }‰&d;   |   d<   ‘Œ }}t!        dR|› dSt#        |«      › dG|› dT‰&d6   › d9�	dUjW                  |«      z   «       t[        j`                  ‰&d6   gd/tc        td        «      d=i d>d?|||||d@|¬A«      }|D �cg c]  }|jn                  ‘Œ } }| |k7  rt!        dV|› dW| › �«       ||z  }!|!dXz  }"|jP                  rt�        |!|«      nd }#|#�t!        dYt#        |#«      › dZ|!› �«       n¬t[        j‚                  |‰&dE   |	jj                  |	j„                  |"|j†                  ||¬[«      \  }#}$|!j‰                  d\d\¬]«       |!d^z  j‹                  t�        jŽ                  |#d_d@¬`«      da¬b«       |!dcz  j‹                  t�        jŽ                  |$d_d@¬`«      da¬b«       |#D ]M  }%|j‘                  dd|i|%¥de|› dS|%de   › �i¥«       |j‘                  |"tO        |%de   «      j’                  z  «       ŒO |j‘                  |‰&d6   t        D �ci c]  }|‰&d;   |   d<   ‰&d;   |   df   dgœ“Œ c}|#D �%cg c]  }%|%dh   |%di   |%dj   |%dk   |%dl   |%de   dmœ‘Œ c}%dnœ«       �Œj |j‰                  d\d\¬]«       |doz  j‹                  t�        jŽ                  |d_d@¬`«      da¬b«       |dpz  j‹                  t�        jŽ                  tG        jH                  «       jK                  dq«      t#        |«      |j†                  |j                  |drœd_d@¬`«      da¬b«       t•        ||dsz  «       t!        dtt#        |«      › dSt#        |«      d/z  › du|› �«       t!        dv|doz  › �«       t!        dw|dpz  › �«       y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}%w )xNzOBatch de personajes x poses x entornos (estructura del piloto 'Diferent poses'))Údescriptionz--charsé   z[cuantos personajes (1 por tema y 3 imagenes); maximo real = poses usables de sugerente (16))ÚtypeÚdefaultÚhelpz--keyszBpersonajes concretos separados por coma (claves de personajes.txt))rª   r«   z--exclude-usedÚ
store_truez@no repite personajes ya usados en cualquier lote/pack de Output/)Úactionr«   z--used-rootz8carpeta donde buscar los lotes previos (default Output/)z--themesz@temas concretos separados por coma (default: al azar, distintos)z--exclude-poseszCids de pose a vetar en este lote, separados por coma (p.ej. pb0009)z--seedzrsemilla FIJA para todas las imagenes (default: aleatoria por imagen, como -1); fijala solo para reproducir un lotez--pick-seedzjsemilla del reparto (personajes/temas/poses), para que el plan sea reproducible; no afecta a la generacionz--outzcarpeta de salidaz--budgetz7maximo de intentos de generacion (default 3 por imagen)z	--dry-runz0imprime el plan y los prompts sin llamar a Forgez--resumezkno regenera los personajes que ya tienen manifest completo en la carpeta de salida (lo creado, creado esta)Ú,z
[-] poses z: z usablesz([!] --exclude-used y ya estaban usados: z![!] no hay personajes disponiblesz%Y%m%d_%H%M%SzBATCH_*c                 ó   — | j                   S ro   )Úname)r;   s    r&   Ú<lambda>zmain.<locals>.<lambda>(  s   € ¸a¿fºfr_   )rz   z+[!] --resume sin --out y no hay BATCH_* en éÿÿÿÿÚBATCH_z[-] z personajes x 3 niveles = é   z	 imagenesz[-] salida: z    r,   z<28z tema rt   z<12Ú z | c              3   ó>   •K  — | ]  }|› d ‰d   |   d   › �–— Œ y­w)Ú:ru   r   N© )rp   r$   r=   s     €r&   rr   zmain.<locals>.<genexpr>3  s3   øè ø€ ð -Ù%+˜rð !˜T  4¨¡=°Ñ#4°TÑ#:Ð";Ô<Ù%+ùs   ƒru   r   z	per-imageÚautog        r   )Úmax_variantsÚbank_idsz
=== rD   z) ===rs   Ú[z] z pose:z cam:z dress:z outfit:ÚoutfitÚ
iÀþÿÿz[!] Forge NO responde en z. Arranca webui-user.bat --apié	   z
[r~   z | tema z, z[!] aviso: el plan pedia z y salieron Úimgz    [skip] ya generado (z imagenes) -> )r,   T)ÚparentsÚexist_okr-   F)Úensure_asciiÚindentr   r*   zmetrics.jsonr‡   r…   r   )r   r{   r   r„   ÚcameraÚdressÚseed)r   r„   rÅ   rÆ   rÇ   r…   )r,   rt   ru   Újobszmanifest_all.jsonr)   z%Y-%m-%d %H:%M:%S)Ú	generatedrx   rÇ   Ú	pick_seedr+   zcontact_all.jpgz
[OK] z imagenes -> z     manifest: z     plan:     )KÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚrandomÚRandomrÊ   r   Ú	load_bankÚ
load_avoidÚexclude_posesÚsplitr   r'   r   rO   rP   rQ   r   Ústrr.   rU   Úexclude_usedr@   Ú	used_rootr   r/   rG   r^   rx   rl   rh   r|   r‚   r   ÚnowÚstrftimer#   r   ÚresumeÚOUT_ROOTÚglobÚjoinÚdry_runra   Úload_camerasÚload_pool_linesÚcompose_theme_jobsr7   ÚQUOTASrw   Úbuild_run_promptÚmaster_promptr   r„   rÅ   rÆ   Úvariant_keysr   ÚreplaceÚforge_availableÚFORGEÚbudgetr‹   ÚgenerateÚnegative_promptrÇ   ÚmkdirÚ
write_textr1   ÚdumpsrH   r°   r¥   )'r;   ÚargsrT   r   r   r!   r"   rq   r$   rR   rU   r:   Úclashrx   rh   r+   ÚstampÚrun_dirÚdoneÚcamerasÚpoolsr€   rÈ   ÚjÚjobÚpromptrê   Úall_recordsÚplan_outÚimagesÚnrz   Úgotr‡   Úimg_dirr‰   Úmetricsr?   r=   s'                                         @r&   Úmainr  ä   sf
  ø€ Ü×Ñð/ô	0€Að ‡N�N�9¤3°ðHð ô Ið ‡N�N�8 TØ\ð ô ^à‡N�NÐ#¨LØZð ô \à‡N�N�=¨$ØRð ô Tà‡N�N�: tØZð ô \à‡N�NÐ$¨dð)ð ô *ð ‡N�N�8¤#¨tðTð ô Uð ‡N�N�=¤s°DðKð ô Lð ‡N�N�7 DÐ/B€NÔCØ‡N�N�:¤C°ØQð ô Sà‡N�N�; |ØJð ô Là‡N�N�: lðTð ô Uð �<‰<‹>€Dä
�-‰-˜Ÿ™Ó
'€Cä×ÑÓ €DÜ× Ñ Ó"€Eà×!Ò!ð !%× 2Ñ 2× 8Ñ 8¸Ô =Ó>Ñ =˜1ˆQ�W‰W�YÐ =Ò>Ø'+ð 	ä! $¨¨tÓ4€NßˆÜ�
˜2˜$˜b¤ ^°BÑ%7Ó!8Ð 9¸ÐBÔCØ�‰�N 2Ñ&Õ'ð ô 	”cœ(“mÓ$€Aà�yŠyð !%§	¡	§¡°Ô 4ÓBÑ 4˜1¸¿¹½	ˆQ�W‰W�YÐ 4ÒBØ"ð 	à.2×.?Ò.?Œ?˜4Ÿ>™>Ô*ÀT€DÙ‘Ü”s˜4“y 4Ñ'Ó(ˆÙÜÐGÈÀwÐOÓPÐPÜ˜A˜tŸz™z¨3°°dÓ;€EÙÜÐ<Ó=Ð=Üœ˜U› Sà ŸKšKð .2¯[©[×->Ñ->¸sÔ-CÓQÑ-C¨ÀqÇwÁwÅy˜!Ÿ'™'�)Ð-CÒQØ-1ó3€Fô ��v˜~¨sÓ3€DÜ�DÔä�L‰L‹N×#Ñ# OÓ4€EØ‡x‚xÜ�t—x‘x“.‰Ø	�Šä”h—m‘m IÓ.Ñ4DÔEˆÙÜÐJÌ8È*ÐUÓVÐVØ�r‘(‰ä˜v e WÐ-Ñ-ˆä	ˆD”�T“�Ð5´c¸$³iÀ!±m°_ÀIÐ
NÔOÜ	ˆL˜˜	Ð
"Ô#ÛˆÜ��T˜&‘\ #Ð& f¨T°'©]¸3Ð,?¸qÐAØ—
‘
ó -Ý%+ó-ó -ñ-õ 	.ð ð
 ‡|ƒ|Ü—/‘/Ó#ˆÝ6<Ó=±f°�”R×'Ñ'¨Ó+Ñ+°fˆÐ=ÜˆDÝ5;Ó<±V¨r�4˜‘= Ñ$ TÓ*°VˆCÐ<Ü×(Ñ(Ø�g‘� ¤D¬£L°+¸rØ˜˜T 5¨%°¸#Ø¨ô.ˆDô �F˜4 ™<˜.¨¨4°©=¨/¸Ð?Ô@Ü# D¨!Ö,‘��3Ü×,Ñ,¨Q¯_©_¸dÀ;Ñ>OÐQTÓU�Ü˜˜!˜˜B˜sŸy™y˜k¨°·±¨}¸EÀ#Ç*Á*Àð NØ"Ÿy™y˜k¨°#×2BÑ2B×2FÑ2FÀxÓ2PÐ1QðSô Tä�f˜vŸ~™~¨d°EÓ:¸4¸5ÐAÑAÕBò	 -ð ð 	ä×ÑÔÜÐ4´R·X±X°Jð ?8ð 8ó 9ð 	9ô �o‰oÓ€GÝ28Ó9±&¨BˆR”×#Ñ# BÓ'Ñ'°&€EÐ9Ø ŸK™KÐ3ˆT�[Š[¸ÄÀTÃÑ9J€Fà$&¨¨B˜6�€KÜ˜T 1×%‰ˆˆ4Ø�6‰lˆÝ17Ó8±¨2ˆt�G‰}˜RÑ  Ó&°ˆÐ8Ü��A�3�aœ˜D›	�{ " S E¨°$°w±-°ÀÐDØ—	‘	˜#“ñô 	 ä×$Ñ$Ø�'‰]ˆO˜Q¤¤V£¨k¸2Ø�C˜˜u e¨W°cØ Sô*ˆñ
 #'Ó'¡$˜Qˆq�y‹y $ˆÐ'Ø�#Š:ÜÐ-¨c¨U°,¸s¸eÐDÔEà˜S‘=ˆØ˜UÑ"ˆà.2¯kªk”)˜H cÔ*¸tˆØÐÜÐ,¬S°«\¨N¸.ÈÈ
ÐSÕTä!Ÿ{™{¨4°°kÑ1BØ+,¯?©?¸A×<MÑ<MØ+2°D·I±I¸vÈCô QÑˆG�Wð �N‰N 4°$ˆNÔ7ØÐ,Ñ,×8Ñ8Ü—
‘
˜7°¸qÔAØ ð 9ô "ð ˜Ñ&×2Ñ2Ü—
‘
˜7°¸qÔAØ ð 3ô "ó ˆCØ×Ñ 
¨Cð  @°3ð  @Ø &¨3¨%¨q°°V±°Ð(>ñ @ô Aà�M‰M˜'¤D¨¨V©Ó$5×$:Ñ$:Ñ:Õ;ð ð
 	�‰ØØ˜'‘]õ !'ó(á &˜"ð   g¡¨rÑ!2°4Ñ!8Ø#'¨¡=°Ñ#4°[Ñ#AñCñ Cà &ñ(ñ !(ó)ñ !(˜ð  # 7™|¸¸I¹Ø # H¡¸¸G¹Ø! &™k°3°v±;ó@ð !(ñ)ñ

ö 
	ðK &ðb ‡M�M˜$¨€MÔ.ØÐ"Ñ"×.Ñ.Ü�
‰
�;¨U¸1Ô=Èð /ô Qàˆ{Ñ×&Ñ&Ü�
‰
¤§¡£×!8Ñ!8Ð9LÓ!MÜ  ›Y°·	±	Ø!%§¡¸ñCð !&¨aô	1ð <Cð	 'ô Dô
 �&˜'Ð$5Ñ5Ô6ä	ˆG”C˜Ó$Ð% Q¤s¨4£y°1¡} o°]À7À)Ð
LÔMÜ	ˆO˜GÐ&9Ñ9Ð:Ð
;Ô<Ü	ˆO˜G kÑ1Ð2Ð
3Õ4ùòG ?ùò Cùò Rùò6 >ùâ<ùò$ :ùò 9ùò (ùò<(ùò)sH   Æg>ÉhÉhÌhÌ3hÒhÓ
hØ2hÚhÜh!â!h&ã"h+Ú__main__ro   )NN)r   N)r´   )(Ú__doc__rË   r1   rÐ   rK   Úsysr   Úpathlibr   ÚstdoutÚreconfigureÚ__file__ÚresolveÚparentr.   ÚpathÚinsertrÖ   r   Úpack_builderra   Úprompt_builderr   rÜ   r   rã   re   r7   r'   r/   r@   rd   r^   rl   r|   r‚   r‹   r¥   r  Ú__name__r¸   r_   r&   Ú<module>r     s9  ðñó. Û Û Û 	Û 
Ý Ý à ‡
�
× Ñ  Ð0BÐ Ô Cá�‹>×!Ñ!Ó#×*Ñ*×1Ñ1€Ø ‡�‡��‘3�x (Ñ*Ó+Ô ,Ø ‡�‡��‘3�x *Ñ,Ó-Ô .ã Û Ý (à�hÑ Ñ)Ð,<Ñ<€Ø	,€Ø 1°1Ñ	5€à!Ð"€ñ	°ó 	ñ #ó ñ<#¸tó #ñL7¨Dó 7ð"°ó ó6Gð  t¡ó ô.%ò0i5ðX ˆzÒÙ…Fð r_   