Ë
    ÛÓ^j Œ  ã                   ón  — d dl Z d dlmZ d dlZd dlmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ  e«       rd dlZ ee«      Zd	d
ddœdddœdœe	de
d   ide
d   idœZ eed   j/                  «       «      Z G d„ de«      Z G d„ d«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d e«      Z G d!„ d"e«      Z G d#„ d$e«      Z  G d%„ d&e«      Z! G d'„ d(e«      Z" G d)„ d*e«      Z# G d+„ d,e«      Z$ G d-„ d.e«      Z%eeeeeeee e!e"e#e#e$e%d/œZ&d0„ Z'	 	 	 d7d1ed2e(dz  d3e)dz  d4e(fd5„Z*d8d6„Z+y)9é    N)Ú
NamedTuple)Útqdmé   )ÚGGUF_CONFIG_DEFAULTS_MAPPINGÚGGUF_CONFIG_MAPPINGÚGGUF_TOKENIZER_MAPPINGÚ_gguf_parse_value)Úis_torch_available)Úis_gguf_available)Ú
get_loggerÚversionÚtensor_countÚkv_count)r   r   r   Ú	file_typeÚquantization_version)r   r   )ÚGGUFÚgeneralÚ	tokenizerÚtokenizer_config)ÚignoreÚconfigr   r   r   c                   ó@   — e Zd ZU ej                  ed<   eed<   eed<   y)Ú
GGUFTensorÚweightsÚnameÚmetadataN)Ú__name__Ú
__module__Ú__qualname__ÚnpÚndarrayÚ__annotations__ÚstrÚdict© ó    ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/modeling_gguf_pytorch_utils.pyr   r   8   s   … Ø�Z‰ZÓØ
ƒIØ„Nr&   r   c                   óL   — e Zd Zdd„Zdedefd„Zdeeef   dededefd	„Zd
„ Zy)ÚTensorProcessorNc                 ó   — |xs i | _         y ©N©r   )Úselfr   s     r'   Ú__init__zTensorProcessor.__init__?   s   € Ø’l ˆ�r&   Úhf_nameÚreturnc                 ó   — |S )zP
        Preprocesses the tensor name to ease loading the GGUF tensors.
        r%   ©r-   r/   s     r'   Úpreprocess_namezTensorProcessor.preprocess_nameB   s	   € ð ˆr&   Úgguf_to_hf_name_mapÚsuffixÚ	qual_namec                  ó   — y)zø
        Called when get_gguf_hf_weights_map fails to map a HF parameter
        (tensor) and corresponding GGUF one.

        This is particularly useful to resolve one-to-many
        HF-GGUF mappings sometimes appear in some MoE models.
        Nr%   )r-   r4   r5   r6   r/   s        r'   Úperform_fallback_tensor_mappingz/TensorProcessor.perform_fallback_tensor_mappingH   s   € ð 	r&   c                 ó   — t        ||i «      S r+   ©r   ©r-   r   r   Úkwargss       r'   ÚprocesszTensorProcessor.processT   s   € Ü˜' 4¨Ó,Ð,r&   r+   )	r   r   r   r.   r#   r3   r$   r8   r=   r%   r&   r'   r)   r)   >   sL   „ ó#ð sð ¨só ð
Ø#'¨¨S¨¡>ð
Ø;>ð
ØKNð
ØY\ó
ó-r&   r)   c            	       óp   ‡ — e Zd Zd	ˆ fd„	Zd„ Z	 d	dej                  dededz  dej                  fd„Zˆ xZ	S )
ÚLlamaTensorProcessorNc                 ó&   •— t         ‰| �  |¬«       y ©Nr,   ©Úsuperr.   ©r-   r   Ú	__class__s     €r'   r.   zLlamaTensorProcessor.__init__Y   ó   ø€ Ü‰Ñ ÐÕ'r&   c                 ó  — d|v sd|v rx| j                   j                  d«      }| j                   j                  d«      }d ||fv rt        ||i «      S d|v r| j                  |||«      }nd|v r| j                  |||«      }t        ||i «      S )Nz.attn_k.z.attn_q.Únum_attention_headsÚnum_key_value_heads)r   Úgetr   Ú_reverse_permute_weights)r-   r   r   r<   Ú	num_headsÚnum_kv_headss         r'   r=   zLlamaTensorProcessor.process\   sš   € Ø˜Ñ ¨tÑ!3ØŸ™Ÿ™Ð(=Ó>ˆIØŸ;™;Ÿ?™?Ð+@ÓAˆLà˜	 <Ð0Ñ0Ü! '¨4°Ó4Ð4Ø˜TÑ!Ø×7Ñ7¸ÀÈIÓV‘Ø˜tÑ#Ø×7Ñ7¸ÀÈLÓY�Ü˜' 4¨Ó,Ð,r&   r   Ún_headrM   r0   c                 óØ   — |�||k7  r|}|j                   d   |z  dz  } |j                  ||dg|j                   dd  ¢­Ž }|j                  dd«      j                  |j                   «      S )Nr   é   r   )ÚshapeÚreshapeÚswapaxes)r-   r   rN   rM   ÚdimÚws         r'   rK   z-LlamaTensorProcessor._reverse_permute_weightsi   sr   € ð
 Ð#¨°,Ò(>Ø!ˆFà�m‰m˜AÑ &Ñ(¨AÑ-ˆØˆG�O‰O˜F C¨Ð?¨W¯]©]¸1¸2Ð->Ò?ˆØ�z‰z˜!˜QÓ×'Ñ'¨¯©Ó6Ð6r&   r+   )
