+
    ˜°³j¸ð  ã                   óJ  € ^ RI t ^ RIHt ^ RIt. tRR ltRR ltR t] P                   ! R R4      4       t	] P                   ! R R	4      4       t
RR
 R llt]P                  P                  RRR7      R R l4       t^t]P                   R R l4       t]P$                  R 4       tR t]P+                  ]]R7       ]P                  P                  RRR7      R R l4       tR t]P                   R R l4       t]P$                  R 4       tR t]P+                  ]]R7       R# ) é    N)Úcached_propertyc                 ój   € \         P                  ! V'       d   T MR\        V 4      ,          VVRR7      # ©r   F)ÚdeviceÚdtypeÚrequires_grad©r   )ÚtorchÚemptyÚlen©Úshaper   r   Úwhens   &&&&Úf/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/nn/modules/linear_cross_entropy.pyÚ_make_emptyr   
   s,   € ä�;Š;ß‰˜4¤# e£*Õ,ØØØô	ð ó    c                 ój   € \         P                  ! V'       d   T MR\        V 4      ,          VVRR7      # r   )r
   Úzerosr   r   s   &&&&r   Ú_make_zerosr      s,   € Ü�;Š;ß‰˜4¤# e£*Õ,ØØØô	ð r   c                 ó:  € VEv pppppV P                  R 4       W@n        WPn        W`n        Wpn        Vw  r8ršV'       d   VP                  4       MRV n        V'       d   V	P                  4       MRV n        V'       d   V
P                  4       V n        R# RV n        R# )FN)	Úset_materialize_gradsÚallow_retain_graphÚcompute_input_gradÚcompute_linear_weight_gradÚcompute_linear_bias_gradÚdetachÚ_giÚ_gwÚ_gb)ÚctxÚinputsÚoutputÚ_r   r   r   r   Ú
grad_inputÚgrad_linear_weightÚgrad_linear_biass   &&&        r   Ú1_linear_cross_entropy_batch_chunked_setup_contextr'      s’   € ð 	ñØ	
ØØØ"Ø ð ×Ñ˜eÔ$Ø/ÔØ/ÔØ%?Ô"Ø#;Ô Ø:@Ñ7€AÐ%÷ &8ˆj×ÑÔ!¸T€C„Gß-GÐ ×'Ñ'Ô)ÈT€C„Gß+CÐ×%Ñ%Ó'€C†GÈ€C†Gr   c                   óH  a € ] tR t^<t o Rt]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t	]V 3R lR	 l4       t
]V 3R
 lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tV 3R ltRtV tR# )Ú_ChunkViewsz}Per-iteration tensor views; each property picks the right operand
or scratch from ctx dispatch flags so call sites read raw.
c                ó4   <€ V ^8„  d   QhRS[ P                  /# ©é   Úreturn©r
   ÚTensor)ÚformatÚ__classdict__s   "€r   Ú__annotate__Ú_ChunkViews.__annotate__L   s   ø€ ÷ ñ ™Ÿ™ñ r   c                óX  € V P                   pVP                  '       g   V P                  # VP                  P	                  ^ ^ V P
                  4      pVP                  e0   \        P                  ! V P                  VP                  VR7       V# VP                  V P                  4       V# )r   ©Úout)
