
    jC                     	   U d dl Z d dl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Zd dlZd dlmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZ d d
l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,  e*       Z-e*e.d<   e	 	 	 	 	 	 	 	 	 	 d@de/dee/   dee    dee/   dee/   dee/   deee/ef      deee/ef      deee/ef      defd       Z0e
	 	 	 	 	 	 	 	 	 dAde/dee/   dee/   dee/   dee/   dee/   dee/   dee/   ded    deeeef   fd!       Z1e
	 	 	 	 	 	 	 	 	 	 d@d"d#de/dee/   dee/   dee/   dee/   dee/   dee/   dee/   dee/   ded"   defd$       Z1e	 	 	 	 	 	 	 	 	 	 d@de/dee/   dee    dee/   dee/   dee/   deee/ef      deee/ef      deee/ef      de	eeeeef   f   fd%       Z1e	 	 	 	 	 	 dBd&e/dee/   d'ee2   d(ee/   deee/ef      deee/ef      deee/ef      de	e3eeee3f   f   fd)       Z4e	 	 	 	 	 	 	 dCd&e/dee/   dee/   d'ee2   d(ee/   deee/ef      deee/ef      deee/ef      de3fd*       Z5e	 	 	 	 	 dDd&e/de/deee/ef      deee/ef      deee/ef      defd+       Z6e
	 	 	 	 	 dDd&e/de/dee/   dee/   dee/   d,ed    deeeef   fd-       Z7e
	 	 	 	 	 dDd"d.d&e/de/dee/   dee/   dee/   d,ed"   defd/       Z7e	 	 	 	 	 dDd&e/de/deee/ef      deee/ef      deee/ef      de	eeeeef   f   fd0       Z7e	 	 	 	 	 	 	 	 	 dAd1ee/   d2ee8   d3ee/   dee/   deee/ef      deee/ef      deee/ef      dee   fd4       Z9e
	 	 	 	 	 	 	 	 dEd1ee/   d2ee8   d3ee/   dee/   dee/   dee/   d5ed    deeeee   f   fd6       Z:e
	 	 	 	 	 	 	 	 dEd"d7d1ee/   d2ee8   d3ee/   dee/   dee/   dee/   d5ed"   dee   fd8       Z:e	 	 	 	 	 	 	 	 dEd1ee/   d2ee8   d3ee/   deee/ef      deee/ef      deee/ef      de	ee   eeeee   f   f   fd9       Z:e	 	 	 	 	 dDd&e/deee/ef      deee/ef      deee/ef      def
d:       Z;e
	 	 	 	 	 dDd&e/dee/   dee/   dee/   d;ed    deeeef   fd<       Z<e
	 	 	 	 	 dDd"d=d&e/dee/   dee/   dee/   d;ed"   defd>       Z<e	 	 	 	 	 dDd&e/deee/ef      deee/ef      deee/ef      de	eeeeef   f   f
d?       Z<y)F    N)partial)Any	CoroutineLiteralOptionalUnionoverloadDictList)get_llm_provider) VideoCreateOptionalRequestParamsVideoObject)VideoGenerationRequestUtils)DEFAULT_VIDEO_ENDPOINT_MODELrequest_timeout)base_llm_http_handler)clientProviderConfigManager)	FileTypes	CallTypes)GenericLiteLLMParams)Logging)BaseVideoConfig)BaseLLMHTTPHandler)decode_video_id_with_providerllm_http_handlerpromptmodelinput_referencesecondssizeuserextra_headersextra_query
extra_bodyreturnc                 &  K   t               }	 t        j                         }d|d<   |4t        j                  |xs t
        |j                  dd            \  }}}}t        t        f| |||||||||	|
d|}t        j                         }t        |j                  |      }|j                  d|       d{   }t        j                  |      r| d{   }|S |}|S 7 )7 # t        $ r}t        j                  |||||      d}~ww xY ww)a)  
    Asynchronously calls the `video_generation` function with the given arguments and keyword arguments.

    Parameters:
    - `prompt` (str): Text prompt that describes the video to generate
    - `model` (Optional[str]): The video generation model to use
    - `input_reference` (Optional[FileTypes]): Optional image reference that guides generation
    - `seconds` (Optional[str]): Clip duration in seconds
    - `size` (Optional[str]): Output resolution formatted as width x height
    - `user` (Optional[str]): A unique identifier representing your end-user
    - `timeout` (int): Request timeout in seconds
    - `custom_llm_provider` (Optional[str]): The LLM provider to use
    - `extra_headers` (Optional[Dict[str, Any]]): Additional headers
    - `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
    - `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
    - `kwargs` (dict): Additional keyword arguments

    Returns:
    - `response` (VideoResponse): The response returned by the `video_generation` function.
    T
