License For Customer Use of NVIDIA Software

IMPORTANT NOTICE -- READ CAREFULLY: This License For Customer Use of
NVIDIA Software ("LICENSE") is the agreement which governs use of the software of
NVIDIA Corporation and its subsidiaries ("NVIDIA") downloadable herefrom,
including computer software and associated printed materials ("SOFTWARE").
By downloading, installing, copying, or otherwise using the SOFTWARE, you
agree to be bound by the terms of this LICENSE.  If you do not agree to the
terms of this LICENSE, do not download the SOFTWARE.

RECITALS

Use of NVIDIA's products requires three elements: the SOFTWARE, the
hardware on a graphics controller board, and a personal computer. The
SOFTWARE is protected by copyright laws and international copyright
treaties, as well as other intellectual property laws and treaties.  The
SOFTWARE is not sold, and instead is only licensed for use, strictly in
accordance with this document.  The hardware is protected by various
patents, and is sold, but this agreement does not cover that sale, since it
may not necessarily be sold as a package with the SOFTWARE. This agreement
sets forth the terms and conditions of the SOFTWARE LICENSE only.

1.  DEFINITIONS

1.1  Customer.  Customer means the entity or individual that downloads the
     SOFTWARE.

2.  GRANT OF LICENSE

2.1  Rights and Limitations of Grant.  NVIDIA hereby grants Customer the
     following non-exclusive, non-transferable right to use the SOFTWARE,
     with the following limitations:

2.1.1  Rights.  Customer may install and use one copy of the SOFTWARE on a
       single computer, and except for making one back-up copy of the
       Software, may not otherwise copy the SOFTWARE.  This LICENSE of
       SOFTWARE may not be shared or used concurrently on different
       computers.

2.1.2  Academic Exception.  Notwithstanding the foregoing terms of Section
       2.1.1, academic departments at colleges and universities may share
       or distribute the SOFTWARE among multiple computers within a
       department.

2.1.3  Linux Exception.  Notwithstanding the foregoing terms of Section
       2.1.1, SOFTWARE designed exclusively for use on the Linux operating
       system may be copied and redistributed, provided that the binary
       files thereof are not modified in any way (except for unzipping of
       compressed files).

2.1.4  Limitations.

No Reverse Engineering.  Customer may not reverse engineer, decompile, or
disassemble the SOFTWARE, nor attempt in any other manner to obtain the
source code.

No Separation of Components.  The SOFTWARE is licensed as a single product.
Its component parts may not be separated for use on more than one computer,
nor otherwise used separately from the other parts.

No Rental.  Customer may not rent or lease the SOFTWARE to someone else.

2.1.5	Redistribution

Notwithstanding any other provision to the contrary, Customer may redistribute 
the Software executable and libraries only so long as such redistribution 
accompanies your commercial or non-commercial application. Customer may not
install or place any redistribution files in the system path. Customer may not, 
when redistributing the Software, modify any environmental variables created 
by this installer.Any such redistribution shall be subject to the terms and 
conditions of this License.

3.  TERMINATION

This LICENSE will automatically terminate if Customer fails to comply with
any of the terms and conditions hereof.  In such event, Customer must
destroy all copies of the SOFTWARE and all of its component parts.

4.  COPYRIGHT

All title and copyrights in and to the SOFTWARE (including but not limited
to all images, photographs, animations, video, audio, music, text, and
other information incorporated into the SOFTWARE), the accompanying printed
materials, and any copies of the SOFTWARE, are owned by NVIDIA, or its
suppliers.  The SOFTWARE is protected by copyright laws and international
treaty provisions.  Accordingly, Customer is required to treat the SOFTWARE
like any other copyrighted material, except as otherwise allowed pursuant
to this LICENSE and that it may make one copy of the SOFTWARE solely for
backup or archive purposes.

5.  APPLICABLE LAW

This agreement shall be deemed to have been made in, and shall be construed
pursuant to, the laws of the State of California.

6.  DISCLAIMER OF WARRANTIES AND LIMITATION ON LIABILITY

6.1  No Warranties.  TO THE MAXIMUM EXTENT PERMITTED BY
     APPLICABLE LAW, THE SOFTWARE IS PROVIDED "AS IS" AND NVIDIA
     AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
     OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED
     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     PURPOSE.

6.2  No Liability for Consequential Damages.  TO THE MAXIMUM
     EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL
     NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL,
     INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER
     (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF
     BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
     INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF
     THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF NVIDIA
     HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7.  MISCELLANEOUS

The United Nations Convention on Contracts for the International Sale of
Goods is specifically disclaimed.  If any provision of this LICENSE is
inconsistent with, or cannot be fully enforced under, the law, such
provision will be construed as limited to the extent necessary to be
consistent with and fully enforceable under the law.  This agreement is the
final, complete and exclusive agreement between the parties relating to the
subject matter hereof, and supersedes all prior or contemporaneous
understandings and agreements relating to such subject matter, whether oral
or written.  Customer agrees that it will not ship, transfer or export the
SOFTWARE into any country, or use the SOFTWARE in any manner, prohibited by
the United States Bureau of Export Administration or any export laws,
restrictions or regulations.  This LICENSE may only be modified in writing
signed by an authorized officer of NVIDIA.
