EVALUATION LICENSE AGREEMENT
Agreement version 2.0

This Evaluation License Agreement ("Agreement") is a legal agreement
between Nokia Corporation ("Nokia"), with its registered office at
Keilalahdentie 4, 02150 Espoo, Finland and you (either an individual
or a legal entity) ("Licensee") for the Licensed Software.

1.DEFINITIONS

"Affiliate" of a Party shall mean an entity (i) which is directly or
indirectly controlling such Party; (ii) which is under the same direct
or indirect ownership or control as such Party; or (iii) which is
directly or indirectly owned or controlled by such Party.  For these
purposes, an entity shall be treated as being controlled by another if
that other entity has fifty percent (50 %) or more of the votes in
such entity, is able to direct its affairs and/or to control the
composition of its board of directors or equivalent body.

"Term" shall mean the period of time thirty (30) days from the later
of (a) the Effective Date; or (b) the date the Licensed Software was
initially delivered to Licensee by Nokia.  If no specific Effective
Date is set forth in the Agreement, the Effective Date shall be deemed
to be the date the Licensed Software was initially delivered to
Licensee.

"Licensed Software" shall mean the computer software, "online" or
electronic documentation, associated media and printed materials,
including the source code, example programs and the documentation
delivered by Nokia to Licensee in conjunction with this Agreement.

"Party or Parties" shall mean Licensee and/or Nokia.


2.OWNERSHIP

The Licensed Software is protected by copyright laws and international
copyright treaties, as well as other intellectual property laws and
treaties. The Licensed Software is licensed, not sold.

If Licensee provides any findings, proposals, suggestions or other
feedback ("Feedback") to Nokia regarding the Licensed Software, Nokia
shall own all right, title and interest including the intellectual
property rights in and to such Feedback, excluding however any
existing patent rights of Licensee. To the extent Licensee owns or
controls any patents for such Feedback Licensee hereby grants to Nokia
and its Affiliates, a worldwide, perpetual, non-transferable,
sublicensable, royalty-free license to (i) use, copy and modify
Feedback and to create derivative works thereof, (ii) to make (and
have made), use, import, sell, offer for sale, lease, dispose, offer
for disposal or otherwise exploit any products or services of Nokia
containing Feedback,, and (iii) sublicense all the foregoing rights to
third party licensees and customers of Nokia and/or its Affiliates.


3.VALIDITY OF THE AGREEMENT

By installing, copying, or otherwise using the Licensed Software,
Licensee agrees to be bound by the terms of this Agreement. If
Licensee does not agree to the terms of this Agreement, Licensee may
not install, copy, or otherwise use the Licensed Software. Upon
Licensee's acceptance of the terms and conditions of this Agreement,
Nokia grants Licensee the right to use the Licensed Software in the
manner provided below.


4.LICENSES

4.1.Using and Copying

Nokia grants to Licensee a non-exclusive, non-transferable,
time-limited license to use and copy the Licensed Software for sole
purpose of evaluating the Licensed Software during the Term.

Licensee may install copies of the Licensed Software on an unlimited
number of computers provided that (a) if an individual, only such
individual; or (b) if a legal entity only its employees; use the
Licensed Software for the authorized purposes.

4.2.No Distribution or Modifications

Licensee may not disclose, modify, sell, market, commercialise,
distribute, loan, rent, lease, or license the Licensed Software or any
copy of it or use the Licensed Software for any purpose that is not
expressly granted in this Section 4. Licensee may not alter or remove
any details of ownership, copyright, trademark or other property right
connected with the Licensed Software. Licensee may not distribute any
software statically or dynamically linked with the Licensed Software.

4.3.No Technical Support

Nokia has no obligation to furnish Licensee with any technical support
whatsoever. Any such support is subject to separate agreement between
the Parties.


5.THIRD PARTY SOFTWARE

