§
    �*Êjþn  ã                   ón  — d Z ddlZddlmc m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 ddlmZmZmZmZ ddlZddlZddlZ ee¦  «                             ¦   «         j        j        Zedz  Z ee¦  «        ej        vr$ej                             d ee¦  «        ¦  «         ddl m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0 dd	l1m2Z2m3Z3m4Z4  ej5        d
¬¦  «        d„ ¦   «         Z6 G d„ d¦  «        Z7 G d„ d¦  «        Z8 G d„ d¦  «        Z9 G d„ d¦  «        Z: G d„ d¦  «        Z;dS )uk  
=============================================================================
THáº¬P NGÅ¨ NIÃŠN (THE FIFTEEN SPRINGS) - FLOWKIT AUTONOMOUS PIPELINE TEST SUITE
=============================================================================
Authoritative Test Suite for FlowKit-inspired Autonomous Upgrades:
1. Zero-Waste Contact Sheet Tiling Engine:
   - Exact divisor math (cols_eff * rows_eff == n_frames)
   - Zero empty black cells (prevents Vision LLM hallucinating black screen defects)
   - High-contrast timestamp badges [T=X.Xs | #Frame N]
   - JPEG byte stream encoding
2. Strict 3-Tier Error Catalog (14 Known AI Video Errors) & Hard Caps:
   - 5 Critical Errors: character_drift, breed_swap, role_reversal, brand_logo_text, character_count_drift
   - 5 High Errors: camera_drift, object_morph, reverse_motion, human_hands_limbs, scale_break
   - 4 Minor Errors: lighting_jitter, micro_blur, background_warp, color_shift
   - Critical hard cap: character_consistency <= 0.30, overall_score <= 0.59, approved=False, RETAKE_SHOT
   - High hard cap: overall_score <= 0.74, approved=False, RETAKE_SHOT
   - Deterministic model validator overriding LLM benevolence
3. Diagnostic Prompt Healing (Self-Correction Loop):
   - Targeted anti-drift / locked-camera / anatomy injection
   - Critical > High > Minor priority injection
   - Preservation of Audio Guard (No-BGM) and Closed Lips Guard
   - Strict cycle bounding (MAX_HEALING_CYCLES = 2)
4. Cinematic 3-Beat Shot Formula & Camera Separation:
   - Beat 1 (0-3s), Beat 2 (3-6s), Beat 3 (6-10s)
   - Dedicated camera movement line
5. Post-Production Smart Trim & Audio Continuity:
   - Dynamic head trim (-ss 1.0) on static first frames
   - Narrator fitting to speech duration + buffer
   - Smart stitching: xfade for CONTINUOUS_TAKE vs hard cut for CINEMATIC_CUT
=============================================================================
é    N)ÚPath)ÚListÚDictÚAnyÚTupleÚ05_Production_Pipeline)Úcompute_zero_waste_gridÚnormalize_frame_countÚZeroWasteContactSheetÚ!generate_zero_waste_contact_sheetÚextract_contact_sheet_bytes)ÚMAX_HEALING_CYCLESÚERROR_THERAPY_CATALOGÚDiagnosticPromptHealerÚCinematicShotPacer)ÚFLOWKIT_ERROR_TIERSÚFLOWKIT_ERROR_CATALOGÚVideoCriticVerdictÚShotEvaluationÚSceneEvaluation)ÚAudioContinuityEngineÚ
get_ffmpegÚget_ffprobeÚsession)Úscopec              #   ó&  K  — |                       d¦  «        }t          ¦   «         }|dz  }|dddddddddd	d
ddddddddt          |¦  «        g}t          j        |dd¬¦  «         |dz  }g |‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d	‘d
‘d‘d‘d‘d‘d‘d‘d‘d‘t          |¦  «        ‘}t          j        |dd¬¦  «         |dz  }|dddddddddddt          |¦  «        g}t          j        |dd¬¦  «         |||||d œV — d!S )"u@   Táº¡o thÆ° má»¥c sandbox dÃ¹ng cho kiá»ƒm thá»­ video vÃ  audio.Úflowkit_test_sandboxzmoving_clip.mp4ú-yú-fÚlavfiú-iz)testsrc=duration=2.5:size=640x360:rate=24z1sine=frequency=440:duration=2.5:sample_rate=48000ú-c:vÚlibx264z-pix_fmtÚyuv420pú-c:aÚaacz-b:aÚ128kz-arÚ48000T©Úcapture_outputÚcheckzstatic_head_clip.mp4z.color=c=navy:duration=1.2:size=640x360:rate=24z)testsrc=duration=2.0:size=640x360:rate=24z1sine=frequency=440:duration=3.0:sample_rate=48000z-filter_complexz#[0:v][1:v]concat=n=2:v=1:a=0[v_out]z-mapz[v_out]z2:aznarration_sample.m4az1sine=frequency=330:duration=2.0:sample_rate=48000)ÚdirÚmoving_videoÚstatic_head_videoÚnarration_audioÚffmpegN)Úmktempr   ÚstrÚ
subprocessÚrun)	Útmp_path_factoryÚtemp_dirr0   r-   Ú
cmd_movingr.   Ú
cmd_staticr/   Ú	cmd_audios	            ú?C:\Projects\KieuStory\tests\test_flowkit_autonomous_pipeline.pyÚflowkit_sandboxr;   Q   sx  è è € ð  ×&Ò&Ð'=Ñ>Ô>€HÝ‰\Œ\€Fð Ð/Ñ/€Là�Øˆg�tÐHØˆg�tÐPØ�	˜: yØ��v˜v u¨gÝˆLÑÔð€Jõ „N�:¨d¸$Ð?Ñ?Ô?Ð?ð !Ð#9Ñ9Ðð
Øð
Øð
àð
àð
àð
àMð
ð 	ð
ð ð
ð ð
ð Ið
ð 	ð	
ð ð	
ð ð	
ð Qð	
ð
 	ð
ð
 Að
ð 	ð
ð ð
ð "ð
ð $)ð
ð 	ð
ð ð
ð &ð
ð (1ð
ð 	ð
ð ð
ð ð
ð  &ð
ð (-ð
ð /6ð
õ 	ÐÑÔð
€Jõ „N�:¨d¸$Ð?Ñ?Ô?Ð?ð Ð!7Ñ7€Oà�Øˆg�tÐPØ��v˜v u¨gÝˆOÑÔð	€Iõ „N�9¨T¸Ð>Ñ>Ô>Ð>ð Ø$Ø.Ø*Øðð ð ð ð ð ð ó    c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚTestZeroWasteContactSheetTilinguW   Kiá»ƒm chá»©ng toÃ¡n há»�c Æ°á»›c sá»‘ chÃ­nh xÃ¡c vÃ  triá»‡t tiÃªu 100% Ã´ Ä‘en rÃ¡c.c                 ó|  — g d¢}|D �]3}t          |¦  «        \  }}||z  }||k    }|�s!t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }t          j        d|› d	|› d
|› d|› �¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}||k    }	|	sát          j        d|	fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }
t          j        d|› d|› d|› d�¦  «        dz   d|
iz  }t          t          j	        |¦  «        ¦  «        ‚d}	�Œ5dS )u=   cols_eff * rows_eff Báº®T BUá»˜C báº±ng chÃ­nh xÃ¡c n_frames.)
é   é   é   é   é   é   é	   é
   é   é   ©ú==)z(%(py0)s * %(py1)s) == %(py4)sÚcolsÚrowsÚn)Úpy0Úpy1Úpy4u   Lá»—i vá»›i n=z: Úxz != z
>assert %(py6)sÚpy6N)ú>=)z%(py0)s >= %(py2)s©rO   Úpy2u/   Cols pháº£i >= Rows cho mÃ n hÃ¬nh ngang 16:9: z < z (n=ú)ú
>assert %(py4)srQ   )
r	   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚAssertionErrorÚ_format_explanation)ÚselfÚgolden_countsrN   rL   rM   Ú@py_assert2Ú@py_assert3Ú@py_format5Ú@py_format7Ú@py_assert1Ú@py_format3s              r:   Útest_exact_divisor_grid_mathz<TestZeroWasteContactSheetTiling.test_exact_divisor_grid_math�   s®  € à9Ð9Ð9ˆØð 	kñ 	kˆAÝ0°Ñ3Ô3‰JˆD�$Ø˜$‘;ÐO�; !Ò#ÐOÐOÑOÕOÔOÐOÐOÐOÐO�; !ÐOÑOÔOÐOÕOÔOÑOÔOÐOÐOÕOÔO�4ÑOÔOÐOÕOÔO�4ÑOÔOÐOÐOÐOÕOÔOÑOÔOÐOÐOÕOÔO˜$ÑOÔOÐOÕOÔO˜$ÑOÔOÐOÐOÐOÕOÔOÑOÔOÐOÐOÕOÔO !ÑOÔOÐOÕOÔO !ÑOÔOÐOÐOÐOÐOÑOÐOÕOÔOÐ%O°aÐ%OÐ%O¸4Ð%OÐ%OÀ$Ð%OÐ%OÈAÐ%OÐ%OÑOÔOÐOÑOÐOÐOÐOÑOÐOÕOÕOÔOÐOÑOÔOÑOÔOÐOÐOÐOÐOÐOØ˜4’<ÐjÐjÐjÕjÔjÐjÐjÐjÐj�4˜4ÐjÑjÔjÐjÕjÔjÑjÔjÐjÐjÕjÔj�4ÑjÔjÐjÕjÔj�4ÑjÔjÐjÐjÐjÕjÔjÑjÔjÐjÐjÕjÔj˜4ÑjÔjÐjÕjÔj˜4ÑjÔjÐjÐjÐjÐjÑjÐjÕjÔjÐ!jÐSWÐ!jÐ!jÐ\`Ð!jÐ!jÐfgÐ!jÐ!jÐ!jÑjÔjÐjÑjÐjÐjÐjÑjÐjÕjÕjÔjÐjÑjÔjÑjÔjÐjÐjÐjÑjð	kð 	kr<   c                 ón  — d}t          |¦  «        }d}||k    }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}d	}t          |¦  «        }d	}||k    }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}d
}t          |¦  «        }d
}||k    }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}d}t          |¦  «        }d}||k    }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}d}t          |¦  «        }d}||v }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}d}t          |¦  «        }d}||k    }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}d}t          |¦  «        }d}||v }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}d}t          |¦  «        }d}||k    }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}d}t          |¦  «        }d}||v }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}dS )uV   Chuáº©n hÃ³a cÃ¡c sá»‘ nguyÃªn tá»‘/sá»‘ xáº¥u vá»� cÃ¡c sá»‘ chia vÃ ng gáº§n nháº¥t.r@   rJ   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr
   ©rO   rV   rQ   Úpy7úassert %(py9)sÚpy9NrA   rB   rC   é   )rC   rD   ©Úin)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} in %(py7)srD   é   )rD   rE   rE   é   )rG   rH   )	r
   rY   rZ   r[   r\   r]   r^   r`   ra   )rb   rh   re   Ú@py_assert6Ú@py_assert5Ú@py_format8Ú@py_format10s          r:   Útest_normalize_frame_countz:TestZeroWasteContactSheetTiling.test_normalize_frame_count•   s	  € à%&Ð,Õ$ QÑ'Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Ð,Õ,Ô, QÑ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø%&Ð,Õ$ QÑ'Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Ð,Õ,Ô, QÑ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø%&Ð,Õ$ QÑ'Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Ð,Õ,Ô, QÑ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø%&Ð,Õ$ QÑ'Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Ð,Õ,Ô, QÑ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø%&Ð1Õ$ QÑ'Ô'Ð1¨6Ð1Ð'¨6Ð1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð'¨6Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1Õ$Ñ1Ô1Ð1Õ1Ô1Õ$Ñ1Ô1Ð1Ð1Õ1Ô1 QÑ1Ô1Õ1Ô1Ð'Ñ1Ô1Õ1Ô1¨6Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø%&Ð,Õ$ QÑ'Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Ð,Õ,Ô, QÑ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø%&Ð1Õ$ QÑ'Ô'Ð1¨6Ð1Ð'¨6Ð1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð'¨6Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1Õ$Ñ1Ô1Ð1Õ1Ô1Õ$Ñ1Ô1Ð1Ð1Õ1Ô1 QÑ1Ô1Õ1Ô1Ð'Ñ1Ô1Õ1Ô1¨6Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø%&Ð,Õ$ QÑ'Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Õ,Ô,Õ$Ñ,Ô,Ð,Ð,Õ,Ô, QÑ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø%'Ð4Õ$ RÑ(Ô(Ð4¨HÐ4Ð(¨HÐ4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð(¨HÐ4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4Õ$Ñ4Ô4Ð4Õ4Ô4Õ$Ñ4Ô4Ð4Ð4Õ4Ô4 RÑ4Ô4Õ4Ô4Ð(Ñ4Ô4Õ4Ô4¨HÑ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r<   c           
      ó¼  — |d         }|d         dz  }t          |d|d¬¦  «        \  }}d}||u}|s—t          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}}g }d}
||
u}|}|r|j	        } |¦   «         }|}|�sLt          j        d|fd||
f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        dœz  }	dd|	iz  }| 
                    |¦  «         |rddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }| 
                    |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}
x}}|j        } |¦   «         }|j        }d}||k    }|sÐt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}}|j        \  }}}t          d¦  «        \  }}g }d}
||
k    }|}|r
d}||k    }|}|�sXt          j        d |fd!||
f¦  «        d"t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd"t          j        |
¦  «        dœz  }	dd|	iz  }| 
                    |¦  «         |r‹t          j        d |fd#||f¦  «        d$t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd$t          j        |¦  «        d%œz  }d&d'|iz  }| 
                    |¦  «         t          j        |d¦  «        i z  }d(d)|iz  } t          t          j        | ¦  «        ¦  «        ‚dx}x}x}x}
x}}d*}||z  }||z  }||k    }|�st          j        d |fd+||f¦  «        d,t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd,t          j        |¦  «        d"t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd"d"t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd"d-œz  }d.d/|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}d0}||z  }||z  }||k    }|�st          j        d |fd+||f¦  «        d1t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd1t          j        |¦  «        d$t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd$d$t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd$d-œz  }d.d/|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}||z  }!||z  }"t!          |¦  «        D �]‚}#t!          |¦  «        D �]n}$||#|"z  |#d2z   |"z  …|$|!z  |$d2z   |!z  …f         }%t"          j        } ||%¦  «        }
d3}|
|k    }&|&�s!t          j        d|&fd4|
|f¦  «        d5t          j        ¦   «         v st          j        t"          ¦  «        rt          j        t"          ¦  «        nd5t          j        |¦  «        d6t          j        ¦   «         v st          j        |%¦  «        rt          j        |%¦  «        nd6t          j        |
¦  «        t          j        |¦  «        d7œz  }'t          j        d8|#› d9|$› d:�¦  «        d;z   d<|'iz  }(t          t          j        |(¦  «        ¦  «        ‚dx}x}
x}&}�Œp�Œ„dS )=uf   Táº¡o contact sheet thá»±c táº¿ tá»« video vÃ  Ä‘áº£m báº£o kÃ­ch thÆ°á»›c chÃ­nh xÃ¡c tuyá»‡t Ä‘á»‘i.r-   r,   ztest_sheet_6frames.jpgrD   )é€  é8  )Ú
video_pathÚ
num_framesÚoutput_pathÚtarget_sizeN©úis not©z%(py0)s is not %(py3)sÚ	sheet_img©rO   Úpy3úassert %(py5)sÚpy5)z%(py2)s is not %(py5)sÚout_path)rV   rˆ   z%(py7)srm   z>%(py13)s
{%(py13)s = %(py11)s
{%(py11)s = %(py9)s.exists
}()
})ro   Úpy11Úpy13r   úassert %(py16)sÚpy16éˆ  ©ú>)z_%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.stat
}()
}.st_size
} > %(py9)s)rO   rV   rQ   rS   ro   zassert %(py11)srŠ   rB   rA   rJ   )z%(py2)s == %(py5)srL   )z%(py9)s == %(py12)srM   )ro   Úpy12z%(py14)sÚpy14zassert %(py17)sÚpy17r{   )z+%(py0)s == ((%(py3)s // %(py4)s) * %(py6)s)Úw)rO   r†   rQ   rS   rn   ro   r|   Úhr@   g      @)zI%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.mean
}(%(py3)s)
} > %(py8)sÚnpÚcell)rO   rV   r†   rˆ   Úpy8u   Ã” (z, u)   ) bá»‹ rá»—ng Ä‘en (unfilled black cell)!ú
>assert %(py10)sÚpy10)r   rY   rZ   r[   r\   r]   r^   r`   ra   ÚexistsÚappendÚ_format_boolopÚstatÚst_sizeÚshaper	   Úranger–   Úmeanr_   ))rb   r;   r}   Ú
sheet_pathr„   r‰   rd   rh   Ú@py_format4Ú@py_format6Ú@py_assert4re   Ú@py_assert0Ú@py_assert10Ú@py_assert12rw   Ú@py_format14Ú@py_format15Ú@py_format17rv   Ú@py_assert8Ú@py_assert7rx   Ú@py_format12r•   r”   ÚcrL   rM   Ú@py_assert11Ú@py_format13Ú@py_format16Ú@py_format18Úcell_wÚcell_hÚrÚcolr—   ru   Ú@py_format9Ú@py_format11s)                                            r:   Ú9test_create_contact_sheet_dimensions_and_zero_black_cellszYTestZeroWasteContactSheetTiling.test_create_contact_sheet_dimensions_and_zero_black_cells¡   s
  € à$ ^Ô4ˆ