r   r   r   r.   r=   r    r!   ÚintrK   Ú__classcell__©rE   s   @r'   r?   r?   X   sE   ø„ õ(ò-ð LPñ
7Ø—z‘zð
7Ø+.ð
7Ø>AÀD¹jð
7à	�‰÷
7r&   r?   c                   ó   ‡ — e Zd Z ej                  d«      Z ej                  d«      Z ej                  d«      Zdˆ fd„	Zde	de	fd„Z
dee	e	f   d	e	d
e	de	fd„Zde	fd„Zdej                  dee	ef   de	de	fd„Zˆ xZS )ÚQwen2MoeTensorProcessorzmlp.experts.\d+.z7model\.layers\.(?P<bid>\d+)\.mlp\.experts\.gate_up_projú3(?P<name>.*\.ffn_(?P<w>gate|down|up)_exps)\.weight$c                 ó&   •— t         ‰| �  |¬«       y rA   rB   rD   s     €r'   r.   z Qwen2MoeTensorProcessor.__init__{   rF   r&   r/   r0   c                 óD   — t        j                  | j                  d|«      S ©Nzmlp.experts.©ÚreÚsubÚHF_EXPERT_RENAME_PATTERNr2   s     r'   r3   z'Qwen2MoeTensorProcessor.preprocess_name~   ó   € Ü�v‰v�d×3Ñ3°^ÀWÓMÐMr&   r4   r5   r6   c                 óŒ   — t        j                  | j                  |«      x}r"||z   }||d|d   › d|› �<   ||d|d   › d|› �<   y y )Núblk.Úbidú.ffn_gate_expsú.ffn_up_exps)r`   Ú	fullmatchÚHF_MOE_W13_PATTERN©r-   r4   r5   r6   r/   ÚmÚfull_hf_names          r'   r8   z7Qwen2MoeTensorProcessor.perform_fallback_tensor_mapping�   sg   € ô —‘˜T×4Ñ4°gÓ>Ð>ˆ1Ð>Ø$ wÑ.ˆLØKWÐ $ q¨¡x j°¸v¸hÐ GÑHØIUÐ $ q¨¡x j°¸V¸HÐ EÒFð ?r&   r   c                 ó2  — t        j                  | j                  |«      x}rN|j                  d«      }|j                  d«      }|r*| j	                  ||||d      |d   «       t        |d i «      S d|v rt        j                  |d¬«      }t        ||i «      S )NÚtensor_key_mappingÚparsed_parametersr   rU   Úffn_gate_inp_shexpr   ©Úaxis)r`   ri   ÚGGUF_MOE_WEIGHTS_PATTERNrJ   Ú_set_moe_expert_tensorr   r    Úexpand_dims©r-   r   r   r<   rl   ro   rp   s          r'   r=   zQwen2MoeTensorProcessor.processŠ   s¢   € Ü—‘˜T×:Ñ:¸DÓAÐAˆ1ÐAØ!'§¡Ð,@Ó!AÐØ &§
¡
Ð+>Ó ?ÐÙ!Ø×+Ñ+¨GÐ5FÐHZÐ[\Ð]cÑ[dÑHeÐghÐilÑgmÔnÜ! '¨4°Ó4Ð4Ø 4Ñ'ô —n‘n W°1Ô5ˆGÜ˜' 4¨Ó,Ð,r&   r   rp   rU   c                 óž  — t        j                  t        j                  |«      «      }|dk(  r	||d   |<   y t	        |j
                  «      }d}||   }|dz  ||<   ||d   vr't        j                  ||j                  ¬«      |d   |<   |d   |   }	|dk(  r|	j                  |d|«      }	n|	j                  |||«      }	|	j                  |«       y ©NÚdownÚtensorsr   rP   )ÚdtypeÚgater   ©
ÚtorchÚ
from_numpyr    ÚcopyÚlistrQ   Úzerosr|   ÚnarrowÚcopy_©
r-   r   rp   r/   rU   Útorch_weightsrQ   Ú	shard_dimÚ
shard_sizeÚouts
             r'   ru   z.Qwen2MoeTensorProcessor._set_moe_expert_tensor—   sÕ   € Ü×(Ñ(¬¯©°Ó)9Ó:ˆØ�Š;Ø4AÐ˜iÑ(¨Ò1ô ˜Ÿ™Ó'ˆEØˆIØ˜yÑ)ˆJØ)¨A™~ˆE�)ÑØÐ/°	Ñ:Ñ:Ü8=¿¹ÀEÐQ^×QdÑQdÔ8eÐ! )Ñ,¨WÑ5Ø 1°)Ñ <¸WÑ EˆCØ�FŠ{Ø—j‘j ¨A¨zÓ:‘à—j‘j ¨J¸
ÓC�Ø�I‰I�mÕ$r&   r+   )r   r   r   r`   Úcompilerb   rj   rt   r.   r#   r3   r$   r8   r=   r    r!   ru   rW   rX   s   @r'   rZ   rZ   v   sÄ   ø„ Ø)˜rŸz™zÐ*=Ó>ÐØ#˜Ÿ™Ð$^Ó_ÐØ)˜rŸz™zÐ*`ÓaÐõ(ðN sð N¨só NðVØ#'¨¨S¨¡>ðVØ;>ðVØKNðVØY\óVð- Só -ð%¨b¯j©jð %ÈTÐRUÐW[ÐR[É_ð %Ðgjð %Ðor÷ %r&   rZ   c            
       óÔ   ‡ — e Zd ZdZ ej
                  d«      Z ej
                  d«      Zdˆ fd„	Zde	fd„Z
dej                  ded	e	d
e	def
d„Zdej                  ded	e	defd„Zˆ xZS )ÚGptOssTensorProcessoraK  
    Tensor processor for GPT-OSS models (MoE with 128 experts).
    Handles:
    - Splitting stacked expert tensors (down_proj, gate_proj, up_proj) into individual experts.
    - Interleaving gate and up projections if stored in a combined tensor (gate_up_projs).
    - Bias tensors (1D) are passed through without transpose.
    z<blk\.(?P<bid>\d+)\.ffn_(?P<proj>down|gate|up)_projs\.weight$z-blk\.(?P<bid>\d+)\.ffn_gate_up_projs\.weight$c                 ó&   •— t         ‰| �  |¬«       y rA   rB   rD   s     €r'   r.   zGptOssTensorProcessor.__init__¼   rF   r&   r   c                 ó  — | j                   j                  |«      x}rN|j                  d«      }|j                  d«      }|r*|r(| j                  |||d   |d   |«       t	        |d i «      S | j
                  j                  |«      x}rJ|j                  d«      }|j                  d«      }|r&|r$| j                  |||d   |«       t	        |d i «      S d|v r%t        |j                  «      dk(  rt	        ||i «      S t	        ||i «      S )Nro   rp   rf   Úprojú.biasr   )	rt   ÚmatchrJ   Ú_split_moe_expert_tensorr   ÚGGUF_MOE_COMBINED_PATTERNÚ_interleave_gate_up_tensorÚlenrQ   rw   s          r'   r=   zGptOssTensorProcessor.process¿   s  € à×-Ñ-×3Ñ3°DÓ9Ð9ˆ1Ð9Ø!'§¡Ð,@Ó!AÐØ &§