The Licensed Software may provide links to third party libraries or
code (collectively "Third Party Software") to implement various
functions.  Third Party Software does not comprise part of the
Licensed Software. In some cases, access to Third Party Software may
be included along with the Licensed Software delivery as a convenience
for development and testing only. Such source code and libraries may
be listed in the ".../src/3rdparty" source tree delivered with the
Licensed Software or documented in the Licensed Software where the
Third Party Software is used, as may be amended from time to time, do
not comprise the Licensed Software.  Licensee acknowledges (1) that
some part of Third Party Software may require additional licensing of
copyright and patents from the owners of such, and (2) that
distribution of any of the Licensed Software referencing any portion
of a Third Party Software may require appropriate licensing from such
third parties.


6.Limited Warranty and Warranty Disclaimer

The Licensed Software is licensed to Licensee "as is". To the maximum
extent permitted by applicable law, Nokia on behalf of itself and its
suppliers, disclaims all warranties and conditions, either express or
implied, including, but not limited to, implied warranties of
merchantability, fitness for a particular purpose, title and
non-infringement with regard to the Licensed Software.


7.Limitation of Liability

If, Nokia's warranty disclaimer notwithstanding, Nokia is held liable
to Licensee, whether in contract, tort or any other legal theory,
based on the Licensed Software, Nokia's entire liability to Licensee
and Licensee's exclusive remedy shall be, at Nokia's option, either
(A) return of the price Licensee paid for the Licensed Software, or
(B) repair or replacement of the Licensed Software, provided Licensee
returns to Nokia all copies of the Licensed Software as originally
delivered to Licensee. Nokia shall not under any circumstances be
liable to Licensee based on failure of the Licensed Software if the
failure resulted from accident, abuse or misapplication, nor shall
Nokia under any circumstances be liable for special damages, punitive
or exemplary damages, damages for loss of profits or interruption of
business or for loss or corruption of data. Any award of damages from
Nokia to Licensee shall not exceed the total amount Licensee has paid
to Nokia in connection with this Agreement.


8. CONFIDENTIALITY

Each party acknowledges that during the Term of this Agreement it
shall have access to information about the other party's business,
business methods, business plans, customers, business relations,
technology, and other information, including the terms of this
Agreement, that is confidential and of great value to the other party,
and the value of which would be significantly reduced if disclosed to
third parties (the "Confidential Information"). Accordingly, when a
party (the "Receiving Party") receives Confidential Information from
another party (the "Disclosing Party"), the Receiving Party shall, and
shall obligate its employees and agents and employees and agents of
its Affiliates to: (i) maintain the Confidential Information in strict
confidence; (ii) not disclose the Confidential Information to a third
party without the Disclosing Party's prior written approval; and (iii)
not, directly or indirectly, use the Confidential Information for any
purpose other than for exercising its rights and fulfilling its
responsibilities pursuant to this Agreement. Each party shall take
reasonable measures to protect the Confidential Information of the
other party, which measures shall not be less than the measures taken
by such party to protect its own confidential and proprietary
information.

"Confidential Information" shall not include information that (a) is
or becomes generally known to the public through no act or omission of
the Receiving Party; (b) was in the Receiving Party's lawful
possession prior to the disclosure hereunder and was not subject to
limitations on disclosure or use; (c) is developed by the Receiving
Party without access to the Confidential Information of the Disclosing
Party or by persons who have not had access to the Confidential
Information of the Disclosing Party as proven by the written records
of the Receiving Party; (d) is lawfully disclosed to the Receiving
Party without restrictions, by a third party not under an obligation
of confidentiality; or (e) the Receiving Party is legally compelled to
disclose the information, in which case the Receiving Party shall
assert the privileged and confidential nature of the information and
cooperate fully with the Disclosing Party to protect against and
prevent disclosure of any Confidential Information and to limit the
scope of disclosure and the dissemination of disclosed Confidential
Information by all legally available means.

The obligations of the Receiving Party under this Section shall
continue during the Initial Term and for a period of five (5) years
after expiration or termination of this Agreement.  To the extent that
the terms of the Non-Disclosure Agreement between Nokia and Licensee
conflict with the terms of this Section 8, this Section 8 shall be
controlling over the terms of the Non-Disclosure Agreement.