r    Úalloc_prob_target_bufÚtarget_chunkÚprob_target_bufÚnarrowÚbchunk_sizeÚ
weight_rowr
   ÚmulÚcopy_)Úselfr    r6   s   &  r   Úprob_wtÚ_ChunkViews.prob_wtK   s‰   € ð
 �h‰hˆØ×(×(Ð(Ø×$Ñ$Ð$Ø×!Ñ!×(Ñ(¨¨A¨t×/?Ñ/?Ó@ˆØ�>‰>Ò%Ü�IŠI�d×'Ñ'¨¯©¸SÕAð ˆ
ð �I‰I�d×'Ñ'Ô(Øˆ
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r3   [   s   ø€ ÷ 
ñ 
‘u—|‘|ñ 
r   c                ój   € V P                   P                  '       d   V P                  # V P                  # ©N)r    Úforward_uses_acc_inputÚinput_chunk_accÚinput_chunk©r?   s   &r   ÚinputÚ_ChunkViews.inputZ   s4   € ð �x‰x×.×.Ð.ð × Ñ ð	
ð ×!Ñ!ð	
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r3   c   s   ø€ ÷ 
ñ 
™uŸ|™|ñ 
r   c                ón   € V P                   pVP                  '       d   VP                  # VP                  # rD   )r    Úforward_uses_cuda_out_dtypeÚlinear_weightÚlinear_weight_cast©r?   r    s   & r   rN   Ú_ChunkViews.linear_weightb   s9   € à�h‰hˆð ×.×.Ð.ð ×Ñð	
ð ×'Ñ'ð	
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r3   l   s   ø€ ÷ ñ ¡5§<¡<ñ r   c                ój   € V P                   P                  '       d   V P                  # V P                  # rD   )r    Úinput_grad_uses_logits_lwÚlogits_downcastÚlogitsrH   s   &r   Úinput_grad_logitsÚ_ChunkViews.input_grad_logitsk   s(   € à�8‰8×-×-Ð-Ø×'Ñ'Ð'Ø�{‰{Ðr   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r3   r   s   ø€ ÷ 
ñ 
©%¯,©,ñ 
r   c                ón   € V P                   pVP                  '       d   VP                  # VP                  # rD   )r    rT   rN   rO   rP   s   & r   Úinput_grad_linear_weightÚ$_ChunkViews.input_grad_linear_weightq   s9   € à�h‰hˆð ×,×,Ð,ð ×Ñð	
ð ×'Ñ'ð	
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r3   {   s   ø€ ÷ $ñ $¡5§<¡<ñ $r   c                ó’   € V P                   pVP                  '       d   VP                  '       g   V P                  # V P                  # rD   )r    Úis_cudaÚweight_grad_mm_same_dtyperG   rF   rP   s   & r   Úweight_grad_inputÚ_ChunkViews.weight_grad_inputz   s7   € à�h‰hˆØ�;�;ˆ;˜s×<×<Ð<Ø×#Ñ#Ð#Ø×#Ñ#Ð#r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r3   ‚   s   ø€ ÷ Tñ T™uŸ|™|ñ Tr   c                óú   € V P                   pVP                  '       g   VP                  '       d   V P                  # VP                  P                  ^ ^ V P                  4      P                  V P                  4      # r	   )r    r_   r`   rV   Úlogits_acc_bufr:   r;   r>   rP   s   & r   Úlogits_upcastÚ_ChunkViews.logits_upcast�   s[   € ð �h‰hˆØ�;�;ˆ;˜#×7×7Ð7Ø—;‘;ÐØ×!Ñ!×(Ñ(¨¨A¨t×/?Ñ/?Ó@×FÑFÀtÇ{Á{ÓSÐSr   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r3   Š   s   ø€ ÷ Mñ M¡%§,¡,ñ Mr   c                óî   € V P                   pVP                  '       d(   VP                  P                  ^ ^ V P                  4      # VP
                  P                  ^ V P                  V P                  4      # r	   )r    Úalloc_input_grad_acc_bufÚinput_grad_acc_bufr:   r;   r$   Úbchunk_startrP   s   & r   Úgrad_input_chunkÚ_ChunkViews.grad_input_chunk‰   s_   € ð �h‰hˆØ×'×'Ð'Ø×)Ñ)×0Ñ0°°A°t×7GÑ7GÓHÐHØ�~‰~×$Ñ$ Q¨×(9Ñ(9¸4×;KÑ;KÓLÐLr   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r3   ’   s   ø€ ÷ $ñ $™uŸ|™|ñ $r   c                ón   € V P                   pVP                  '       d   VP                  # VP                  # rD   )r    Úalloc_linear_bias_grad_chunkÚlinear_bias_grad_chunkr&   rP   s   & r   Úbias_grad_accÚ_ChunkViews.bias_grad_acc‘   s1   € ð �h‰hˆØ×+×+Ð+Ø×-Ñ-Ð-Ø×#Ñ#Ð#r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r3   ¡   s   ø€ ÷ ñ ¡§¡ñ r   c                ó´   € V P                   pVP                  '       d0   V P                  P                  VP                  P
                  4      # V P                  # rD   )r    Úloop_caches_logits_downcastrV   ÚtorN   r   rP   s   & r   rU   Ú_ChunkViews.logits_downcast    sB   € ð �h‰hˆØ×*×*Ð*Ø—;‘;—>‘> #×"3Ñ"3×"9Ñ"9Ó:Ð:Ø�{‰{Ðr   c                óê   <€ V ^8„  d   Qh/ R;R&   S[ ;R&   S[ ;R&   S[P                  ;R&   S[P                  ;R&   S[P                  R,          ;R&   S[P                  ;R	&   S[P                  ;R
&   # )r,   Ú_ChunkContextr    rl   r;   rG   r8   NÚweight_chunkrV   rF   )Úintr
   r/   )r0   r1   s   "€r   r2   r3   <   s†   ø‡ ‚ ð 
Ññ ñ Ññ ñ Ññ ñ —‘Ññ ñ —,‘,Ññ ñ —,‘, Õ%Ñ%ñ ñ �L‰LÑñ ñ —\‘\Ñ!ò r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r@   ÚpropertyrI   rN   rW   r[   ra   rf   rm   rs   rU   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r1   s   @r   r)   r)   <   sÞ   ø‡ € ñð ÷ó ðð ÷
ó ð
ð ÷
ó ð
ð ÷ó ðð
 ÷
ó ð
ð ÷$ó ð$ð ÷Tó ðTð ÷Mó ðMð ÷$ó ð$ð ÷ó ð÷K ƒ r   r)   c                   óœ  a € ] tR t^©t o Rt]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR	 l4       t	]V 3R
 lR l4       t
]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]R8V 3R! lR" ll4       tR# tV 3R$ lR% ltV 3R& lR' ltV 3R( lR) ltV 3R* lR+ ltV 3R, lR- ltV 3R. lR/ ltV 3R0 lR1 ltV 3R2 lR3 ltV 3R4 lR5 lt V 3R6 lt!R7t"V t#R # )9r{   aP  Per-call state for the chunked loop, built once via ``build``.
Methods hide dtype/device/acc_policy dispatch behind single math ops;
dispatch-free per-iter math is inlined into the loop body. Buffers
dispatch decided are not needed are rank-matching empty tensors
(``when=False`` in ``_make_*``) so the dataclass surface stays uniform.
c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   Ú_ChunkContext.__annotate__è   s   ø€ ÷ 0ñ 0‘u—|‘|ñ 0r   c                ó4   € V P                   V P                  8H  # rD   )ÚtargetÚignore_indexrH   s   &r   Ú_maskÚ_ChunkContext._maskç   s   € à�{‰{˜d×/Ñ/Ñ/Ð/r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   ì   s   ø€ ÷ ñ ¡%§,¡,ñ r   c                ó  € V P                   '       d   V P                  # V P                  ^ 8  g   V P                  V P                  8¼  d-   \        P
                  ! V P                  ^ V P                  4      # V P                  # r	   )Úis_prob_targetr�   rŽ   Únum_classesr
   Úwherer�   rH   s   &r   Úcorrected_targetÚ_ChunkContext.corrected_targetë   s`   € ð ××Ðà—;‘;ÐØ×Ñ˜qÔ  D×$5Ñ$5¸×9IÑ9IÔ$IÜ—;’;˜tŸz™z¨1¨d¯k©kÓ:Ð:Ø�{‰{Ðr   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   ÷   s   ø€ ÷ !!ñ !!¡5§<¡<ñ !!r   c                óV  € V P                   pV P                  pV P                  pV P                  pVf   V( P	                  V4      pM’VP                  4       VP                  4       8”  d9   \        P                  ! V^ VP	                  V4      P                  ^ V4      4      pM7\        P                  ! V^ VP                  ^ V4      P	                  V4      4      pV P                  R8X  dL   VP                  4       pVP                  \        P                  ! V^ 8H  \        P                  V) 4      4       V# V P                  R8X  d   VP                  4        V# V P                  eC   VP                  4       P                  V P                  P	                  VP                   4      4       V# )NÚmeanÚsum)r�   r–   ÚweightÚweight_chunk_dtyperx   Únumelr
   r•   Úindex_selectÚ	reductionr›   Údiv_ÚnanÚneg_Úloss_grad_outputÚmul_r   )r?   Úmaskr�   rœ   r�   Úneg_weight_targetÚds   &      r   r§   Ú_ChunkContext.neg_weight_targetö   si  € ð
 �z‰zˆØ×&Ñ&ˆØ—‘ˆØ!×4Ñ4ÐØŠ>Ø"& §
¡
Ð+=Ó >ÑØ�\‰\‹^˜fŸl™l›nÔ,Ü %§¢Ø�a˜Ÿ™Ð#5Ó6×CÑCÀAÀvÓNó!Ñô !&§¢Ø�a˜×,Ñ,¨Q°Ó7×:Ñ:Ð;MÓNó!Ðð �>‰>˜VÔ#Ø!×%Ñ%Ó'ˆAØ×"Ñ"¤5§;¢;¨q°A©v´u·y±yÀ1À"Ó#EÔFð !Ð ð �^‰^˜uÔ$Ø×"Ñ"Ô$ð !Ð ð	 ×$Ñ$Ò0Ø!×&Ñ&Ó(×-Ñ-Ø×)Ñ)×,Ñ,Ð->×-DÑ-DÓEôð !Ð r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹     s   ø€ ÷ "ñ "¡E§L¡Lñ "r   c                óš   € V P                   V P                  8w  d&   V P                  P                  V P                   4      # V P                  # rD   )Úlinear_weight_cast_dtyper   rN   rx   rH   s   &r   rO   Ú _ChunkContext.linear_weight_cast  s=   € à×(Ñ(¨D¯J©JÔ6Ø×%Ñ%×(Ñ(¨×)FÑ)FÓGÐGØ×!Ñ!Ð!r   c                óB   <€ V ^8„  d   QhRS[ P                  R,          /# ©r,   r-   Nr.   )r0   r1   s   "€r   r2   r‹   !  s   ø€ ÷ 	#ñ 	#™EŸL™L¨4Õ/ñ 	#r   c                óð   € V P                   f   R # V P                   pVP                  V P                  P                  8w  d&   VP                  V P                  P                  4      pVP	                  ^ 4      # rD   )rœ   r   Ú
logits_bufrx   Ú	unsqueeze)r?   rœ   s   & r   r<   Ú_ChunkContext.weight_row   sY   € ð
 �;‰;ÒÙØ—‘ˆØ�<‰<˜4Ÿ?™?×0Ñ0Ô0Ø—Y‘Y˜tŸ™×4Ñ4Ó5ˆFØ×Ñ Ó"Ð"r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   -  s   ø€ ÷ 	
ñ 	
¡§¡ñ 	
r   c                ó¬   € \        V P                  P                  V P                  P                  V P                  P
                  V P                  R 7      # ©©r   )r   r±   r   r   rI   r   r7   rH   s   &r   r9   Ú_ChunkContext.prob_target_buf,  sA   € ô
 Ø�O‰O×!Ñ!Ø�O‰O×!Ñ!Ø�J‰J×ÑØ×+Ñ+ô	
ð 	
r   c                óB   <€ V ^8„  d   QhRS[ P                  R,          /# r¯   r.   )r0   r1   s   "€r   r2   r‹   9  s   ø€ ÷ 	 ñ 	 ¡%§,¡,°Õ"5ñ 	 r   c                óö   € V P                   f   R # V P                   P                  V P                  P                  8w  d0   V P                   P                  V P                  P                  4      # V P                   # rD   )Úlinear_biasr   r±   rx   rH   s   &r   Úlinear_bias_castÚ_ChunkContext.linear_bias_cast8  s^   € ð ×ÑÒ#ÙØ×Ñ×!Ñ! T§_¡_×%:Ñ%:Ô:Ø×#Ñ#×&Ñ& t§¡×'<Ñ'<Ó=Ð=Ø×ÑÐr   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   E  s   ø€ ÷ 
ñ 
¡5§<¡<ñ 
r   c                óœ   € \        V P                  V P                  3V P                  V P                  P
                  V P                  R 7      # r¶   )r   r”   Úin_featuresÚ	acc_dtyperI   r   Úalloc_weight_grad_chunkrH   s   &r   Úweight_grad_chunkÚ_ChunkContext.weight_grad_chunkD  sB   € ô Ø×Ñ˜t×/Ñ/Ð0Ø�N‰NØ�J‰J×ÑØ×-Ñ-ô	
ð 	
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   P  s   ø€ ÷ 
ñ 
¡§¡ñ 
r   c                ó¾   € \        V P                  P                  ^ ,          V P                  3V P                  V P
                  P                  V P                  R7      # ©r   r·   )r   r±   r   r”   rÁ   rI   r   Úalloc_logits_acc_bufrH   s   &r   re   Ú_ChunkContext.logits_acc_bufO  sK   € ô Ø�_‰_×"Ñ" 1Õ% t×'7Ñ'7Ð8Ø�N‰NØ�J‰J×ÑØ×*Ñ*ô	
ð 	
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   Z  s   ø€ ÷ 
ñ 
¡E§L¡Lñ 
r   c                ó¾   € \        V P                  P                  ^ ,          V P                  3V P                  V P
                  P                  V P                  R7      # rÇ   )r   r±   r   rÀ   r¬   rI   r   rj   rH   s   &r   rk   Ú _ChunkContext.input_grad_acc_bufY  sM   € ô Ø�_‰_×"Ñ" 1Õ% t×'7Ñ'7Ð8Ø×)Ñ)Ø�J‰J×ÑØ×.Ñ.ô	
ð 	
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   e  s   ø€ ÷ 
ñ 
¡U§\¡\ñ 
r   c                ó¾   € \        V P                  P                  ^ ,          V P                  3V P                  V P
                  P                  V P                  R7      # rÇ   )r   r±   r   rÀ   rÁ   rI   r   Úalloc_input_chunk_acc_bufrH   s   &r   Úinput_chunk_acc_bufÚ!_ChunkContext.input_chunk_acc_bufd  sI   € äØ�_‰_×"Ñ" 1Õ% t×'7Ñ'7Ð8Ø�N‰NØ�J‰J×ÑØ×/Ñ/ô	
ð 	
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   n  s   ø€ ÷ 
ñ 
™EŸL™Lñ 
r   c                ó˜   € \        V P                  P                  V P                  V P                  P                  V P
                  R 7      # r¶   )r   rI   r   Úgrad_input_dtyper   r   rH   s   &r   r$   Ú_ChunkContext.grad_inputm  s;   € äØ�J‰J×ÑØ×!Ñ!Ø�J‰J×ÑØ×(Ñ(ô	
ð 	
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   w  s   ø€ ÷ 
ñ 
¡E§L¡Lñ 
r   c                ó˜   € \        V P                  P                  V P                  V P                  P
                  V P                  R 7      # r¶   )r   rN   r   r   rI   r   r   rH   s   &r   r%   Ú _ChunkContext.grad_linear_weightv  s;   € äØ×Ñ×$Ñ$Ø�J‰JØ�J‰J×ÑØ×0Ñ0ô	
ð 	
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   €  s   ø€ ÷ 	
ñ 	
¡%§,¡,ñ 	
r   c                óž   € \        V P                  P                  R R V P                  V P                  P
                  V P                  R7      # ©Nr·   éÿÿÿÿ)r   rN   r   r   rI   r   r   rH   s   &r   r&   Ú_ChunkContext.grad_linear_bias  sD   € ô
 Ø×Ñ×$Ñ$ S bÐ)Ø�J‰JØ�J‰J×ÑØ×.Ñ.ô	
ð 	
r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r+   r.   )r0   r1   s   "€r   r2   r‹   Œ  s   ø€ ÷ 
ñ 
©¯©ñ 
r   c                óž   € \        V P                  P                  R R V P                  V P                  P
                  V P                  R7      # rÛ   )r   rN   r   rÁ   rI   r   rq   rH   s   &r   rr   Ú$_ChunkContext.linear_bias_grad_chunk‹  sD   € ô Ø×Ñ×$Ñ$ S bÐ)Ø�N‰NØ�J‰J×ÑØ×2Ñ2ô	
ð 	
r   Nc                 ó.  <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  RS[ P                  R,          RS[ P                  R,          RS[RS[R	S[R
S[RS[RS[ P
                  RS[RS[RS[RS[ P                  R,          RR/# )r,   rI   rN   r�   r»   Nrœ   r    rŽ   Úlabel_smoothingÚbatch_chunk_sizeÚ
acc_policyrÁ   r   r   r   r¤   r-   r{   )r
   r/   Ústrr}   Úfloatr   Úbool)r0   r1   s   "€r   r2   r‹   �  sè   ø€ ÷ L
ñ L
á�|‰|ðL
ñ —|‘|ðL
ñ —‘ð	L
ñ
 —\‘\ DÕ(ðL
ñ —‘˜tÕ#ðL
ñ ðL
ñ ðL
ñ ðL
ñ ðL
ñ ðL
ñ —;‘;ðL
ñ !ðL
ñ %)ðL
ñ #'ðL
ñ   Ÿ,™,¨Õ-ð!L
ð" 
ñ#L
r   c                óˆ
  € VP                   P                  pV'       d×   VP                   VP                   8w  d'   \        R VP                    RVP                    R24      hVP                  VP                  ^ ,          VP                  ^ ,          38w  dJ   \	        RVP                  ^ ,          VP                  ^ ,          3 R\        VP                  4       R24      hVR<9  d   \        RV: 24      hM8VP                   \        P                  8w  d   \        RVP                    R24      hVR8”  d   \        R4      hVR=9  d   \        R	V: 24      hVeZ   VP                  VP                  R
R> 8w  d<   \	        R\        VP                  R
R> 4       R\        VP                  4       R24      hVP                  pVP                   pVP                  w  ppVP                  w  ppVP                  R8H  pVP                  R8H  pVV8w  dM   V\        P                  \        P                  09   d   V\        P                  8X  g   \	        RV RV R24      hVV8g  pV
R8H  pV'       dJ   V\        P                  8X  d   TMTpV'       d   TMTpV\        P                  8X  d   V'       d   TMTpTpMT;p;p;ppT;'       d    V'       * ;'       g    T;'       d    VV8H  pV'       d   TMTp T;'       d"    V
R8H  ;'       d    T;'       g    VV8H  '       * p!T;'       d    Tp"T;'       d    V'       * ;'       d    VV 8g  ;'       g    Tp#T;'       d    T;'       g    V'       * ;'       d    VV8g  p$T;'       d    V'       * ;'       d    VV8g  p%T;'       d    Tp&VV8H  p'T;'       d    T;'       d    VV8g  p(T(;'       g    T;'       d    V!'       * ;'       d    VV8g  p)T!;'       d    V'       * ;'       d    VV8g  p*V!'       * ;'       d2    T;'       d(    VVP                  ,          VVP                  ,          8¬  p+T;'       d    VR
J;'       g    VV8g  p,V'       d%   VR8X  d   V'       d
   RV,          M
\        R4      p-MRp-V ! R?/ RVbRVbRVbRVbRVbRVbRVbRVbRVbRV bRVbRVbR VbR!VbR"VbR#VbR$V-bR%VbR&VbR'VbR(\        P                   ! V	V3VVR)R*7      bR+\        P                   ! V	3VVR)R*7      bR,\#        R?VV4      bR-VbR.VbR/VbR0V,bR1V!bR2V"bR3V#bR4V$bR5V*bR6V%bR7V&bR8V'bR9V(bR:V)bR;V+b # )@zFlinear_cross_entropy: probability target dtype must match input dtype z, got Ú.z7linear_cross_entropy: probability target shape must be rš   zTlinear_cross_entropy: probability target requires reduction in {'mean', 'sum'}, got z<linear_cross_entropy: target dtype must be torch.int64, got ç        z5linear_cross_entropy does not support label smoothingú0linear_cross_entropy does not support reduction=Nz1linear_cross_entropy: expected linear_bias shape ÚcudaÚmpszVlinear_cross_entropy supports float32 acc_dtype with float16/bfloat16 inputs, but got z acc_dtype and z inputs.Úcompactg      ð?r¢   r   Únum_batchesrÀ   r”   r_   Úuse_acc_dtyperÁ   r�   rÔ   r¬   rI   r�   rœ   rŽ   r    r“   Ú
loss_scalerN   r»   r¤   r±   F©r   r   r   Útmpr"   r   r   r   r7   rÂ   rq   rj   rÏ   rÈ   rE   rM   r`   rT   rw   Ú weight_grad_uses_logits_buf_temp>   r›   rš   >   r›   rš   ÚnonerÜ   r~   )r   Úis_floating_pointÚ	TypeErrorr   ÚRuntimeErrorÚtupleÚNotImplementedErrorr
   Úint64r   ÚtypeÚfloat16Úbfloat16Úfloat32Úitemsizeræ   r   r   ).ÚclsrI   rN   r�   r»   rœ   r    rŽ   râ   rã   rä   rÁ   r   r   r   r¤   r“   r   r   rï   rÀ   r”   r#   r_   Úis_mpsrð   Úis_memory_likeÚoutput_dtyperÔ   Úlogits_buf_dtyper�   Úneeds_linear_weight_castr¬   rÂ   rq   rj   rÏ   rE   rM   r`   rT   rw   rÈ   rô   r7   rñ   s.   &&&&&&&&&&&&&&&&                              r   ÚbuildÚ_ChunkContext.buildœ  sô  € ð(  Ÿ™×7Ñ7ˆßØ�|‰|˜uŸ{™{Ô*Üð$Ø$)§K¡K =°°v·|±|°nÀAðGóð ð �|‰| §¡¨A¥°×0CÑ0CÀAÕ0FÐGÔGÜ"ØMØŸ™ A�¨×(;Ñ(;¸AÕ(>Ð?Ð@ÀÄuÈVÏ\É\ÓGZÐF[Ð[\ð^óð ð  Ô/Ü)ð<Ø<E¹=ðJóð ð 0ð
 �\‰\œUŸ[™[Ô(ÜØNÈvÏ|É|ÈnÐ\]Ð^óð ð ˜SÔ Ü%ØGóð ð Ð3Ô3Ü%ØC¸¹ÐEóð ð Ò" {×'8Ñ'8¸M×<OÑ<OÐPSÐQSÐ<TÔ'TÜØCÜ˜×,Ñ,¨S¨bÐ1Ó2Ð3°6¼%À×@QÑ@QÓ:RÐ9SÐSTðVóð ð
 —‘ˆØ—‘ˆØ#(§;¡;Ñ ˆ�[Ø&×,Ñ,‰ˆ�Qð —+‘+ Ñ'ˆØ—‘ Ñ%ˆà�IÔØ”e—m‘m¤U§^¡^Ð4Ô4¸ÄeÇmÁmÔ9Säð5Ø5>°K¸ÈuÈgÐU]ð_óð ð  Ñ*ˆð $ yÑ0ˆßØ(-´·±Ô(>™9ÀEˆLß(6™u¸IÐð ¤%§-¡-Ô/·N‘È	ð ð
 "+Ñð ðˆLð Ð+ð Ð.>ÐASð $1÷ $
ð $
ØŒK×XÐXÐ.×WÐWÐ3CÐGWÑ3Wð 	!÷ !9Ñ¸eð 	!ð #=÷ #
ð #
Ø˜)Ñ#×NÐN¨×)MÐ)MÐ4DÈÑ4MôB
Ðð (@×'QÐ'QÀMÐ$à÷ Ið IØ”÷Ið Ià!Ð%=Ñ=×GÐGÀð 	!ð
 %2÷ %
ð %
Ø&×UÐU¨w¬;×+TÐ+T¸5ÐDTÑ;Tð 	"ð ×GÐG 'œk×GÐG¨eÐ7GÑ.Gð 	ð '.×&?Ð&?°-Ð#Ø$4¸	Ñ$AÐ!ð ×SÐSÐ*×SÐSÐ/?ÐCSÑ/Sð 	"ð
 '@÷ '
ð '
Ø&÷ *ð *Ø+Ô+÷*ð *à  EÑ)ð 	$ð $×UÐU¨G¬×UÐUÐ8HÈIÑ8Uð 	ð (Ô'÷ Xð XØ÷Xð XàÐ.×7Ñ7Õ7¸;ÈÏÉÕ;WÑWð 	)ð !/÷ !
ð !
Ø˜$Ð×;Ð; %Ð+;Ñ";ð 	÷ ˜i¨6Ô1ß.9˜˜{Ö*¼uÀU»|‰JàˆJáò 1
Ùð1
á#ð1
ñ $ð1
ñ $ð	1
ñ
 ð1
ñ (ð1
ñ  ð1
ñ  2ð1
ñ .ð1
ñ &>ð1
ñ ð1
ñ ð1
ñ ð1
ñ &ð1
ñ  ð1
ñ  *ð!1
ñ" "ð#1
ñ$ (ð%1
ñ& $ð'1
ñ( .ð)1
ô* —{’{Ø! ;Ð/Ø&ØØ#õ	ð+1
ô6 —’Ø!Ð#Ø&ØØ#õ	ð71
ôB ˜r <°Ô8ðC1
ñD  2ðE1
ñF (BðG1
ñH &>ðI1
ñJ #8ðK1
ñL %<ðM1
ñN *FðO1
ñP &>ðQ1
ñR '@ðS1
ñT "6ðU1
ñV $:ðW1
ñX )DðY1
ñZ '@ð[1
ñ\ '@ð]1
ñ^ )Dð_1
ñ` .Nða1
ð 1	
r   c              #  ó`  "  € V P                   P                  ^ ,          p\        ^ V P                  V4       Fñ  p\	        WP                  V,
          4      pV P                  W#4      pVx € V P                  '       d6   V P                  P                  ^ W#4      P                  VP                  4       V P                  '       g   K�  V P                  P                  VP                  P                  V P                  P                   4      4       VP                  P#                  4        Kó  	  R# 5i)a„  Yield a ``_ChunkViews`` per iter. Post-yield, run the
scratch-to-final commits that the loop body deferred: the
buf-and-copy input-grad slice into ``grad_input`` (skipped on
the fast path where ``grad_input_chunk`` aliases
``grad_input``), and the acc_dtype linear_bias scratch into
``grad_linear_bias`` (skipped when accumulation went straight
into ``grad_linear_bias`` in input dtype).
N)r±   r   Úrangerï   ÚminÚ
bind_chunkrj   r$   r:   r>   rm   rq   r&   Úadd_rs   rx   r   Úzero_)r?   rã   rl   r;   Úchunks   &    r   ÚchunksÚ_ChunkContext.chunksk  sì   é € ð  Ÿ?™?×0Ñ0°Õ3ÐÜ! ! T×%5Ñ%5Ð7GÖHˆLÜÐ.×0@Ñ0@À<Õ0OÓPˆKØ—O‘O LÓ>ˆEØŠKØ×,×,Ð,Ø—‘×&Ñ& q¨,ÓD×JÑJØ×*Ñ*ôð ×0×0Ò0ð ×%Ñ%×*Ñ*Ø×'Ñ'×*Ñ*¨4×+@Ñ+@×+FÑ+FÓGôð ×#Ñ#×)Ñ)Ö+ó Iùs   ‚B?D.ÃA(D.c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[/# )r,   rl   r;   r-   )r}   r)   )r0   r1   s   "€r   r2   r‹   …  s"   ø€ ÷ 
ñ 
¡sð 
¹ð 
Áñ 
r   c                ó²  € V P                   P                  ^ W4      pV P                  P                  ^ W4      pV P                  '       d   RMV P                  P                  ^ W4      pV P
                  P                  ^ ^ V4      pV P                  '       d-   V P                  P                  ^ ^ V4      P                  V4      MTp\        V VVVVVVVR7      # )r   N)r    rl   r;   rG   r8   r|   rV   rF   )
rI   r:   r–   r“   r§   r±   rÏ   rÐ   r>   r)   )r?   rl   r;   rG   r8   r|   rV   rF   s   &&&     r   r  Ú_ChunkContext.bind_chunk…  sÚ   € Ø—j‘j×'Ñ'¨¨<ÓEˆØ×,Ñ,×3Ñ3°A°|ÓQˆð
 ×"×"Ð"ñ à×'Ñ'×.Ñ.¨q°,ÓLð 	ð
 —‘×'Ñ'¨¨1¨kÓ:ˆð ×-×-Ð-ð ×$Ñ$×+Ñ+¨A¨q°+Ó>×DÑDÀ[ÔQàð 	ô
 ØØ%Ø#Ø#Ø%Ø%ØØ+ô	
ð 		
r   c                ól   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  RR/# )r,   Úmat1Úmat2r6   r-   Nr.   )r0   r1   s   "€r   r2   r‹      s6   ø€ ÷ ?ñ ?‘u—|‘|ð ?©5¯<©<ð ?ÁÇÁð ?ÐRVñ ?r   c               ó¶   € VP                   VP                   8X  d   \        P                  ! WVR 7       R# \        P                  ! WVP                   VR7       R# )r5   )Ú	out_dtyper6   N)r   r
   Úmm)r?   r  r  r6   s   &&&$r   r  Ú_ChunkContext.mm   s4   € à�:‰:˜Ÿ™Ô"Ü�HŠH�T S×)ä�HŠH�T¨3¯9©9¸#×>r   c                ó:   <€ V ^8„  d   QhRS[ RS[P                  /# )r,   r  r-   )r)   r
   r/   )r0   r1   s   "€r   r2   r‹   §  s   ø€ ÷ ñ ¡Kð ±E·L±Lñ r   c                ó¤  € VP                   pV P                  VP                  VP                  P                  VR 7       V P
                  e   VP                  V P
                  4       V P                  P                  ^ ^ VP                  ^ ,          4      P                  ^4      p\        P                  ! V^RVR7       VP                  V4       V# )r5   T)ÚdimÚkeepdimr6   )rV   r  rI   rN   ÚTr¼   r  ró   r:   r   r²   r
   ÚamaxÚsub_)r?   r  rV   Úrow_maxs   &&  r   Úshifted_logitsÚ_ChunkContext.shifted_logits§  s™   € ð —‘ˆØ�‰�—‘˜U×0Ñ0×2Ñ2¸ˆÔ?Ø× Ñ Ò,Ø�K‰K˜×-Ñ-Ô.à—(‘(—/‘/ ! Q¨¯©°Q­Ó8×BÑBÀ1ÓEˆÜ�
Š
�6˜q¨$°GÕ<Ø�‰�GÔØˆr   c                ó‚   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  RS[ P                  /# )r,   rœ   ÚxÚindicesr-   r.   )r0   r1   s   "€r   r2   r‹   µ  sC   ø€ ÷ Yñ YÙ—l‘lðYÙ',§|¡|ðYÙ>C¿l¹lðYá	�‰ñYr   c                ó²   € VP                  VP                  ^VP                  ^4      4      P                  ^4      P	                  VP
                  4      4      # )é   )ÚdotÚgatherr²   Úsqueezerx   r   )r?   rœ   r'  r(  s   &&&&r   Ú	dotgatherÚ_ChunkContext.dotgatherµ  sC   € ð �z‰z˜!Ÿ(™( 1 g×&7Ñ&7¸Ó&:Ó;×CÑCÀAÓF×IÑIÈ&Ï,É,ÓWÓXÐXr   c                óT   <€ V ^8„  d   QhRS[ P                  RS[RS[ P                  /# ©r,   r'  r  r-   ©r
   r/   r}   )r0   r1   s   "€r   r2   r‹   º  s*   ø€ ÷ 5ñ 5™Ÿ™ð 5©Cð 5±E·L±Lñ 5r   c                ó¸   € V P                   \        P                  8X  d   \        P                  MV P                  pVP                  4       P                  W#R 7      # ©©r   )r   r
   rý   rÿ   rÁ   Úexp_r›   )r?   r'  r  Úreduce_dtypes   &&& r   Úsumexp_Ú_ChunkContext.sumexp_º  s9   € ð )-¯