¡
Ð+>Ó ?ÐÙ!Ñ&7Ø×-Ñ-¨gÐ7HÈ!ÈEÉ(ÐTUÐV\ÑT]Ð_qÔrÜ! '¨4°Ó4Ð4ð ×.Ñ.×4Ñ4°TÓ:Ð:ˆ1Ð:Ø!'§¡Ð,@Ó!AÐØ &§
¡
Ð+>Ó ?ÐÙ!Ñ&7Ø×/Ñ/°Ð9JÈAÈeÉHÐVhÔiÜ! '¨4°Ó4Ð4ð �d‰?œs 7§=¡=Ó1°QÒ6Ü˜g t¨RÓ0Ð0ô ˜' 4¨Ó,Ð,r&   r   rp   rf   r�   ro   c                 óD  — | j                   j                  dd«      }t        t        ||j                  d   «      «      D ]_  }||   }d|› d|› d|› d�}	|j                  «       D ]  \  }
}|
|	v sŒ|	j                  |
|«      }	Œ t        j                  |d¬	«      |d
   |	<   Œa y)z:Split a stacked MoE tensor into individual expert tensors.Únum_local_expertsé€   r   úmodel.layers.ú.block_sparse_moe.experts.ú.z_proj.weightT©r�   r{   N)	r   rJ   ÚrangeÚminrQ   ÚitemsÚreplacer   Útensor)r-   r   rp   rf   r�   ro   Únum_expertsÚiÚexpert_weightr/   ÚkeyÚ
mapped_keys               r'   r“   z.GptOssTensorProcessor._split_moe_expert_tensor×   s¶   € ð —k‘k—o‘oÐ&9¸3Ó?ˆô ”s˜;¨¯©°aÑ(8Ó9Ó:ò 		[ˆAØ# A™JˆMà% c UÐ*DÀQÀCÀqÈÈÈlÐ[ˆGà#5×#;Ñ#;Ó#=ò ?‘��ZØ˜'’>Ø%Ÿo™o¨c°:Ó>‘Gð?ô 5:·L±LÀÐUYÔ4ZÐ˜iÑ(¨Ò1ñ		[r&   c                 óH  — | j                   j                  dd«      }|j                  d   }|dz  }|dd…d|…dd…f   }|dd…|d…dd…f   }	t        t	        ||j                  d   «      «      D ]±  }
||
   j
                  }|	|
   j
                  }d|› d|
› d	�}d|› d|
› d
�}|j                  «       D ]2  \  }}||v r|j                  ||«      }||v sŒ!|j                  ||«      }Œ4 t        j                  |d¬«      |d   |<   t        j                  |d¬«      |d   |<   Œ³ y)a  
        Process a combined gate+up tensor.
        Expected shape: [num_experts, intermediate_size, hidden_size].
        Interleaving: gate occupies first half of intermediate dimension,
        up occupies second half. Transpose to [hidden, half_inter] per expert.
        r˜   r™   r   rP   Nr   rš   r›   z.gate_proj.weightz.up_proj.weightTr�   r{   )