async_callNapi_baser   r)   )r   r   r   r    r!   r"   timeoutcustom_llm_providerr#   r$   r%   r   r,   original_exceptioncompletion_kwargsextra_kwargs)localsasyncioget_event_looplitellmr   r   getr   video_generationcontextvarscopy_contextrunrun_in_executoriscoroutine	Exceptionexception_type)r   r   r   r    r!   r"   r+   r,   r#   r$   r%   kwargs
local_varsloop_funcctxfunc_with_contextinit_responseresponsees                        l/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/videos/main.pyavideo_generationrI      sE    J J+
%%'#| &+2+C+C;;jnnU_aeFf,(A"Aq 
+ 3'#!
 
  &&(#CGGT2"2249JKK}-**H  %H L +
  
$$ 3 (
 	

sY   DB*C& 8C"9C& C$C& DC& !D"C& $C& &	D/D		DDapi_keyr)   api_versionrI   Tc
                     y N )r   r   r   r!   r"   r+   rJ   r)   rK   r,   rI   r>   s               rH   r6   r6   s   s          F)rI   c                     y rM   rN   )r   r   r   r    r!   r"   r+   rJ   r)   rK   r,   rI   r>   s                rH   r6   r6      s    " rO   c                    t               }	 |j                  d      }|j                  dd      }|j                  dd      du }|j                  dd      }|2t        |t              rt        j                  |      }t        di |}|S t        di |}t        |xs t        |      \  }}}}t        j                  |t        j                  |      	      }|t        d
|       |j!                  |       t#        j$                  |      }t#        j&                  |||      }|j)                  ||t+        |      d|i||       t,        j.                  j0                  |_        t5        j6                  || |||||||
|xs t8        ||j                  d            S # t:        $ r'}t        j<                  |xs t        ||||      d}~ww xY w)\
    Maps the https://api.openai.com/v1/videos endpoint.

    Currently supports OpenAI
    litellm_logging_objlitellm_call_idNr(   FTmock_response)r   r,   r   providerz&video generation is not supported for )r    video_generation_provider_config video_generation_optional_paramsr   r"   optional_paramslitellm_paramsr,   r   )r   r   rX   (video_generation_optional_request_paramsr,   r\   logging_objr#   r%   r+   	_is_asyncr   r-   rN   )r1   popr5   
isinstancestrjsonloadsr   r   r   r   r   get_provider_video_configr4   LlmProviders
ValueErrorupdater   -get_requested_video_generation_optional_param$get_optional_params_video_generationupdate_environment_variablesdictr   create_videovalue	call_typer   video_generation_handlerDEFAULT_REQUEST_TIMEOUTr<   r=   )r   r   r   r    r!   r"   r+   r,   r#   r$   r%   r>   r?   rS   rT   r_   rU   rF   r\   rA   rX   rY   video_generation_request_paramsrG   s                           rH   r6   r6      s   2 JU
17<Q1R)/4Et)LJJ|U3t;	 

?D9$-- $