©
´e·m±mÔ(C”u—}’}ÈÏÉˆØ�v‰v‹x�|‰|˜Cˆ|Ó4Ð4r   c                óT   <€ V ^8„  d   QhRS[ P                  RS[RS[ P                  /# r1  r2  )r0   r1   s   "€r   r2   r‹   Ä  s*   ø€ ÷ .ñ .‘U—\‘\ð .©ð .±·±ñ .r   c                óz   € V P                   '       d   V P                  MV P                  pVP                  W#R 7      # r4  )rð   rÁ   r   r›   )r?   r'  r  Útarget_dtypes   &&& r   r›   Ú_ChunkContext.sumÄ  s/   € ð *.×);×);Ð);�t—~’~ÀÇÁˆØ�u‰u�SˆuÓ-Ð-r   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r,   ÚnumÚdenr-   r.   )r0   r1   s   "€r   r2   r‹   Î  s.   ø€ ÷ 	ñ 	‘u—|‘|ð 	©%¯,©,ð 	¹5¿<¹<ñ 	r   c                óz  € V P                   P                  ^ ^ VP                  ^ ,          4      pV P                  P                  P
                  R8X  dP   VP                  VP                  8w  g   VP                  VP                  8w  d   VP                  W,          4       V# \        P                  ! WVR7       V# )r   rí   r5   )
ró   r:   r   rI   r   rü   r   r>   r
   Údiv)r?   r?  r@  Úfactors   &&& r   rB  Ú_ChunkContext.divÎ  s�   € Ø—‘—‘  A s§y¡y°¥|Ó4ˆà�:‰:×Ñ×!Ñ! UÔ*Ø�I‰I˜Ÿ™Ô%¨¯©°f·l±lÔ)Bà�L‰L˜�Ô#ð ˆô �IŠI�c FÕ+Øˆr   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r,   r'  Úwr-   r.   )r0   r1   s   "€r   r2   r‹   Ù  s.   ø€ ÷ "ñ "‘U—\‘\ð "¡e§l¡lð "±u·|±|ñ "r   c           
     ó¨  € V P                   '       d!   VP                  VP                  ^4      4      # V P                  V P                  8¼  dp   \
        P                  ! VVP                  ^4      V P                  P                  ^ ^ VP                  ^ ,          4      P                  ^^ V P                  4      R7      # WP                  ^4      ,          # )r*  r5   )
rð   r¥   r²   r”   rÀ   r
   r=   r±   r:   r   )r?   r'  rF  s   &&&r   r=   Ú_ChunkContext.mulÙ  s¡   € à××ÐØ—6‘6˜!Ÿ+™+ a›.Ó)Ð)Ø×Ñ˜t×/Ñ/Ô/Ü—9’9ØØ—‘˜A“Ø—O‘O×*Ñ*¨1¨a°·±¸µÓ<×CÑCØ�q˜$×*Ñ*óôð ð —;‘;˜q“>Õ!Ð!r   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r,   r'  r   r-   )r
   r/   r   )r0   r1   s   "€r   r2   r‹   ç  s.   ø€ ÷ ñ ‘E—L‘Lð ©E¯K©Kð ¹E¿L¹Lñ r   c               óN  € VP                   V8X  d   V# V P                  '       dq   V P                  P                  V4      P	                  ^ ^ VP
                  ^ ,          4      P	                  ^^ VP
                  ^,          4      P                  V4      pV# VP                  V4      # r	   )r   rô   r±   Úviewr:   r   r>   rx   )r?   r'  r   s   &&$r   rx   Ú_ChunkContext.toç  s€   € à�7‰7�eÔØˆHØ×0×0Ð0à—‘×$Ñ$ UÓ+ß‘˜˜1˜aŸg™g a�jÓ)ß‘˜˜1˜aŸg™g a�jÓ)ß‘�q“ð	 ð ˆHØ�t‰t�E‹{Ðr   c                ó$  <€ V ^8„  d   Qh/ S[ P                  ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[ P                  ;R&   S[ P                  ;R&   S[ P                  ;R	&   S[ P                  ;R
