Oracle Technology Network Development and Distribution License Terms

Export Controls on the Programs
Selecting the "Accept License Agreement" button is a confirmation of your
agreement that you comply, now and during the trial term, with each of the
following statements:

-You are not a citizen, national, or resident of, and are not under control of,
the government of Cuba, Iran, Sudan, Libya, North Korea, Syria, nor any country
to which the United States has prohibited export.
-You will not download or otherwise export or re-export the Programs, directly
or indirectly, to the above mentioned countries nor to citizens, nationals or
residents of those countries.
-You are not listed on the United States Department of Treasury lists of
Specially Designated Nationals, Specially Designated Terrorists, and Specially
Designated Narcotic Traffickers, nor are you listed on the United States
Department of Commerce Table of Denial Orders.

You will not download or otherwise export or re-export the Programs, directly or
indirectly, to persons on the above mentioned lists.

You will not use the Programs for, and will not allow the Programs to be used
for, any purposes prohibited by United States law, including, without
limitation, for the development, design, manufacture or production of nuclear,
chemical or biological weapons of mass destruction.

EXPORT RESTRICTIONS
You agree that U.S. export control laws and other applicable export and import
laws govern your use of the programs, including technical data; additional
information can be found on Oracle®'s Global Trade Compliance web site
(http://www.oracle.com/products/export).

You agree that neither the programs nor any direct product thereof will be
exported, directly, or indirectly, in violation of these laws, or will be used
for any purpose prohibited by these laws including, without limitation, nuclear,
chemical, or biological weapons proliferation.

Oracle Employees: Under no circumstances are Oracle Employees authorized to
download software for the purpose of distributing it to customers. Oracle
products are available to employees for internal use or demonstration purposes
only. In keeping with Oracle's trade compliance obligations under U.S. and
applicable multilateral law, failure to comply with this policy could result in
disciplinary action up to and including termination.

Note: You are bound by the Oracle Technology Network ("OTN") License Agreement
terms. The OTN License Agreement terms also apply to all updates you receive
under your Technology Track subscription.

The OTN License Agreement terms below supercede any shrinkwrap license on the
OTN Technology Track software CDs and previous OTN License terms (including the
Oracle Program License as modified by the OTN Program Use Certificate).

Oracle Technology Network Development and Distribution License Agreement


"We," "us," and "our" refers to Oracle USA, Inc., for and on behalf of itself
and its subsidiaries and affiliates under common control. "You" and "your"
refers to the individual or entity that wishes to use the programs from Oracle.
"Programs" refers to the software product you wish to download and use and
program documentation. "License" refers to your right to use the programs under
the terms of this agreement. This agreement is governed by the substantive and
procedural laws of California. You and Oracle agree to submit to the exclusive
jurisdiction of, and venue in, the courts of San Francisco, San Mateo, or Santa
Clara counties in California in any dispute arising out of or relating to this
agreement.

We are willing to license the programs to you only upon the condition that you
accept all of the terms contained in this agreement. Read the terms carefully
and select the "Accept" button at the bottom of the page to confirm your
acceptance. If you are not willing to be bound by these terms, select the "Do
Not Accept" button and the registration process will not continue.

License Rights
We grant you a nonexclusive, nontransferable limited license to use the programs
for purposes of developing your applications. You may also distribute the
programs with your applications to your customers. If you want to use the
programs for any purpose other than as expressly permitted under this agreement
you must contact us, or an Oracle reseller, to obtain the appropriate license.
We may audit your use of the programs. Program documentation is either shipped
with the programs, or documentation may accessed online at
http://otn.oracle.com/docs.

Ownership and Restrictions
We retain all ownership and intellectual property rights in the programs. You
may make a sufficient number of copies of the programs for the licensed use and
one copy of the programs for backup purposes.

You may not:
- use the programs for any purpose other than as provided above;
- distribute the programs unless accompanied with your applications;
- charge your end users for use of the programs;
- remove or modify any program markings or any notice of our proprietary rights;
- use the programs to provide third party training on the content and/or
functionality of the programs, except for training your licensed users;
- assign this agreement or give the programs, program access or an interest in
the programs to any individual or entity except as provided under this
agreement;
- cause or permit reverse engineering (unless required by law for
interoperability), disassembly or decompilation of the programs;
- disclose results of any program benchmark tests without our prior consent; or,
- use any Oracle name, trademark or logo.

Program Distribution
We grant you a nonexclusive, nontransferable right to copy and distribute the
programs to your end users provided that you do not charge your end users for
use of the programs and provided your end users may only use the programs to run
your applications for their business operations. Prior to distributing the
programs you shall require your end users to execute an agreement binding them
to terms consistent with those contained in this section and the sections of
this agreement entitled "License Rights," "Ownership and Restrictions,"
"Export," "Disclaimer of Warranties and Exclusive Remedies," "No Technical
Support," "End of Agreement," "Relationship Between the Parties," and "Open
Source." You must also include a provision stating that your end users shall
have no right to distribute the programs, and a provision specifying us as a
third party beneficiary of the agreement. You are responsible for obtaining
these agreements with your end users.

You agree to: (a) defend and indemnify us against all claims and damages caused
by your distribution of the programs in breach of this agreements and/or failure
to include the required contractual provisions in your end user agreement as
stated above; (b) keep executed end user agreements and records of end user
information including name, address, date of distribution and identity of
programs distributed; (c) allow us to inspect your end user agreements and
records upon request; and, (d) enforce the terms of your end user agreements so
as to effect a timely cure of any end user breach, and to notify us of any
breach of the terms.

Export
You agree that U.S. export control laws and other applicable export and import
laws govern your use of the programs, including technical data; additional
information can be found on Oracle's Global Trade Compliance web site located at
http://www.oracle.com/products/export/index.html?content.html. You agree that
neither the programs nor any direct product thereof will be exported, directly,
or indirectly, in violation of these laws, or will be used for any purpose
prohibited by these laws including, without limitation, nuclear, chemical, or
biological weapons proliferation.

Disclaimer of Warranty and Exclusive Remedies

THE PROGRAMS ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. WE FURTHER
DISCLAIM ALL WARRANTIES, EXPRESS AND IMPLIED, INCLUDING WITHOUT LIMITATION, ANY
IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
NONINFRINGEMENT.

IN NO EVENT SHALL WE BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE
OR CONSEQUENTIAL DAMAGES, OR DAMAGES FOR LOSS OF PROFITS, REVENUE, DATA OR DATA
USE, INCURRED BY YOU OR ANY THIRD PARTY, WHETHER IN AN ACTION IN CONTRACT OR
TORT, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. OUR
ENTIRE LIABILITY FOR DAMAGES HEREUNDER SHALL IN NO EVENT EXCEED ONE THOUSAND
DOLLARS (U.S. $1,000).

No Technical Support
Our technical support organization will not provide technical support, phone
support, or updates to you for the programs licensed under this agreement.

Restricted Rights
If you distribute a license to the United States government, the programs,
including documentation, shall be considered commercial computer software and
you will place a legend, in addition to applicable copyright notices, on the
documentation, and on the media label, substantially similar to the following:
NOTICE OF RESTRICTED RIGHTS
"Programs delivered subject to the DOD FAR Supplement are 'commercial computer
software' and use, duplication, and disclosure of the programs, including
documentation, shall be subject to the licensing restrictions set forth in the
applicable Oracle license agreement. Otherwise, programs delivered subject to
the Federal Acquisition Regulations are 'restricted computer software' and use,
duplication, and disclosure of the programs, including documentation, shall be
subject to the restrictions in FAR 52.227-19, Commercial Computer
Software-Restricted Rights (June 1987). Oracle USA, Inc., 500 Oracle Parkway,
Redwood City, CA 94065."

End of Agreement
You may terminate this agreement by destroying all copies of the programs. We
have the right to terminate your right to use the programs if you fail to comply
with any of the terms of this agreement, in which case you shall destroy all
copies of the programs.

Relationship Between the Parties
The relationship between you and us is that of licensee/licensor. Neither party
will represent that it has any authority to assume or create any obligation,
express or implied, on behalf of the other party, nor to represent the other
party as agent, employee, franchisee, or in any other capacity. Nothing in this
agreement shall be construed to limit either party's right to independently
develop or distribute software that is functionally similar to the other party's
products, so long as proprietary information of the other party is not included
in such software.

Open Source
"Open Source" software - software available without charge for use, modification
and distribution - is often licensed under terms that require the user to make
the user's modifications to the Open Source software or any software that the
user 'combines' with the Open Source software freely available in source code
form. If you use Open Source software in conjunction with the programs, you must
ensure that your use does not: (i) create, or purport to create, obligations of
us with respect to the Oracle programs; or (ii) grant, or purport to grant, to
any third party any rights to or immunities under our intellectual property or
proprietary rights in the Oracle programs. For example, you may not develop a
software program using an Oracle program and an Open Source program where such
use results in a program file(s) that contains code from both the Oracle program
and the Open Source program (including without limitation libraries) if the Open
Source program is licensed under a license that requires any "modifications" be
made freely available. You also may not combine the Oracle program with programs
licensed under the GNU General Public License ("GPL") in any manner that could
cause, or could be interpreted or asserted to cause, the Oracle program or any
modifications thereto to become subject to the terms of the GPL.

Entire Agreement
You agree that this agreement is the complete agreement for the programs and
licenses, and this agreement supersedes all prior or contemporaneous agreements
or representations. If any term of this agreement is found to be invalid or
unenforceable, the remaining provisions will remain effective.

Last updated: 03/09/05

Should you have any questions concerning this License Agreement, or if you
desire to contact Oracle for any reason, please write:
Oracle USA, Inc.
500 Oracle Parkway,
Redwood City, CA 94065

Oracle may contact you to ask if you had a satisfactory experience installing
and using this OTN software download.