Ø$ UÔ+Ð.FÑFˆ
å?Ø!ØØ"Ø$ð	
ñ 
ô 
Ñˆ	�8ð !%Ð$ˆy Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆy Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ø9Ð9˜tÐ9ˆx˜tÐ#Ð9Ð9Ð9Ð9Ð9¨¬Ð9¨¨Ñ(9Ô(9Ð9Ð(9Ð9Ð9Ñ9Õ9Ô9Ð9Ð9Ð9Ð9ˆx˜tÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆxÑ9Ô9Ð9Õ9Ô9ˆxÑ9Ô9Ð9Ð9Õ9Ô9˜tÑ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Ð9×9Ò9Ð9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¨Ñ9Ô9Ð9Õ9Ô9¨Ñ9Ô9Ð9Ð9Õ9Ô9¨Ñ9Ô9Õ9Ô9Ð(9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9×9Ò9Ð9Ñ9Ô9Ð9Õ9Ô9Ð9Ð9Ñ9Ô9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ØŒ}Ð-ˆ}ˆ}‰ŒÐ-ˆÔ&Ð-¨Ð-Ð&¨Ò-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð&¨Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆxÑ-Ô-Ð-Õ-Ô-ˆxÑ-Ô-Ð-Ð-Õ-Ô-ˆ}Ñ-Ô-Õ-Ô-ˆÑ-Ô-Õ-Ô-Ð&Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð ”/‰ˆˆ1ˆaÝ,¨QÑ/Ô/‰
ˆˆdØ&Ð&�qÐ&ˆt�qŠyÐ&Ð&Ð&Ð&Ð& QÐ&˜T QšYÐ&Ð&Ð&Ð&Ñ&Õ&Ô&Ð&Ð&Ð&Ð&ˆt�qÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆtÑ&Ô&Ð&Õ&Ô&ˆtÑ&Ô&Ð&Ð&Õ&Ô&�qÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&×&Ò&Ð&Ñ&Ô&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&˜T QÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜TÑ&Ô&Ð&Õ&Ô&˜TÑ&Ô&Ð&Ð&Õ&Ô& QÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&×&Ò&Ð&Ñ&Ô&Ð&Õ&Ô&Ð&Ð&Ñ&Ô&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÐ)�T˜T‘\Ð)�\ TÑ)Ð)ˆqÐ)Ò)Ð)Ð)Ñ)Õ)Ô)Ð)Ð)Ð)Ð)ˆqÐ)Ð)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆqÑ)Ô)Ð)Õ)Ô)ˆqÑ)Ô)Ð)Ð)Õ)Ô)�TÑ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)˜TÑ)Ô)Ð)Õ)Ô)˜TÑ)Ô)Ð)Ð)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô) TÑ)Ô)Ð)Õ)Ô) TÑ)Ô)Ð)Ð)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÐ)�T˜T‘\Ð)�\ TÑ)Ð)ˆqÐ)Ò)Ð)Ð)Ñ)Õ)Ô)Ð)Ð)Ð)Ð)ˆqÐ)Ð)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆqÑ)Ô)Ð)Õ)Ô)ˆqÑ)Ô)Ð)Ð)Õ)Ô)�TÑ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)˜TÑ)Ô)Ð)Õ)Ô)˜TÑ)Ô)Ð)Ð)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô) TÑ)Ô)Ð)Õ)Ô) TÑ)Ô)Ð)Ð)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ð �d‘ˆØ�d‘ˆÝ�t‘”ð 	gñ 	gˆAÝ˜T‘{”{ð gñ g�Ø   V¡¨Q°©U°fÑ,<Ð!<¸cÀF¹lÈCÐRSÉGÐW]ÑK]Ð>]Ð!]Ô^�å”wÐf�w�w˜t‘}”}Ðf sÐf�} sÒ*ÐfÐfÑfÕfÔfÐfÐfÐfÐf�} sÐfÑfÔfÐfÕfÔfÑfÔfÐfÐfÕfÔf•rÑfÔfÐfÕfÔf•rÑfÔfÐfÐfÕfÔf�wÑfÔfÐfÕfÔfÑfÔfÐfÐfÕfÔf˜tÑfÔfÐfÕfÔf˜tÑfÔfÐfÐfÕfÔf�}ÑfÔfÕfÔf sÑfÔfÐfÐfÑfÐfÕfÔfÐ,f°1Ð,fÐ,f¸Ð,fÐ,fÐ,fÑfÔfÐfÑfÐfÐfÐfÑfÐfÕfÕfÔfÐfÑfÔfÑfÔfÐfÐfÐfÐfÐfÐfÐfÐfÐfÑfñgð	gð 	gr<   c                 ó  — |d         }t          |d¬¦  «        }d}||u}|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}t          |¦  «        }d}||k    }	|	sòt          j        d|	fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}	}|j
        }d} ||¦  «        }|sžddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