&   S[ P                  ;R&   S[ P                  ;R&   S[ P                  R,          ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[ P                  ;R&   S[ P                  R,          ;R&   S[ P                  R,          ;R&   S[ P                  ;R&   S[ P                  ;R&   S[ P                  ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[;R &   S[;R!&   S[;R"&   S[;R#&   S[;R$&   S[;R%&   S[;R&&   S[;R'&   # )(r,   r   rï   rÀ   r”   r_   rð   rÁ   r�   rÔ   r¬   rI   r�   Nrœ   rŽ   r    r“   rñ   rN   r»   r¤   r±   ró   r"   r   r   r   r7   rÂ   rq   rj   rÏ   rÈ   rE   rM   r`   rT   rw   rô   )r
   r   r}   rç   r/   rå   ræ   )r0   r1   s   "€r   r2   r‹   ©   sb  ø‡ ‚ ñ �;‰;Ññ ñ Ññ ñ Ññ ñ Ññ ñ �Mñ ñ Ññ ñ  �{‰{Ññ! ñ" Ÿ™Ñ#ñ# ñ$ —k‘kÑ!ñ% ñ& $Ÿk™kÑ)ñ' ñ* �<‰<Ññ+ ñ, �L‰LÑñ- ñ. �L‰L˜4ÕÑñ/ ñ0 Ññ1 ñ2 �Nñ3 ñ< Ññ= ñ> Ññ? ñ@ —<‘<ÑñA ñB —‘ Õ$Ñ$ñC ñJ —l‘l TÕ)Ñ)ñK ñT —‘ÑñU ñV 
�‰ÑñW ñX �L‰LÑñY ñ\ Ññ] ñ^ !%Ñ$ñ_ ñ` #Ñ"ña ñb  Ññc ñd "Ñ!ñe ñf #'Ñ&ñg ñh #Ñ"ñi ñj  $Ñ#ñk ñl Ññm ñn !Ñ ño ñp "&Ñ%ñq ñr  $Ñ#ñs ñt  $Ñ#ñu ñv "&Ñ%ñw ñx '+Ñ*òy r   r~   rD   )$r   r€   r�   r‚   rƒ   r   r�   r–   r§   rO   r<   r9   r¼   rÃ   re   rk   rÐ   r$   r%   r&   rr   Úclassmethodr  r  r  r  r$  r.  r8  r›   rB  r=   rx   r…   r†   r‡   rˆ   s   @r   r{   r{   ©   s¾  ø‡ € ñðx ÷0ó ð0ð ÷ó ðð ÷!!ó ð!!ðF ÷"ó ð"ð
 ÷	#ó ð	#ð ÷	
ó ð	
ð ÷	 ó ð	 ð ÷
ó ð
ð ÷
ó ð
ð ÷
ó ð
ð ÷
ó ð
ð ÷
ó ð
ð ÷
ó ð
ð ÷	
ó ð	
ð ÷
ó ð
ð  ÷L
ñ L
ó ðL
ò\,÷4
ð 
÷6?ð ?÷ð ÷Yð Y÷
5ð 5÷.ð .÷	ð 	÷"ð "÷ð ÷} ƒ r   r{   c          $      ó  € V ^8„  d   QhR\         P                  R\         P                  R\         P                  R\         P                  R,          R\         P                  R,          R\        R\        R	\        R
\        R\        R\         P
                  R\        R\        R\        R\         P                  R,          R\        \         P                  \         P                  \         P                  \         P                  3,          /# )r,   rI   rN   r�   r»   Nrœ   r    rŽ   râ   rã   rä   rÁ   r   r   r   r¤   r-   ©r
   r/   rå   r}   ræ   r   rç   rù   )r0   s   "r   r2   r2   ö  s  € ÷ rñ rÜ�<‰<ðrä—<‘<ðrô �L‰Lðrô —‘ Õ$ð	rô
 �L‰L˜4Õðrô ðrô ðrô ðrô ðrô ðrô �{‰{ðrô ðrô !%ðrô #ðrô —l‘l TÕ)ðrô  Œ5�<‰<œŸ™¤u§|¡|´U·\±\ÐAÕBñ!rr   c                ó”  € V	R8X  g   V
f   \        RV	: RV
: R24      h\        P                  V VVVVVVVVV	V
VVVVR7      pVP                  pVR8X  Ed‰   VEf„   \        P
                  ! VP                  VVP                  P                  R7      pVP                  4        EF  pVP                  V4      pVP                  ^VP                  P                  ^4      4      P                  ^4      pVP                  V^R7      pVP!                  4       P#                  VP%                  VP                  4      4      pVP'                  VP(                  P%                  VP                  4      4       VP+                  ^ VP,                  VP.                  4      P1                  V4       EK  	  VVP2                  P%                  V4      VP4                  VP6                  3# VP8                  pVP2                  pVP4                  pVP6                  pVP:                  pVP<                  pVR	8X  d1   VP                  ^ 8X  d    VP?                  \        P@                  4       T;'       g    T;'       g    TpVPB                  '       Ed"   VPD                  pVP                  4        EFÜ  pVP                  V4      pVPF                  pVP                  \        PH                  8X  d:   \        PJ                  ! R
VV4      p V PM                  \        PN                  R7      p!M5\        PP                  ! VPS                  R4      VPS                  R4      4      p!VP                  PT                  R8X  d   VP#                  V!V,          4       MVP#                  V!VR7       VPM                  ^VPV                  R7      P'                  V4      p"VP                  V^R7      pV'       d9   \        PX                  ! VVP[                  V"V4      P                  ^4      VR7       VP]                  V"P%                  VP                  4      PQ                  VP!                  4       4      4       V'       g   EKÆ  VP#                  VVR7       V'       d-   VP^                  P]                  VPM                  V^ R7      4       V'       d3   VPa                  VPb                  VPd                  VPf                  R7       V'       g   EKR  VPh                  '       dG   VPa                  VPj                  Pl                  VPn                  VR7       VP]                  V4       EKª  VPq                  VPr                  Pl                  VPt                  ^R7       EKß  	  VP%                  V4      VP%                  V4      VV3# VP                  4        EFè  pVP                  V4      pVP(                  p#VP                  p$VP]                  VPw                  V#VV$4      4       VP                  V^R7      pV'       d9   \        PX                  ! VVP[                  V#V4      P                  ^4      VR7       VP#                  V#P%                  VP                  4      PQ                  VP!                  4       4      4       V'       g   Kó  V'       dB   VP^                  p%V%P#                  VPM                  V^ R7      4       V%Py                  ^ V$V#4       V'       d—   VPf                  p&VPb                  p'VPd                  p(\        PX                  ! \        Pz                  ! V^ V$4      V#P%                  V&P                  4      P                  ^4      V&R7       \        P|                  ! V&V'V(RV&R7       V'       g   EKå  VP~                  p)VPh                  '       dr   VPj                  p*VPn                  p+VPa                  V*Pl                  V+VR7       VPY                  V)V#4      p,VPy                  ^ V$V,RR7       VP#                  V4       EKt  VPq                  VPr                  Pl                  VPt                  RR7       VP%                  VPY                  V)V#4      VP                  R7      p,VPy                  ^ V$V,^R7       EKë  	  VP%                  V4      VP%                  V4      VV3# )aÕ	  Chunked loop shared by all three custom-op entry points; returns
``(loss, grad_input, grad_linear_weight, grad_linear_bias)``.

Caller -> branch:
  scalar-op forward (reduction in {mean,sum})  -> main grad loop
  scalar-op forward, probability target        -> prob loop
  no_reduction forward (none, loss_grad_output None) -> loss-only branch
  no_reduction backward (none, loss_grad_output set) -> main grad loop

- ``_linear_cross_entropy_batch_chunked`` (scalar reduction): the
  forward precomputes the scalar loss and all gradients in one pass;
  backward just scales the stashed grads by the upstream gradient.
- ``_linear_cross_entropy_batch_chunked_no_reduction`` (forward):
  ``reduction='none'`` with ``loss_grad_output is None`` takes the
  loss-only branch, returning the per-sample loss ``(N,)`` and no
  gradients (they are recomputed in its backward instead).
- ``_linear_cross_entropy_batch_chunked_no_reduction`` (backward):
  ``loss_grad_output`` set folds the per-sample upstream grad into
  ``neg_weight_target``, so this same loop recomputes the chunked
  grads as the grad_output-weighted VJP (the scalar loss it also
  accumulates is then meaningless and ignored).

Dispatch contract
-----------------
The chunked loop body is the mathematical description of the
algorithm. All policy / device / dtype dispatch lives in
``_ChunkContext`` (and its ``_ChunkViews`` peers):

- **Buffer choices** -- whether a per-chunk acc_dtype scratch is
  used or accumulation runs directly into the final tensor -- live
  in ``alloc_*`` flags computed in ``_ChunkContext.build`` and
  surfaced as ``_ChunkViews`` properties (e.g.
  ``grad_input_chunk``, ``bias_grad_acc``).
- **Scratch-to-final commits** for those buffers live in
  ``_ChunkContext.chunks()`` post-yield hooks (e.g. the
  ``grad_input`` buf-and-copy commit, the ``grad_linear_bias``
  downcast-and-zero commit).
- **Dtype dispatch on individual math operations** lives in
  ``_ChunkContext`` methods that mirror PyTorch ops --
  ``mm``, ``amax``, ``dotgather``, ``sumexp_``, ``sum``, ``div``,
  ``mul``, ``to`` -- each one hiding ``out_dtype=`` / acc-dtype /
  buffer-reuse decisions behind a single math call.

The function body therefore should not introduce inline
``if ctx.use_acc_dtype`` / ``if ctx.is_cuda`` / etc. branches; new
policy-aware behaviour belongs in one of the three locations
above. The two existing inline branches (``if compute_input_grad``,
``if compute_linear_weight_grad``, etc.) gate optional outputs,
not dispatch.
Úautozunresolved acc_policy=z or acc_dtype=z; use F.linear_cross_entropy.©r¤   rõ   ©r   r   )r  rš   zbv,bv->br5  rí   )Úalphar5   )rU  r6   rÜ   )@rø   r{   r  r   r
   r   rï   rI   r   r  r$  r,  r8   r²   r-  r8  Úlog_r"  rx   r¥   r|   r:   rl   r;   r>   r$   r%   r&   r"   rÃ   rO   Úfill_r¢   r“   rñ   r@   rý   Úeinsumr›   rÿ   r+  Úreshaperü   r�   r=   rB  r  rs   r  rW   r[   rm   rÂ   rf   r   ra   Úaddmm_rU   rG   r.  Ú
index_add_rŸ   ÚaddmmrF   )-rI   rN   r�   r»   rœ   r    rŽ   râ   rã   rä   rÁ   r   r   r   r¤   r    r   r6   r  rV   Ú	ls_targetÚsoftmax_denomÚ
loss_chunkr"   r$   r%   r&   rÃ   rO   Úcompute_gradsrñ   ÚwtÚper_rowÚ	loss_termÚsr|   r8   rs   rm   rW   r[   rF   rf   ra   Útemps-   &&&&&&&&&&&&&&&                              r   Ú/_linear_cross_entropy_batch_chunked_accumulatorrf  ö  sq  € ðH �VÔ˜yÒ0ÜØ$ Z¡N°.ÀÁð N+ð +ó
ð 	
ô ×
Ñ
ØØØØØØØØØØØØØ"Ø Ø)ð ó €Cð" �I‰I€Eð �FÕÐ/Ó7Ü�kŠk˜#Ÿ/™/°¸s¿y¹y×?OÑ?OÔPˆØ—Z‘Z—\ˆEØ×'Ñ'¨Ó.ˆFð Ÿ™ a¨×);Ñ);×)EÑ)EÀaÓ)HÓI×QÑQÐRSÓTˆIØŸK™K¨°A˜KÓ6ˆMØ&×+Ñ+Ó-×2Ñ2°9·<±<À×@SÑ@SÓ3TÓUˆJØ�O‰O˜E×.Ñ.×1Ñ1°-×2EÑ2EÓFÔGØ�J‰J�q˜%×,Ñ,¨e×.?Ñ.?Ó@×FÑFÀz×Rñ "ð Ø�N‰N×Ñ˜eÓ$Ø×"Ñ"Ø× Ñ ð	
ð 	
ð �Z‰Z€FØ—‘€JØ×/Ñ/ÐØ×+Ñ+ÐØ×-Ñ-ÐØ×/Ñ/Ðà�FÔ˜sŸ™°!Ô3Ø�‰”U—Y‘YÔð 	×TÐTÐ8×TÐTÐ<Tð ð ××Ñð —^‘^ˆ
Ø—Z‘Z—\ˆEØ×'Ñ'¨Ó.ˆFØ—‘ˆBð �|‰|œuŸ}™}Ô,ÜŸ,š, z°2°vÓ>�Ø#ŸK™K¬e¯m©m˜KÓ<‘	ä!ŸIšI b§j¡j°£n°f·n±nÀRÓ6HÓI�	ð
 �}‰}×!Ñ! UÔ*Ø—‘˜I¨
Õ2Õ3à—‘˜I¨Z�Ô8à—‘�q × 6Ñ 6�Ó7×<Ñ<¸ZÓHˆAØŸK™K¨°A˜KÓ6ˆMßä—	’	ØØ—G‘G˜A˜}Ó-×7Ñ7¸Ó:Øõð �K‰K˜Ÿ™˜]×0Ñ0Ó1×5Ñ5°m×6HÑ6HÓ6JÓKÔLßŠ}ð —‘˜B j�Ô1ß+Ø×'Ñ'×,Ñ,¨S¯W©W°VÀ¨WÓ-CÔDß%Ø—F‘FØ×/Ñ/Ø×6Ñ6Ø!×2Ñ2ð ô ÷
 .Ò-Ø×2×2Ð2ØŸ™Ø!×/Ñ/×1Ñ1Ø!×3Ñ3Ø 1ð ô ð
 +×/Ñ/Ð0A×Bà*×1Ñ1Ø!×1Ñ1×3Ñ3°U×5FÑ5FÈað 2÷ ñq "ðx �I‰I�eÓØ�M‰M˜%Ó ØØð	
ð 	
ð —‘—ˆØ×#Ñ# EÓ*ˆØ×)Ñ)ˆØ×)Ñ)ˆà�‰�C—M‘M ,°¸ÓEÔFØŸ™ F°˜Ó2ˆßô �IŠIØØ—‘˜ mÓ4×>Ñ>¸qÓAØõð 	�‰�L—O‘O M×$7Ñ$7Ó8×<Ñ<¸]×=OÑ=OÓ=QÓRÔSç‰=ß'ð* !&× 3Ñ 3�Ø×"Ñ" 3§7¡7¨6°q 7Ó#9Ô:Ø×(Ñ(¨¨L¸,ÔGß!Ø#(×#9Ñ#9Ð Ø$)×$;Ñ$;Ð!Ø+0×+IÑ+IÐ(ô —	’	Ü×&Ò&Ð'9¸1¸lÓKØ —O‘OÐ$4×$:Ñ$:Ó;×EÑEÀaÓHØ(õô —’Ø$Ø%Ø,ØØ(õ÷ *Ò)Ø"'×"7Ñ"7�ð ×.×.Ð.ð %*×$7Ñ$7�MØ(-×(?Ñ(?Ð%Ø—F‘FØ%Ÿ™Ø)Ø-ð ô ð
 Ÿ7™7 ?°LÓA�DØ%×0Ñ0°°LÀ$ÈbÐ0ÔQØ&×+Ñ+Ð,=×>ð '×-Ñ-Ø×-Ñ-×/Ñ/°×1BÑ1BÈ"ð .ô ð Ÿ6™6ØŸ™ °Ó>Ø0×6Ñ6ð "ó �Dð '×1Ñ1°!°\À4ÈqÐ1×Qñ{ ð@ 	�	‰	�%ÓØ�‰�eÓØØð	ð r   z-torch_nn::_linear_cross_entropy_batch_chunked)Úmutates_argsc          $      óò  € V ^8„  d   QhR\         P                  R\         P                  R\         P                  R\         P                  R,          R\         P                  R,          R\        R\        R	\        R
\        R\        R\         P
                  R\        R\        R\        R\        R\        \         P                  \         P                  \         P                  \         P                  3,          /# )r,   rI   rN   r�   r»   Nrœ   r    rŽ   râ   rã   rä   rÁ   r   r   r   r   r-   rP  )r0   s   "r   r2   r2   9  sú   € ÷ Hñ HÜ�<‰<ðHä—<‘<ðHô �L‰LðHô —‘ Õ$ð	Hô
 �L‰L˜4ÕðHô ðHô ðHô ðHô ðHô ðHô �{‰{ðHô ðHô ðHô !%ðHô #ðHô  Œ5�<‰<œŸ™¤u§|¡|´U·\±\ÐAÕBñ!Hr   c                óô  € \         P                  ! 4       pV'       g&   V P                  '       d   V'       d   \        R4      hV'       g&   VP                  '       d   V'       d   \        R4      hV'       g*   Ve&   VP                  '       d   V'       d   \        R4      hVP                  P
                  '       d&   VP                  '       d   V'       d   \        R4      h\        V VVVVVVVVV	V
VVV4      # )zÐScalar-reduction (mean/sum) chunked op: precomputes the loss and
gradients in forward, backward scales by the upstream gradient. The
chunked math lives in ``_linear_cross_entropy_batch_chunked_accumulator``.
z«linear_cross_entropy chunked op: compute_input_grad was False at trace time but input.requires_grad is True at runtime; recompile the graph with the desired requires_grad.z»linear_cross_entropy chunked op: compute_linear_weight_grad was False at trace time but linear_weight.requires_grad is True at runtime; recompile the graph with the desired requires_grad.z·linear_cross_entropy chunked op: compute_linear_bias_grad was False at trace time but linear_bias.requires_grad is True at runtime; recompile the graph with the desired requires_grad.zlinear_cross_entropy chunked op: gradients w.r.t. a probability target are not supported on the chunked path; use options=None.)r
   Úis_grad_enabledr   rø   r   rö   rf  )rI   rN   r�   r»   rœ   r    rŽ   râ   rã   rä   rÁ   r   r   r   r   Úgrad_enableds   &&&&&&&&&&&&&&& r   Ú#_linear_cross_entropy_batch_chunkedrl  6  sò   € ô: ×(Ò(Ó*€Lß %×"5×"5Ð"5¿,Üð8ó
ð 	
÷
 &¨-×*E×*EÐ*EÏ,ÜðKó
ð 	
÷ %ØÒ#Ø×%×%Ð%ßäð8ó
ð 	
ð
 ‡|�|×%×%Ð%¨&×*>×*>Ð*>Ç<ô ðNó
ð 	
ô ;ØØØØØØØØØØØØØ"Ø óð r   c                ó$   € V ^8„  d   QhR\         /# ©r,   rä   ©rå   )r0   s   "r   r2   r2   ‹  s   € ÷ 7Dñ 7Dô ñ7Dr   c                 ó4  € VR9   d/   \         P                  ! RV P                  V P                  R7      pM\	        RV: 24      hV'       d   V P
                  MRpV'       d   VP
                  MRpV'       d   VP
                  RR	 MR
p\         P                  ! VV P                  V P                  RR7      p\         P                  ! VV P                  VP                  RR7      p\         P                  ! VV P                  V P                  RR7      pVVVV3# )rš   rT  rë   NFrò   >   r›   rš   r~   )r   r   rÜ   r	   )r
   r   r   r   rú   r   )rI   rN   r�   r»   rœ   r    rŽ   râ   rã   rä   rÁ   r   r   r   r   ÚresultÚgrad_input_shapeÚgrad_linear_weight_shapeÚgrad_linear_bias_shaper$   r%   r&   s   &&&&&&&&&&&&&&&       r   r#   r#   Š  s÷   € ð$ �OÔ#Ü—’˜R u§{¡{¸5¿<¹<ÔH‰ä!Ð$UÈ9É,Ð"WÓXÐXß&8�u—{’{¸fÐç9ˆ×Ò¸vð ÷ %=ˆ×Ñ˜C˜RÑ À$ð ô —’ØØ�k‰kØ�|‰|Øô	€Jô ŸšØ Ø�k‰kØ×#Ñ#Øô	Ðô —{’{ØØ�k‰kØ�|‰|Øô	Ðð �:Ð1Ð3CÐCÐCr   c                óX  € V P                   p\        W!4       UUu. uF=  w  rEVe3   \        V\        P                  4      '       d   VP                  V^ 4      MTNK?  	  ppp\        V4       UUUu. uFU  p\        \        Wa4       UUu. uF3  w  rEVe)   \        V\        P                  4      '       d	   WG,          MTNK5  	  upp!  NKW  	  pppp\        P                  ! V U	u. uF  q™^ ,          NK  	  up	4      p
\        P                  ! V U	u. uF  q™^,          NK  	  up	4      p\        P                  ! V U	u. uF  q™^,          NK  	  up	4      p\        P                  ! V U	u. uF  q™^,          NK  	  up	4      pW«WÍ3R3# u uppi u uppi u upppi u up	i u up	i u up	i u up	i )zßvmap rule (slow path: per-sample Python loop). A fold-into-num_batches
fast path is now possible for both ops via the reduction='none' chunked op
(``_linear_cross_entropy_batch_chunked_no_reduction``); left as a follow-up.
)r   r   r   r   )	Ú
batch_sizeÚzipÚ
isinstancer
   r/   Úmovedimr
  rl  Ústack)ÚinfoÚin_dimsÚargsrv  ÚargÚin_dimÚ