r   rJ   rQ   rž   rŸ   ÚTr    r¡   r   r¢   )r-   r   rp   rf   ro   r£   Ú
inter_sizeÚ
half_interÚ	gate_partÚup_partr¤   Úgate_weightÚ	up_weightÚ	gate_nameÚup_namer¦   r§   s                    r'   r•   z0GptOssTensorProcessor._interleave_gate_up_tensorî   sL  € ð —k‘k—o‘oÐ&9¸3Ó?ˆØ—]‘] 1Ñ%ˆ
Ø 1‘_ˆ
ØšA˜{ 
˜{ªAÐ-Ñ.ˆ	Øš!˜Z™[ª!Ð+Ñ,ˆä”s˜;¨¯©°aÑ(8Ó9Ó:ò 	WˆAØ# A™,Ÿ.™.ˆKØ ™
Ÿ™ˆIà'¨ uÐ,FÀqÀcÐIZÐ[ˆIØ% c UÐ*DÀQÀCÀÐWˆGð $6×#;Ñ#;Ó#=ò ?‘��ZØ˜)Ñ#Ø )× 1Ñ 1°#°zÓ B�IØ˜'’>Ø%Ÿo™o¨c°:Ó>‘Gð	?ô 7<·l±lÀ;ÐUYÔ6ZÐ˜iÑ(¨Ñ3Ü49·L±LÀÐQUÔ4VÐ˜iÑ(¨Ò1ñ	Wr&   r+   )r   r   r   Ú__doc__r`   r‹   rt   r”   r.   r#   r=   r    r!   r$   r“   r•   rW   rX   s   @r'   r�   r�   ®   s²   ø„ ñð  *˜rŸz™zÐ*iÓjÐà * §
¡
Ð+[Ó \Ðõ(ð- Só -ð0[à—‘ð[ð  ð[ð ð	[ð
 ð[ð !ó[ð."Wà—‘ð"Wð  ð"Wð ð	"Wð
 !÷"Wr&   r�   c                   óv   ‡ — e Zd Zdˆ fd„	Zd„ Zdej                  dedefd„Zdej                  dedefd„Z	ˆ xZ
S )	ÚBloomTensorProcessorc                 ó&   •— t         ‰| �  |¬«       y rA   rB   rD   s     €r'   r.   zBloomTensorProcessor.__init__  rF   r&   c                 ó¶   — d|v rI| j                   d   }| j                   d   }d|v r| j                  |||«      }n| j                  |||«      }t        ||i «      S )NÚattn_qkvrN   Úhidden_sizeÚweight)r   Ú_reverse_reshape_weightsÚ_reverse_reshape_biasr   )r-   r   r   r<   rL   Ún_embeds         r'   r=   zBloomTensorProcessor.process  se   € Ø˜ÑØŸ™ HÑ-ˆIØ—k‘k -Ñ0ˆGØ˜4ÑØ×7Ñ7¸ÀÈGÓT‘à×4Ñ4°W¸iÈÓQ�Ü˜' 4¨Ó,Ð,r&   r   rN   r¼   c                 ó(  — t        j                  |dd¬«      \  }}}|j                  |||z  |«      }|j                  |||z  |«      }|j                  |||z  |«      }t        j                  |||gd¬«      }|j                  |dz  ||z  z  |«      S )Né   r   rr   r   )r    Úarray_splitrR   Ústack)r-   r   rN   r¼   ÚqÚkÚvÚqkv_weightss           r'   rº   z-BloomTensorProcessor._reverse_reshape_weights!  s˜   € ô —.‘. ¨!°!Ô4‰ˆˆ1ˆaà�I‰I�f˜g¨Ñ/°Ó9ˆØ�I‰I�f˜g¨Ñ/°Ó9ˆØ�I‰I�f˜g¨Ñ/°Ó9ˆÜ—h‘h  1 a˜y¨qÔ1ˆà×"Ñ" 6¨A¡:°¸FÑ1BÑ#CÀWÓMÐMr&   c                 ó  — t        j                  |d«      \  }}}|j                  |||z  «      }|j                  |||z  «      }|j                  |||z  «      }t        j                  |||gd¬«      j	                  «       }|S )Nr¾   r   rr   )r    r¿   rR   rÀ   Úflatten)r-   r   rN   r¼   Úq_biasÚk_biasÚv_biasÚqkv_biass           r'   r»   z*BloomTensorProcessor._reverse_reshape_bias-  s   € ô "$§¡°¸Ó!;Ñˆ�˜à—‘ ¨°6Ñ(9Ó:ˆØ—‘ ¨°6Ñ(9Ó:ˆØ—‘ ¨°6Ñ(9Ó:ˆä—8‘8˜V V¨VÐ4¸1Ô=×EÑEÓGˆØˆr&   r+   )r   r   r   r.   r=   r    r!   rV   rº   r»   rW   rX   s   @r'   r´   r´     sN   ø„ õ(ò-ð
N°·
±
ð 
NÀCð 
NÐRUó 
Nð
¨R¯Z©Zð 
Àð 
Ès÷ 
r&   r´   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚT5TensorProcessorc                 ó&   •— t         ‰| �  |¬«       y rA   rB   rD   s     €r'   r.   zT5TensorProcessor.__init__;  rF   r&   c                 óŠ   — d }|j                  d«      D ]  }|j                  «       sŒt        |«      } n t        ||d|i«      S )Nrœ   rf   )ÚsplitÚisdigitrV   r   )r-   r   r   r<   rf   Úchunks         r'   r=   zT5TensorProcessor.process>  sH   € ØˆØ—Z‘Z “_ò 	ˆEØ�}‰}�Ü˜%“j�Ùð	ô ˜' 4¨%°¨Ó6Ð6r&   r+   ©r   r   r   r.   r=   rW   rX   s   @r'   rÌ   rÌ   :  s   ø„ õ(ö7r&   rÌ   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚGPT2TensorProcessorc                 ó&   •— t         ‰| �  |¬«       y rA   rB   rD   s     €r'   r.   zGPT2TensorProcessor.__init__H  rF   r&   c                 óæ   — d|v sd|v sd|v sd|v r|j                   }|dk(  rDd}|j                  di «      }t        j                  t	        j
                  |«      «      |d   |<   d }t        ||i «      S )	Nzattn_qkv.weightzffn_down.weightzffn_up.weightzattn_output.weightúoutput.weightzlm_head.weightrp   r{   )r©   rJ   r   r€   r    r�   r   )r-   r   r   r<   rp   s        r'   r=   zGPT2TensorProcessor.processK  sˆ   € ð  Ñ%Ø  DÑ(Ø $Ñ&Ø# tÑ+à—i‘iˆGð �?Ò"ð $ˆDØ &§
¡
Ð+>ÀÓ CÐÜ16×1AÑ1AÄ"Ç'Á'È'ÓBRÓ1SÐ˜iÑ(¨Ñ.ØˆDÜ˜' 4¨Ó,Ð,r&   r+   rÒ   rX   s   @r'   rÔ   rÔ   G  s   ø„ õ(ö-r&   rÔ   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚMambaTensorProcessorc                 ó&   •— t         ‰| �  |¬«       y rA   rB   rD   s     €r'   r.   zMambaTensorProcessor.__init__b  rF   r&   c                 ó†   — d|v rt        j                  |d¬«      }d|v rt        j                  | «      }t        ||i «      S )Nzssm_conv1d.weightr   rr   Ússm_a)r    rv   Úlogr   r;   s       r'   r=   zMambaTensorProcessor.processe  sD   € Ø $Ñ&ô —n‘n W°1Ô5ˆGØ�d‰?ô —f‘f˜g˜XÓ&ˆGÜ˜' 4¨Ó,Ð,r&   r+   rÒ   rX   s   @r'   rÙ   rÙ   a  s   ø„ õ(ö	-r&   rÙ   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚNemotronTensorProcessorc                 ó&   •— t         ‰| �  |¬«       y rA   rB   rD   s     €r'   r.   z NemotronTensorProcessor.__init__r  rF   r&   c                 ó.   — d|v r|dz
  }t        ||i «      S ©Nznorm.weightr   r:   r;   s       r'   r=   zNemotronTensorProcessor.processv  ó"   € Ø˜DÑ Ø ‘kˆGÜ˜' 4¨Ó,Ð,r&   r+   rÒ   rX   s   @r'   rß   rß   q  s   ø„ õ(ö-r&   rß   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚGemma2TensorProcessorc                 ó&   •— t         ‰| �  |¬«       y rA   rB   rD   s     €r'   r.   zGemma2TensorProcessor.__init__}  rF   r&   c                 ó.   — d|v r|dz
  }t        ||i «      S râ   r:   r;   s       r'   r=   zGemma2TensorProcessor.process‚  rã   r&   r+   rÒ   rX   s   @r'   rå   rå   |  s   ø„ õ(ö
-r&   rå   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚLfm2TensorProcessorc                 ó&   •— t         ‰| �  |¬«       y rA   rB   rD   s     €r'   r.   zLfm2TensorProcessor.__init__‰  rF   r&   c                 óR   — d|v rt        j                  |d¬«      }t        ||i «      S )Nzshortconv.conv.weightr   rr   )r    rv   r   r;   s       r'   r=   zLfm2TensorProcessor.processŒ  s)   € Ø" dÑ*ä—n‘n W°1Ô5ˆGÜ˜' 4¨Ó,Ð,r&   r+   rÒ   rX   s   @r'   ré   ré   ˆ  s   ø„ õ(ö-r&   ré   c                   ó$  ‡ — e Zd Z ej                  d«      Z ej                  d«      Z ej                  d«      Z ej                  d«      Zdˆ fd„	Z	de
de
fd„Zd	ee
e
f   d
e
de
de
fd„Zde
fd„Zdej                   dee
ef   de
de
fd„Zˆ xZS )ÚMiniMaxM2TensorProcessorzmlp\.experts\.\d+\.z<(?:model\.)?layers\.(?P<bid>\d+)\.mlp\.experts\.gate_up_projr[   z>(?:model\.)?layers\.(?P<bid>\d+)\.mlp\.e_score_correction_biasc                 ó&   •— t         ‰| �  |¬«       y rA   rB   rD   s     €r'   r.   z!MiniMaxM2TensorProcessor.__init__™  rF   r&   r/   r0   c                 óD   — t        j                  | j                  d|«      S r^   r_   r2   s     r'   r3   z(MiniMaxM2TensorProcessor.preprocess_nameœ  rc   r&   r4   r5   r6   c                 óð   — t        j                  | j                  |«      x}r"||z   }||d|d   › d|› �<   ||d|d   › d|› �<   y t        j                  | j                  |«      x}r||z   |d|d   › d�<   y y )Nre   rf   rg   rh   z.exp_probs_b.bias)r`   ri   rj   ÚHF_BIAS_PATTERNrk   s          r'   r8   z8MiniMaxM2TensorProcessor.perform_fallback_tensor_mappingŸ  s¢   € ô —‘˜T×4Ñ4°gÓ>Ð>ˆ1Ð>Ø$ wÑ.ˆLØKWÐ $ q¨¡x j°¸v¸hÐ GÑHØIUÐ $ q¨¡x j°¸V¸HÐ EÒFä—,‘,˜t×3Ñ3°WÓ=Ð=ˆQÐ=ØFOÐRYÑFYÐ $ q¨¡x jÐ0AÐ BÒCð >r&   r   c                 óü   — t        j                  | j                  |«      x}rN|j                  d«      }|j                  d«      }|r| j	                  ||||d      |d   «       t        |d i «      S t        ||i «      S )Nro   rp   r   rU   )r`   ri   rt   rJ   ru   r   rw   s          r'   r=   z MiniMaxM2TensorProcessor.process«  sˆ   € Ü—‘˜T×:Ñ:¸DÓAÐAˆ1ÐAØ!'§¡Ð,@Ó!AÐØ &§
¡
Ð+>Ó ?ÐÙ!Ø×+Ñ+¨GÐ5FÐHZÐ[\Ð]cÑ[dÑHeÐghÐilÑgmÔnÜ˜g t¨RÓ0Ð0Ü˜' 4¨Ó,Ð,r&   r   rp   rU   c                 óž  — t        j                  t        j                  |«      «      }|dk(  r	||d   |<   y t	        |j
                  «      }d}||   }|dz  ||<   ||d   vr't        j                  ||j                  ¬«      |d   |<   |d   |   }	|dk(  r|	j                  |d|«      }	n|	j                  |||«      }	|	j                  |«       y ry   r~   r†   s
             r'   ru   z/MiniMaxM2TensorProcessor._set_moe_expert_tensor´  sÕ   € Ü×(Ñ(¬¯©°Ó)9Ó:ˆØ�Š;Ø4AÐ˜iÑ(¨Ò1ô ˜Ÿ™Ó'ˆEØˆIØ˜yÑ)ˆJØ)¨A™~ˆE�)ÑØÐ/°	Ñ:Ñ:Ü8=¿¹ÀEÐQ^×QdÑQdÔ8eÐ! )Ñ,¨WÑ5Ø 1°)Ñ <¸WÑ EˆCØ�FŠ{Ø—j‘j ¨A¨zÓ:‘à—j‘j ¨J¸
ÓC�Ø�I‰I�mÕ$r&   r+   )r   r   r   r`   r‹   rb   rj   rt   rñ   r.   r#   r3   r$   r8   r=   r    r!   ru   rW   rX   s   @r'   rí   rí   “  sÕ   ø„ Ø)˜rŸz™zÐ*@ÓAÐØ#˜Ÿ™Ð$cÓdÐØ)˜rŸz™zÐ*`ÓaÐØ �b—j‘jÐ!bÓc€Oõ(ðN sð N¨só Nð
ZØ#'¨¨S¨¡>ð
ZØ;>ð
ZØKNð
ZØY\ó
Zð- Só -ð%¨b¯j©jð %ÈTÐRUÐW[ÐR[É_ð %Ðgjð %Ðor÷ %r&   rí   )ÚllamaÚqwen2moeÚgpt_ossÚqwen3moeÚbloomÚt5Ú	t5encoderÚgpt2ÚmambaÚnemotronÚgemma2Úgemma3Úlfm2ú
minimax-m2c                 óÀ   — || j                   vrg S | j                   |   }|j                  D �cg c]%  }t        |j                  |   |j                  «      ‘Œ' c}S c c}w r+   )ÚfieldsÚdatar	   ÚpartsÚtypes)ÚreaderÚfieldÚvalueÚ_data_indexs       r'   Ú
read_fieldr  Ú  sP   € Ø�F—M‘MÑ!Øˆ	Ø�M‰M˜%Ñ €EØX]×XbÑXbÖcÈÔ˜eŸk™k¨+Ñ6¸¿¹ÕDÒcÐcùÒcs   ®*AÚ	processorÚ
model_typeÚ
num_layersr6   c           
      óú  — t        «       rt        «       r	ddlm}m} n t
        j                  d«       t        d«      ‚|€| j                  j                  n|}|€| j                  j                  n|}|dk(  rd}n7|dk(  rd	}n/|d
