U
    ¯Ê¹já]  ã                   @   sÂ  d Z ddlmZ ddlmZmZmZ ddlZddlm	Z	 ddl
m  mZ ddlmZmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZ dgZG dd„ de	jƒZ G dd„ de	jƒZ!G dd„ de	jƒZ"G dd„ de	jƒZ#G dd„ de	jƒZ$G dd„ de	jƒZ%dDdd„Z&dEdd„Z'ee'dd�e'dd�e'dd�e'dd�e'dd�e'dd�e'ddd dd!d"�e'ddd dd!d"�e'ddd dd!d"�e'ddd dd!d"�e'dd!d#�e'ddd#�d$œƒZ(e%d%œd&d'„Z)dFd)d*„Z*edGe%d+œd,d-„ƒZ+edHe%d+œd.d/„ƒZ,edIe%d+œd0d1„ƒZ-edJe%d+œd2d3„ƒZ.edKe%d+œd4d5„ƒZ/edLe%d+œd6d7„ƒZ0edMe%d+œd8d9„ƒZ1edNe%d+œd:d;„ƒZ2edOe%d+œd<d=„ƒZ3edPe%d+œd>d?„ƒZ4edQe%d+œd@dA„ƒZ5edRe%d+œdBdC„ƒZ6dS )Sa[   FocalNet

As described in `Focal Modulation Networks` - https://arxiv.org/abs/2203.11926

Significant modifications and refactoring from the original impl at https://github.com/microsoft/FocalNet

This impl is/has:
* fully convolutional, NCHW tensor layout throughout, seemed to have minimal performance impact but more flexible
* re-ordered downsample / layer so that striding always at beginning of layer (stage)
* no input size constraints or input resolution/H/W tracking through the model
* torchscript fixed and a number of quirks cleaned up
* feature extraction support via `features_only=True`
é    )Úpartial)ÚCallableÚOptionalÚTupleN©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)ÚMlpÚDropPathÚLayerNorm2dÚtrunc_normal_ÚClassifierHeadÚNormMlpClassifierHeadé   )Úbuild_model_with_cfg)Únamed_apply)Úgenerate_default_cfgsÚregister_modelÚFocalNetc                
       sF   e Zd Zdddddefeeeeeeeedœ‡ fdd„Zdd	„ Z	‡  Z
S )
ÚFocalModulationé   TFç        )ÚdimÚfocal_levelÚfocal_factorÚbiasÚuse_post_normÚnormalize_modulatorÚ	proj_dropÚ
norm_layerc
                    s&  t ƒ  ¡  || _|| _|| _|| _|| _|| _||| jd g| _t	j
|d| | jd  d|d�| _t	j
||d|d�| _t	 ¡ | _t	j
||dd�| _t	 |¡| _t	 ¡ | _g | _t| jƒD ]N}
| j|
 | j }| j t	 t	j
|||||d dd�t	 ¡ ¡¡ | j |¡ q¸| j�r|	|ƒnt	 ¡ | _d S )Nr   r   )Úkernel_sizer   )r    F)r    ÚgroupsÚpaddingr   )ÚsuperÚ__init__r   Úfocal_windowr   r   r   r   Úinput_splitÚnnÚConv2dÚfÚhÚGELUÚactÚprojZDropoutr   Ú
ModuleListÚfocal_layersZkernel_sizesÚrangeÚappendÚ
SequentialÚIdentityÚnorm)Úselfr   r%   r   r   r   r   r   r   r   Úkr    ©Ú	__class__© úS/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/models/focalnet.pyr$   %   s.    
"


þzFocalModulation.__init__c           
      C   sÖ   |   |¡}t || jd¡\}}}d}t| jƒD ]0\}}||ƒ}|||d d …||d …f   }q.|  |jddd�¡}|||d d …| jd …f   }| j	r¦|| jd  }||  
|¡ }	|  |	¡}	|  |	¡}	|  |	¡}	|	S )Nr   r   )r   é   T)Zkeepdim)r)   ÚtorchÚsplitr&   Ú	enumerater/   r,   Úmeanr   r   r*   r4   r-   r   )
r5   ÚxÚqÚctxZgatesZctx_allÚlZfocal_layerZ
ctx_globalZx_outr9   r9   r:   ÚforwardM   s    
"


