
    .`i
U              	          d dl Z d dlmZmZmZ d dlmZmZmZ d dl	Z	d dl	m
Z
 d dlmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZm Z  d dl!m"Z"m#Z#m$Z$ d dl%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZA  eeB          ZC G d de4          ZDeDZE G d de)          ZF G d de&eF                   ZG G d de(eF                   ZH G d d e
jI                  ZJ ejK        eHeFeG!           G d" d#e
jI        e9e:e8                      ZLdS )$    N)IterableMappingSequence)	AnnotatedAnyLiteral)nn)BatchFeatureGemma3ConfigGemma3Processor)Gemma3ProcessorKwargs)
VllmConfig)BaseDummyOptions)init_logger)GemmaRMSNorm)MultiModelKeys)MULTIMODAL_REGISTRY)MultiModalDataDictMultiModalFieldConfigMultiModalKwargsItems)ImageProcessorItems	ImageSizeMultiModalDataItems)BaseDummyInputsBuilder)	BaseMultiModalProcessorBaseProcessingInfoMultiModalPromptUpdates"MultiModalPromptUpdatesApplyResultPlaceholderFeaturesInfoPromptReplacementPromptUpdatePromptUpdateDetailsreplace_token_matches)IntermediateTensors)TensorSchemaTensorShape   )MultiModalEmbeddingsSupportsLoRASupportsMultiModal
SupportsPP)SiglipVisionModel)AutoWeightsLoaderWeightsMapperinit_vllm_registered_modelmaybe_prefixc                       e Zd ZU dZdZed         ed<   eej	         e
dddd          f         ed<   eej	         e
d          f         ed	<   d
S )Gemma3ImagePixelInputsa  
    Dimensions:
        - p: Number of patches total (over each image over each prompt in the
          batch)
        - c: Number of channels (3)
        - h: Height of each patch
        - w: Width of each patch
        - bn: Batch size * number of images
    pixel_valuestypep   hwbnnum_patchesN)__name__
__module____qualname____doc__r4   r   __annotations__r   torchTensorr&        x/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/model_executor/models/gemma3_mm.pyr2   r2   8   s}           %3D'.
!222EL++c1c3*G*GGHHHH5<T):)::;;;;;;rC   r2   c            	           e Zd Zd ZdefdZdeeedz  f         fdZ	de
dee         deeef         fd	Zd
edede
dz  defdZd
edede
dz  dee         fdZd
edede
dz  defdZdefdZdS )Gemma3ProcessingInfoc                 @    | j                             t                    S N)ctxget_hf_configr   selfs    rD   rJ   z"Gemma3ProcessingInfo.get_hf_configN   s    x%%l333rC   kwargsc                 2     | j         j        t          fi |S rH   )rI   get_hf_processorr   )rL   rM   s     rD   rO   z%Gemma3ProcessingInfo.get_hf_processorQ   s    (tx(CCFCCCrC   returnNc                 
    dd iS )NimagerB   rK   s    rD   get_supported_mm_limitsz,Gemma3ProcessingInfo.get_supported_mm_limitsT   s    rC   	processorkeysc                     |j         |                    t          |j        j                  }|d         dt
          ffdfd|D             S )N)tokenizer_init_kwargsimages_kwargskeyc                 <    t          |           }||          }|S rH   )getattr)rY   valimage_processorrX   s     rD   _resolve_kwz?Gemma3ProcessingInfo._resolve_image_kwargs.<locals>._resolve_kwd   s&    /3//C{#C(JrC   c                 (    i | ]}| |          S rB   rB   ).0kr^   s     rD   
<dictcomp>z>Gemma3ProcessingInfo._resolve_image_kwargs.<locals>.<dictcomp>k   s#    000a;;q>>000rC   )r]   _merge_kwargsr   	tokenizerinit_kwargsstr)rL   rT   rU   rM   r^   r]   rX   s       @@@rD   _resolve_image_kwargsz*Gemma3ProcessingInfo._resolve_image_kwargsW   s    
 $3((!"+"5"A ) 
 

 /	S 	 	 	 	 	 	 	 100040000rC   image_widthimage_heightc          	         ||                                  }|                     |h d          }|d         }|d         }|d         }|d         }|sdS t                              d           ||k    r||z  |k     rdS t	          t          t          j        ||z                      t          t          j        ||z  dz                                 }	t          d	|	          }	t	          ||	          }	d
}
n||z  |k     rdS t	          t          t          j        ||z                      t          t          j        ||z  dz                                 }
t          d	|
          }
t	          ||
          }
d
}	t          t          j	        ||	z                      }t          t          j	        ||
z                      }t	          ||          |k     rdS |	|
z  S )N>   do_pan_and_scanpan_and_scan_max_num_cropspan_and_scan_min_crop_size"pan_and_scan_min_ratio_to_activaterk   rm   rl   rn   r   zk`do_pan_and_scan=True` has suboptimal results on V1 because of the simplified attention pattern being used.      ?   r'   )
rO   rg   loggerwarning_onceminintmathfloormaxceil)rL   rh   ri   rT   rX   rk   rm   rl   rn   num_crops_wnum_crops_hcrop_size_wcrop_size_hs                rD   get_num_cropsz"Gemma3ProcessingInfo.get_num_cropsm   s    --//I22  
 
 ((9:%23O%P"%23O%P"-:0.
*  	1F	
 	
 	
 ,&&\),NNNqDJ{-GGHHIIDJ{\9C?@@AA K
 a--K8+FFKKKk),NNNqDJ|.HHIIJJDJ|k9C?@@AA K
 a--K8+FFKK$)K+$=>>??$)L;$>??@@{K((+EEE1[((rC   c                   ||                                  }|j        |                     |||          }|dk    r}n6d                    fdt	          |          D                       }d d| }|                    |j                  }|j        }|                                }	|	|j	                 }
t          j        ||
          S )Nrh   ri   rT   r    c              3      K   | ]}V  d S rH   rB   )r`   _	boi_tokens     rD   	<genexpr>z6Gemma3ProcessingInfo.get_image_repl.<locals>.<genexpr>   s#      )N)N))N)N)N)N)N)NrC   zHere is the original image z0 and here are some crops to help you see better )rO   r   r}   joinrangereplacefull_image_sequencerd   	get_vocabimage_tokenr"   select_token_id)rL   rh   ri   rT   	num_crops