k(  rd}n'|dk(  rd}n|dk(  rd}n|dk(  rd}n|dk(  rd}n|dk(  rd}d}|j                  «       D ]  \  }}	|	|k(  sŒ|} n |€t        d|› d�«      ‚ |||«      }
i }| j                  «       }|D ]†  }|j                  |«      }|d}}|j                  d«      s|j                  d«      r|j!                  dd«      \  }}d|z   }|
j#                  |«      }|€|j%                  ||||«       Œ|||z   |||z   <   Œˆ | j'                  «       x}rX|D ]S  \  }}t)        |||||› |› d�¬«      }|j                  «       D ��ci c]  \  }}||vsŒ||“Œ }}}|j+                  |«       ŒU |S c c}}w )aY  
    GGUF uses this naming convention for their tensors from HF checkpoint:
    `blk.N.BB.weight` and `blk.N.BB.bias`
    where N signifies the block number of a layer, and BB signifies the
    attention/mlp layer components.
    See "Standardized tensor names" in
    https://github.com/ggerganov/ggml/blob/master/docs/gguf.md for details.
    r   )ÚMODEL_ARCH_NAMESÚget_tensor_name_mapúÛLoading a GGUF checkpoint in PyTorch, requires both PyTorch and GGUF>=0.10.0 to be installed. Please see https://pytorch.org/ and https://github.com/ggerganov/llama.cpp/tree/master/gguf-py for installation instructions.úKPlease install torch and gguf>=0.10.0 to load a GGUF checkpoint in PyTorch.NÚcoherez	command-rÚ	qwen2_moerõ   Ú	qwen3_moer÷   Úgemma3_textrÿ   Úgemma4_textÚgemma4Úumt5rù   Ú