= 9"3]3HO .77+;77 3,
("Aq ";; --.AB 	) ,3EFYEZ[\\&! (UUV`a 	) (LL1Q1Q 	( 	88 !@A!?1 !4 	9 		
 )2(>(>(D(D% %==-M5T 3)+'!66::h'
 	
  
$$77 3 (
 	

s   A<F  	DF   	G)"GGvideo_idr+   r,   c                    t               }	 |j                  d      }	|j                  dd      }
|j                  dd      du }| t        |       }|j                  d      xs d}t	        di |}t        j                  dt        j                  |      	      }|t        d
|       |j                  |       d| i}|	j                  d|j                  d      t        |      d|
i||       t        j                  | ||||	|xs t        ||j                  d      |	      S # t         $ r}t        j"                  d||||      d}~ww xY w)aN  
    Download video content from OpenAI's video API.

    Args:
        video_id (str): The identifier of the video whose content to download.
        api_key (Optional[str]): The API key to use for authentication.
        api_base (Optional[str]): The base URL for the API.
        timeout (Optional[float]): The timeout for the request in seconds.
        custom_llm_provider (Optional[str]): The LLM provider to use. If not provided, will be auto-detected.
        variant (Optional[str]): Which downloadable asset to return. Defaults to the MP4 video.
        extra_headers (Optional[Dict[str, Any]]): Additional headers to include in the request.
        extra_query (Optional[Dict[str, Any]]): Additional query parameters.
        extra_body (Optional[Dict[str, Any]]): Additional body parameters.

    Returns:
        bytes: The raw video content as bytes.

    Example:
        ```python
        import litellm

        video_bytes = litellm.video_content(
            video_id="video_123"
        )

        with open("video.mp4", "wb") as f:
            f.write(video_bytes)
        ```
    rS   rT   Nr(   FTr,   openairV   z,video support download is not supported for rs    r"   rZ   r   )	rs   video_content_provider_configr,   r\   r^   r+   r#   r   r_   r-   rN   )r1   r5   r`   r   r   r   re   r4   rf   rg   rh   rk   rl   r   video_content_handlerrq   r<   r=   )rs   r)   r+   r,   r#   r$   r%   r>   r?   rS   rT   r_   decodedr\   video_provider_configvideo_content_request_paramsrG   s                    rH   video_contentr|     s   Z J?
17<Q1R)/4Et)LJJ|U3t;	 &3H=G")++.C"D"P .77 ";; --.AB 	 !(KL_K`abb&! .
$
 	88F# !=>!?. !4 	9 		
 %::*? 3)+66'::h'

 
	
  
$$ 3 (
 	

s   DD& &	E/E		Ec                   K   t               }		 t        j                         }
d|d<   |d}t        t        f| |||||||d|}t        j                         }t        |j                  |      }|
j                  d|       d{   }t        j                  |      r| d{   }|S |}|S 7 )7 # t        $ r}t        j                  d|||	|      d}~ww xY ww)a  
    Asynchronously download video content.

    Parameters:
    - `video_id` (str): The identifier of the video whose content to download
    - `api_key` (Optional[str]): The API key to use for authentication
    - `api_base` (Optional[str]): The base URL for the API
    - `timeout` (Optional[float]): The timeout for the request in seconds
    - `custom_llm_provider` (Optional[str]): The LLM provider to use
    - `extra_headers` (Optional[Dict[str, Any]]): Additional headers
    - `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
    - `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
    - `kwargs` (dict): Additional keyword arguments

    Returns:
    - `bytes`: The raw video content as bytes
    Tr(   Nru   )rs   rJ   r)   r+   r,   r#   r$   r%   rv   r-   )r1   r2   r3   r   r|   r7   r8   r9   r:   r;   r<   r4   r=   )rs   rJ   r)   r+   r,   r#   r$   r%   r>   r?   r@   rB   rC   rD   rE   rF   rG   s                    rH   avideo_contentr~     s    > J'
%%'#| &"*
 3'#!
 
 &&(#CGGT2"2249JKK}-**H  %H L +
  
$$ 3 (
 	

sY   CA5B1 B-B1 "B/#B1 (C)B1 ,C-B1 /B1 1	C:CCCc                   K   t               }	 t        j                         }	d|d<   t        t        f| ||||||d|}
t        j                         }t        |j                  |
      }|	j                  d|       d{   }t        j                  |      r| d{   }|S |}|S 7 )7 # t        $ r}t        j                  d||||      d}~ww xY ww)a  
    Asynchronously calls the `video_remix` function with the given arguments and keyword arguments.

    Parameters:
    - `video_id` (str): The identifier of the completed video to remix
    - `prompt` (str): Updated text prompt that directs the remix generation
    - `timeout` (int): Request timeout in seconds
    - `custom_llm_provider` (Optional[str]): The LLM provider to use
    - `extra_headers` (Optional[Dict[str, Any]]): Additional headers
    - `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
    - `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
    - `kwargs` (dict): Additional keyword arguments

    Returns:
    - `response` (VideoObject): The response returned by the `video_remix` function.
    Tr(   )rs   r   r+   r,   r#   r$   r%   Nrv   r-   )r1   r2   r3   r   video_remixr7   r8   r9   r:   r;   r<   r4   r=   )rs   r   r+   r,   r#   r$   r%   r>   r?   r@   rB   rC   rD   rE   rF   rG   s                   rH   avideo_remixr     s     : J!
%%'#|

 3'#!

 

 &&(#CGGT2"2249JKK}-**H  %H L +
  
$$ 3 (
 	

sY   CA0B, >B(?B, B*B, #C$B, 'C(B, *B, ,	C5CCCr   c                     y rM   rN   	rs   r   r+   rJ   r)   rK   r,   r   r>   s	            rH   r   r          rO   )r   c                     y rM   rN   r   s	            rH   r   r     r   rO   c                 r   t               }	 |j                  d      }	|j                  dd      }
|j                  dd      du }|j                  dd      }|2t        |t              rt        j                  |      }t        di |}|S | t        |       }|j                  d      xs d	}t        di |}t        j                  dt        j                  |      
      }|t        d|       |j                  |       | |d}|	j!                  d|j                  d      t#        |      d|
i||       t$        j&                  j(                  |	_        t-        j.                  | |||||	|||xs t0        ||j                  d            S # t2        $ r}t        j4                  d||||      d}~ww xY w)zm
    Maps the https://api.openai.com/v1/videos/{video_id}/remix endpoint.

    Currently supports OpenAI
    rS   rT   Nr(   FTrU   r,   ru   rV   z!video remix is not supported for )rs   r   rv   r"   rZ   r   )rs   r   video_remix_provider_configr,   r\   r^   r#   r%   r+   r_   r   r-   rN   )r1   r`   r5   ra   rb   rc   rd   r   r   r   r   re   r4   rf   rg   rh   rk   rl   r   r   rn   ro   r   video_remix_handlerrq   r<   r=   )rs   r   r+   r,   r#   r$   r%   r>   r?   rS   rT   r_   rU   rF   ry   r\   r   video_remix_request_paramsrG   s                      rH   r   r   0  s   * JM