t          t          j        |
¦  «        ¦  «        ‚dx}x}}dS )uG   TrÃ­ch xuáº¥t JPEG byte stream trá»±c tiáº¿p cho Multimodal Vision LLM.r-   rD   )r~   Nr�   rƒ   Ú	raw_bytesr…   r‡   rˆ   rŽ   r�   )z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sÚlen©rO   rP   r†   rS   úassert %(py8)sr˜   s   ÿØÿzLassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.startswith
}(%(py4)s)
}©rO   rV   rQ   rS   )r   rY   rZ   r[   r\   r]   r^   r`   ra   r¾   Ú
startswith)rb   r;   r}   r½   rd   rh   r¤   r¥   rv   r¦   rg   r¹   re   s                r:   Ú test_extract_contact_sheet_bytesz@TestZeroWasteContactSheetTiling.test_extract_contact_sheet_bytesÁ   sÈ  € à$ ^Ô4ˆ
Ý/°
ÀqÐIÑIÔIˆ	Ø $Ð$ˆy Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆy Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ý�9‰~Œ~Ð$ Ð$ˆ~ Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ~ Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�sÑ$Ô$Ð$Õ$Ô$�sÑ$Ô$Ð$Ð$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�9Ñ$Ô$Ð$Õ$Ô$�9Ñ$Ô$Ð$Ð$Õ$Ô$ˆ~Ñ$Ô$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$àÔ#Ð4 OÐ4Ð#Ð# OÑ4Ô4Ð4Ð4Ð4Ð4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ˆyÑ4Ô4Ð4Õ4Ô4ˆyÑ4Ô4Ð4Ð4Õ4Ô4Ð#Ñ4Ô4Õ4Ô4 OÑ4Ô4Õ4Ô4Ð4Ñ4Ô4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r<   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rj   ry   r»   rÃ   © r<   r:   r>   r>   Š   s]   € € € € € ØaÐaðkð kð kð
5ð 
5ð 
5ðgð gð gð@5ð 5ð 5ð 5ð 5r<   r>   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú(TestFlowKitStrictErrorCatalogAndHardCapsuJ   Kiá»ƒm chá»©ng danh má»¥c 14 lá»—i vÃ  cÆ¡ cháº¿ Hard Caps tuyá»‡t Ä‘á»‘i.c                 ó  — t          t          ¦  «        }d}||k    }|süt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}t          t          ¦  «        }d}||k    }|süt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndd
t	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd
t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}d„ t          j        ¦   «         D ¦   «         }d„ t          j        ¦   «         D ¦   «         }d„ t          j        ¦   «         D ¦   «         }t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}t          |¦  «        }h d£}||k    }|sòt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}t          |¦  «        }h d£}||k    }|sòt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}t          |¦  «        }h d£}||k    }|sòt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}d	S )uV   XÃ¡c nháº­n Ä‘á»§ 14 lá»—i theo 3 táº§ng nghiÃªm ngáº·t (5 Critical, 5 High, 4 Minor).é   rJ   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr¾   r   r¿   rÀ   r˜   Nr   c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS )ÚcriticalrÈ   ©Ú.0ÚkÚvs      r:   ú
<listcomp>z\TestFlowKitStrictErrorCatalogAndHardCaps.test_catalog_14_errors_complete.<locals>.<listcomp>×   s!   € ÐXÐXÐX¡  AÈÈZÊÈ˜1ÈÈÈr<   c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS )ÚhighrÈ   rÐ   s      r:   rÔ   z\TestFlowKitStrictErrorCatalogAndHardCaps.test_catalog_14_errors_complete.<locals>.<listcomp>Ø   s!   € ÐPÐPÐP™T˜Q ÀAÈÂKÀK�qÀKÀKÀKr<   c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS )ÚminorrÈ   rÐ   s      r:   rÔ   z\TestFlowKitStrictErrorCatalogAndHardCaps.test_catalog_14_errors_complete.<locals>.<listcomp>Ù   s!   € ÐRÐRÐR™d˜a ÀQÈ'Â\À\˜À\À\À\r<   rp   Úcritical_errors>   Ú
breed_swapÚrole_reversalÚbrand_logo_textÚcharacter_driftÚcharacter_count_driftÚsetÚhigh_errors>   Úscale_breakÚcamera_driftÚobject_morphÚreverse_motionÚhuman_hands_limbsrC   Úminor_errors>   Ú
micro_blurÚcolor_shiftÚbackground_warpÚlighting_jitter)r¾   r   rY   rZ   r[   r\   r]   r^   r`   ra   r   Úitemsrß   )	rb   rd   rv   r¦   rg   r¹   rÙ   rà   ræ   s	            r:   Útest_catalog_14_errors_completezHTestFlowKitStrictErrorCatalogAndHardCaps.test_catalog_14_errors_completeÒ   s¡  € åÕ&Ñ'Ô'Ð-¨2Ð-Ð'¨2Ò-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð'¨2Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-�sÑ-Ô-Ð-Õ-Ô-�sÑ-Ô-Ð-Ð-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-Õ&Ñ-Ô-Ð-Õ-Ô-Õ&Ñ-Ô-Ð-Ð-Õ-Ô-Ð'Ñ-Ô-Õ-Ô-¨2Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ÝÕ(Ñ)Ô)Ð/¨RÐ/Ð)¨RÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð)¨RÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�sÑ/Ô/Ð/Õ/Ô/�sÑ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/Õ(Ñ/Ô/Ð/Õ/Ô/Õ(Ñ/Ô/Ð/Ð/Õ/Ô/Ð)Ñ/Ô/Õ/Ô/¨RÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/àXÐXÕ)<Ô)BÑ)DÔ)DÐXÑXÔXˆØPÐPÕ%8Ô%>Ñ%@Ô%@ÐPÑPÔPˆØRÐRÕ&9Ô&?Ñ&AÔ&AÐRÑRÔRˆå�?Ñ#Ô#Ð( qÐ(Ð# qÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð# qÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(�sÑ(Ô(Ð(Õ(Ô(�sÑ(Ô(Ð(Ð(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(�?Ñ(Ô(Ð(Õ(Ô(�?Ñ(Ô(Ð(Ð(Õ(Ô(Ð#Ñ(Ô(Õ(Ô( qÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ý�?Ñ#Ô#ð 	
ð (
ð (
ð (
ð 	
Ð#ð (
ò 
ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð#ð (
ð 	
ñ 	
ô 	
ð 	
õ 	
ô 
ñ	
ô 	
ð 	
ð 	
õ 	
ìõ ñ 	
ô 	
ð 	
õ 	
ô 
õ ñ 	
ô 	
ð 	
ð 	
ð 	
õ 	
ô 
ñ	
ô 	
ð 	
ð 	
õ 	
ìð #ñ 	
ô 	
ð 	
õ 	
ô 
ð #ñ 	
ô 	
ð 	
ð 	
õ 	
ô 
ð $ñ 	
ô 	
õ 	
ô 
ð(
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ
 �;ÑÔÐ$ 1Ð$Ð 1Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð 1Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�sÑ$Ô$Ð$Õ$Ô$�sÑ$Ô$Ð$Ð$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�;Ñ$Ô$Ð$Õ$Ô$�;Ñ$Ô$Ð$Ð$Õ$Ô$ÐÑ$Ô$Õ$Ô$ 1Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ý�;ÑÔð 	
ð $
ð $
ð $
ð 	
Ðð $
ò 
ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ðð $
ð 	
ñ 	
ô 	
ð 	
õ 	
ô 
ñ	
ô 	
ð 	
ð 	
õ 	
ìõ ñ 	
ô 	
ð 	
õ 	
ô 
õ ñ 	
ô 	
ð 	
ð 	
ð 	
õ 	
ô 
ñ	
ô 	
ð 	
ð 	
õ 	
ìð ñ 	
ô 	
ð 	
õ 	
ô 
ð ñ 	
ô 	
ð 	
ð 	
õ 	
ô 
ð  ñ 	
ô 	
õ 	
ô 
ð$
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ
 �<Ñ Ô Ð% AÐ%Ð  AÒ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð  AÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�sÑ%Ô%Ð%Õ%Ô%�sÑ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�<Ñ%Ô%Ð%Õ%Ô%�<Ñ%Ô%Ð%Ð%Õ%Ô%Ð Ñ%Ô%Õ%Ô% AÑ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ý�<Ñ Ô ð 	
ð %
ð %
ð %
ð 	
Ð ð %
ò 
ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð ð %
ð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìõ ñ 	
ô 	
ð 	
õ 	
ä 	õ ñ 	
ô 	
ð 	
ð 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð  ñ 	
ô 	
ð 	
õ 	
ä 	ð  ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð !ñ 	
ô 	
õ 	
ä 	ð%
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r<   c                 óü	  — t          ddddgt          ddd¬¦  «        ¬¦  «        }|j        }|j        }d}||k    }|s½t	          j        d	|fd
||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}x}}|j        }d}||k    }|sªt	          j        d	|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }	dd|	iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||u }|sªt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }	dd|	iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }	dd|	iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|j        }|j        }d}||u }|s½t	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}x}}|j        }|j        }d}||k    }|s½t	          j        d	|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}x}}dS )ue   Critical Error Báº®T BUá»˜C Ã©p character_consistency <= 0.30, overall_score <= 0.59, approved=False.g\�Âõ(\ï?TÚAPPROVErÝ   gffffffî?)Úcharacter_consistencyÚscoreÚcharacter_match©Úoverall_scoreÚapprovedÚsuggested_actionÚdetected_errorsÚ	shot_evalç333333Ó?©ú<=©z\%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.shot_eval
}.character_consistency
} <= %(py7)sÚverdictrl   rn   ro   Nçáz®Gáâ?©z5%(py2)s
{%(py2)s = %(py0)s.overall_score
} <= %(py5)s©rO   rV   rˆ   úassert %(py7)srm   F©Úis©z0%(py2)s
{%(py2)s = %(py0)s.approved
} is %(py5)sÚRETAKE_SHOTrJ   ©z8%(py2)s
{%(py2)s = %(py0)s.suggested_action
} == %(py5)s)zV%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.shot_eval
}.character_match
} is %(py7)s)zL%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.shot_eval
}.score
} <= %(py7)s)r   r   r÷   rï   rY   rZ   r[   r\   r]   r^   r`   ra   ró   rô   rõ   rñ   rð   )
rb   rü   rh   re   ru   rv   rw   rx   r¦   r¥   s
             r:   Ú$test_critical_error_forces_hard_capszMTestFlowKitStrictErrorCatalogAndHardCaps.test_critical_error_forces_hard_capsì   sê  € õ %ØØØ&Ø.Ð/Ý$Ø&*ØØ $ðñ ô ð

ñ 

ô 

ˆð Ô Ð>Ð Ô6Ð>¸$Ð>Ð6¸$Ò>Ð>Ð>Ð>Õ>Ô>Ð>Ð>Ð>Ð>Ð6¸$Ð>Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>ˆwÑ>Ô>Ð>Õ>Ô>ˆwÑ>Ô>Ð>Ð>Õ>Ô>Ð Ñ>Ô>Õ>Ô>Ð6Ñ>Ô>Õ>Ô>¸$Ñ>Ô>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ØÔ$Ð,¨Ð,Ð$¨Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆwÑ,Ô,Ð,Õ,Ô,ˆwÑ,Ô,Ð,Ð,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÔÐ( 5Ð(Ð 5Ð(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð 5Ð(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆwÑ(Ô(Ð(Õ(Ô(ˆwÑ(Ô(Ð(Ð(Õ(Ô(ÐÑ(Ô(Õ(Ô( 5Ñ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ'Ð8¨=Ð8Ð'¨=Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð'¨=Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆwÑ8Ô8Ð8Õ8Ô8ˆwÑ8Ô8Ð8Ð8Õ8Ô8Ð'Ñ8Ô8Õ8Ô8¨=Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØÔ Ð9Ð Ô0Ð9°EÐ9Ð0°EÐ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð0°EÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆwÑ9Ô9Ð9Õ9Ô9ˆwÑ9Ô9Ð9Ð9Õ9Ô9Ð Ñ9Ô9Õ9Ô9Ð0Ñ9Ô9Õ9Ô9°EÑ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ØÔ Ð.Ð Ô&Ð.¨$Ð.Ð&¨$Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð&¨$Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆwÑ.Ô.Ð.Õ.Ô.ˆwÑ.Ô.Ð.Ð.Õ.Ô.Ð Ñ.Ô.Õ.Ô.Ð&Ñ.Ô.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.r<   c           
      ó  — g d¢}|D �]v}t          dd|gt          dd¬¦  «        ¬¦  «        }|j        }d}||k    }|sÃt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        d
œz  }t          j	        d|› d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||u }|sÃt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        d
œz  }t          j	        d|› d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }|j        }d}	||	k    }
|
s½t          j        d|
fd||	f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
}	�ŒxdS )uT   Táº¥t cáº£ 5 lá»—i Critical Ä‘á»�u kÃ­ch hoáº¡t cÃ¹ng má»™t cÆ¡ cháº¿ cháº·n cá»©ng.)rÝ   rÚ   rÛ   rÜ   rÞ   gÍÌÌÌÌÌì?T)rï   rð   ©ró   rô   rö   r÷   rý   rù   rþ   rÓ   rÿ   õ   Lá»—i u"    khÃ´ng háº¡ overall_score <= 0.59ú
>assert %(py7)srm   NFr  r  u     khÃ´ng tá»« chá»‘i phÃª duyá»‡tr  rJ   r  r   rø   rû   rl   rn   ro   )r   r   ró   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rô   rõ   r÷   rï   )rb   Úcritical_listÚcrit_errrÓ   rh   r¦   re   r¥   rw   ru   rv   rx   s               r:   Ú,test_all_5_critical_errors_trigger_hard_capszUTestFlowKitStrictErrorCatalogAndHardCaps.test_all_5_critical_errors_trigger_hard_caps  s3  € ð
ð 
ð 
ˆð &ð 
	=ñ 
	=ˆHÝ"Ø"ØØ!) 
Ý(¸tÈ4ÐPÑPÔPð	ñ ô ˆAð ”?Ða dÐa�? dÒ*ÐaÐaÐaÕaÔaÐaÐaÐaÐa�? dÐaÑaÔaÐaÕaÔaÑaÔaÐaÐaÕaÔa�1ÑaÔaÐaÕaÔa�1ÑaÔaÐaÐaÕaÔa�?ÑaÔaÕaÔa dÑaÔaÐaÐaÑaÐaÕaÔaÐ,a°XÐ,aÐ,aÐ,aÑaÔaÐaÑaÐaÐaÐaÑaÐaÕaÕaÔaÐaÑaÔaÑaÔaÐaÐaÐaÐaÐaÐaÐaØ”:Ð[ Ð[�: Ð&Ð[Ð[Ð[Õ[Ô[Ð[Ð[Ð[Ð[�: Ð[Ñ[Ô[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[�1Ñ[Ô[Ð[Õ[Ô[�1Ñ[Ô[Ð[Ð[Õ[Ô[�:Ñ[Ô[Õ[Ô[ Ñ[Ô[Ð[Ð[Ñ[Ð[Õ[Ô[Ð([°Ð([Ð([Ð([Ñ[Ô[Ð[Ñ[Ð[Ð[Ð[Ñ[Ð[Õ[Õ[Ô[Ð[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[Ð[ØÔ%Ð6¨Ð6Ð%¨Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð%¨Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6�1Ñ6Ô6Ð6Õ6Ô6�1Ñ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Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø”;Ð<�;Ô4Ð<¸Ð<Ð4¸Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð4¸Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<�1Ñ<Ô<Ð<Õ<Ô<�1Ñ<Ô<Ð<Ð<Õ<Ô<�;Ñ<Ô<Õ<Ô<Ð4Ñ<Ô<Õ<Ô<¸Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ñ<ð
	=ð 
	=r<   c           	      óF  — g d¢}|D �]˜}t          dd|gt          d¬¦  «        ¬¦  «        }|j        }d}||k    }|sÃt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        d
œz  }t          j	        d|› d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||u }|sÃt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        d
œz  }t          j	        d|› d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}�ŒšdS )u`   High Error Báº®T BUá»˜C Ã©p overall_score <= 0.74, approved=False, suggested_action=RETAKE_SHOT.)râ   rã   rä   rå   rá   gq=
×£pí?T©rð   r  g®Gáz®ç?rù   rþ   rÓ   rÿ   r	  u"    khÃ´ng háº¡ overall_score <= 0.74r
  rm   NFr  r  u    khÃ´ng há»§y phÃª duyá»‡tr  rJ   r  r   )r   r   ró   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rô   rõ   )	rb   Ú	high_listÚhigh_errrÓ   rh   r¦   re   r¥   rw   s	            r:   Ú test_high_error_forces_hard_capszITestFlowKitStrictErrorCatalogAndHardCaps.test_high_error_forces_hard_caps  s5  € ð