minimax_m2r  rö   úgpt-osszUnknown gguf model_type: zÏ in gguf-py. This might because you're using an outdated version of gguf-py package, you can install `gguf` package from source refer to https://github.com/ggerganov/llama.cpp/tree/master/gguf-py#developmentÚ z.weightr‘   rœ   r   )r6   )r   r
   Úggufr  r  ÚloggerÚerrorÚImportErrorr   r  Únum_hidden_layersr    ÚNotImplementedErrorÚ
state_dictr3   ÚendswithÚrsplitÚget_namer8   Únamed_childrenÚget_gguf_hf_weights_mapÚupdate)Úhf_modelr  r  r  r6   r  r  Úarchr¦   r	  Úname_mapr4   r$  r/   r   r5   Ú	gguf_namer(  ÚchildÚsub_maprÂ   rÃ   s                         r'   r)  r)  â  s€  € ô ÔÔ1Ô3ß>Ð>ä�‰ðAô	
ô ÐgÓhÐhà/9Ð/A�—‘×+Ò+Àz€JØ6@Ð6H�—‘×2Ò2Èj€Jà�XÒØ ‰
Ø	�{Ò	"Ø‰
Ø	�{Ò	"Ø‰
Ø	�}Ò	$Ø‰
Ø	�}Ò	$Ø‰
Ø	�vÒ	Ø‰
Ø	�|Ò	#Ø!‰
Ø	�yÒ	 Øˆ
Ø€DØ&×,Ñ,Ó.ò ‰
ˆˆUØ�JÓØˆDÙðð €|Ü!Ø'¨
 |ð 4Uð Uó
ð 	
ñ # 4¨Ó4€Hð ÐØ×$Ñ$Ó&€JØò FˆØ×+Ñ+¨GÓ4ˆà ˆfˆØ×Ñ˜IÔ&¨'×*:Ñ*:¸7Ô*CØ"Ÿ>™>¨#¨qÓ1‰LˆD�&Ø˜6‘\ˆFà×%Ñ% dÓ+ˆ	ØÐØ×5Ñ5Ð6IÈ6ÐS\Ð^eÔfØà2;¸gÑ2EÐ˜I¨Ñ.Ò/ðFð" "×0Ñ0Ó2Ð2€~Ð2Ø)ò 	0‰KˆD�%Ü-Ø�y *¨jÀyÀkÐRVÐQWÐWXÐDYôˆGð )0¯©«×X¡  1¸1ÐDWÒ;W�q˜!‘tÐXˆGÑXØ×&Ñ& wÕ/ð	0ð Ðùó Ys   ÇG7ÇG7c                 óÚ  ‡/‡0— t        «       rt        «       r	ddlm}m} n t
        j                  d«       t        d«      ‚ || «      }|j                  }t        |j                  «       «      }t        D �	ci c]  }	|	i “Œ }
}	t        |d«      d   }t        |d«      }d}d|v rd	|v rd	}nId
|v sd|v r?d|
d   d<   |r%d|d   j                  «       v rd}d|v rdg|
d   d<   nd|v r	dg|
d   d<   d
}n|}d|v rd}nd|v sd|v rd}nd|v rd}nd|v rd}d|v rSh d£Š/dŠ0t        ˆ/fd„|j                  D «       «      }t        ˆ0fd„|j                  D «       «      }||
d   d <   | |
d   d!<   |t         vr|t         vrt#        d"|› d#�«      ‚d$d%g}t%        d&„ |j                  D «       «      xs ||v |
d   d'<   t'        j(                  |t'        j(                  |«      xs i «      }|j+                  «       D ]  \  }}|
d   j-                  ||«       Œ |j                  j+                  «       D �]-  \  }}|j/                  ||«      }|j1                  d(«      }|d   }d(j3                  |d)d «      }|j4                  D �cg c]%  }t7        |j8                  |   |j:                  «      ‘Œ' }}t=        |«      d)k(  r|d   }t?        |t@        «      r||v r|j/                  ||«      }t        j+                  «       D ]@  \  }}||v sŒ|||   v sŒ||   |   }|d*k(  rŒ!|�||
|   |<   ||v sŒ0|jC                  |«       ŒB ||v s�Œt
        jE                  d+|› d,|› �«       �Œ0 |
d   d-   d.k(  rd/|
d   d-<   |
d   d-   d0k(  rd1|
d   d-<   g d2¢|
d   d3<   |
d   j)                  d-«      dk(  rBd4d5d6d7œ}|
d   j)                  d8«      }t?        |tF        «      r|j)                  |d5«      |
d   d8<   |
d   d-   d9k(  rK|
d   d:   }tI        |«      |
d   d:<   d;|
d   d<<   tK        |«      D � �!cg c]  \  } }!|!dkD  sŒ| ‘Œ c}!} |
d   d=<   |dk(  r·dRd>„}" |"|d?«      }#|#�¨d@|#i}$|j                  D ]�  }|jM                  dA«      sŒ|t=        dA«      d }%|%dBk(  rŒ)|j                  |   j8                  d   }t?        |tN        «      r|jQ                  dC«      }|%dDv rtS        |«      }n|%dEv rdF}%tG        |«      }n	 ||$|%<   Œ� |$|
d   dG<   dH|
d   vr3|
dI   }&dJ|&v rt=        |&dJ   «      |
d   dH<   nt
        jU                  dK«       |�ri |