zFocalModulation.forward)Ú__name__Ú
__module__Ú__qualname__r   ÚintÚboolÚfloatr   r$   rD   Ú__classcell__r9   r9   r7   r:   r   $   s"   öö(r   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚLayerScale2dçñhãˆµøä>Fc                    s*   t ƒ  ¡  || _t |t |¡ ¡| _d S ©N)r#   r$   Úinplacer'   Ú	Parameterr<   ZonesÚgamma)r5   r   Zinit_valuesrO   r7   r9   r:   r$   i   s    
zLayerScale2d.__init__c                 C   s*   | j  dddd¡}| jr"| |¡S || S )Nr   éÿÿÿÿ)rQ   ÚviewrO   Úmul_)r5   r@   rQ   r9   r9   r:   rD   n   s    zLayerScale2d.forward)rM   F)rE   rF   rG   r$   rD   rK   r9   r9   r7   r:   rL   h   s   rL   c                       s^   e Zd ZdZdddddddddejefeeeee	e	e	eeee
e
dœ‡ fd	d
„Zdd„ Z‡  ZS )ÚFocalNetBlockz% Focal Modulation Network Block.
    ç      @r   r;   Fç-Cëâ6?r   )r   Ú	mlp_ratior   r%   r   Úuse_post_norm_in_modulationr   Úlayerscale_valuer   Ú	drop_pathÚ	act_layerr   c              	      s(  t ƒ  ¡  || _|| _|| _|| _|| _|s4||ƒnt ¡ | _	t
||| j|||	|d�| _|rd||ƒnt ¡ | _|dk	r€t||ƒnt ¡ | _|
dkršt|
ƒnt ¡ | _|s°||ƒnt ¡ | _t|t|| ƒ||	dd�| _|râ||ƒnt ¡ | _|dk	rþt||ƒnt ¡ | _|
dk�rt|
ƒnt ¡ | _dS )ap  
        Args:
            dim: Number of input channels.
            mlp_ratio: Ratio of mlp hidden dim to embedding dim.
            focal_level: Number of focal levels.
            focal_window: Focal window size at first focal level.
            use_post_norm: Whether to use layer norm after modulation.
            use_post_norm_in_modulation: Whether to use layer norm in modulation.
            layerscale_value: Initial layerscale value.
            proj_drop: Dropout rate.
            drop_path: Stochastic depth rate.
            act_layer: Activation layer.
            norm_layer: Normalization layer.
        )r%   r   r   r   r   r   Nr   T)Zin_featuresZhidden_featuresr\   ZdropZuse_conv)r#   r$   r   rX   r%   r   r   r'   r3   Únorm1r   Ú
modulationÚ
norm1_postrL   Úls1r
   Ú
drop_path1Únorm2r	   rH   ÚmlpÚ
norm2_postÚls2Ú
drop_path2)r5   r   rX   r   r%   r   rY   r   rZ   r   r[   r\   r   r7   r9   r:   r$   w   s<    
ù	
ûzFocalNetBlock.__init__c                 C   s`   |}|   |¡}|  |¡}|  |¡}||  |  |¡¡ }||  |  |  |  |  	|¡¡¡¡¡ }|S rN   )
r]   r^   r_   ra   r`   rf   re   rd   rc   rb   )r5   r@   Zshortcutr9   r9   r:   rD   ¶   s    


&zFocalNetBlock.forward)rE   rF   rG   Ú__doc__r'   r+   r   rH   rJ   rI   r   r$   rD   rK   r9   r9   r7   r:   rU   s   s6   óó?rU   c                       sv   e Zd ZdZdddddddddddefeeeeeeeeeeeeeeedœ‡ fd	d
„Z	e
jjddd„ƒZdd„ Z‡  ZS )ÚFocalNetStagez4 A basic Focal Transformer layer for one stage.
    rV   Tr   FrW   r   ©r   Úout_dimÚdepthrX   Ú