ð 
ð 
ˆ	ð "ð 		7ñ 		7ˆHÝ"Ø"ØØ!) 
Ý(¨tÐ4Ñ4Ô4ð	ñ ô ˆAð ”?Ða dÐa�? dÒ*ÐaÐaÐaÕaÔaÐaÐaÐaÐa�? dÐaÑaÔaÐaÕaÔaÑaÔaÐaÐaÕaÔa�1ÑaÔaÐaÕaÔa�1ÑaÔaÐaÐaÕaÔa�?ÑaÔaÕaÔa dÑaÔaÐaÐaÑaÐaÕaÔaÐ,a°XÐ,aÐ,aÐ,aÑaÔaÐaÑaÐaÐaÐaÑaÐaÕaÕaÔaÐaÑaÔaÑaÔaÐaÐaÐaÐaÐaÐaÐaØ”:ÐU ÐU�: Ð&ÐUÐUÐUÕUÔUÐUÐUÐUÐU�: ÐUÑUÔUÐUÕUÔUÑUÔUÐUÐUÕUÔU�1ÑUÔUÐUÕUÔU�1ÑUÔUÐUÐUÕUÔU�:ÑUÔUÕUÔU ÑUÔUÐUÐUÑUÐUÕUÔUÐ(U°Ð(UÐ(UÐ(UÑUÔUÐUÑUÐUÐUÐUÑUÐUÕUÕUÔUÐUÑUÔUÑUÔUÐUÐUÐUÐUÐUÐUÐUØÔ%Ð6¨Ð6Ð%¨Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð%¨Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6�1Ñ6Ô6Ð6Õ6Ô6�1Ñ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Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ñ6ð		7ð 		7r<   c           	      óÐ  — t          dddddgt          d¬¦  «        ¬¦  «        }|j        }d}||k    }|sªt          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }d}||u }|sªt          j        d|fd||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}dS )uP   Minor Errors khÃ´ng cháº·n cá»©ng, cho phÃ©p duyá»‡t náº¿u overall_score >= 0.8.g333333ë?Trî   rê   rç   r  rò   rJ   )z5%(py2)s
{%(py2)s = %(py0)s.overall_score
} == %(py5)srÓ   rÿ   r   rm   Nr  r  r  )r   r   ró   rY   rZ   r[   r\   r]   r^   r`   ra   rô   rõ   )rb   rÓ   rh   r¦   re   r¥   rw   s          r:   Ú0test_minor_errors_allow_approval_if_score_passeszYTestFlowKitStrictErrorCatalogAndHardCaps.test_minor_errors_allow_approval_if_score_passes&  sØ  € åØØØ&Ø.°Ð=Ý$¨4Ð0Ñ0Ô0ð
ñ 
ô 
ˆð ŒÐ& $Ð&ˆ $Ò&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ $Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆqÑ&Ô&Ð&Õ&Ô&ˆqÑ&Ô&Ð&Ð&Õ&Ô&ˆÑ&Ô&Õ&Ô& $Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØŒzÐ!˜TÐ!ˆz˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆz˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆqÑ!Ô!Ð!Õ!Ô!ˆqÑ!Ô!Ð!Ð!Õ!Ô!ˆzÑ!Ô!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØÔ!Ð. YÐ.Ð! YÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð! YÐ.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆqÑ.Ô.Ð.Õ.Ô.ˆqÑ.Ô.Ð.Ð.Õ.Ô.Ð!Ñ.Ô.Õ.Ô. YÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.r<   N)	rÄ   rÅ   rÆ   rÇ   rì   r  r  r  r  rÈ   r<   r:   rÊ   rÊ   Ï   se   € € € € € ØTÐTð
ð 
ð 
ð4/ð /ð /ð.=ð =ð =ð$7ð 7ð 7ð"/ð /ð /ð /ð /r<   rÊ   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚTestDiagnosticPromptHealinguR   Kiá»ƒm chá»©ng phÃ¡c Ä‘á»“ Ä‘iá»�u trá»‹ prompt tá»± hÃ nh (Self-Correction Loop).c                 ót  — t          t          ¦  «        }d}||k    }|süt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}t          D �]Ž}|t          v }|sét          j        d
|fd|t          f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddœz  }t          j        d|› �¦  «        dz   d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d	}d}
t          |         }|
|v }|slt          j        d
|fd|
|f¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }	dd|	iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}
x}}d}
t          |         }|
|v }|slt          j        d
|fd|
|f¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }	dd|	iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}
x}}d}
t          |         }|
|v }|slt          j        d
|fd|
|f¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }	dd|	iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}
x}}�Œ�d	S )uQ   Báº£n Ä‘á»“ Ä‘iá»�u trá»‹ ERROR_THERAPY_CATALOG pháº£i há»— trá»£ Ä‘á»§ 14 lá»—i.rÌ   rJ   rÍ   r¾   r   r¿   rÀ   r˜   Nrq   )z%(py0)s in %(py2)sÚerr_keyrU   u(   Thiáº¿u liá»‡u phÃ¡p Ä‘iá»�u trá»‹ cho: rX   rQ   Útherapy)z%(py1)s in %(py4)s©rP   rQ   úassert %(py6)srS   Ú
vi_therapyÚtier)r¾   r   rY   rZ   r[   r\   r]   r^   r`   ra   r   r_   )rb   rd   rv   r¦   rg   r¹   r  rh   ri   rf   r§   re   s               r:   Ú)test_therapy_catalog_covers_all_14_errorszETestDiagnosticPromptHealing.test_therapy_catalog_covers_all_14_errors;  sA  € åÕ(Ñ)Ô)Ð/¨RÐ/Ð)¨RÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð)¨RÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�sÑ/Ô/Ð/Õ/Ô/�sÑ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/Õ(Ñ/Ô/Ð/Õ/Ô/Õ(Ñ/Ô/Ð/Ð/Õ/Ô/Ð)Ñ/Ô/Õ/Ô/¨RÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ý*ð 	<ñ 	<ˆGØÕ3Ð3ÐiÐiÐiÕiÔiÐiÐiÐiÐi�7Õ3ÐiÑiÔiÐiÕiÔiÑiÔiÐiÐiÕiÔi�7ÑiÔiÐiÕiÔi�7ÑiÔiÐiÐiÐiÕiÔiÑiÔiÐiÐiÕiÔiÕ3ÑiÔiÐiÕiÔiÕ3ÑiÔiÐiÐiÐiÐiÑiÐiÕiÔiÐ5iÐ`gÐ5iÐ5iÑiÔiÐiÑiÐiÐiÐiÑiÐiÕiÕiÔiÐiÑiÔiÑiÔiÐiÐiÐiØÐ>Õ 5°gÔ >Ð>�9Ð >Ð>Ð>Ð>Ð>Õ>Ô>Ð>Ð>Ð>Ð>�9Ð >Ð>Ñ>Ô>Õ>Ô>�9Ñ>Ô>Õ>Ô>Ð >Ñ>Ô>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ØÐAÕ#8¸Ô#AÐA�<Ð#AÐAÐAÐAÐAÕAÔAÐAÐAÐAÐA�<Ð#AÐAÑAÔAÕAÔA�<ÑAÔAÕAÔAÐ#AÑAÔAÐAÐAÑAÐAÐAÐAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAÐAÐAØÐ;Õ2°7Ô;Ð;�6Ð;Ð;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;�6Ð;Ð;Ñ;Ô;Õ;Ô;�6Ñ;Ô;Õ;Ô;Ð;Ñ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ñ;ð		<ð 	<r<   c                 óÄ  — d}t          j        |ddgdd¬¦  «        \  }}t          |¦  «        }d}||k    }|sòt          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd
dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}d}	|	|v }|s—t          j        d|fd|	|f¦  «        t          j        |	¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}d}	|	|v }|s—t          j        d|fd|	|f¦  «        t          j        |	¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}d}	|	|v }|s—t          j        d|fd|	|f¦  «        t          j        |	¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}d}	|	|v }|s—t          j        d|fd|	|f¦  «        t          j        |	¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}d}	|	|v }|s—t          j        d|fd|	|f¦  «        t          j        |	¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}|j        }d} ||¦  «        }|sžddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}d}	|	|v }|s—t          j        d|fd|	|f¦  «        t          j        |	¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}d}	|	|v }|s—t          j        d|fd|	|f¦  «        t          j        |	¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}dS )ug   BÆ¡m chá»‰ thá»‹ khÃ¡ng lá»—i vÃ  báº£o toÃ n nguyÃªn váº¹n Audio Guard & Closed Lips Guard á»Ÿ cuá»‘i.uã   ThÃºy Kiá»�u ngáº¯m trÄƒng bÃªn há»“ sen. [KHÃ“A KHáº¨U HÃŒNH Báº®T BUá»˜C: MÃ´i khÃ©p kÃ­n, khÃ´ng máº¥p mÃ¡y thoáº¡i] Quy táº¯c Ã¢m thanh: Tuyá»‡t Ä‘á»‘i khÃ´ng nháº¡c ná»�n BGM, chá»‰ giá»¯ tiáº¿ng foley tiáº¿ng giÃ³ thá»•i.rÝ   râ   õ   ThÃºy Kiá»�ur@   )Úoriginal_promptrö   Úcharacter_nameÚcyclerA   rJ   rÍ   r¾   Úappliedr¿   rÀ   r˜   Nzcharacter_drift (critical)rq   ©z%(py1)s in %(py3)s©rP   r†   r‡   rˆ   zcamera_drift (high)zHEALING-CRITICALÚhealedúHEALING-HIGHu.   chá»‰ giá»¯ tiáº¿ng foley tiáº¿ng giÃ³ thá»•i.úJassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.endswith
}(%(py4)s)
}rÁ   õ   Quy táº¯c Ã¢m thanh:u    [KHÃ“A KHáº¨U HÃŒNH Báº®T BUá»˜C)r   Úheal_promptr¾   rY   rZ   r[   r\   r]   r^   r`   ra   Úendswith)rb   Ú
raw_promptr'  r$  rd   rv   r¦   rg   r¹   r§   r¤   r¥   rh   re   s                 r:   Ú7test_heal_prompt_injects_therapies_and_preserves_guardszSTestDiagnosticPromptHealing.test_heal_prompt_injects_therapies_and_preserves_guardsD  s…  € ð{ð 	õ 1Ô<Ø&Ø.°Ð?Ø)Øð	
ñ 
ô 
‰ˆ�õ �7‰|Œ|Ð ˜qÐ ˆ|˜qÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ|˜qÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �sÑ Ô Ð Õ Ô �sÑ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �7Ñ Ô Ð Õ Ô �7Ñ Ô Ð Ð Õ Ô ˆ|Ñ Ô Õ Ô ˜qÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ø+Ð6Ð+¨wÐ6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð+¨wÐ6Ñ6Ô6Õ6Ô6Ð+Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¨wÑ6Ô6Ð6Õ6Ô6¨wÑ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Ø$Ð/Ð$¨Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð$¨Ð/Ñ/Ô/Õ/Ô/Ð$Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/¨Ñ/Ô/Ð/Õ/Ô/¨Ñ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/ð "Ð+Ð! VÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð! VÐ+Ñ+Ô+Õ+Ô+Ð!Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ VÑ+Ô+Ð+Õ+Ô+ VÑ+Ô+Ð+Ð+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+ØÐ'ˆ~ Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'ˆ~ Ð'Ñ'Ô'Õ'Ô'ˆ~Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô' Ñ'Ô'Ð'Õ'Ô' Ñ'Ô'Ð'Ð'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'ØÐ'ˆ~ Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'ˆ~ Ð'Ñ'Ô'Õ'Ô'ˆ~Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô' Ñ'Ô'Ð'Õ'Ô' Ñ'Ô'Ð'Ð'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'ð ŒÐPÐOÐPˆˆÐOÑPÔPÐPÐPÐPÐPÐPÕPÔPÑPÔPÐPÐPÕPÔPˆvÑPÔPÐPÕPÔPˆvÑPÔPÐPÐPÕPÔPˆÑPÔPÕPÔPÐOÑPÔPÕPÔPÐPÑPÔPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPØ%Ð/Ð%¨Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð%¨Ð/Ñ/Ô/Õ/Ô/Ð%Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/¨Ñ/Ô/Ð/Õ/Ô/¨Ñ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ø1Ð;Ð1°VÐ;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð1°VÐ;Ñ;Ô;Õ;Ô;Ð1Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;°VÑ;Ô;Ð;Õ;Ô;°VÑ;Ô;Ð;Ð;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;r<   c                 ó	  — d}t          j        |dgd¬¦  «        \  }}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}d}	|	|v }|s—t          j        d|fd|	|f¦  «        t          j        |	¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}t          j        |dgd¬¦  «        \  }}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}t          j        |dgd¬¦  «        \  }}g }||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}||k    }|sÂt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d}dS ) u_   VÃ²ng láº·p tá»± sá»­a Báº®T BUá»˜C dá»«ng sau tá»‘i Ä‘a 2 chu trÃ¬nh (MAX_HEALING_CYCLES = 2).u.   Kim Trá»�ng dá»«ng ngá»±a trÆ°á»›c ngÃµ Ä‘Ã o.rã   r@   )r#  rJ   rÍ   r¾   Úa1r¿   rÀ   r˜   Nr(  rq   r%  Úh1r&  r‡   rˆ   rA   Úa2rB   )z%(py0)s == %(py3)sÚa3r…   )z%(py0)s == %(py2)sÚh3r-  rU   zassert %(py4)srQ   )r   r+  r¾   rY   rZ   r[   r\   r]   r^   r`   ra   )rb   r-  r1  r0  rd   rv   r¦   rg   r¹   r§   r¤   r¥   Úh2r2  r4  r3  rh   ri   rf   s                      r:   Útest_heal_prompt_cycle_boundingz;TestDiagnosticPromptHealing.test_heal_prompt_cycle_boundinga  sÐ  € àEˆ
õ (Ô3°JÀÐ@PÐXYÐZÑZÔZ‰ˆˆBÝ�2‰wŒwÐ˜!Ðˆw˜!Š|ÐÐÐÕÔÐÐÐÐˆw˜!ÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�2ÑÔÐÕÔ�2ÑÔÐÐÕÔˆwÑÔÕÔ˜!ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØÐ#ˆ~ Ð#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ~ Ð#Ñ#Ô#Õ#Ô#ˆ~Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô# Ñ#Ô#Ð#Õ#Ô# Ñ#Ô#Ð#Ð#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#õ (Ô3°JÀÐ@PÐXYÐZÑZÔZ‰ˆˆBÝ�2‰wŒwÐ˜!Ðˆw˜!Š|ÐÐÐÕÔÐÐÐÐˆw˜!ÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�2ÑÔÐÕÔ�2ÑÔÐÐÕÔˆwÑÔÕÔ˜!ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐõ (Ô3°JÀÐ@PÐXYÐZÑZÔZ‰ˆˆBØˆˆr�RŠxˆˆˆ�Œˆˆˆˆˆr�Rˆ‰Œˆ�Œ‰Œˆˆ�Œˆr‰Œˆ�Œˆr‰Œˆˆ�Œ�R‰Œˆˆ‰ˆˆˆˆˆ‰ˆ��Œˆ‰Œ‰ŒˆˆˆˆˆØ�ZÒÐÐÐÕÔÐÐÐÐˆr�ZÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÐÕÔÑÔÐÐÕÔ�ZÑÔÐÕÔ�ZÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐr<   c                 óÚ  — d}t          j        |g d¢dd¬¦  «        \  }}|d         }|j        }d} ||¦  «        }|ssdt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}x}}|d         }|j        }d} ||¦  «        }|ssdt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}x}}|d         }|j        }d} ||¦  «        }|ssdt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}x}}d
S )uW   Chá»‰ thá»‹ Critical luÃ´n Ä‘Æ°á»£c Æ°u tiÃªn bÆ¡m trÆ°á»›c chá»‰ thá»‹ High vÃ  Minor.u&   VÆ°Æ¡ng Quan Ä‘á»©ng nhÃ¬n chá»‹ gÃ¡i.)rê   rÚ   râ   u   VÆ°Æ¡ng Quanr@   )rö   r"  r#  r   rÚ   zLassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
})rP   r†   rˆ   rm   Nrâ   rA   rê   )r   r+  rÂ   rY   r^   r`   ra   )	rb   r-  r'  r$  r§   rd   r¦   ru   rw   s	            r:   Ú(test_heal_prompt_critical_first_priorityzDTestDiagnosticPromptHealing.test_heal_prompt_critical_first_prioritys  s=  € à=ˆ
Ý0Ô<ØØMÐMÐMØ)Øð	
ñ 
ô 
‰ˆ�ð �qŒzÐ2ˆzÔ$Ð2 \Ð2Ð$Ð$ \Ñ2Ô2Ð2Ð2Ð2Ð2Õ2Ô2ˆzÑ2Ô2Õ2Ô2Ð$Ñ2Ô2Õ2Ô2 \Ñ2Ô2Õ2Ô2Ð2Ñ2Ô2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø�qŒzÐ4ˆzÔ$Ð4 ^Ð4Ð$Ð$ ^Ñ4Ô4Ð4Ð4Ð4Ð4Õ4Ô4ˆzÑ4Ô4Õ4Ô4Ð$Ñ4Ô4Õ4Ô4 ^Ñ4Ô4Õ4Ô4Ð4Ñ4Ô4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø�qŒzÐ7ˆzÔ$Ð7Ð%6Ð7Ð$Ð$Ð%6Ñ7Ô7Ð7Ð7Ð7Ð7Õ7Ô7ˆzÑ7Ô7Õ7Ô7Ð$Ñ7Ô7Õ7Ô7Ð%6Ñ7Ô7Õ7Ô7Ð7Ñ7Ô7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7r<   N)rÄ   rÅ   rÆ   rÇ   r  r.  r6  r8  rÈ   r<   r:   r  r  8  sV   € € € € € Ø\Ð\ð<ð <ð <ð<ð <ð <ð: ð  ð  ð$8ð 8ð 8ð 8ð 8r<   r  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTestCinematic3BeatShotPaceruX   Kiá»ƒm chá»©ng cáº¥u trÃºc nhá»‹p Ä‘iá»‡u 3 há»“i Ä‘iá»‡n áº£nh vÃ  tÃ¡ch biá»‡t camera.c                 óN  — d}t          j        |d¬¦  «        }d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}dS )uT   Tá»± Ä‘á»™ng phÃ¢n rÃ£ vÄƒn xuÃ´i thÃ nh 3 Beat vÃ  cÃ¢u lá»‡nh Camera Ä‘á»™c láº­p.uº   NÃ ng Kiá»�u tá»±a cá»­a sá»• nhÃ¬n cÃ nh Ä‘Ã o phai. GiÃ³ xuÃ¢n thoáº£ng qua lay Ä‘á»™ng tÃ  Ã¡o xanh ngá»�c. Má»™t giá»�t nÆ°á»›c máº¯t kháº½ lÄƒn trÃªn mÃ¡, láº¯ng láº¡i tráº§m ngÃ¢m.zSlow push-in 50mm anamorphic)r-  Úcamera_motionu    [Beat 1 (0-3s) - Thiáº¿t láº­p]:rq   r%  Úpacedr&  r‡   rˆ   Nu,   [Beat 2 (3-6s) - Ká»‹ch tÃ­nh & Cáº£m xÃºc]:u1   [Beat 3 (6-10s) - Láº¯ng Ä‘á»�ng & Ná»‘i tiáº¿p]:u7   [Chuyá»ƒn Ä‘á»™ng Camera]: Slow push-in 50mm anamorphic©
r   Úformat_3beat_promptrY   rZ   r^   r[   r\   r]   r`   ra   )rb   Úpromptr=  r§   rd   r¤   r¥   s          r:   Ú%test_format_3beat_prompt_auto_parsingzATestCinematic3BeatShotPacer.test_format_3beat_prompt_auto_parsingˆ  sH  € ðZð 	õ
 #Ô6ØØ8ð
