§
    �M§jf*  ã                   óè   — d Z ddlZddlmZ ddlmZ ddl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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	dl m!Z!m"Z"  G d„ d¦  «        Z#dS )zKLyrics/style/score to stereo music using WanGP's shared AR engine and MMGP.é    N)Úreplace)ÚPath)Úoffload)Útqdm)ÚQwen3Config)ÚTokenGenerationEngineé   )Ú
YuE2Config)ÚABC_ENDÚ	MUSIC_ENDÚCONTEXTÚGenerationConfigÚSongRequestÚtoken_prefixesÚnegative_prefixÚchunk_ranges)ÚYuE2LogitsProcessor)ÚYuE2TextTokenizer)ÚYuE2ARÚYuE2Acoustic)ÚYuE2VAEÚYuE2VAEConfigc                   óŒ   — e Zd ZdZdZdd„Zed„ ¦   «         Zd„ Zd„ Z	d„ Z
d	„ Zdd„Z ej        ¦   «         dd„¦   «         Zd„ ZdS )ÚYuE2Pipelinei€»  é   Nc
                 óÀ  ‡ — t          t          ¦  «        j        }
d‰ _        d‰ _        |‰ _        |	‰ _        t          di t          j	        |
dz   
                    ¦   «         ¦  «        ¤Ž}t          di t          j	        |
dz   
                    ¦   «         ¦  «        ¤Ž}t          j        d¦  «        5  t          |¦  «        ‰ _        t!          |¦  «        ‰ _        t%          t'          di t          j	        t          |¦  «         
                    ¦   «         ¦  «        ¤Ž¦  «        ‰ _        d d d ¦  «         n# 1 swxY w Y   ‰ j        ||f‰ j        ||f‰ j        ||ffD ]E\  }}}t+          j        |||d¬¦  «         |                     ¦   «                              d¦  «         ŒF‰ j                             |‰ j        ¦  «         |‰ j        _        ‰ j        ‰ j        _        |‰ j        _        ddg‰ j        _        ‰ j        ‰ j        _         ˆ fd„‰ j        j!        j"        D ¦   «         ‰ _#        tI          |¦  «        ‰ _%        tM          ‰ j        |‰ j%        |d	k    ¬