dL<   |
j)                  di «      }'tV        j)                  |tX        «      }( |(|'¬M«      })t[        ||)«      }*t]        |j                  dN¬O«      D ]¥  }+|+j^                  }, ||+j4                  |+j`                  «      }-|)jc                  |-|,|*|
¬P«      }.|.jd                  }-|.j^                  },|,|*vrŒ^|*|,   },tg        jh                  tk        jl                  |-«      «      }+|�|+jo                  |«      }+|+|
dL   |,<   Œ§ t=        |«      dkD  rt
        jE                  dQ|› �«       |
S c c}	w c c}w c c}!} w )SaF  
    Load a GGUF file and return a dictionary of parsed parameters containing tensors, the parsed
    tokenizer and config attributes.

    Args:
        gguf_checkpoint_path (`str`):
            The path the to GGUF file to load
        return_tensors (`bool`, defaults to `False`):
            Whether to read the tensors from the file and return them. Not doing so is faster
            and only loads the metadata in memory.
        model_to_load (`nn.Module`, *optional*):
            The model to load the weights into. This is used to map GGUF tensor names to
            Transformers parameter names.
        torch_dtype (`torch.dtype`, *optional*):
            The desired `torch.dtype` for the loaded tensors. If provided, tensors will be
            converted to this dtype immediately after dequantization to save memory.
    r   )Ú
GGUFReaderÚ
dequantizer  r  zgeneral.architecturezgeneral.nameNrô   Úmistralrù   rú   Tr   Úis_gated_actr  ÚUMT5EncoderModelÚarchitecturesÚT5EncoderModelrõ   r  rö   r  r÷   r  r  r  Ústablelm>   úattn_k.biasúattn_q.biasúattn_v.biasÚffn_normc              3   óH   •K  — | ]  }‰D ]  }||j                   v –— Œ Œ y ­wr+   ©r   )Ú.0r¢   Ú	bias_nameÚattn_bias_names      €r'   ú	<genexpr>z'load_gguf_checkpoint.<locals>.<genexpr>„  s)   øè ø€ Òm°FÐ^lÒmÐQZ�y F§K¡KÔ/ÐmÐ/Ñmùs   ƒ"c              3   ó:   •K  — | ]  }‰|j                   v –— Œ y ­wr+   r?  )r@  r¢   Úffn_norm_names     €r'   rC  z'load_gguf_checkpoint.<locals>.<genexpr>…  s   øè ø€ Ò#^ÀV M°V·[±[Ô$@Ñ#^ùs   ƒÚuse_qkv_biasÚuse_parallel_residualzGGUF model with architecture z is not supported yet.Úfalconrø   c              3   ó:   K  — | ]  }|j                   d k7  –— Œ y­w)r×   Nr?  )r@  r¢   s     r'   rC  z'load_gguf_checkpoint.<locals>.<genexpr>�  s   è ø€ ÒH¨vˆF�K‰K˜?Õ*ÑHùs   ‚Útie_word_embeddingsrœ   r   éÿÿÿÿz1Some keys were not parsed and added into account z | r  rÿ   r  r  r  )r   éj   é2   Úeos_token_idÚnoneÚsoftmaxÚsigmoid)r   r   rP   Úscoring_funcr   rI   FÚblock_auto_adjust_ff_dimÚfull_attn_idxsc                 óª   — d|› �}|| j                   v r?| j                   |   j                  d   }t        |t        «      r|j	                  d«      }|S |S )Nzgpt-oss.r   úutf-8)r  r  Ú
isinstanceÚbytesÚdecode)r  r5   Údefaultr¦   Úvals        r'   Úread_gpt_keyz*load_gguf_checkpoint.<locals>.read_gpt_keyÚ  sU   € Ø˜V˜HÐ%ˆCØ�f—m‘mÑ#Ø—m‘m CÑ(×.Ñ.¨qÑ1�Ü˜c¤5Ô)ØŸ*™* WÓ-�CØ�
ØˆNr&   zrope.scaling.typeÚ	rope_typezgpt-oss.rope.scaling.ÚtyperV  )ÚfactorÚattention_factorÚ	beta_fastÚ	beta_slow)Úoriginal_context_lengthÚ original_max_position_embeddingsrd  Úrope_scalingÚ
vocab_sizer   Útokensz¤Can't find a way to retrieve missing config vocab_size from tokenizer parameters. This will use default value from model config class and cause unexpected behavior.r{   r,   z,Converting and de-quantizing GGUF tensors...)Údesc)r   r   ro   rp   z0Some keys of the GGUF file were not considered: r+   )8r   r
   r  r2  r3  r  r   r!  r  r‚   ÚkeysÚGGUF_TO_TRANSFORMERS_MAPPINGr  ÚlowerÚanyr{   ÚGGUF_SUPPORTED_ARCHITECTURESÚ
ValueErrorÚallr   rJ   r    Ú
setdefaultr¡   rÏ   Újoinr  r	   r  r  r–   rW  r#   ÚremoveÚinforV   ÚmaxÚ	enumerateÚ
startswithrX  rY  ÚfloatÚwarningÚTENSOR_PROCESSORSr)   r)  r   r   Útensor_typer=   r   r   r€   r    r�   Úto)1Úgguf_checkpoint_pathÚreturn_tensorsÚmodel_to_loadÚtorch_dtyper2  r3  r  r  Úreader_keysrÂ   rp   ÚarchitectureÚ
model_nameÚupdated_architecturerÊ   rG  Ú
exceptionsÚconfig_defaultsr¦   r	  Úgguf_keyr  rÏ   ÚprefixÚ
config_keyr
  Ú	parameterÚparameter_renamesÚrenamed_config_keyÚ_gating_func_mapÚ_scoringÚgguf_num_key_value_headsr¤   rM   r\  r]  re  r5   Útokenizer_parametersr   ÚProcessorClassr  ro   r¢   r   r   ÚresultrB  rE  s1                                                  @@r'   Úload_gguf_checkpointr’  <  sº  ù€ ô$ ÔÔ1Ô3ß/Ð/ä�‰ðAô	
ô ÐgÓhÐháÐ,Ó-€FØ�]‰]€FÜ�v—{‘{“}Ó%€Kä(DÖE 1˜˜B™ÐEÐÐEä˜fÐ&<Ó=¸aÑ@€Lä˜F NÓ3€JàÐð �,Ñ 9°
Ñ#:Ø(Ñð 
�Ñ	 °Ñ!<Ø6:Ð˜(Ñ# NÑ3Ù˜& J¨q¡M×$7Ñ$7Ó$9Ñ9Ø#)Ð Ø˜lÑ*Ø@RÐ?SÐ! (Ñ+¨OÒ<à˜lÑ*Ø@PÐ?QÐ! (Ñ+¨OÑ<Ø#'Ñ à+Ðà�\Ñ!Ø*ÑØ	�lÑ	" i°<Ñ&?Ø(ÑØ	�|Ñ	#Ø*ÑØ	˜Ñ	%Ø+Ðð
 �\Ñ!ÚFˆØ"ˆÜÓm¸f¿n¹nÔmÓmˆÜ #Ó#^ÈvÏ~É~Ô#^Ó ^ÐØ6>Ð˜(Ñ# NÑ3ØCXÐ?XÐ˜(Ñ#Ð$;Ñ<àÔ7Ñ7Ð<PÔXtÑ<tÜÐ8¸¸ÐF\Ð]Ó^Ð^ð ˜GÐ$€JäÑH¸¿¹ÔHÓHÒfÈLÐ\fÐLfð �hÑÐ 5Ñ6ô
 3×6Ñ6ØÔ:×>Ñ>¸|ÓLÒRÐPRó€Oð &×+Ñ+Ó-ò ;‰
ˆˆUØ˜(Ñ#×.Ñ.¨s°EÕ:ð;ð "Ÿ=™=×.Ñ.Ó0ó b‰ˆ�%Ø×#Ñ# LÐ2FÓGˆØ—‘˜sÓ#ˆØ�q‘ˆØ—X‘X˜e A B˜iÓ(ˆ
à]b×]gÑ]gÖhÈkÔ" 5§;¡;¨{Ñ#;¸U¿[¹[ÕIÐhˆÐhäˆu‹:˜Š?Ø˜!‘HˆEä�eœSÔ! l°eÑ&;Ø—M‘M ,Ð0DÓEˆEä,H×,NÑ,NÓ,Pò 
	1Ñ(ˆIÐ(ØÐ*Ò*¨zÐ=NÈvÑ=VÒ/VØ%6°vÑ%>¸zÑ%JÐ"Ø%¨Ò+Øà%Ð1ØGLÐ% iÑ0Ð1CÑDà˜{Ò*Ø×&Ñ& xÕ0ð
	1ð �{Ó"Ü�K‰KÐKÈHÈ:ÐUXÐY^ÐX_Ð`Öað7bð< ˜Ñ" <Ñ0°HÒ<Ø4AÐ˜(Ñ# LÑ1ð ˜Ñ" <Ñ0°HÒ<Ø4AÐ˜(Ñ# LÑ1ò 7CÐ˜(Ñ# NÑ3ð ˜Ñ"×&Ñ& |Ó4¸ÒDØ%¨)¸	ÑBÐØ$ XÑ.×2Ñ2°>ÓBˆÜ�h¤Ô$Ø:J×:NÑ:NÈxÐYbÓ:cÐ˜hÑ'¨Ñ7à˜Ñ" <Ñ0°FÒ:Ø#4°XÑ#>Ð?TÑ#UÐ ä=@ÐAYÓ=ZÐ˜(Ñ#Ð$9Ñ:àBGÐ˜(Ñ#Ð$>Ñ?ô
 &/Ð/GÓ%H÷9
Ù!�!�\ÈLÐ[\ÓL\ŠAó9
Ð˜(Ñ#Ð$4Ñ5ð ˜yÒ(ó	ñ ! Ð)<Ó=ˆ	ØÐ Ø'¨Ð3ˆLð —}‘}ò -�Ø—~‘~Ð&=Ô>ØØœSÐ!8Ó9Ð;Ð<�Ø˜VÒ#ØØŸ™ cÑ*×0Ñ0°Ñ3�Ü˜e¤UÔ+Ø!ŸL™L¨Ó1�EàÐUÑUÜ! %›L‘EØÐ^Ñ^à?�FÜ ›J‘EàØ',�˜VÒ$ð%-ð( ;GÐ˜hÑ'¨Ñ7ð Ð,¨XÑ6Ñ6Ø0°Ñ=ÐØÐ+Ñ+Ü8;Ð<PÐQYÑ<ZÓ8[Ð˜hÑ'¨Ò5ä�N‰Nðeôò
 Ø')Ð˜)Ñ$à"×&Ñ& x°Ó4ˆä*×.Ñ.¨|¼_ÓMˆÙ"¨&Ô1ˆ	ä4°]ÀIÓNÐä˜6Ÿ>™>Ð0^Ô_ò 	8ˆFØ—;‘;ˆDÙ  §¡¨f×.@Ñ.@ÓAˆGà×&Ñ&ØØØ#5Ø"3ð	 'ó ˆFð —n‘nˆGØ—;‘;ˆDàÐ-Ñ-Øà% dÑ+ˆDä×%Ñ%¤b§g¡g¨gÓ&6Ó7ˆFØÐ&ØŸ™ ;Ó/�Ø17Ð˜iÑ(¨Ò.ð-	8ô0 ˆ;Ó˜!ÒÜ�‰ÐFÀ{ÀmÐTÔUàÐùòk FùòL iùóf9
s   Á5
YÉ8*Y"ÐY'Ð)Y')NNr  )FNN),r`   Útypingr   Únumpyr    Ú	tqdm.autor   Úintegrationsr   r   r   r	   Úutilsr
   Úutils.import_utilsr   Úutils.loggingr   r   r   r  rj  r‚   ri  rm  r   r)   r?   rZ   r�   r´   rÌ   rÔ   rÙ   rß   rå   ré   rí   ry  r  r#   rV   r)  r’  r%   r&   r'   ú<module>rš     sÉ  ðó  
Ý ã Ý ÷ó õ &Ý 1Ý %ñ ÔÛá	�HÓ	€ð !Ø*Ø"ñ
ð
 "-ÐF\Ñ]ñð "ØÐ5°kÑBÐCØ$Ð&<Ð=OÑ&PÐQñ Ð ñ  $Ð$@ÀÑ$J×$OÑ$OÓ$QÓRÐ ô�ô ÷-ñ -ô47˜?ô 7ô<5%˜oô 5%ôpbW˜Oô bWôJ$˜?ô $ôN
7˜ô 
7ô-˜/ô -ô4-˜?ô -ô -˜oô -ô	-˜Oô 	-ô-˜/ô -ô2%˜ô 2%ðl "Ø'Ø$Ø'Ø!Ø
Ø"ØØ!Ø'Ø#Ø#ØØ*ñÐ ò$dð "Ø!ØñWàðWð �d‘
ðWð �d‘
ð	Wð
 óWôttr&   