image_textcrops_image_tokens	repl_fullrd   vocabimage_token_idr   s              @rD   get_image_replz#Gemma3ProcessingInfo.get_image_repl   s    --//I'	&&#% ' 
 
	 >>"JJ!$)N)N)N)NU9=M=M)N)N)N!N!NEi E E0BE E 
 &&y)2OPP	'	##%%y45"29nMMMrC   c                |    ||                                  }|                     |||          }|j        }|dz   |z  S )Nr   r'   )rO   r}   image_seq_length)rL   rh   ri   rT   r   image_seq_lens         rD   get_num_image_tokensz)Gemma3ProcessingInfo.get_num_image_tokens   sW     --//I&&#% ' 
 
	
 "2A..rC   c                     |                                  }|                     |dh          }|d         }|                                 j        }|j        }t          ||z  |          S )Nrl   )heightwidth)rO   rg   rJ   vision_config
image_sizer   )rL   rT   rX   max_num_cropsr   native_sizes         rD   !get_image_size_with_most_featuresz6Gemma3ProcessingInfo.get_image_size_with_most_features   sr    ))++	2245
 
 &&BC**,,:#.m ;;OOOOrC   )r;   r<   r=   rJ   objectrO   r   rf   rt   rS   r   setdictr   rg   r}   r"   r   r   r   r   rB   rC   rD   rF   rF   M   s       4 4 4D D D D DcDj)A    1"1 #h1 
c3h	1 1 1 1,C) C) 	C)
 #T)C) 
C) C) C) C)J!N !N 	!N
 #T)!N 
S	!!N !N !N !NF/ / 	/
 #T)/ 
/ / / /&
P9 
P 
P 
P 
P 
P 
PrC   rF   c            	       p    e Zd Zdeeef         defdZ	 ddedeeef         deeef         dz  defdZ	dS )	Gemma3DummyInputsBuilder	mm_countsrP   c                 x    |                     dd          }| j                                        }|j        }||z  S )NrR   r   )getinforO   r   )rL   r   
num_imagesrT   r   s        rD   get_dummy_textz'Gemma3DummyInputsBuilder.get_dummy_text   s;    ]]7A..
I..00	)Z''rC   Nseq_len
mm_optionsc                     |                     dd          }| j                                        \  }}|r|                     d          nd }d|                     ||||          iS )NrR   r   )r   r   r   	overrides)r   r   r   _get_dummy_images)rL   r   r   r   r   target_widthtarget_heightimage_overridess           rD   get_dummy_mm_dataz*Gemma3DummyInputsBuilder.get_dummy_mm_data   s|     ]]7A..
&*i&Q&Q&S&S#m5?I*..111T T++"$%)	 ,  
 	