moved_argsÚiÚoutputsÚoÚlossesÚgrad_inputsÚgrad_linear_weightsÚgrad_linear_biasess   &&*           r   Ú_vmaprˆ  Å  sŒ  € ð —‘€Jô ˜tÔ-ô	ñ .‰KˆCð Ò¤*¨S´%·,±,×"?Ò"?ð 	�‰�F˜AÔàò	ñ .ð	 ñ ô �zÔ"õñ #ˆAô 	,ô $' zÔ#;ôá#;‘K�Cð !Ò,´¸CÄÇÁ×1NÒ1N�–ÐTWÒWÙ#;òô	
ñ #ð ò ô �[Š[©Ó0© 1˜AŸ$˜$©Ñ0Ó1€FÜ—+’+©WÓ5©W¨ Ÿt˜t©WÑ5Ó6€KÜŸ+š+±WÓ&=±W°¨§t t±WÑ&=Ó>ÐÜŸš±GÓ%<±G¨q¨§d d±GÑ%<Ó=ÐØÐ!4ÐIÈ<ÐWÐWùó)ùóùôùò 1ùÚ5ùÚ&=ùÚ%<s6   ›AFÁ0FÂ9FÃ
FÃ#FÄFÄ;F"Å'F'ÆFc                 óø  € R .\         ,          pVf   \        V4      # V P                  '       d`   V P                  '       d   V P                  V,          V^ &   M6V P                  R uq`n        Vf   \        R4      hVP                  V4      V^ &   V P                  '       d`   V P                  '       d   V P                  V,          V^&   M6V P                  R uqpn        Vf   \        R4      hVP                  V4      V^&   V P                  '       d`   V P                  '       d   V P                  V,          V^&   M6V P                  R uq€n
        Vf   \        R4      hVP                  V4      V^&   \        V4      # )Nzjlinear_cross_entropy chunked backward called twice; retain_graph=True / double backward are not supported.)Ú_NUM_OP_INPUTSrù   r   r   r   rø   r¥   r   r   r   r   )	r    Úgrad_outputÚ_gi_gradÚ_gw_gradÚ_gb_gradrq  ÚgiÚgwÚgbs	   &&&&&    r   Ú,_linear_cross_entropy_batch_chunked_backwardr’  ä  s]  € ð ˆV”nÕ$€Fð ÒÜ�V‹}ÐØ