17<Q1R)/4Et)LJJ|U3t;	 

?D9$-- $

= 9"3]3HO &3H=G")++.C"D"P .77 ";; --.AB 	$ '.@AT@UVWW&! !,
" 	88F# !;<!?, !4 	9 		
 )2(=(=(C(C% %88(C 3)+'!66::h'
 	
  
$$ 3 (
 	

s   A<F 	DF 	F6F11F6afterlimitorderc	                   K   t               }
	 t        j                         }d|	d<   |,t        j                  d|
j                  dd            \  }}}}t        t        f| ||||||||d	|	}t        j                         }t        |j                  |      }|j                  d|       d{   }t        j                  |      r| d{   }|S |}|S 7 )7 # t        $ r}t        j                  d|||
|	      d}~ww xY ww)	a  
    Asynchronously calls the `video_list` function with the given arguments and keyword arguments.

    Parameters:
    - `after` (Optional[str]): Identifier for the last item from the previous pagination request
    - `limit` (Optional[int]): Number of items to retrieve
    - `order` (Optional[str]): Sort order of results by timestamp. Use asc for ascending order or desc for descending order
    - `api_key` (Optional[str]): The API key to use for authentication
    - `timeout` (int): Request timeout in seconds
    - `custom_llm_provider` (Optional[str]): The LLM provider to use
    - `extra_headers` (Optional[Dict[str, Any]]): Additional headers
    - `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
    - `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
    - `kwargs` (dict): Additional keyword arguments

    Returns:
    - `response` (Dict[str, Any]): The response returned by the `video_list` function.
    Tr(   Nrv   r)   r*   )	r   r   r   rJ   r+   r,   r#   r$   r%   r-   )r1   r2   r3   r4   r   r5   r   
video_listr7   r8   r9   r:   r;   r<   r=   )r   r   r   rJ   r+   r,   r#   r$   r%   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   s                      rH   avideo_listr     s7    B J)
%%'#| &+2+C+C:>>*d#C,(A"Aq 
 3'#!
 
 &&(#CGGT2"2249JKK}-**H  %H L +
  
$$ 3 (
 	

sY   DB C .C/C CC DC DC C 	D%C??DDr   c                     y rM   rN   
r   r   r   r+   rJ   r)   rK   r,   r   r>   s
             rH   r   r          rO   )r   c                     y rM   rN   r   s
             rH   r   r     r   rO   c                 \   t               }		 |j                  d      }