9. GENERAL PROVISIONS

9.1.No Assignment

Licensee shall not be entitled to assign or transfer all or any of its
rights, benefits and obligations under this Agreement without the
prior written consent of Nokia, which shall not be unreasonably
withheld.

9.2.Termination

Nokia may terminate the Agreement at any time immediately upon written
notice by Nokia to Licensee if Licensee breaches this Agreement.

Upon termination of this Agreement, Licensee shall return to Nokia all
copies of Licensed Software that were supplied by Nokia. All other
copies of Licensed Software in the possession or control of Licensee
must be erased or destroyed.  An officer of Licensee must promptly
deliver to Nokia a written confirmation that this has occurred.

9.3.Surviving Sections

Any terms and conditions that by their nature or otherwise reasonably
should survive a cancellation or termination of this Agreement shall
also be deemed to survive.  Such terms and conditions include, but are
not limited to the following Sections: 2, 5, 6, 7, 8, 9.2, 9.3, 9.4,
9.5, 9.6, 9.7, and 9.8 of this Agreement.

9.4.Entire Agreement

This Agreement constitutes the complete agreement between the parties
and supersedes all prior or contemporaneous discussions,
representations, and proposals, written or oral, with respect to the
subject matters discussed herein, with the exception of the
non-disclosure agreement executed by the parties in connection with
this Agreement ("Non-Disclosure Agreement"), if any, shall be subject
to Section 8. No modification of this Agreement shall be effective
unless contained in a writing executed by an authorized representative
of each party. No term or condition contained in Licensee's purchase
order shall apply unless expressly accepted by Nokia in writing. If
any provision of the Agreement is found void or unenforceable, the
remainder shall remain valid and enforceable according to its
terms. If any remedy provided is determined to have failed for its
essential purpose, all limitations of liability and exclusions of
damages set forth in this Agreement shall remain in effect.

9.5.Export Control

Licensee acknowledges that the Licensed Software may be subject to
export control restrictions of various countries.  Licensee shall
fully comply with all applicable export license restrictions and
requirements as well as with all laws and regulations relating to the
importation of the Licensed Software and shall procure all necessary
governmental authorizations, including without limitation, all
necessary licenses, approvals, permissions or consents, where
necessary for the re-exportation of the Licensed Software.,

9.6.Governing Law and Legal Venue

This Agreement shall be construed and interpreted in accordance with
the laws of Finland, excluding its choice of law provisions. Any
disputes arising out of or relating to this Agreement shall be
resolved in arbitration under the Rules of Arbitration of the Chamber
of Commerce of Helsinki, Finland. The arbitration tribunal shall
consist of one (1), or if either Party so requires, of three (3),
arbitrators. The award shall be final and binding and enforceable in
any court of competent jurisdiction. The arbitration shall be held in
Helsinki, Finland and the process shall be conducted in the English
language.

9.7.No Implied License

There are no implied licenses or other implied rights granted under
this Agreement, and all rights, save for those expressly granted
hereunder, shall remain with Nokia and its licensors.  In addition, no
licenses or immunities are granted to the combination of the Licensed
Software with any other software or hardware not delivered by Nokia
under this Agreement.

9.8.Government End Users

A "U.S. Government End User" shall mean any agency or entity of the
government of the United States.  The following shall apply if
Licensee is a U.S. Government End User.  The Licensed Software is a
"commercial item," as that term is defined in 48 C.F.R. 2.101
(Oct. 1995), consisting of "commercial computer software" and
"commercial computer software documentation," as such terms are used
in 48 C.F.R. 12.212 (Sept. 1995).  Consistent with 48 C.F.R. 12.212
and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all
U.S. Government End Users acquire the Licensed Software with only
those rights set forth herein.  The Licensed Software (including
related documentation) is provided to U.S. Government End Users: (a)
only as a commercial end item; and (b) only pursuant to this
Agreement.