××ÐØ×!×!Ð!ØŸ™ +Õ-ˆF�1ŠIàŸ'™' 4ˆKˆB”ØŠzÜ"ðMóð ð Ÿ™ Ó,ˆF�1‰Ià
×%×%Ð%Ø×!×!Ð!ØŸ™ +Õ-ˆF�1ŠIàŸ'™' 4ˆKˆB”ØŠzÜ"ðMóð ð Ÿ™ Ó,ˆF�1‰Ið ×#×#Ð#Ø×!×!Ð!ØŸ™ +Õ-ˆF�1ŠIàŸ'™' 4ˆKˆB”ØŠzÜ"ðMóð ð Ÿ™ Ó,ˆF�1‰IÜ�‹=Ðr   )Úsetup_contextz:torch_nn::_linear_cross_entropy_batch_chunked_no_reductionc                ó8  € V ^8„  d   QhR\         P                  R\         P                  R\         P                  R\         P                  R,          R\         P                  R,          R\        R\        R	\        R
\         P                  R\         P                  /
# )r,   rI   rN   r�   r»   Nrœ   rŽ   rã   rä   rÁ   r-   )r
   r/   r}   rå   r   )r0   s   "r   r2   r2   (  s’   € ÷ #	ñ #	Ü�<‰<ð#	ä—<‘<ð#	ô �L‰Lð#	ô —‘ Õ$ð	#	ô
 �L‰L˜4Õð#	ô ð#	ô ð#	ô ð#	ô �{‰{ð#	ô ‡\�\ñ#	r   c	                óB   € \        V VVVVRVRVVVRRRR7      ^ ,          # )a/  reduction='none' chunked forward: returns per-sample loss ``(N,)``.