rC   rH   )
r;   r<   r=   r   rf   rt   r   r   r   r   rB   rC   rD   r   r      s        (S(9 (c ( ( ( ( =A	
 

 38$
 C!112T9	

 

 
 
 
 
 
rC   r   c            
       L    e Zd Zdedeeef         deeef         deeef         def
 fdZdedeeef         deeef         fd	Z	d
e
deeef         dedee         fdZdee         dedeee         ef         f fdZdee         dedeeee         f         f fdZ xZS )Gemma3MultiModalProcessorpromptmm_data	mm_kwargs
tok_kwargsrP   c                    	
 t                                          ||||          }|                    d          x}                                                     d|i                              dt                    

fdt          t          
                    D             }  j	        j
        di |		 fd|D             }t          j        |          dz   |d<   |S )NimagesrR   c                 :    g | ]}                     |          S rB   )get_image_size)r`   iparsed_imagess     rD   
<listcomp>z@Gemma3MultiModalProcessor._call_hf_processor.<locals>.<listcomp>*  s4       45,,Q//  rC   c                 ^    g | ])}j                             |j        |j                   *S )r   )r   r}   r   r   )r`   sizehf_processorrL   s     rD   r   z@Gemma3MultiModalProcessor._call_hf_processor.<locals>.<listcomp>/  sO         	'' $
!%* (    rC   r'   r:   rB   )super_call_hf_processorr   _get_data_parserparse_mm_data	get_itemsr   r   lenr   rO   r@   tensor)rL   r   r   r   r   processed_outputsr   image_sizesr   r   r   	__class__s   `        @@rD   r   z,Gemma3MultiModalProcessor._call_hf_processor  s"    "GG66	
 
 kk(+++F8%%''0117$788 
   9>s=?Q?Q9R9R  K 6495BB	BBL     (  I 05|I/F/F/Jm,  rC   	hf_inputshf_processor_mm_kwargsc                     |                     dt          j        d                    }t          t	          j        d|          t	          j        d                    S )Nr:   r   rR   )r3   r:   )r   r@   emptyr   r   flat_from_sizesbatched)rL   r   r   r:   s       rD   _get_mm_fields_configz/Gemma3MultiModalProcessor._get_mm_fields_config;  sT    
  mmM5;q>>BB.>wTT-5g>>
 
 
 	
rC   mm_itemsout_mm_kwargsc                 ~       j         j        di |j        }dt          f fd}t	          d||          gS )Nitem_idxc                                          dt                    }|                    |           }j                            |j        |j                  S )NrR   r   )r   r   r   r   r   r   r   )r   r   r   r   r   rL   s      rD   get_replacement_gemma3zMGemma3MultiModalProcessor._get_prompt_updates.<locals>.get_replacement_gemma3P  sZ    ''1DEEF..x88J9++&,'.& ,   rC   rR   )modalitytargetreplacementrB   )r   rO   r   rt   r    )rL   r   r   r   r   r   r   s   ``    @rD   _get_prompt_updatesz-Gemma3MultiModalProcessor._get_prompt_updatesG  s     2ty1KK4JKK",	S 	 	 	 	 	 	 	 	  "2  
 	
rC   mm_prompt_updatesc                 h   t                                          ||          \  }}| j                                        }|                                }|d         }|d         }|d         }	|d         }
t          |||g|	g          }t          |||g|	g          }t          |||g|
g          }||fS )N









)r   _apply_token_matchesr   get_tokenizerr   r#   )rL   r   r   	token_idsresrd   r   	newline_1	newline_2	newline_3	newline_4r   s              rD   r   z.Gemma3MultiModalProcessor._apply_token_matchesb  s    
 55f>OPP	3 I++--	##%%$K	&M	(O	*%	)	"K
 
	
 *	"K
 
	
 *	"K
 
	 #~rC   new_token_idsc           	        
 | j                                         }|                                }|d         