|j                  dd      }|j                  dd      du }|j                  dd      }|>t        |t              rt        j                  |      }|D cg c]  }t        di | c}S |d}t        di |}t        j                  dt        j                  |      	      }|t        d
|       |	j                  |       | ||d}|
j                  d|j                  d      t!        |      d|i||       t"        j$                  j&                  |
_        t+        j,                  | ||||||
|||xs t.        ||j                  d            S c c}w # t0        $ r}t        j2                  d|||	|      d}~ww xY w)rR   rS   rT   Nr(   FTrU   ru   rV   z video list is not supported for )r   r   r   rv   r"   rZ   r   )r   r   r   video_list_provider_configr,   r\   r^   r#   r$   r+   r_   r   r-   rN   )r1   r5   r`   ra   rb   rc   rd   r   r   r   re   r4   rf   rg   rh   rk   rl   r   r   rn   ro   r   video_list_handlerrq   r<   r=   )r   r   r   r+   r,   r#   r$   r%   r>   r?   rS   rT   r_   rU   itemr\   r   video_list_request_paramsrG   s                      rH   r   r     s   , JL
17<Q1R)/4Et)LJJ|U3t;	 

?D9$-- $

= 94ABMDK'$'MBB &"* .77 ";; --.AB 	# &-?@S?TUVV&! +
! 	88F# !:;!?+ !4 	9 		
 )2(<(<(B(B% %77'A 3)+'#66::h'
 	
Y Cv  
$$ 3 (
 	

s1   A4F  E>F C(F >F 	F+F&&F+c           
        K   t               }	 t        j                         }d|d<   t        t        f| |||||d|}	t        j                         }
t        |
j                  |	      }|j                  d|       d{   }t        j                  |      r| d{   }|S |}|S 7 )7 # t        $ r}t        j                  d||||      d}~ww xY ww)a  
    Asynchronously retrieve video status from OpenAI's video API.

    Parameters:
    - `video_id` (str): The identifier of the video whose status to retrieve
    - `model` (Optional[str]): The model to use. If not provided, will be auto-detected
    - `timeout` (int): Request timeout in seconds
    - `custom_llm_provider` (Optional[str]): The LLM provider to use
    - `extra_headers` (Optional[Dict[str, Any]]): Additional headers
    - `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
    - `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
    - `kwargs` (dict): Additional keyword arguments

    Returns:
    - `response` (VideoObject): The response returned by the `video_status` function.
    Tr(   )rs   r+   r,   r#   r$   r%   Nrv   r-   )r1   r2   r3   r   video_statusr7   r8   r9   r:   r;   r<   r4   r=   )rs   r+   r,   r#   r$   r%   r>   r?   r@   rB   rC   rD   rE   rF   rG   s                  rH   avideo_statusr   s  s     8 J!
%%'#| 	
 3'#!	
 	
 &&(#CGGT2"2249JKK}-**H  %H L +
  
$$ 3 (
 	

sY   CA/B+ =B'>B+ B)B+ "C#B+ &C'B+ )B+ +	C4CCCr   c                     y rM   rN   rs   r+   rJ   r)   rK   r,   r   r>   s           rH   r   r          rO   )r   c                     y rM   rN   r   s           rH   r   r     r   rO   c                 n   t               }	 |j                  d      }|j                  dd      }	|j                  dd      du }
|j                  dd      }|2t        |t              rt        j                  |      }t        di |}|S | t        |       }|j                  d      xs d	}t        di |}t        j                  dt        j                  |      
      }|t        d|       |j                  |       d| i}|j!                  d|j                  d      t#        |      d|	i||       t$        j&                  j(                  |_        t-        j.                  | |||||||xs t0        |
|j                  d      
      S # t2        $ r}t        j4                  d||||      d}~ww xY w)a  
    Retrieve video status from OpenAI's video API.

    Args:
        video_id (str): The identifier of the video whose status to retrieve.
        timeout (int): The timeout for the request in seconds.
        custom_llm_provider (Optional[str]): The LLM provider to use. If not provided, will be auto-detected.
        extra_headers (Optional[Dict[str, Any]]): Additional headers to include in the request.
        extra_query (Optional[Dict[str, Any]]): Additional query parameters.
        extra_body (Optional[Dict[str, Any]]): Additional body parameters.

    Returns:
        VideoObject: The video status information.

    Example:
        ```python
        import litellm

        # Get video status
        video_status = litellm.video_status(
            video_id="video_123"
        )

        print(f"Video status: {video_status.status}")
        print(f"Progress: {video_status.progress}%")
        ```
    rS   rT   Nr(   FTrU   r,   ru   rV   z"video status is not supported for rs   rv   r"   rZ   r   )