Gradients are not precomputed (the per-sample upstream grad is
unknown at forward); the accumulator's loss-only branch runs here,
and the backward recomputes the chunked grads. See
``_linear_cross_entropy_batch_chunked_accumulator``.
rõ   rê   F)r   r   r   )rf  ©	rI   rN   r�   r»   rœ   rŽ   rã   rä   rÁ   s	   &&&&&&&&&r   Ú0_linear_cross_entropy_batch_chunked_no_reductionr—  %  sE   € ô. ;ØØØØØØØØØØØØ Ø#(Ø!&ôð õ	ð 	r   c           	      ó   € Vw	  ppppppp	p
pT P                  VP                  4       VP                  4       TVe   VP                  4       MR Ve   VP                  4       MR 4       W€n        W�n        W n        W°n        R # rD   )Úsave_for_backwardr   Ú_ignore_indexÚ_batch_chunk_sizeÚ_acc_policyÚ
_acc_dtype)r    r!   r"   rI   rN   r�   r»   rœ   rŽ   rã   rä   rÁ   s   &&&         r   Ú>_linear_cross_entropy_batch_chunked_no_reduction_setup_contextrž  N  sŠ   € ð 	ñ
ØØØØØØØØØð ×ÑØ�‰‹Ø×ÑÓØØ +Ò 7ˆ×ÑÔ¸TØ!Ò-ˆ�‰Œ°4ôð %ÔØ,ÔØ „OØ†Nr   c                ó$   € V ^8„  d   QhR\         /# rn  ro  )r0   s   "r   r2   r2   o  s   € ÷ ñ ô ñr   c	                 ó€   € \         P                  ! V P                  R ,          V P                  V P                  RR7      # ):Nr*  NFrò   )r
   r   r   r   r   r–  s	   &&&&&&&&&r   r#   r#   n  s.   € ô �;Š;Ø�‰�B�˜uŸ{™{°5·<±<Èuôð r   c                óô  € V P                   p\        W!4       UUu. uF=  w  rEVe3   \        V\        P                  4      '       d   VP                  V^ 4      MTNK?  	  ppp\        V4       UUUu. uFU  p\        \        Wa4       UUu. uF3  w  rEVe)   \        V\        P                  4      '       d	   WG,          MTNK5  	  upp!  NKW  	  pppp\        P                  ! V4      ^ 3# u uppi u uppi u upppi )zwvmap rule (slow path: per-sample Python loop, mirrors the