downsampler   r%   Úuse_overlap_downr   rY   r   rZ   r   r[   r   c                    sv   t ƒ  ¡  || _|| _d| _|r6t|ˆd|ˆd�| _n
t ¡ | _t 	‡ ‡‡‡‡‡‡‡‡‡	‡
fdd„t
|ƒD ƒ¡| _dS )a8  
        Args:
            dim: Number of input channels.
            out_dim: Number of output channels.
            depth: Number of blocks.
            mlp_ratio: Ratio of mlp hidden dim to embedding dim.
            downsample: Downsample layer at start of the layer.
            focal_level: Number of focal levels
            focal_window: Focal window size at first focal level
            use_overlap_down: User overlapped convolution in downsample layer.
            use_post_norm: Whether to use layer norm after modulation.
            use_post_norm_in_modulation: Whether to use layer norm in modulation.
            layerscale_value: Initial layerscale value
            proj_drop: Dropout rate for projections.
            drop_path: Stochastic depth rate.
            norm_layer: Normalization layer.
        Fr   ©Úin_chsÚout_chsÚstrideÚoverlapr   c                    s<   g | ]4}t ˆˆˆˆˆ	ˆ
ˆˆˆtˆ tƒr.ˆ | nˆ ˆd �‘qS ))r   rX   r   r%   r   rY   r   rZ   r   r[   r   )rU   Ú
isinstanceÚlist©Ú.0Úi©r[   r   r%   rZ   rX   r   r   rj   r   r   rY   r9   r:   Ú
<listcomp>ý   s   óõz*FocalNetStage.__init__.<locals>.<listcomp>N)r#   r$   r   rk   Úgrad_checkpointingÚ
Downsamplerl   r'   r3   r.   r0   Úblocks)r5   r   rj   rk   rX   rl   r   r%   rm   r   rY   r   rZ   r   r[   r   r7   rx   r:   r$   É   s     #
û

"òzFocalNetStage.__init__c                 C   s
   || _ d S rN   )rz   )r5   Úenabler9   r9   r:   Úset_grad_checkpointing  s    z$FocalNetStage.set_grad_checkpointingc                 C   s@   |   |¡}| jD ]*}| jr2tj ¡ s2t ||¡}q||ƒ}q|S rN   )rl   r|   rz   r<   ÚjitZis_scriptingÚ
checkpoint)r5   r@   Zblkr9   r9   r:   rD     s    


zFocalNetStage.forward)T)rE   rF   rG   rg   r   rH   rJ   rI   r   r$   r<   r   Úignorer~   rD   rK   r9   r9   r7   r:   rh   Å   sB   ððDrh   c                       s8   e Zd Zd	eeeeee dœ‡ fdd„Zdd„ Z‡  Z	S )
r{   é   FNrn   c                    s~   t ƒ  ¡  || _d}|}|rJ|dks(t‚|dkr:d\}}n|dkrJd\}}tj|||||d�| _|dk	rp||ƒnt ¡ | _dS )	a  

        Args:
            in_chs: Number of input image channels.
            out_chs: Number of linear projection output channels.
            stride: Downsample stride.
            overlap: Use overlapping convolutions if True.
            norm_layer: Normalization layer.
        r   )r   r‚   r‚   )é   r   r   )r;   r   )r    rq   r"   N)	r#   r$   rq   ÚAssertionErrorr'   r(   r-   r3   r4   )r5   ro   rp   rq   rr   r   r"   r    r7   r9   r:   r$     s    

zDownsample.__init__c                 C   s   |   |¡}|  |¡}|S rN   )r-   r4   ©r5   r@   r9   r9   r:   rD   ;  s    