¦  «        ‰ _        tO          d|› d|d	k    rdnd› d|dk    rdnd› d|dk    rdnd› d�	¦  «         tO          d|dk    rdnd› d�¦  «         tQ          ¦   «         ‰ _)        d ‰ _*        d ‰ _+        i ‰ _,        d S )NFzyue2_ar.jsonz	yue2.jsonÚmeta)Údefault_dtypeÚwritable_tensorsÚdecodeÚdecode_tiledc                 óD   •— g | ]}|                      ‰j        ¦  «        ‘ŒS © )Úregister_forward_hookÚ_abort_after_block)Ú.0ÚblockÚselfs     €ú@C:\Users\johnn\OneDrive\Documents\AI\models\TTS\yue2\pipeline.pyú
<listcomp>z)YuE2Pipeline.__init__.<locals>.<listcomp>/   s+   ø€ Ð"}Ð"}Ð"}Ð\a 5×#>Ò#>¸tÔ?VÑ#WÔ#WÐ"}Ð"}Ð"}ó    Úlegacy)Úenforce_eagerz[YuE2] AR LM engine: z (CUDA graphs: ÚoffÚonz; Triton decoder kernels: Úvllmz; attention: zFlashAttention 2zPyTorch SDPAz).z:[YuE2] Acoustic flow: PyTorch midpoint solver; attention: z; CUDA graphs: off.r#   )-r   Ú__file__ÚparentÚ
_interruptÚ_early_stopÚlm_decoder_engineÚscoring_checkpointr   ÚjsonÚloadsÚ	read_textr
   ÚtorchÚdevicer   Útext_encoderr   Útransformerr   r   Úvaer   Úload_model_dataÚevalÚrequires_grad_Úconfigure_engineÚ_abort_requestedÚengineÚabort_fnÚ_model_dtypeÚ_offload_hooksÚget_vae_tile_sizeÚget_VAE_tile_sizeÚdecoderÚlayersÚ_vae_abort_handlesr   Ú	tokenizerr   Úprintr   Úgeneration_configÚ	last_planÚlast_latentsÚlast_truncated)r(   Ú
ar_weightsÚacoustic_weightsÚtokenizer_pathÚvae_weightsÚ
vae_configÚdtypeÚ	vae_dtyper5   r6   Ú	directoryÚ	ar_configÚ
nar_configÚmodelÚfilenameÚ	precisions   `               r)   Ú__init__zYuE2Pipeline.__init__   sñ  ø€ Ý�‘N”NÔ)ˆ	ØˆŒØ ˆÔØ!2ˆÔØ"4ˆÔÝÐWÐW¥$¤*¨i¸.Ñ.H×-SÒ-SÑ-UÔ-UÑ"VÔ"VÐWÐWˆ	ÝÐTÐT¥$¤*¨i¸+Ñ.E×-PÒ-PÑ-RÔ-RÑ"SÔ"SÐTÐTˆ
ÝŒ\˜&Ñ!Ô!ð 	Zð 	ZÝ & yÑ 1Ô 1ˆDÔÝ+¨JÑ7Ô7ˆDÔÝ�}ÐXÐX­t¬z½$¸zÑ:JÔ:J×:TÒ:TÑ:VÔ:VÑ/WÔ/WÐXÐXÑYÔYˆDŒHð	Zð 	Zð 	Zñ 	Zô 	Zð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zøøøð 	Zð 	Zð 	Zð 	Zð -1Ô,=¸zÈ5Ð+QÐTXÔTdÐfvÐx}ÐS~ð  BFô  BJð  LWð  Ybð  Acð  +dð 	/ð 	/Ñ&ˆE�8˜YÝÔ# E¨8À9Ð_dÐeÑeÔeÐeØ�JŠJ‰LŒL×'Ò'¨Ñ.Ô.Ð.Ð.ØÔ×*Ò*Ð+<¸dÔ>SÑTÔTÐTØ"3ˆÔÔØ$(Ô$9ˆÔÔ!Ø )ˆŒÔØ#+¨^Ð"<ˆŒÔØ%)Ô%;ˆŒÔ"Ø"}Ð"}Ð"}Ð"}ÐeiÔemÔeuÔe|Ð"}Ñ"}Ô"}ˆÔÝ*¨>Ñ:Ô:ˆŒÝ+¨DÔ,=¸zÈ4Ì>Ðizð  Gò  jGð  Hñ  Hô  HˆŒÝð  [Ð&7ð  [ð  [ÐQbÐfnÒQnÐQnÈÈÐtxð  [ð  [ð  ]nð  rxò  ]xð  ]xð  UYð  UYð  ~Cð  [ð  [ð  hyð  }Cò  hCð  hCð  Rdð  Rdð  IWð  [ð  [ð  [ñ  	\ô  	\ð  	\Ýð  fÐarÐv|Òa|Ða|ÐK]ÐK]ð  CQð  fð  fð  fñ  	gô  	gð  	gÝ!1Ñ!3Ô!3ˆÔØˆŒØ ˆÔØ ˆÔÐÐs   Â1A8D5Ä5D9Ä<D9c                 ó>   — | dk    rdS | dk    s| dk    r|dk     rdS dS )Nr	   r   é   ià.  é   é   r#   )rW   Údevice_mem_capacityÚmixed_precisions      r)   rH   zYuE2Pipeline.get_vae_tile_size9   s6   € à˜Š?ˆ?Ø�1Ø˜Š?ˆ?˜z¨Qš˜Ð3FÈÒ3NÐ3NØ�3Øˆtr+   c                 ó   — | j         S ©N)r3   ©r(   s    r)   rC   zYuE2Pipeline._abort_requestedA   s
   € ØŒÐr+   c                 ó   — d| _         d S )NT©r4   ri   s    r)   Úrequest_early_stopzYuE2Pipeline.request_early_stopD   s   € ØˆÔÐÐr+   c                 ó   — | j         S rh   rk   ri   s    r)   Ú_early_stop_requestedz"YuE2Pipeline._early_stop_requestedG   s   € ØÔÐr+   c                 ó2   — | j         rt          d¦  «        ‚d S )NzYuE2 audio decoding interrupted)r3   ÚInterruptedError)r(   ÚmoduleÚinputsÚoutputs       r)   r%   zYuE2Pipeline._abort_after_blockJ   s(   € ØŒ?ð 	FÝ"Ð#DÑEÔEÐEð	Fð 	Fr+   ç      ð?Fc	                 ój  — t           t          t          |¦  «        |�t          |¦  «        nd¦  «        z
  }	|dk    ru|	dk     rt          d¦  «        ‚|j        |	k    rUt          d|j        | j        z  d›d|	| j        z  d›d�¦  «         t          ||	t          |j	        |	d	z
  ¦  «        ¬
¦  «        }|j        |	k    rt          d|› dt           › d�¦  «        ‚| j
        j                             t          j        |d         gd¬¦  «        ¦  «         | j                             ||dk    rt"          nt$          |j        |t'          |||¦  «        |||| j        |dk    r| j        nd | j        r|j	        nd|dk    rdnd|dk    r
d| j        z  nd¬¦  «        \  }
}|| j        |<   | j        r*|dk    r$t          d|› dt          |
¦  «        › d�¦  «         n^|rt          d|› d�¦  «         nHt          d|› dt          |
¦  «        › d�|dk    rdt          |
¦  «        | j        z  d›d�ndz   ¦  «         |
S )Nr   Úsemanticé   zQYuE2 lyrics/score leave no room for audio synthesis. Shorten the lyrics or score.z2[YuE2] Maximum audio duration limited by context: z.2fzs requested, up to z;s available after lyrics/score. Generation can end earlier.r	   )Ú
max_tokensÚ
min_tokenszYuE2 z) prompt and generation budget exceed its z6-token context. Shorten the lyrics, score or duration.Úcuda©r;   Úabcz
YuE2 scorezYuE2 semantic audioé<   )Ú	end_tokenrx   ÚseedÚlogits_processorÚnegativeÚ	cfg_scaleÚcallbackrE   Ústop_fnÚstop_min_tokensÚprogress_labelÚinitial_cache_tokensz[YuE2] Early stop during z: z tokens retained.z3 reached its token limit; output may be incomplete.z[YuE2] z reached its end token after z tokensz (zs of audio).ú.)r   ÚmaxÚlenÚ
ValueErrorrx   rN   Ú
frame_rater   Úminry   r<   r]   Úembed_tokensr:   ÚtensorrD   Úgenerate_tokensr   r   r   rC   rn   r4   rR   )r(   ÚprefixÚsamplingr   Úphaserƒ   r�   r‚   ÚdirectÚ	availableÚtokensÚ	truncateds               r)   Ú_tokenszYuE2Pipeline._tokensN   sú  € Ý�c¥# f¡+¤+ÀÐ@T­s°8©}¬}¨}ÐZ[Ñ\Ô\Ñ\ˆ	Ø�JÒÐØ˜1Š}ˆ}Ý Ð!tÑuÔuÐuØÔ" YÒ.Ð.Ýð  fÈ8ÔK^ÐaeÔapÑKpð  fð  fð  fð  JSð  VZô  Veñ  Jeð  fð  fð  fð  fñ  gô  gð  gÝ" 8¸	ÍcÐRZÔReÐgpÐstÑgtÑNuÔNuÐvÑvÔv�ØÔ Ò*Ð*Ýð  U Uð  Uð  UÕU\ð  Uð  Uð  Uñ  Vô  Vð  VàÔÔ×,Ò,­U¬\¸6À!¼9¸+ÈfÐ-UÑ-UÔ-UÑVÔVÐVØ œK×7Ò7¸ÐUZÐ^cÒUcÐUcÍ'È'Õirð  @Hô  @Sð  Z^õ  qDð  EMð  OTð  V\ñ  q]ô  q]ð  hpð  |Eð  PXð  cgô  cxð  `eð  isò  `sð  `sð  BFô  B\ð  B\ð  y}ð  fjô  fvð  O}ð  OWô  Obð  Obð  |}ð  ^cð  glò  ^lð  ^lð  NZð  NZð  rGð  v{ð  I	ò  vI	ð  vI	ð  ^`ð  cgô  crñ  ^rð  ^rð  O	P	Ð7ñ  Q	ô  Q	Ñˆ�	Ø%.ˆÔ˜EÑ"ØÔð 	o ¨Ò 3Ð 3ÝÐU¨eÐUÐUµs¸6±{´{ÐUÐUÐUÑVÔVÐVÐVØð 	oÝÐT˜%ÐTÐTÐTÑUÔUÐUÐUåÐT˜EÐTÐTÅÀFÁÄÐTÐTÐTð  QVð  Zdò  Qdð  Qdð  YMÕ]`ÐagÑ]hÔ]hÐkoÔkzÑ]zð  YMð  YMð  YMð  YMð  YMð  jmñ  nñ  oô  oð  oØˆr+   r   rd   Ú c                 óâ
  ‡‡‡)‡*‡+— dx| _         | _        d x| _        | _        i | _        d|
         }d|vr |�d|v r|d                              ¦   «         nd}t          || j        z  ¦  «        }t          | j	        j
        |t          d|dz
  ¦  «        |||	¬¦  «        }	 d|v rPdd	lm} | j                             ¦   «          |                     ¦   «           ||| j        |d