ñ 
ô 
ˆð
 2Ð:Ð1°UÐ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð1°UÐ:Ñ:Ô:Õ:Ô:Ð1Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:°UÑ:Ô:Ð:Õ:Ô:°UÑ:Ô:Ð:Ð:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ø=ÐFÐ=ÀÐFÐFÐFÐFÕFÔFÐFÐFÐFÐFÐ=ÀÐFÑFÔFÕFÔFÐ=ÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔFÀÑFÔFÐFÕFÔFÀÑFÔFÐFÐFÐFÐFÑFÐFÐFÐFÐFÐFÑFÐFÕFÕFÔFÐFÑFÔFÑFÔFÐFÐFÐFÐFÐFØBÐKÐBÀeÐKÐKÐKÐKÕKÔKÐKÐKÐKÐKÐBÀeÐKÑKÔKÕKÔKÐBÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKÀeÑKÔKÐKÕKÔKÀeÑKÔKÐKÐKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKØHÐQÐHÈEÐQÐQÐQÐQÕQÔQÐQÐQÐQÐQÐHÈEÐQÑQÔQÕQÔQÐHÑQÔQÐQÕQÔQÑQÔQÐQÐQÕQÔQÈEÑQÔQÐQÕQÔQÈEÑQÔQÐQÐQÐQÐQÑQÐQÐQÐQÐQÐQÑQÐQÕQÕQÔQÐQÑQÔQÑQÔQÐQÐQÐQÐQÐQÐQÐQr<   c                 óP  — t          j        ddddd¬¦  «        }d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	d
œz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	d
œz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	d
œz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	d
œz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}dS )u@   Sá»­ dá»¥ng 3 beat tÆ°á»�ng minh do Ä‘áº¡o diá»…n chá»‰ Ä‘á»‹nh.u   Shot tá»•ngzStatic lock-offu   Kiá»�u bÆ°á»›c vÃ o phÃ²ngu'   Kiá»�u cháº¡m tay vÃ o cÃ¢y Ä‘Ã n Ä‘Ã¡yu&   Kiá»�u khÃ©p máº¯t nhá»› ngÆ°á»�i xÆ°a)r-  r<  Úbeat_1_descÚbeat_2_descÚbeat_3_descrq   r%  r=  r&  r‡   rˆ   Nu*   [Chuyá»ƒn Ä‘á»™ng Camera]: Static lock-offr>  )rb   r=  r§   rd   r¤   r¥   s         r:   Ú'test_format_3beat_prompt_explicit_beatszCTestCinematic3BeatShotPacer.test_format_3beat_prompt_explicit_beats™  sD  € å"Ô6Ø$Ø+Ø4ØAØ@ð
ñ 
ô 
ˆð ,Ð4Ð+¨uÐ4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð+¨uÐ4Ñ4Ô4Õ4Ô4Ð+Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4¨uÑ4Ô4Ð4Õ4Ô4¨uÑ4Ô4Ð4Ð4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ø8ÐAÐ8¸EÐAÐAÐAÐAÕAÔAÐAÐAÐAÐAÐ8¸EÐAÑAÔAÕAÔAÐ8ÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔA¸EÑAÔAÐAÕAÔA¸EÑAÔAÐAÐAÐAÐAÑAÐAÐAÐAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAØ7Ð@Ð7¸5Ð@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@Ð7¸5Ð@Ñ@Ô@Õ@Ô@Ð7Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@¸5Ñ@Ô@Ð@Õ@Ô@¸5Ñ@Ô@Ð@Ð@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ø;ÐDÐ;¸uÐDÐDÐDÐDÕDÔDÐDÐDÐDÐDÐ;¸uÐDÑDÔDÕDÔDÐ;ÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔD¸uÑDÔDÐDÕDÔD¸uÑDÔDÐDÐDÐDÐDÑDÐDÐDÐDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDÐDÐDr<   N)rÄ   rÅ   rÆ   rÇ   rA  rF  rÈ   r<   r:   r:  r:  …  s@   € € € € € ØbÐbðRð Rð Rð"Eð Eð Eð Eð Er<   r:  c                   óH   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )ÚTestSmartTrimAndPostProductionuG   Kiá»ƒm chá»©ng Dynamic Head Trim, Narrator Fitting vÃ  Smart Stitching.c           	      ó"	  — t          ¦   «         }|d         }|d         dz  }|                     t          |¦  «        t          |¦  «        dd¬¦  «        }t          |¦  «        }|j        } |¦   «         }|sæddt          j        ¦   «         v st          j        t          ¦  «        rt          j	        t          ¦  «        ndd	t          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        nd	t          j	        |¦  «        t          j	        |¦  «        t          j	        |¦  «        d
œz  }	t          t          j        |	¦  «        ¦  «        ‚dx}x}}t          |¦  «        }||k    }
|
�st          j        d|
fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        nd	dt          j        ¦   «         v st          j        t          ¦  «        rt          j	        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        ndt          j	        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}
}|                     t          |¦  «        ¦  «        }|                     |¦  «        }|d         }|d         }||k     }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d         }
|d         }|
|z
  }d}||z
  }t          |¦  «        }d}||k     }|sít          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j	        t          ¦  «        ndt          j	        |