zDownsample.forward)r‚   FN)
rE   rF   rG   rH   rI   r   r   r$   rD   rK   r9   r9   r7   r:   r{     s      úúr{   c                       s  e Zd ZdZdddddddd	d
d
d
d
ddddddeedd�feeeeeedf e	eedf eedf e
e
e
e
ee e	ee	 e
e
e
edœ‡ fdd„Zejjdd„ ƒZejjd'dd„ƒZejjd(dd„ƒZejjdd„ ƒZd)dd„Zd d!„ Zd*e
d"œd#d$„Zd%d&„ Z‡  ZS )+r   z," Focal Modulation Networks (FocalNets)
    r;   éè  Úavgé`   )r   r   é   r   rV   )r   r   r   r   )r;   r;   r;   r;   FNç      ð?r   gš™™™™™¹?rM   )Úeps.)Úin_chansÚnum_classesÚglobal_poolÚ	embed_dimÚdepthsrX   Úfocal_levelsÚfocal_windowsrm   r   rY   r   Úhead_hidden_sizeÚhead_init_scalerZ   Ú	drop_rateÚproj_drop_rateÚdrop_path_rater   c                    sš  t ƒ  ¡  t|ƒ| _‡ fdd„t| jƒD ƒ‰ || _ˆ | _ˆ d | _g | _t	|ˆ d |	|d�| _
ˆ d }dd„ t d|t|ƒ¡D ƒ}g }t| jƒD ]œ}ˆ | }t|||| ||dk|| || |	|
|||||t|d|… ƒt|d|d … ƒ… |d	�}|}||g7 }|  jt|d
d|  d|› �d�g7  _q�tj|Ž | _|�rdt ¡ | _t| j|||||d�| _n || jƒ| _t| j|||d�| _ttt|d�| ƒ dS )a`  
        Args:
            in_chans: Number of input image channels.
            num_classes: Number of classes for classification head.
            embed_dim: Patch embedding dimension.
            depths: Depth of each Focal Transformer layer.
            mlp_ratio: Ratio of mlp hidden dim to embedding dim.
            focal_levels: How many focal levels at all stages. Note that this excludes the finest-grain level.
            focal_windows: The focal window size at all stages.
            use_overlap_down: Whether to use convolutional embedding.
            use_post_norm: Whether to use layernorm after modulation (it helps stablize training of large models)
            layerscale_value: Value for layer scale.
            drop_rate: Dropout rate.
            drop_path_rate: Stochastic depth rate.
            norm_layer: Normalization layer.
        c                    s   g | ]}ˆ d |  ‘qS )r   r9   ru   ©r�   r9   r:   ry   n  s     z%FocalNet.__init__.<locals>.<listcomp>rR   r   )ro   rp   rr   r   c                 S   s   g | ]}|  ¡ ‘qS r9   )Úitem)rv   r@   r9   r9   r:   ry   }  s     Nr   ri   r‚   r   úlayers.)Znum_chsZ	reductionÚmodule)Zhidden_sizeÚ	pool_typer•   r   )rœ   r•   )r”   )r#   r$   ÚlenZ
num_layersr0   r�   r�   Znum_featuresZfeature_infor{   Ústemr<   ZlinspaceÚsumrh   Údictr'   r2   Úlayersr3   r4   r   Úheadr   r   r   Ú_init_weights)r5   rŒ   r�   rŽ   r�   r�   rX   r‘   r’   rm   r   rY   r   r“   r”   rZ   r•   r–   r—   r   Zin_dimZdprr¡   Zi_layerrj   Úlayerr7   r˜   r:   r$   E  sr    &


ü&ñ
*
ú
	üzFocalNet.__init__c                 C   s   dhS )NÚ r9   ©r5   r9   r9   r:   Úno_weight_decay­  s    zFocalNet.no_weight_decayc                 C   s   t d|rddgndddgd�S )Nz^stem)z^layers\.(\d+)N)z^norm)iŸ† )z^layers\.(\d+).downsample)r   )z^layers\.(\d+)\.\w+\.(\d+)N)rž   r|   )r    )r5   Zcoarser9   r9   r:   Úgroup_matcher±  s    ýþýûzFocalNet.group_matcherTc                 C   s"   || _ | jD ]}|j|d� qd S )N)r}   )rz   r¡   r~   )r5   r}   rC   r9   r9   r:   r~   ¿  s    
zFocalNet.set_grad_checkpointingc                 C   s   | j jS rN   )r¢   Úfcr¦   r9   r9   r:   Úget_classifierÅ  s    zFocalNet.get_classifierc                 C   s   | j j||d� d S )N)rœ   )r¢   Úreset)r5   r�   rŽ   r9   r9   r:   Úreset_classifierÉ  s    zFocalNet.reset_classifierc                 C   s"   |   |¡}|  |¡}|  |¡}|S rN   )rž   r¡   r4   r…   r9   r9   r:   Úforward_featuresÌ  s    


zFocalNet.forward_features©Ú
pre_logitsc                 C   s   | j ||d�S )Nr®   )r¢   )r5   r@   r¯   r9   r9   r:   Úforward_headÒ  s    zFocalNet.forward_headc                 C   s   |   |¡}|  |¡}|S rN   )r­   r°   r…   r9   r9   r:   rD   Õ  s    