k    ‰| j        ¦  «        }t'          ||||pd ||¬¦  «        }|dk    rg }nm|r| j                             |¦  «        }nP|                      t/          || j        ¦  «        | j	        j        |d‰¦  «        }| j                             |¦  «        }|||                     ¦   «         dœ| _        t/          || j        |¦  «        }|dk    rt7          || j        |¦  «        nd }|                      |||d‰|||dk    ¦  «        }| j                             ¦   «          |s2| j        r	 | j                             ¦   «          d S t9          d¦  «        ‚t;          t=          |¦  «        t=          |¦  «        ¦  «        }t?          j         t=          |¦  «        dft?          j!        d¬¦  «         "                    |¦  «        ¬¦  «        }g }t=          |¦  «        ‰z  Š+tG          ‰+dd¬¦  «        5 Š*tI          |¦  «        D ]ˆ\  Š)\  }} |||| …         z   tJ          gz   }!| j&         '                    |!¦  «        g}"ˆˆ)ˆ*ˆˆ+fd„}#| (                    | j)         *                    ||| …         |"t=          |!¦  «        ‰|#¦  «        ¦  «         Œ‰	 d d d ¦  «         n# 1 swxY w Y   t?          j+        |¦  «        }$|$| _        |$j,        d          }%|}&|&rt=          |$¦  «        |&z   dz
  |&z  ndŠ+tG          ‰+dd¬¦  «        5 Š*ˆˆ*fd„}'|&r| j-         .                    |%|&d|'¬¦  «        }(nJ| j-                             |%¦  «         /                    ¦   «          0                    ¦   «         }( |'dd¦  «         d d d ¦  «         n# 1 swxY w Y   | j         r	 | j                             ¦   «          d S t?          j1        |(¦  «         2                    ¦   «         stg          d¦  «        ‚|(d          /                    ¦   «          4                    dd¦  «        | j5        d œ| j                             ¦   «          S # tl          $ r4 | j         s‚ to          d!¦  «         Y | j                             ¦   «          d S w xY w# | j                             ¦   «          w xY w)"NF)ÚfullÚmelodyr.   ÚAr|   r™   éÈ   r	   )rx   ry   ÚtemperatureÚtop_kÚtop_p)Úscore_audiorœ   )ÚstyleÚlyricsÚcotr|   r‚   r   r.   )r|   Úabc_idsÚrequestrv   zYuE2 generated no audio tokens.é@   Úcpur{   )Ú	generatorúYuE2 acoustic synthesisÚstep)ÚtotalÚdescÚunitc                 ó`   •— ‰                      ¦   «          ‰� ‰‰‰z  | z   ‰d¬¦  «         d S d S )Nr«   )Ústep_idxÚoverride_num_inference_stepsÚdenoising_extra©Úupdate)r¬   rƒ   Úchunk_indexÚprogressÚsampling_stepsr­   s    €€€€€r)   Úreportz%YuE2Pipeline.generate.<locals>.reportŒ   s`   ø€ Ø ŸšÑ)Ô)Ð)Ø#Ð/Ø$˜H¨k¸NÑ.JÈTÑ.QÐpuð  Hað  bñ  bô  bð  bð  bð  bð 0Ð/r+   úYuE2 audio decodingÚtilec                 ó\   •— ‰                      ¦   «          ‰� ‰| dz
  |dd¬¦  «         d S d S )Nr	   rº   Útiles)r±   r²   r³   Úprogress_unitr´   )Ú	completedr­   rƒ   r·   s     €€r)   Úreport_decodez,YuE2Pipeline.generate.<locals>.report_decode—   sa   ø€ Ø—O’OÑ%Ô%Ð%ØÐ+Ø ˜¨)°a©-ÐV[ð  nCð  SZð  [ñ  [ô  [ð  [ð  [ð  [ð ,Ð+r+   é   )Úcore_framesÚhalo_framesÚon_progresszYuE2 decoded non-finite audio.r   éÿÿÿÿ)ÚxÚaudio_sampling_ratez[YuE2] Generation aborted.)8r3   r4   rP   rQ   rR   ÚstripÚintrŒ   r   rO   rv   r�   Úsheetsage2.scoringr¢   rD   Úrelease_runtime_allocationsÚ
unload_allr6   rC   r   rM   Úencoder˜   r   r|   r    Úto_dictr   ÚRuntimeErrorr   rŠ   r:   ÚrandnÚ	GeneratorÚmanual_seedr   Ú	enumerater   r<   Ú	conditionÚappendr=   Ú
synthesizeÚcatÚTr>   r!   Úfloatr©   ÚisfiniteÚallÚFloatingPointErrorÚclamp_Úsample_raterp   rN   ),r(   Úinput_promptÚ
alt_promptr   Úduration_secondsr¸   Úguide_scalerŸ   r    r¡   Ú
model_modeÚcustom_settingsÚVAE_tile_sizerƒ   Úaudio_prompt_typeÚaudio_guideÚ
offloadobjÚkwargsÚmoder|   Úmaximumr’   r¢   r§   r¦   r‘   r�   ÚcodecÚchunksÚnoiseÚlatent_partsÚstartÚendÚar_idsÚcacher¹   ÚlatentsÚlatentr»   rÀ   Úaudior¶   r·   r­   s,        `       `                           @@@r)   ÚgeneratezYuE2Pipeline.generated   sù  øøøøø€ à-2Ð2ˆŒ˜$Ô*Ø-1Ð1ˆŒ˜Ô*Ø ˆÔØ(¨Ô4ˆØ03Ð;LÐ0LÐ0LÐQ`ÐQlÐqvð  {Jð  rJð  rJˆo˜eÔ$×*Ò*Ñ,Ô,Ð,ð  PRˆÝÐ&¨¬Ñ8Ñ9Ô9ˆÝ˜4Ô1Ô:ÀwÕ[^Ð_bÐdkÐnoÑdoÑ[pÔ[pð  Jð  RWð  _dð  eñ  eô  eˆð>	6ØÐ'Ð'Ð'Ø;Ð;Ð;Ð;Ð;Ð;Ø”×7Ò7Ñ9Ô9Ð9Ø×%Ò%Ñ'Ô'Ð'Ø!�k +¨tÔ/FÈÐPXÒHXÐZbÐdhÔdyÑzÔz�Ý!¨
¸<ÈTÐWZÐWbÐ^bÐnyð  AEð  Fñ  Fô  FˆGØ�uŠ}ˆ}Ø��Øð 5Øœ.×/Ò/°Ñ4Ô4��àŸ,š,¥~°g¸t¼~Ñ'NÔ'NÐPTÔPfÔPjÐlpÐrwð  zBñ  Cô  C�Ø”n×+Ò+¨GÑ4Ô4�Ø%(°WÈÏÊÑIZÔIZÐ[Ð[ˆDŒNÝ# G¨T¬^¸WÑEÔEˆFØLWÐ[\ÒL\ÐL\• w°´ÀÑHÔHÐHÐbfˆHØ—L’L ¨°4¸ÀXÈxÐYdÐfjÐnsÒfsÑtÔtˆEØŒK×3Ò3Ñ5Ô5Ð5Øð FØÔ#ð  ØðR ŒK×3Ò3Ñ5Ô5Ð5Ð5Ð5õQ #Ð#DÑEÔEÐEÝ!¥# e¡*¤*­c°&©k¬kÑ:Ô:ˆFÝ”K¥ U¡¤¨RÐ 0½E¼OÐSXÐ<YÑ<YÔ<Y×<eÒ<eÐfjÑ<kÔ<kÐlÑlÔlˆEØˆLÝ˜‘K”K .Ñ0ˆEÝ˜EÐ(AÈÐOÑOÔOð CÐS[Ý1:¸6Ñ1BÔ1Bð Cð CÑ-�K¡ %¨Ø# e¨E°#¨IÔ&6Ñ6½)¸ÑD�FØ!Ô.×8Ò8¸Ñ@Ô@ÐA�Eðbð bð bð bð bð bð bð bð bð !×'Ò'¨Ô(8×(CÒ(CÀEÈ%ÐPSÈ)ÔDTÐV[Õ]`ÐagÑ]hÔ]hÐjxð  {Añ  )Bô  )Bñ  Cô  Cð  Cð  CðCðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cõ ”i Ñ-Ô-ˆGØ 'ˆDÔØ”Y˜t”_ˆFØ ˆDØ9=ÐD•S˜‘\”\ DÑ(¨1Ñ,°Ñ5Ð5À1ˆEÝ˜EÐ(=ÀFÐKÑKÔKð 	(Èxð[ð [ð [ð [ð [ð [ð ð (Ø œH×1Ò1°&ÀdÐXZÐhuÐ1ÑvÔv�E�Eà œHŸOšO¨FÑ3Ô3×9Ò9Ñ;Ô;×?Ò?ÑAÔA�EØ!�M ! QÑ'Ô'Ð'ð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð Œð Øð ŒK×3Ò3Ñ5Ô5Ð5Ð5Ð5õ ”> %Ñ(Ô(×,Ò,Ñ.Ô.ð KÝ(Ð)IÑJÔJÐJØ˜qœŸšÑ)Ô)×0Ò0°°QÑ7Ô7ÐPTÔP`ÐaÐað ŒK×3Ò3Ñ5Ô5Ð5Ð5øõ  ð 	ð 	ð 	Ø”?ð ØÝÐ.Ñ/Ô/Ð/ØàŒK×3Ò3Ñ5Ô5Ð5Ð5Ð5ð	øøøøð ŒK×3Ò3Ñ5Ô5Ð5Ð5øøøs~   ÂE4T È/B*T ËBM?Í3T Í?NÎT ÎNÎAT Ï"A2Q ÑT Ñ Q$Ñ$T Ñ'Q$Ñ(
T ÒA*T Ô!UÔ3U ÕUÕU ÕU.c                 óT   — | j                              ¦   «          d x| _        | _        d S rh   )rD   ÚcloserQ   rP   ri   s    r)   ÚreleasezYuE2Pipeline.release­   s)   € ØŒ×ÒÑÔÐØ-1Ð1ˆÔ˜DœN˜N˜Nr+   rh   )Nrt   F)r   Nrd   Nr™   NN)Ú__name__Ú
__module__Ú__qualname__rÞ   rŒ   r`   ÚstaticmethodrH   rC   rl   rn   r%   r˜   r:   Úinference_moder÷   rú   r#   r+   r)   r   r      sà   € € € € € Ø€KØ€Jð!ð !ð !ð !ð> ðð ñ „\ððð ð ð ð  ð  ð ð  ð  ðFð Fð Fðð ð ð ð, €UÔÑÔðF6ð F6ð F6ñ ÔðF6ðP2ð 2ð 2ð 2ð 2r+   r   )$Ú__doc__r7   Údataclassesr   Úpathlibr   r:   Úmmgpr   r   Útransformersr   Ú,shared.llm_engines.nanovllm.token_generationr   Úmodulesr
   Úprotocolr   r   r   r   r   r   r   r   r’   r   Útokenization_yue2r   r=   r   r   r>   r   r   r   r#   r+   r)   ú<module>r	     sg  ðØ QÐ Qà €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $à NÐ NÐ NÐ NÐ NÐ Nà Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ðY2ð Y2ð Y2ð Y2ð Y2ñ Y2ô Y2ð Y2ð Y2ð Y2r+   