|d         |d         |d         dt          dt          t                   f
fd}t	          t                               }t	          t                               t          |          D ]`\  } ||          }|                    |                               fdt          t          |                    D                        at                      
                    ||          }	fd	|	                                D             S )
Nr   r   r   r   tokrP   c                 2    | k    rgS | k    rgS | gS rH   rB   )r   r   r   r   r   s    rD   get_repl_tokszFGemma3MultiModalProcessor._find_mm_placeholders.<locals>.get_repl_toks  s6    i!9--i!9--5LrC   c              3      K   | ]}V  d S rH   rB   )r`   r   orig_idxs     rD   r   zBGemma3MultiModalProcessor._find_mm_placeholders.<locals>.<genexpr>  s#      !J!Jq(!J!J!J!J!J!JrC   c                 4    i | ]\  }}|fd |D             S )c           	      v    g | ]5}t          |j        |j        |j                 |j        |j                   6S ))r   r   	start_idxtokensis_embed)r   r   r   r   r   r   )r`   r5   repl_orig_idxss     rD   r   zNGemma3MultiModalProcessor._find_mm_placeholders.<locals>.<dictcomp>.<listcomp>  sX     	 	 	  (ZZ,Q[98Z  	 	 	rC   rB   )r`   r   placeholdersr   s      rD   rb   zCGemma3MultiModalProcessor._find_mm_placeholders.<locals>.<dictcomp>  sW     
 
 
 ',  	 	 	 	 &	 	 	
 
 
rC   )r   r   r   rt   list	enumerateextendr   r   r   _find_mm_placeholdersitems)rL   r   r   rd   r   r   repl_token_idsorig_tok	repl_toksreplsr   r   r   r   r   r   r   s             @@@@@@rD   r   z/Gemma3MultiModalProcessor._find_mm_placeholders  sy    I++--	##%%$K	&M	(O	*%		s 	tCy 	 	 	 	 	 	 	 	 	 cc"+M":": 	K 	KHh%h//I!!),,,!!!J!J!J!JE#i..4I4I!J!J!JJJJJ--n>OPP
 
 
 
 +0++--
 
 
 	
rC   )r;   r<   r=   rf   r   r   r
   r   r   r   r   r   r   r   r!   r   r   rt   r   tupler   r   r   r   __classcell__r   s   @rD   r   r     s       $!$! f%$! 3;'	$!
 CK($! 
$! $! $! $! $! $!L



 !(V 4

 
++	,	

 

 

 


%
 !(S 1
 -	

 
,	
 
 
 
6"S	" 3" 
tCy<<	=	" " " " " "H*
Cy*
 3*
 
d233	4	*
 *
 *
 *
 *
 *
 *
 *
 *
 *
rC   r   c                   :     e Zd Zdef fdZdej        fdZ xZS )Gemma3MultiModalProjectorconfigc                    t                                                       t          j        t	          j        |j        j        |j        j                            | _	        t          |j        j        |j        j                  | _        t          |j        j        |j        j        z            | _        t          |j        dz            | _        | j        | j        z  | _        t          j        | j        | j                  | _        d S )N)epsro   )kernel_sizestride)r   __init__r	   	Parameterr@   zerosr   hidden_sizetext_configmm_input_projection_weightr   layer_norm_epsmm_soft_emb_normrt   r   
patch_sizepatches_per_imagemm_tokens_per_imagetokens_per_sider  	AvgPool2davg_pool)rL   r  r   s     rD   r  z"Gemma3MultiModalProjector.__init__  s    *,,K$0&2D2P +
 +
' !- ,&2F2U!
 !
 !
 "% +v/C/NN"
 "
  #6#=s#BCC1T5II(1A
 
 
rC   vision_outputsc                    |j         \  }}}|                    dd          }|                    ||| j        | j                  }|                                }|                     |          }|                    d          }|                    dd          }|                     |          }t          j	        || j
                  }|                    |          S )Nr'   rp   )shape	transposereshaper  