¦  «        t          j	        |¦  «        t          j	        |¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}
x}x}x}x}x}x}}dS )uG   PhÃ¡t hiá»‡n 1 giÃ¢y Ä‘áº§u tÄ©nh vÃ  tá»± Ä‘á»™ng cáº¯t tá»‰a -ss 1.0.r.   r,   ztrimmed_static_head.mp4ç      ð?T©r}   r   Útrim_durÚdetect_staticz_assert %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}.exists
}()
}r   Úout)rO   rP   r†   rˆ   rm   NrJ   ©z0%(py0)s == %(py5)s
{%(py5)s = %(py2)s(%(py3)s)
}r2   Útrimmed_out©rO   rV   r†   rˆ   r   rm   Úduration©ú<)z%(py1)s < %(py4)sr  r  rS   g      Ð?)zJ%(py10)s
{%(py10)s = %(py0)s(((%(py2)s - %(py4)s) - %(py7)s))
} < %(py13)sÚabs)rO   rV   rQ   rm   rš   r‹   zassert %(py15)sÚpy15)r   Úsmart_trim_shot_headr2   r   r›   r[   r\   rY   r]   r^   r`   ra   rZ   Úinspect_shot_audiorU  )rb   r;   ÚengineÚstatic_videorP  rN  rd   r¦   ru   rw   rh   r¥   Úrep_origÚrep_trimr§   re   rf   rg   rv   r­   Ú@py_assert9r©   r±   rª   r³   s                            r:   Ú#test_smart_trim_detects_static_headzBTestSmartTrimAndPostProduction.test_smart_trim_detects_static_head¯  sî  € å&Ñ(Ô(ˆØ&Ð':Ô;ˆØ% eÔ,Ð/HÑHˆà×)Ò)Ý˜<Ñ(Ô(Ý˜KÑ(Ô(ØØð	 *ñ 
ô 
ˆõ �C‰yŒyÐ!ˆyÔÐ!ÐÐÑ!Ô!Ð!Ð!Ð!Ð!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�tÑ!Ô!Ð!Õ!Ô!�tÑ!Ô!Ð!Ð!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�CÑ!Ô!Ð!Õ!Ô!�CÑ!Ô!Ð!Ð!Õ!Ô!ˆyÑ!Ô!Õ!Ô!ÐÑ!Ô!Õ!Ô!Ð!Ñ!Ô!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ý˜+Ñ&Ô&Ð&ˆsÐ&Ò&Ð&Ð&Ñ&Õ&Ô&Ð&Ð&Ð&Ð&ˆsÐ&Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆsÑ&Ô&Ð&Õ&Ô&ˆsÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&•cÑ&Ô&Ð&Õ&Ô&•cÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜+Ñ&Ô&Ð&Õ&Ô&˜+Ñ&Ô&Ð&Ð&Õ&Ô&Ð&Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ð ×,Ò,­S°Ñ->Ô->Ñ?Ô?ˆØ×,Ò,¨SÑ1Ô1ˆØ˜
Ô#Ð: h¨zÔ&:Ð:Ð#Ð&:Ò:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð#Ð&:Ð:Ñ:Ô:Õ:Ô:Ð#Ñ:Ô:Õ:Ô:Ð&:Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø˜JÔ'ÐL¨(°:Ô*>ÐLÐ'Ð*>Ñ>ÐLÀÐLÐ>ÀÑDÐL�sÐDÑEÔEÐLÈÐLÐEÈÒLÐLÐLÐLÕLÔLÐLÐLÐLÐLÐEÈÐLÑLÔLÐLÕLÔLÑLÔLÐLÐLÕLÔL�sÑLÔLÐLÕLÔL�sÑLÔLÐLÐLÕLÔLÐ'ÑLÔLÕLÔLÐ*>ÑLÔLÕLÔLÀÑLÔLÕLÔLÐEÑLÔLÕLÔLÈÑLÔLÐLÐLÑLÐLÐLÐLÐLÐLÑLÐLÕLÕLÔLÐLÑLÔLÑLÔLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLr<   c                 ón  — t          ¦   «         }|d         }|d         dz  }|                     t          |¦  «        t          |¦  «        dd¬¦  «        }t          |¦  «        }||k    }|�st          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	d
t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd
dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}}|j        } |¦   «         }
|
 }|s‹ddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |
¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}
}dS )uD   Video cÃ³ chuyá»ƒn Ä‘á»™ng ngay tá»« Ä‘áº§u thÃ¬ khÃ´ng cáº¯t tá»‰a.r-   r,   zskip_moving_head.mp4rJ  TrK  rJ   rO  rN  r2   rQ  r   rm   NzEassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}rP  ©rO   rV   rQ   )r   rW  r2   rY   rZ   r[   r\   r]   r^   r`   ra   r›   )rb   r;   rY  r-   rP  rN  r¦   rh   r¥   rw   re   rv   s               r:   Ú"test_smart_trim_skips_dynamic_headzATestSmartTrimAndPostProduction.test_smart_trim_skips_dynamic_headÅ  sa  € å&Ñ(Ô(ˆØ& ~Ô6ˆØ% eÔ,Ð/EÑEˆà×)Ò)Ý˜<Ñ(Ô(Ý˜KÑ(Ô(ØØð	 *ñ 
ô 
ˆõ ˜,Ñ'Ô'Ð'ˆsÐ'Ò'Ð'Ð'Ñ'Õ'Ô'Ð'Ð'Ð'Ð'ˆsÐ'Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆsÑ'Ô'Ð'Õ'Ô'ˆsÑ'Ô'Ð'Ð'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'•cÑ'Ô'Ð'Õ'Ô'•cÑ'Ô'Ð'Ð'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'˜,Ñ'Ô'Ð'Õ'Ô'˜,Ñ'Ô'Ð'Ð'Õ'Ô'Ð'Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'ØÔ%Ð'Ð%Ð%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'�;Ñ'Ô'Ð'Õ'Ô'�;Ñ'Ô'Ð'Ð'Õ'Ô'Ð%Ñ'Ô'Õ'Ô'Ð'Ñ'Ô'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r<   c                 óD	  — t          ¦   «         }|d         }|d         }|d         dz  }|                     t          |¦  «        t          |¦  «        t          |¦  «        d¬¦  «        }d}||u }|s—t          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}}|j        } |¦   «         }|s‹ddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚dx}}|                     t          |¦  «        ¦  «        }|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|d         }d}||z
  }t          |¦  «        }d}||k     }|sÚt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}x}}|                     t          |¦  «        ¦  «        }d }| }|d!         }t          |¦  «        }||k    }d"}| }||k    }|r|sÜt          j        d#||fd$|||f¦  «        t          j        |¦  «        d%t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd%t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d&œz  }d'd(|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}x}x}x}}dS ))uZ   Khá»›p thá»�i lÆ°á»£ng video vá»›i giá»�ng Ä‘á»�c + 0.3s buffer vÃ  chuáº©n hÃ³a EBU R128.r-   r/   r,   zfitted_narration.mp4rø   )r}   Únarration_audio_pathr   Ú
buffer_secTr  ©z%(py0)s is %(py3)sÚokr…   r‡   rˆ   NúAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}Ú
fitted_outr`  Ú	has_audio©z%(py1)s is %(py4)sr  r  rS   rR  gffffff@gš™™™™™É?rS  )z<%(py7)s
{%(py7)s = %(py0)s((%(py2)s - %(py4)s))
} < %(py10)srU  )rO   rV   rQ   rm   rš   zassert %(py12)sr‘   g     €0@Úinput_ig      '@)rú   rú   )z1-%(py1)s <= %(py9)s
{%(py9)s = %(py5)s(%(py7)s)
}z2%(py9)s
{%(py9)s = %(py5)s(%(py7)s)
} <= -%(py11)sÚfloat)rP   rˆ   rm   ro   rŠ   zassert %(py14)sr’   )r   Úfit_footage_to_narrationr2   rY   rZ   r[   r\   r]   r^   r`   ra   r›   rX  rU  Úmeasure_loudnessrl  )rb   r;   rY  r-   r/   rh  rf  rd   rh   r¤   r¥   re   rf   Úrepr§   rg   rv   ru   r]  r­   rº   r²   Úmeasr¨   r©   r¦   r«   s                              r:   Útest_fit_footage_to_narrationz<TestSmartTrimAndPostProduction.test_fit_footage_to_narrationÖ  s=  € å&Ñ(Ô(ˆØ& ~Ô6ˆØ)Ð*;Ô<ˆØ$ UÔ+Ð.DÑDˆ
à×,Ò,Ý˜<Ñ(Ô(Ý!$ _Ñ!5Ô!5Ý˜J™œØð	 -ñ 
ô 
ˆð Ðˆr�TˆzÐÐÐÕÔÐÐÐÐˆr�TÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ�TÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔ Ð"Ð Ð Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Ð"Õ"Ô"Ð Ñ"Ô"Õ"Ô"Ð"Ñ"Ô"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ø×'Ò'­¨J©¬Ñ8Ô8ˆØ�;ÔÐ' 4Ð'Ð 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð 4Ð'Ñ'Ô'Õ'Ô'ÐÑ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'à�z”?Ð0 SÐ0�? SÑ(Ð0�sÐ(Ñ)Ô)Ð0¨DÐ0Ð)¨DÒ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð)¨DÐ0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0�sÑ0Ô0Ð0Õ0Ô0�sÑ0Ô0Ð0Ð0Õ0Ô0�?Ñ0Ô0Õ0Ô0 SÑ0Ô0Õ0Ô0Ð)Ñ0Ô0Õ0Ô0¨DÑ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0à×&Ò&¥s¨:¡¤Ñ7Ô7ˆØÐ7�ˆuÐ7˜d 9œoÐ7�˜oÑ.Ô.Ð7ˆuÐ.Ò7Ð7°4Ð7°4°%Ð7Ð.°%Ò7Ð7Ð7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð7ˆuÐ.°%Ð7Ñ7Ô7Õ7Ô7�Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�Ñ7Ô7Ð7Õ7Ô7�Ñ7Ô7Ð7Ð7Õ7Ô7˜oÑ7Ô7Õ7Ô7Ð.Ñ7Ô7Õ7Ô7°4Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7r<   c                 óœ  — t          ¦   «         }|d         }|d         }t          |¦  «        ddœt          |¦  «        ddœg}|d         dz  }|                     |t          |¦  «        d¬¦  «        }d	}||u }	|	s—t          j        d
|	fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}|j        }	 |	¦   «         }|s‹ddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}|                     t          |¦  «        ¦  «        }|d         }d	}||u }|slt          j        d
|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|                     d¦  «        p|j        }t          j        |ddddddt          |¦  «        gd	d	d	¬ ¦  «        }t#          j        |j        ¦  «        }t)          d!„ |d"         D ¦   «         d#         ¦  «        }t)          d$„ |d"         D ¦   «         d#         ¦  «        }||z
  }t+          |¦  «        }d%}||k     }|�sbt          j        d&|fd'||f¦  «        d(t          j        ¦   «         v st          j        t*          ¦  «        rt          j        t*          ¦  «        nd(d)t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd)d*t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd*t          j        |¦  «        t          j        |¦  «        d+œz  }t          j        d,|d-›d.|d-›d/t+          ||z
  ¦  «        d-›d0�¦  «        d1z   d2|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}}t          |¦  «        ddœt          |¦  «        ddœg}|d         d3z  }|                     |t          |¦  «        ¦  «        }d	}||u }	|	s—t          j        d