zFocalNet.forward)F)T)N)F)rE   rF   rG   rg   r   r   rH   Ústrr   rJ   rI   r   r   r$   r<   r   r�   r§   r¨   r~   rª   r¬   r­   r°   rD   rK   r9   r9   r7   r:   r   A  sj   
ì


ìh


rŠ   c                 C   s’   t | tjƒr4t| jdd� | jd k	rŽtj | j¡ nZt | tjƒrŽt| jdd� | jd k	rftj | j¡ |rŽd|krŽ| jj	 
|¡ | jj	 
|¡ d S )Ng{®Gáz”?)Ústdúhead.fc)rs   r'   r(   r   Úweightr   ÚinitZzeros_ZLinearÚdatarT   )r›   Únamer”   r9   r9   r:   r£   Û  s    

r£   r¥   c                 K   s    | dddddt tdddd	œ|–S )
Nr†   )r;   éà   r¸   )rƒ   rƒ   gÍÌÌÌÌÌì?Zbicubicz	stem.projr³   Zmit)Úurlr�   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationr?   r²   Z
first_convÚ
classifierÚlicenser   )r¹   Úkwargsr9   r9   r:   Ú_cfgé  s         úúrÁ   ztimm/)Ú	hf_hub_id)r;   é€  rÃ   )é   rÄ   iRU  )rÂ   rº   r»   r¼   r�   )rÂ   r�   )zfocalnet_tiny_srf.ms_in1kzfocalnet_small_srf.ms_in1kzfocalnet_base_srf.ms_in1kzfocalnet_tiny_lrf.ms_in1kzfocalnet_small_lrf.ms_in1kzfocalnet_base_lrf.ms_in1kzfocalnet_large_fl3.ms_in22kzfocalnet_large_fl4.ms_in22kzfocalnet_xlarge_fl3.ms_in22kzfocalnet_xlarge_fl4.ms_in22kzfocalnet_huge_fl3.ms_in22kzfocalnet_huge_fl4.ms_in22k)Úmodelc                 C   sè   |   d| ¡} d| kr| S dd l}i }| ¡ }|  ¡ D ]®\}}| dd|¡}| dd¡}| dd	d
„ |¡}d|kr†||kr†| dd|¡}| dd¡}| dd¡}||krÚ||  ¡ | ¡ krÚ|| j|jkrÚ| || j¡}|||< q4|S )NrÅ   zstem.proj.weightr   zgamma_([0-9])z
ls\1.gammaZpatch_embedrž   zlayers.(\d+).downsamplec                 S   s   dt |  d¡ƒd › d�S )Nrš   r   z.downsample)rH   Úgroup)r@   r9   r9   r:   Ú<lambda>!  ó    z&checkpoint_filter_fn.<locals>.<lambda>r4   znorm([0-9])znorm\1_postzln.znorm.r¢   r³   )	ÚgetÚreÚ
state_dictÚitemsÚsubÚreplaceZnumelÚshapeZreshape)rË   rÅ   rÊ   Zout_dictZ	dest_dictr6   Úvr9   r9   r:   Úcheckpoint_filter_fn  s$    ,
rÑ   Fc                 K   sP   t dd„ t| dd¡ƒD ƒƒ}| d|¡}tt| |fttd|d�dœ|—Ž}|S )	Nc                 s   s   | ]\}}|V  qd S rN   r9   )rv   rw   Ú_r9   r9   r:   Ú	<genexpr>-  s     z#_create_focalnet.<locals>.<genexpr>r�   )r   r   r;   r   Úout_indicesT)Zflatten_sequentialrÔ   )Zpretrained_filter_fnZfeature_cfg)Útupler>   rÉ   Úpopr   r   rÑ   r    )ÚvariantÚ
pretrainedrÀ   Zdefault_out_indicesrÔ   rÅ   r9   r9   r:   Ú_create_focalnet,  s      ÿ
ýürÙ   )Úreturnc                 K   s.   t f ddddgddœ|—Ž}tdd| i|—ŽS )Nr   r‰   rˆ   ©r�   r�   Úfocalnet_tiny_srfrØ   )rÜ   ©r    rÙ   ©rØ   rÀ   Zmodel_kwargsr9   r9   r:   rÜ   8  s    rÜ   c                 K   s.   t f ddddgddœ|—Ž}tdd| i|—ŽS )Nr   é   rˆ   rÛ   Úfocalnet_small_srfrØ   )rà   rÝ   rÞ   r9   r9   r:   rà   >  s    rà   c                 K   s.   t f ddddgddœ|—Ž}tdd| i|—ŽS )Nr   rß   é€   rÛ   Úfocalnet_base_srfrØ   )râ   rÝ   rÞ   r9   r9   r:   râ   D  s    râ   c                 K   s8   t f ddddgdddddgdœ|—Ž}tdd| i|—ŽS )	Nr   r‰   rˆ   r;   ©r�   r�   r‘   Úfocalnet_tiny_lrfrØ   )rä   rÝ   rÞ   r9   r9   r:   rä   J  s    &rä   c                 K   s8   t f ddddgdddddgdœ|—Ž}tdd| i|—ŽS )	Nr   rß   rˆ   r;   rã   Úfocalnet_small_lrfrØ   )rå   rÝ   rÞ   r9   r9   r:   rå   P  s    &rå   c                 K   s8   t f ddddgdddddgdœ|—Ž}tdd| i|—ŽS )	Nr   rß   rá   r;   rã   Úfocalnet_base_lrfrØ   )ræ   rÝ   rÞ   r9   r9   r:   ræ   V  s    &ræ   c              
   K   sF   t f ddddgdddddgdgd dddd	œ|—Ž}tdd| i|—ŽS )Nr   rß   éÀ   r;   é   r‚   TrW   ©r�   r�   r‘   r’   r   rm   rZ   Úfocalnet_large_fl3rØ   )rê   rÝ   rÞ   r9   r9   r:   rê   ]  s    
  
   þþrê   c              	   K   s>   t f ddddgdddddgddddœ|—Ž}td