contiguousr  flattenr  r@   matmulr  type_as)	rL   r  
batch_sizer   
seq_lengthreshaped_vision_outputspooled_vision_outputsnormed_vision_outputsprojected_vision_outputss	            rD   forwardz!Gemma3MultiModalProjector.forward  s    $2$8!
Az"0":":1a"@"@"9"A"A
D$:D<R#
 #
 #:"D"D"F"F $.E F F 5 = =a @ @ 5 ? ?1 E E $ 5 56K L L#(<!4#B$
 $
  (//???rC   )	r;   r<   r=   r   r  r@   rA   r*  r  r  s   @rD   r  r    sj        
| 
 
 
 
 
 
,@el @ @ @ @ @ @ @ @rC   r  )r   dummy_inputsc                   4    e Zd Zg dddgdZ eddddd	
          Zededededz  fd            Z	ddde
def fdZed             Zdededz  fdZdedej        dej        fdZdedeej                 fdZdedefdZ	 d.dddd ej        d!edz  d"ej        dz  d#edej        f
 fd$Z	 	 d/d ej        d%ej        d&edz  d'ej        dz  dedefd(Zd)ej        dej        dz  fd*Zd+eeeej        f                  de e         fd,Z!de"fd-Z# xZ$S )0Gemma3ForConditionalGeneration)q_projk_projv_proj	gate_projup_proj)qkv_projgate_up_projzlanguage_model.model.zvision_tower.zmulti_modal_projector.zlanguage_model.lm_head.)zmodel.language_model.zmodel.vision_tower.zmodel.multi_modal_projector.zlm_head.)orig_to_new_prefixr   r   rP   Nc                 N    |                     d          rdS t          d          )NrR   z<start_of_image>z Only image modality is supported)
startswith
ValueError)clsr   r   s      rD   get_placeholder_strz2Gemma3ForConditionalGeneration.get_placeholder_str  s-    w'' 	&%%;<<<rC    prefixvllm_configr=  c          	         t                                                       |j        j        }|j        }|j        j        }|| _        || _        || _        |                     |d          5  t          |j	        |t          |d                    | _        t          |          | _        d d d            n# 1 swxY w Y   |                     |          5  t          ||j        t          |d          dg          | _        t%          |dd          }| j        j        xj        |z  c_        d d d            n# 1 swxY w Y   | j        j        | _        d S )	NrR   vision_towerr<  language_modelGemma3ForCausalLM)r>  	hf_configr=  architectureslogit_scaleg      ?)r   r  model_configrC  quant_configmultimodal_configr  _mark_tower_modelr,   r   r0   r@  r  multi_modal_projector_mark_language_modelr/   r  rA  r[   logits_processorscalemake_empty_intermediate_tensors)rL   r>  r=  r  rG  rH  rE  r   s          rD   r  z'Gemma3ForConditionalGeneration.__init__  s   )3"/'4F(!2##K99 	K 	K 1$#FN;;! ! !D
 *C6)J)JD&	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K &&{33 		F 		F"<' ,#F,<==23	# # #D "&-==K066+E66		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F ? 	,,,s%   ,?B77B;>B;AD;;D?D?c                 N    t          |                                           j        S rH   )next