|	fd||f¦  «        d4t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd4t          j        |¦  «        dœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}|j        }	 |	¦   «         }|s‹dd5t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd5t          j        |	¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚dx}	}|                     t          |¦  «        ¦  «        }|d         }d	}||u }|slt          j        d
|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}dS )6uR   GhÃ©p ná»‘i thÃ´ng minh: xfade cho CONTINUOUS_TAKE vÃ  hard cut cho CINEMATIC_CUT.r-   ÚCINEMATIC_CUT©r}   Ú	take_typeÚCONTINUOUS_TAKEr,   zstitch_continuous.mp4ç      à?©Ú	xfade_durTr  re  Úok_contr…   r‡   rˆ   Nrg  Úout_contr`  ri  rj  r  r  rS   Úffprobeú-vÚerrorú-show_entriesú*stream=codec_type,duration:format=durationú-ofÚjson©r*   Útextr+   c                 ó6   — g | ]}|d          dk    ¯|d         ‘ŒS ©Ú
codec_typeÚvideorR  rÈ   ©rÑ   Úss     r:   rÔ   zhTestSmartTrimAndPostProduction.test_stitch_flowkit_smart_continuous_vs_cinematic_cut.<locals>.<listcomp>  ó+   € Ð^Ð^Ð^¨À1À\Ä?ÐV]ÒC]ÐC]�q˜”}ÐC]ÐC]ÐC]r<   Ústreamsr   c                 ó6   — g | ]}|d          dk    ¯|d         ‘ŒS ©r‡  ÚaudiorR  rÈ   r‰  s     r:   rÔ   zhTestSmartTrimAndPostProduction.test_stitch_flowkit_smart_continuous_vs_cinematic_cut.<locals>.<listcomp>  r‹  r<   çš™™™™™©?rS  ©z;%(py5)s
{%(py5)s = %(py0)s((%(py1)s - %(py2)s))
} < %(py8)srU  Úv_durÚa_dur©rO   rP   rV   rˆ   r˜   u   Lá»‡ch Ä‘á»“ng bá»™ A/V: Video=ú.3fú	s, Audio=z	s (delta=zs)r™   rš   zstitch_cut.mp4Úok_cutÚout_cut)r   r2   Ústitch_flowkit_smartrY   rZ   r[   r\   r]   r^   r`   ra   r›   rX  Úgetr|  r3   r4   r‚  ÚloadsÚstdoutrl  rU  r_   )rb   r;   rY  Úv1Úv2Úentries_continuousr{  rz  rd   rh   r¤   r¥   re   rf   Úrep_contr§   rg   Úffprobe_exeÚ	probe_resÚp_datar’  r“  r¦   r®   ru   r¹   rº   Úentries_cutr˜  r—  Úrep_cuts                                  r:   Ú5test_stitch_flowkit_smart_continuous_vs_cinematic_cutzTTestSmartTrimAndPostProduction.test_stitch_flowkit_smart_continuous_vs_cinematic_cutî  s)	  € å&Ñ(Ô(ˆØ˜^Ô,ˆØ˜^Ô,ˆõ ˜r™7œ7°ÐAÐAÝ˜r™7œ7Ð1BÐCÐCð
Ðð # 5Ô)Ð,CÑCˆØ×-Ò-Ð.@Å#ÀhÁ-Ä-Ð[^Ð-Ñ_Ô_ˆØÐˆw˜$ˆÐÐÐÕÔÐÐÐÐˆw˜$ÐÑÔÐÕÔÑÔÐÐÕÔˆwÑÔÐÕÔˆwÑÔÐÐÕÔ˜$ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØŒÐ ˆˆÑ Ô Ð Ð Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆxÑ Ô Ð Õ Ô ˆxÑ Ô Ð Ð Õ Ô ˆÑ Ô Õ Ô Ð Ñ Ô Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ø×,Ò,­S°©]¬]Ñ;Ô;ˆØ˜Ô$Ð,¨Ð,Ð$¨Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ð &×)Ò)¨)Ñ4Ô4ÐF¸¼ˆÝ”NØ˜$ ¨Ð:fÐhmÐouÕwzð  |Dñ  xEô  xEð  FØ d°$ð
ñ 
ô 
ˆ	õ ”˜IÔ,Ñ-Ô-ˆÝÐ^Ð^¨f°YÔ.?Ð^Ñ^Ô^Ð_`ÔaÑbÔbˆÝÐ^Ð^¨f°YÔ.?Ð^Ñ^Ô^Ð_`ÔaÑbÔbˆØ˜5‘=ð  	M�s�=Ñ!Ô!ð  	M Dð  	MÐ! DÒ(ð  	Mð  	Mñ  	Mõ  	Mô  	Mð  	Mð  	Mð  	Mð  	MÐ! Dð  	Mñ  	Mô  	Mð  	Mõ  	Mô  	Mñ  	Mô  	Mð  	Mð  	Mõ  	Mô  	M�sñ  	Mô  	Mð  	Mõ  	Mô  	M�sñ  	Mô  	Mð  	Mð  	Mð  	Mõ  	Mô  	Mñ  	Mô  	Mð  	Mð  	Mõ  	Mô  	M�5ñ  	Mô  	Mð  	Mõ  	Mô  	M�5ñ  	Mô  	Mð  	Mð  	Mð  	Mõ  	Mô  	Mñ  	Mô  	Mð  	Mð  	Mõ  	Mô  	M˜5ñ  	Mô  	Mð  	Mõ  	Mô  	M˜5ñ  	Mô  	Mð  	Mð  	Mõ  	Mô  	MÐ!ñ  	Mô  	Mõ  	Mô  	M Dñ  	Mô  	Mð  	Mð  	Mñ  	Mð  	Mõ  	Mô  	Mð  +MÈEð  +Mð  +Mð  +MÐ`eð  +Mð  +Mð  +MÕtwÐx}ð  Dñ  yDñ  uEô  uEð  +Mð  +Mð  +Mð  +Mñ  	Mô  	Mð  	Mñ  	Mð  	Mð  	Mð  	Mñ  	Mð  	Mõ  	Mõ  	Mô  	Mð  	Mñ  	Mô  	Mñ  	Mô  	Mð  	Mð  	Mð  	Mð  	Mð  	Mð  	Mð  	Mð  	Mð  	Mõ ˜r™7œ7°ÐAÐAÝ˜r™7œ7°ÐAÐAð
ˆð " %Ô(Ð+;Ñ;ˆØ×,Ò,¨[½#¸g¹,¼,ÑGÔGˆØÐˆv˜ˆ~ÐÐÐÕÔÐÐÐÐˆv˜ÐÑÔÐÕÔÑÔÐÐÕÔˆvÑÔÐÕÔˆvÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØŒ~Ðˆ~ˆ~ÑÔÐÐÐÐÐÕÔÑÔÐÐÕÔˆwÑÔÐÕÔˆwÑÔÐÐÕÔˆ~ÑÔÕÔÐÑÔÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ×+Ò+­C°©L¬LÑ9Ô9ˆØ�{Ô#Ð+ tÐ+Ð# tÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð# tÐ+Ñ+Ô+Õ+Ô+Ð#Ñ+Ô+Õ+Ô+ tÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+r<   c                 óÈ  — t          ¦   «         }|d         }|d         dz  }t          |¦  «        ddœt          |¦  «        ddœt          |¦  «        ddœg}|                     |t          |¦  «        d¬¦  «        }d	}||u }|s—t          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }	dd|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}}|j        } |¦   «         }|s‹ddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚dx}}|                     d¦  «        p|j        }t          j        |ddddddt          |¦  «        gd	d	d	¬¦  «        }t!          j        |j        ¦  «        }t'          d„ |d         D ¦   «         d         ¦  «        }t'          d„ |d         D ¦   «         d         ¦  «        }||z
  }t)          |¦  «        }d }||k     }|�sNt          j        d!|fd"||f¦  «        d#t          j        ¦   «         v st          j        t(          ¦  «        rt          j        t(          ¦  «        nd#d$t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd$d%t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd%t          j        |¦  «        t          j        |¦  «        d&œz  }t          j        d'|d(›d)|d(›d*�¦  «        d+z   d,|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}}dS )-uk   Kiá»ƒm chá»©ng ghÃ©p ná»‘i Ä‘a shot (3+ shots) vá»›i tá»• há»£p xen káº½ CONTINUOUS_TAKE vÃ  CINEMATIC_CUT.r-   r,   zstitch_3shot_mixed.mp4rs  rt  rv  rw  rx  Tr  re  rf  r…   r‡   rˆ   Nrg  Ú	out_mixedr`  r|  r}  r~  r  r€  r�  r‚  rƒ  c                 ó6   — g | ]}|d          dk    ¯|d         ‘ŒS r†  rÈ   r‰  s     r:   rÔ   zaTestSmartTrimAndPostProduction.test_stitch_flowkit_smart_3shot_mixed_chaining.<locals>.<listcomp>,  r‹  r<   rŒ  r   c                 ó6   — g | ]}|d          dk    ¯|d         ‘ŒS rŽ  rÈ   r‰  s     r:   rÔ   zaTestSmartTrimAndPostProduction.test_stitch_flowkit_smart_3shot_mixed_chaining.<locals>.<listcomp>-  r‹  r<   r�  rS  r‘  rU  r’  r“  r”  u"   Lá»‡ch Ä‘á»“ng bá»™ 3-shot: Video=r•  r–  rŠ  r™   rš   )r   r2   r™  rY   rZ   r[   r\   r]   r^   r`   ra   r›   rš  r|  r3   r4   r‚  r›  rœ  rl  rU  r_   )rb   r;   rY  rÓ   r¨  Úentriesrf  rd   rh   r¤   r¥   re   rf   r¡  r¢  r£  r’  r“  r¦   r®   ru   r¹   rº   s                          r:   Ú.test_stitch_flowkit_smart_3shot_mixed_chainingzMTestSmartTrimAndPostProduction.test_stitch_flowkit_smart_3shot_mixed_chaining  sW  € å&Ñ(Ô(ˆØ˜NÔ+ˆØ# EÔ*Ð-EÑEˆ	õ ˜q™6œ6°Ð@Ð@Ý˜q™6œ6Ð0AÐBÐBÝ˜q™6œ6°Ð@Ð@ð
ˆð
 ×(Ò(¨µ#°i±.´.ÈCÐ(ÑPÔPˆØÐˆr�TˆzÐÐÐÕÔÐÐÐÐˆr�TÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ�TÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔÐ!ÐÐÑ!Ô!Ð!Ð!Ð!Ð!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆyÑ!Ô!Ð!Õ!Ô!ˆyÑ!Ô!Ð!Ð!Õ!Ô!ÐÑ!Ô!Õ!Ô!Ð!Ñ!Ô!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!à%×)Ò)¨)Ñ4Ô4ÐF¸¼ˆÝ”NØ˜$ ¨Ð:fÐhmÐouÕwzð  |Eñ  xFô  xFð  GØ d°$ð
ñ 
ô 
ˆ	õ ”˜IÔ,Ñ-Ô-ˆÝÐ^Ð^¨f°YÔ.?Ð^Ñ^Ô^Ð_`ÔaÑbÔbˆÝÐ^Ð^¨f°YÔ.?Ð^Ñ^Ô^Ð_`ÔaÑbÔbˆØ˜5‘=Ðo�s�=Ñ!Ô!Ðo DÐoÐ! DÒ(ÐoÐoÑoÕoÔoÐoÐoÐoÐoÐ! DÐoÑoÔoÐoÕoÔoÑoÔoÐoÐoÕoÔo�sÑoÔoÐoÕoÔo�sÑoÔoÐoÐoÐoÕoÔoÑoÔoÐoÐoÕoÔo�5ÑoÔoÐoÕoÔo�5ÑoÔoÐoÐoÐoÕoÔoÑoÔoÐoÐoÕoÔo˜5ÑoÔoÐoÕoÔo˜5ÑoÔoÐoÐoÕoÔoÐ!ÑoÔoÕoÔo DÑoÔoÐoÐoÑoÐoÕoÔoÐ*oÈuÐ*oÐ*oÐ*oÐchÐ*oÐ*oÐ*oÐ*oÑoÔoÐoÑoÐoÐoÐoÑoÐoÕoÕoÔoÐoÑoÔoÑoÔoÐoÐoÐoÐoÐoÐoÐoÐoÐoÐoÐor<   c                 ól  — t          ¦   «         }|d         }|dz  }|j        dddddddddd	d
ddt          |¦  «        g}t          j        |dd¬¦  «         |                     t          |¦  «        dd¬¦  «        }t          |¦  «        }||k    }|�st          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nddt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚dx}}dS )u]   Video quÃ¡ ngáº¯n (<= 1.5s) Ä‘Æ°á»£c báº£o vá»‡ an toÃ n, khÃ´ng bá»‹ cáº¯t trá»¥i (-ss 1.0).r,   zultra_short_clip.mp4r   r   r    r!   z)testsrc=duration=1.2:size=640x360:rate=24z1sine=frequency=440:duration=1.2:sample_rate=48000r"   r#   r%   r&   Tr)   FrJ  )rM  rL  rJ   rO  rN  r2   Úshort_videorQ  r   rm   N)r   r0   r2   r3   r4   rW  rY   rZ   r[   r\   r]   r^   r`   ra   )rb   r;   rY  r6   r®  ÚcmdrN  r¦   rh   r¥   rw   s              r:   Ú$test_smart_trim_short_clip_safeguardzCTestSmartTrimAndPostProduction.test_smart_trim_short_clip_safeguard0  sÜ  € å&Ñ(Ô(ˆØ" 5Ô)ˆØÐ!7Ñ7ˆð ŒM˜4Ø�'˜4Ð!LØ�'˜4Ð!TØ�I˜v u­c°+Ñ.>Ô.>ð	
ˆõ 	Œ�s¨4°tÐ<Ñ<Ô<Ð<à×)Ò)­#¨kÑ*:Ô*:È%ÐZ]Ð)Ñ^Ô^ˆå˜+Ñ&Ô&Ð&ˆsÐ&Ò&Ð&Ð&Ñ&Õ&Ô&Ð&Ð&Ð&Ð&ˆsÐ&Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆsÑ&Ô&Ð&Õ&Ô&ˆsÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&•cÑ&Ô&Ð&Õ&Ô&•cÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜+Ñ&Ô&Ð&Õ&Ô&˜+Ñ&Ô&Ð&Ð&Õ&Ô&Ð&Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r<   c                 ó.  — d}t          j        |ddgd¦  «        \  }}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndd	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }	d}
 |	|