scalar-reduction op). Stacks the per-sample ``(N,)`` losses.
)	rv  rw  rx  r
   r/   ry  r
  r—  rz  )	r{  r|  r}  rv  r~  r  r€  r�  r‚  s	   &&*      r   Ú_vmap_no_reductionr¢    sû   € ð
 —‘€Jô
 ˜tÔ-ô	ñ .‰KˆCð Ò¤*¨S´%·,±,×"?Ò"?ð 	�‰�F˜AÔàò	ñ .ð	 ñ ô �zÔ"õñ #ˆAô 	9ô $' zÔ#;ôá#;‘K�Cð !Ò,´¸CÄÇÁ×1NÒ1N�–ÐTWÒWÙ#;òô	
ñ #ð ò ô �;Š;�wÓ Ð"Ð"ùóùóùôs   ›AC'Á0C3Â9C-Ã
C3Ã-C3c                 óÊ  € V P                   w  r#rEpV P                  pV^ ,          pV^,          p	VRJ;'       d
    V^,          p
R.^	,          pV'       g   V	'       g   V
'       g   \        V4      # \        VVVVVRV P                  RV P
                  V P                  V P                  VV	V
VR7      w  rÍrïV'       d   WÛ^ &   V	'       d   Wë^&   V
'       d   Wû^&   \        V4      # )r   Nrõ   rê   rS  )Úsaved_tensorsÚneeds_input_gradrù   rf  rš  r›  rœ  r�  )r    r‹  rI   rN   r�   r»   rœ   Úneedsr   r   r   rq  r#   r$   r%   r&   s   &&              r   Ú9_linear_cross_entropy_batch_chunked_no_reduction_backwardr§  —  sé   € ð 9<×8IÑ8IÑ5€E˜&¨vØ× Ñ €EØ˜q�ÐØ!& q¥ÐØ*°$Ð6×CÐC¸5À½8ÐØ)-¨°­
€Fç×8×<Tä�V‹}Ðô 	8ØØØØØØØ×ÑØØ×!Ñ!Ø�O‰OØ�N‰NØØ&Ø$Ø(ô	
ñ 8€AÐ%÷& Øˆq‰	ß!Ø&ˆq‰	ßØ$ˆq‰	Ü�‹=Ðr   )TrD   r~   )ÚdataclassesÚ	functoolsr   r
   Ú__all__r   r   r'   Ú	dataclassr)   r{   rf  ÚlibraryÚ	custom_oprl  rŠ  Úregister_faker#   Úregister_vmaprˆ  r’  Úregister_autogradr—  rž  r¢  r§  r~   r   r   Ú<module>r±     s�  ðÛ Ý %ã ð €ôôòNð> ×Ñ÷ið ió ðiðX ×Ñ÷I	ð I	ó ðI	÷Xrð@
 ‡�×ÑØ3À"ð ó ôHóðHð\ €ð %×2Ñ2ô7Dó 3ð7Dðt %×2Ñ2ñXó 3ðXò<-ð` $× 5Ñ 5Ø0ØCð 6ô ð" ‡�×ÑØ@Èrð ó ô#	óð#	òLð@ 2×?Ñ?ôó @ðð  2×?Ñ?ñ#ó @ð#ò.+ð\ 1× BÑ BØ=ØPð Cö r   