parametersdtyperK   s    rD   rR  z$Gemma3ForConditionalGeneration.dtype$  s    DOO%%&&,,rC   rM   c                     |                     dd           }|                     dd           }|                     dd           }|
J d            |d S | j        j        j        }t	          ||||d          S )Nr3   r:   image_embedsz%Gemma3 does not support image_embeds.)r7   r8   )r3   r:   resolve_bindings)popr  r   r   r2   )rL   rM   r3   r:   rT  r   s         rD   _parse_and_validate_image_inputz>Gemma3ForConditionalGeneration._parse_and_validate_image_input(  s     zz.$77jj55zz.$77##%L###4[.9
%%##-J??
 
 
 	
rC   r@  r3   c                      ||          S rH   rB   )rL   r@  r3   s      rD   _image_pixels_to_featuresz8Gemma3ForConditionalGeneration._image_pixels_to_features:  s    
 |L)))rC   image_inputc                     |d         }|d         }|                      | j        |          }|                     |          }d |                    |                                          D             S )Nr3   r:   c                 :    g | ]}|                     d d          S )r   r'   )r!  )r`   es     rD   r   zGGemma3ForConditionalGeneration._process_image_input.<locals>.<listcomp>N  s$    RRRA		!QRRRrC   )rY  r@  rJ  splittolist)rL   rZ  r3   r:   image_featuresrT  s         rD   _process_image_inputz3Gemma3ForConditionalGeneration._process_image_inputA  sy     #>2!-077
 
 11.AARR););K<N<N<P<P)Q)QRRRRrC   c                 N     | j         di |}|g S |                     |          S )NrB   )rW  ra  )rL   rM   rZ  s      rD   embed_multimodalz/Gemma3ForConditionalGeneration.embed_multimodalP  s9    :d:DDVDDI((555rC   T)is_multimodalhandle_oov_mm_token	input_idsmultimodal_embeddingsrd  re  c                    ||!t                                          |          S t                                          ||||          S )N)rg  rd  re  )r   embed_input_ids)rL   rf  rg  rd  re  r   s        rD   ri  z.Gemma3ForConditionalGeneration.embed_input_idsW  sW     !(M,A77**9555 ww&&"7' 3	 ' 
 
 	
rC   	positionsintermediate_tensorsinputs_embedsc                 <    |d } | j         j        |||fd|i|}|S )Nrl  )rA  model)rL   rf  rj  rk  rl  rM   hidden_statess          rD   r*  z&Gemma3ForConditionalGeneration.forwardk  sP      + M1+1 
 
 (	

 
 
 rC   ro  c                 6    | j                             |          S rH   )rA  compute_logits)rL   ro  s     rD   rq  z-Gemma3ForConditionalGeneration.compute_logits  s     "11-@@@rC   weightsc                 X    t          |           }|                    || j                  S )N)mapper)r-   load_weightshf_to_vllm_mapper)rL   rr  loaders      rD   ru  z+Gemma3ForConditionalGeneration.load_weights  s+    "4((""743I"JJJrC   c                 0    t          j        ddd          S )z<
        Get the module prefix in multimodal models
        rA  rJ  r@  )rA  	connectortower_model)r   from_string_fieldrK   s    rD   get_mm_mappingz-Gemma3ForConditionalGeneration.get_mm_mapping  s'     /+-&
 
 
 	
rC   rH   )NN)%r;   r<   r=   packed_modules_mappingr.   rv  classmethodrf   rt   r:  r   r  propertyrR  r   Gemma3ImageInputsrW  r,   r@   rA   rY  r   ra  r(   rc  boolri  r$   r*  rq  r   r  r   ru  r   r|  r  r  s   @rD   r-  r-    s2       
 
 
 

 
 & &=#2,D1
 
   =3 =3 =3: = = = [= BD 
 
 
z 
3 
 
 
 
 
 
@ - - X-

	T	!
 
 
 
$*'* l* 
	* * * *S&S 
el	S S S S6 64H 6 6 6 6 >B

 .2$(
 
 
<
  4d:

 |d*
 "
 

 
 
 
 
 
0 <@-1 < < 2D8	
 |d*  
   *A|A 
	A A A AKHU33D-E$F K3s8 K K K K
 
 
 
 
 
 
 
 
rC   r-  )Mru   collections.abcr   r   r   typingr   r   r   r@   r	   transformersr
   r   r   ,transformers.models.gemma3.processing_gemma3r   vllm.configr   vllm.config.multimodalr   vllm.loggerr   $vllm.model_executor.layers.layernormr   )vllm.model_executor.models.module_mappingr   vllm.multimodalr   vllm.multimodal.inputsr   r   r   vllm.multimodal.parser   r   r   vllm.multimodal.processingr   $vllm.multimodal.processing.processorr   r   r   r   r   r    r!   r"   r#   vllm.sequencer$   vllm.utils.tensor_schemar%   r&   
interfacesr(   r)   r*   r+   siglipr,   utilsr-   r.   r/   r0   r;   rq   r2   r  rF   r   r   Moduler  register_processorr-  rB   rC   rD   <module>r     s"    7 7 7 7 7 7 7 7 7 7 * * * * * * * * * *        D D D D D D D D D D N N N N N N " " " " " " 3 3 3 3 3 3 # # # # # # = = = = = = D D D D D D / / / / / /         
 V U U U U U U U U U = = = = = =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 . - - - - - > > > > > > > >            & % % % % %            
X		< < < < <\ < < <$ + eP eP eP eP eP- eP eP ePP
 
 
 
 
56JK 
 
 
>\
 \
 \
 \
 \
 78L M \
 \
 \
~)@ )@ )@ )@ )@	 )@ )@ )@X ('	)  
n
 n
 n
 n
 n
I!:|n
 n
 
n
 n
 n
rC   