¦  «        }|sžddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚dx}	x}
}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}|j        }	d}
 |	|
¦  «        }|j        }d} ||¦  «        }||k     }|�s4t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	x}
x}x}x}x}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}|j        }	d}
 |	|
¦  «        }|j        }d} ||¦  «        }||k     }|�s4t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	x}
x}x}x}x}}dS )um   Prompt Healer xá»­ lÃ½ chuáº©n xÃ¡c xuá»‘ng dÃ²ng, Closed Lips variant vÃ  báº£o lÆ°u Audio Guard á»Ÿ cuá»‘i.u‡   NÃ ng Kiá»�u nhÃ¬n xa xÄƒm.
[KHÃ“A KHáº¨U HÃŒNH: Ä�Ã´i mÃ´i khÃ©p cháº·t]
Quy táº¯c Ã¢m thanh: Tuyá»‡t Ä‘á»‘i KHÃ”NG sinh nháº¡c ná»�n.rÝ   râ   r   rA   rJ   rÍ   r¾   Ú	therapiesr¿   rÀ   r˜   Nu=   Quy táº¯c Ã¢m thanh: Tuyá»‡t Ä‘á»‘i KHÃ”NG sinh nháº¡c ná»�n.r)  r'  rÁ   u   [KHÃ“A KHáº¨U HÃŒNHrq   r%  r&  r‡   rˆ   r*  rS  )zˆ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.index
}(%(py4)s)
} < %(py14)s
{%(py14)s = %(py10)s
{%(py10)s = %(py8)s.index
}(%(py12)s)
})rO   rV   rQ   rS   r˜   rš   r‘   r’   rŒ   r�   z[HEALING-CRITICAL:)r   r+  r¾   rY   rZ   r[   r\   r]   r^   r`   ra   r,  Úindex)rb   Úpr'  r²  rd   rv   r¦   rg   r¹   rh   re   r§   r¤   r¥   r]  r±   Ú@py_assert13r®   r«   r¬   s                       r:   Ú2test_heal_prompt_newline_guard_and_canonical_orderzQTestSmartTrimAndPostProduction.test_heal_prompt_newline_guard_and_canonical_orderC  sÖ  € ð XˆÝ2Ô>¸qÐCTÐVdÐBeÐguÑvÔvÑˆ�	Ý�9‰~Œ~Ð" Ð"ˆ~ Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ~ Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�sÑ"Ô"Ð"Õ"Ô"�sÑ"Ô"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�9Ñ"Ô"Ð"Õ"Ô"�9Ñ"Ô"Ð"Ð"Õ"Ô"ˆ~Ñ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"àŒÐ_Ð^Ð_ˆˆÐ^Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_ˆvÑ_Ô_Ð_Õ_Ô_ˆvÑ_Ô_Ð_Ð_Õ_Ô_ˆÑ_Ô_Õ_Ô_Ð^Ñ_Ô_Õ_Ô_Ð_Ñ_Ô_Ð_Ð_Ñ_Ð_Õ_Õ_Ô_Ð_Ñ_Ô_Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_à$Ð.Ð$¨Ð.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð$¨Ð.Ñ.Ô.Õ.Ô.Ð$Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.¨Ñ.Ô.Ð.Õ.Ô.¨Ñ.Ô.Ð.Ð.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.ØŒ|ÐYÐ1ÐYˆ|ˆ|Ð1Ñ2Ô2ÐY°V´\ÐYÐBXÐY°\°\ÐBXÑ5YÔ5YÐYÐ2Ð5YÒYÐYÐYÑYÕYÔYÐYÐYÐYÐYÐ2Ð5YÐYÑYÔYÐYÕYÔYÑYÔYÐYÐYÕYÔYˆvÑYÔYÐYÕYÔYˆvÑYÔYÐYÐYÕYÔYˆ|ÑYÔYÕYÔYÐ1ÑYÔYÕYÔYÐ2ÑYÔYÐYÕYÔYÑYÔYÐYÐYÕYÔY°VÑYÔYÐYÕYÔY°VÑYÔYÐYÐYÕYÔY°\ÑYÔYÕYÔYÐBXÑYÔYÕYÔYÐ5YÑYÔYÐYÐYÑYÐYÐYÐYÐYÐYÑYÐYÕYÕYÔYÐYÑYÔYÑYÔYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYà#Ð-Ð# vÐ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð# vÐ-Ñ-Ô-Õ-Ô-Ð#Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô- vÑ-Ô-Ð-Õ-Ô- vÑ-Ô-Ð-Ð-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-ØŒ|ÐWÐ0ÐWˆ|ˆ|Ð0Ñ1Ô1ÐW°F´LÐWÐAVÐW°L°LÐAVÑ4WÔ4WÐWÐ1Ð4WÒWÐWÐWÑWÕWÔWÐWÐWÐWÐWÐ1Ð4WÐWÑWÔWÐWÕWÔWÑWÔWÐWÐWÕWÔWˆvÑWÔWÐWÕWÔWˆvÑWÔWÐWÐWÕWÔWˆ|ÑWÔWÕWÔWÐ0ÑWÔWÕWÔWÐ1ÑWÔWÐWÕWÔWÑWÔWÐWÐWÕWÔW°FÑWÔWÐWÕWÔW°FÑWÔWÐWÐWÕWÔW°LÑWÔWÕWÔWÐAVÑWÔWÕWÔWÐ4WÑWÔWÐWÐWÑWÐWÐWÐWÐWÐWÑWÐWÕWÕWÔWÐWÑWÔWÑWÔWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWr<   c                 óà  — |d         }|d         dz  }t          |d|¬¦  «        \  }}d}||u}|s—t          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        d
œz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}}|j	        } |¦   «         }
|
s‹ddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |
¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚dx}}
dS )u_   Contact sheet vá»›i preserve_aspect_ratio=True duy trÃ¬ tá»‰ lá»‡ pixel 16:9 khÃ´ng mÃ©o hÃ¬nh.r-   r,   zar_preserved_sheet.jpgrD   )r~   r   Nr�   rƒ   r„   r…   r‡   rˆ   rg  r´  r`  )
r   rY   rZ   r[   r\   r]   r^   r`   ra   r›   )rb   r;   r}   Ú	out_sheetr„   r´  rd   rh   r¤   r¥   re   rf   s               r:   Ú(test_contact_sheet_preserve_aspect_ratiozGTestSmartTrimAndPostProduction.test_contact_sheet_preserve_aspect_ratioQ  s¢  € à$ ^Ô4ˆ
Ø# EÔ*Ð-EÑEˆ	Ý8¸ÐPQÐ_hÐiÑiÔi‰ˆ	�1Ø $Ð$ˆy Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆy Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$ØŒxÐˆxˆx‰zŒzÐˆzÐÐÐÕÔÑÔÐÐÕÔˆqÑÔÐÕÔˆqÑÔÐÐÕÔˆxÑÔÕÔˆzÑÔÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr<   c                 óÌ  — ddl }ddl} |j        |j        ddgddddd¬¦  «        }|j        }d}||u}|sªt          j        d	|fd
||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}	|j        }|	|v }
|
sªt          j        d|
fd|	|f¦  «        t          j
        |	¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}
}d}	|j        }|	|v }
|
sªt          j        d|
fd|	|f¦  «        t          j
        |	¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}
}dS )ub   CLI cá»§a production_orchestrator há»— trá»£ Ä‘áº§y Ä‘á»§ --mode flowkit_smart vÃ  --pacing-3beat.r   Nz105_Production_Pipeline/production_orchestrator.pyz--helpTzutf-8Úreplace)r*   r„  ÚencodingÚerrorsr+   r�   )z2%(py2)s
{%(py2)s = %(py0)s.stdout
} is not %(py5)sÚresrÿ   r   rm   Úflowkit_smartrq   )z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.stdout
})rP   r†   rˆ   z--pacing-3beat)r3   Úsysr4   Ú
executablerœ  rY   rZ   r[   r\   r]   r^   r`   ra   )rb   r3   rÀ  r¾  rh   r¦   re   r¥   rw   r§   rd   s              r:   Ú(test_orchestrator_cli_flowkit_smart_modezGTestSmartTrimAndPostProduction.test_orchestrator_cli_flowkit_smart_modeY  së  € àÐÐÐØˆ
ˆ
ˆ
ØˆjŒnØŒ^ÐPÐRZÐ[Ø d°WÀYÐVZð
ñ 
ô 
ˆð ŒzÐ% Ð%ˆz Ð%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆz Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆsÑ%Ô%Ð%Õ%Ô%ˆsÑ%Ô%Ð%Ð%Õ%Ô%ˆzÑ%Ô%Õ%Ô% Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ØÐ, #¤*Ð,ˆ *Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,ˆ *Ð,Ñ,Ô,Õ,Ô,ˆÑ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô, #Ñ,Ô,Ð,Õ,Ô, #Ñ,Ô,Ð,Ð,Õ,Ô, *Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÐ- 3¤:Ð-Ð :Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð :Ð-Ñ-Ô-Õ-Ô-ÐÑ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô- 3Ñ-Ô-Ð-Õ-Ô- 3Ñ-Ô-Ð-Ð-Õ-Ô- :Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-r<   N)rÄ   rÅ   rÆ   rÇ   r^  ra  rq  r¦  r¬  r°  r¶  r¹  rÂ  rÈ   r<   r:   rH  rH  ¬  s«   € € € € € ØQÐQðMð Mð Mð,(ð (ð (ð"8ð 8ð 8ð0',ð ',ð ',ðRpð pð pð2'ð 'ð 'ð&Xð Xð Xðð ð ð
.ð 
.ð 
.ð 
.ð 
.r<   rH  )<rÇ   Úbuiltinsr[   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterY   ÚosrÀ  r‚  ÚshutilÚtempfiler3   Úpathlibr   Útypingr   r   r   r   ÚpytestÚnumpyr–   Úcv2Ú__file__ÚresolveÚparentÚPROJECT_ROOTÚPIPELINE_DIRr2   ÚpathÚinsertÚcontact_sheet_enginer	   r
   r   r   r   Úprompt_healerr   r   r   r   Úantigravity_critic_gater   r   r   r   r   Úaudio_continuity_enginer   r   r   Úfixturer;   r>   rÊ   r  r:  rH  rÈ   r<   r:   ú<module>rÛ     s8  ððð ð@ € € € € € € € € € € € € €	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø €€€Ø Ð Ð Ð Ø 
€
€
€
àˆt�H‰~Œ~×%Ò%Ñ'Ô'Ô.Ô5€ØÐ6Ñ6€Ø€3€|ÑÔ˜CœHÐ$Ð$Ø„H‡O‚O�A�s�s˜<Ñ(Ô(Ñ)Ô)Ð)ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð €„�iÐ Ñ Ô ð1ð 1ñ !Ô ð1ðp>5ð >5ð >5ð >5ð >5ñ >5ô >5ð >5ðJb/ð b/ð b/ð b/ð b/ñ b/ô b/ð b/ðRF8ð F8ð F8ð F8ð F8ñ F8ô F8ð F8ðZ Eð  Eð  Eð  Eð  Eñ  Eô  Eð  EðNw.ð w.ð w.ð w.ð w.ñ w.ô w.ð w.ð w.ð w.r<   