d	| i|—ŽS )Nr   rß   rç   r‚   TrW   ©r�   r�   r‘   r   rm   rZ   Úfocalnet_large_fl4rØ   )rì   rÝ   rÞ   r9   r9   r:   rì   e  s    
  
  þþrì   c              
   K   sF   t f ddddgdddddgdgd dddd	œ|—Ž}tdd| i|—ŽS )Nr   rß   é   r;   rè   r‚   TrW   ré   Úfocalnet_xlarge_fl3rØ   )rî   rÝ   rÞ   r9   r9   r:   rî   m  s    
  
   þþrî   c              	   K   s>   t f ddddgdddddgddddœ|—Ž}td
d	| i|—ŽS )Nr   rß   rí   r‚   TrW   rë   Úfocalnet_xlarge_fl4rØ   )rï   rÝ   rÞ   r9   r9   r:   rï   u  s    
  
  þþrï   c                 K   sH   t f ddddgdddddgdgd dddddœ|—Ž}tdd
| i|—ŽS )Nr   rß   é`  r;   r‚   TrW   )r�   r�   r‘   r’   r   rY   rm   rZ   Úfocalnet_huge_fl3rØ   )rñ   rÝ   rÞ   r9   r9   r:   rñ   }  s    
  
    þþrñ   c              
   K   s@   t f ddddgdddddgdddddœ|—Ž}td
d	| i|—ŽS )Nr   rß   rð   r‚   TrW   )r�   r�   r‘   r   rY   rm   rZ   Úfocalnet_huge_fl4rØ   )rò   rÝ   rÞ   r9   r9   r:   rò   …  s    
  
   þþrò   )NrŠ   )r¥   )F)F)F)F)F)F)F)F)F)F)F)F)F)7rg   Ú	functoolsr   Útypingr   r   r   r<   Ztorch.nnr'   Ztorch.utils.checkpointÚutilsr€   Z	timm.datar   r   Ztimm.layersr	   r
   r   r   r   r   Z_builderr   Z_manipulater   Ú	_registryr   r   Ú__all__ÚModuler   rL   rU   rh   r{   r   r£   rÁ   Zdefault_cfgsrÑ   rÙ   rÜ   rà   râ   rä   rå   ræ   rê   rì   rî   rï   rñ   rò   r9   r9   r9   r:   Ú<module>   sÌ    DRV& 

ÿÿÿÿÿÿ   þ   þ   þ   þþþã#