rs   video_status_provider_configr,   r\   r^   r#   r%   r+   r_   r   r-   rN   )r1   r5   r`   ra   rb   rc   rd   r   r   r   r   re   r4   rf   rg   rh   rk   rl   r   video_retrievern   ro   r   video_status_handlerrq   r<   r=   )rs   r+   r,   r#   r$   r%   r>   r?   rS   rT   r_   rU   rF   ry   r\   r   video_status_request_paramsrG   s                     rH   r   r     s   T JK
17<Q1R)/4Et)LJJ|U3t;	 

?D9$-- $

= 9"3]3HO &3H=G")++.C"D"P .77 ";; --.AB 	% (/ABUAVWXX&! -
#
 	88F# !<=!?- !4 	9 		
 )2(@(@(F(F% %99)E 3)+'!66::h'
 	
  
$$ 3 (
 	

s   A<F 	DF 	F4F//F4)
NNNNNX  NNNN)	NNNNr   NNNN)NNNNNN)NNNNNNN)r   NNNN)NNNr   NNNN)=r2   r7   	functoolsr   typingr   r   r   r   r   r	   r
   r   rc   r4   1litellm.litellm_core_utils.get_llm_provider_logicr   litellm.types.videos.mainr   r   litellm.videos.utilsr   litellm.constantsr   r   rq   litellm.mainr   litellm.utilsr   r   litellm.types.utilsr   r   litellm.types.routerr   *litellm.litellm_core_utils.litellm_loggingr   LiteLLMLoggingObj+litellm.llms.base_llm.videos.transformationr   *litellm.llms.custom_httpx.llm_http_handlerr   litellm.types.videos.utilsr   r   __annotations__rb   rI   r6   floatbytesr|   r~   r   r   intr   r   r   r   rN   rO   rH   <module>r      sw      Q Q Q   N = f . 7 4 5 S G I D (:'; $ ;   +/! /3,0+/P
P
C=P
 i(P
 c]	P

 3-P
 3-P
 DcN+P
 $sCx.)P
 c3h(P
 P
 P
l 
  %)!"!%C= c] 3-	
 3- c] sm # t} sC$% 
$ 
  %)!!"!% ).C= c] c]	
 3- 3- c] sm # u~  
*   +/! /3,0+/n
n
C=n
 i(n
 c]	n

 3-n
 3-n
 DcN+n
 $sCx.)n
 c3h(n
 c3#$&n
 n
b  ##)- /3,0+/l
l
sml
 e_l
 "#	l
 DcN+l
 $sCx.)l
 c3h(l
 	c3o l
 l
`  ""#)- /3,0+/F
F
c]F
 smF
 e_	F

 "#F
 DcN+F
 $sCx.)F
 c3h(F
 F
 F
R   /3,0+/>
>
>
 DcN+>
 $sCx.)>
 c3h(>
 >
 >
H 
 !"!% c]	
 sm # $- sC$% 
 
 !"!% $) c]	
 sm # %.  
"   /3,0+/b
b
b
 DcN+b
 $sCx.)b
 c3h(b
 c3#$&b
 b
L ! /3,0+/J
C=J
C=J
 C=J
 c]	J
 DcN+J
 $sCx.)J
 c3h(J
 
+J
 J
` 
!"!%C=C= C=
 c] sm #  sCk**+ 
  
!"!% #(C=C= C=
 c] sm #  
+ 
$  /3,0+/b
C=b
C=b
 C=b
 DcN+b
 $sCx.)b
 c3h(b
 c3[))*,b
 b
L   /3,0+/=
=
 DcN+=
 $sCx.)=
 c3h(=
 =
 =
F 
 !"!% c] sm	
 # 4= sC$% 
 
 !"!% %* c] sm	
 # 5>  
    /3,0+/u
u
 DcN+u
 $sCx.)u
 c3h(u
 c3#$&u
 u
rO   