QT AUTOMOTIVE SUITE LICENSE AGREEMENT
Agreement version 3.0

This Qt Automotive Suite License Agreement (“Agreement”) is a legal agreement
between The Qt Company (as defined below) and the Licensee (as defined below)
for the license of Licensed Software (as defined below). Capitalized terms used
herein are defined in Section 1.

WHEREAS:

(A) Licensee wishes to use the Licensed Software for the purpose of developing
and distributing Applications and/or Devices; and

(B) The Qt Company is willing to grant the Licensee a right to use Licensed
Software for such purpose pursuant to term and conditions of this Agreement.

NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS:

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.

"Applications" shall mean Licensee's software products created using the
Licensed Software in connection with the Program, which may include the
Redistributables, or part thereof.

"Contractor(s)" shall mean third party consultants, distributors and contractors
performing services to a Party under applicable contractual arrangement.

"Customer(s)" shall mean Licensee's end users to whom Licensee, directly or
indirectly, distributes copies of the Redistributables.

"Deployment Platforms" shall mean operating systems specified in the License
Certificate, in which the Redistributables can be distributed pursuant to the
terms and conditions of this Agreement.

"Designated User(s)" shall mean the employee(s) of Licensee or Licensee's
Affiliates acting within the scope of their employment or Licensee's
Contractors acting within the scope of their services for Licensee and on behalf
of Licensee. Designated Users shall be named in the License Certificate.

"Development License" shall mean the license needed by the Licensee for each
Designated User to use the Licensed Software under the license grant described
in Section 3.1 of this Agreement.

"Development Platforms" shall mean those operating systems specified in the
License Certificate, in which the Licensed Software can be used under the
Development License, but not distributed in any form or used for any other
purpose.

"Devices" shall mean hardware devices or products that 1) are manufactured
and/or distributed by the Licensee or its Affiliates or Contractors in
connection with the Program, and (2)(i) incorporate or integrate the
Redistributables or parts thereof; or (ii) do not incorporate or integrate
the Redistributables at the time of distribution, but where, when used by a
Customer, the main user interface or substantial functionality of such
device is provided by Application(s) or otherwise depends on the Licensed
Software.

"Distribution License(s)" shall mean the license required for distribution of
Redistributables in accordance with the license grant described in Section
3.2(ii)-(iii) of this Agreement.

"Distribution License Packs" shall mean set of prepaid Distribution Licenses
for distribution of Redistributables, as defined in The Qt Company's standard
price list, quote, Purchase Order confirmation or in an appendix hereto, as the
case may be.

"Initial Support Term" shall mean a time period of twelve (12) months,
calculated from the effective date of this Agreement.

"Intellectual Property Rights" shall mean patents (including utility models),
design patents, and designs (whether or not capable of registration), chip
topography rights and other like protection, copyrights, trademarks, service
marks, trade names, logos or other words or symbols and any other form of
statutory protection of any kind and applications for any of the foregoing
as well as any trade secrets.
"Licensee" shall mean the individual or legal entity that is party to this
Agreement, as identified on the signature page hereof.

"License Certificate" shall mean a certificate accompanying the Licensed
Software and generated for each Designated User respectively. License
Certificate will specify the Designated User, the Development Platforms,
Deployment Platforms, Program and the Term of this Agreement. The terms of the
License Certificate are considered part of this Agreement and shall be updated
from time to time to reflect any changes to the foregoing terms relating to
Licensee's rights to the Licensed Software.

"Licensee's Records" shall mean books and records that are likely to contain
information bearing on Licensee's compliance with this Agreement or the payments
due to The Qt Company under this Agreement, including, but not limited to:
assembly logs, sales records and distribution records.

"Licensee´s SDK Contractors" shall mean Contractors of Licensee, who have
purchased or received SDK from the Licensee relating to the Program.

"License Fee" shall mean the fee charged to the Licensee for rights granted
under the terms of this Agreement.

"Licensed Software" shall mean all versions of The Qt Company's computer
software products, online or electronic documentation, associated media and
printed materials, including the source code, example programs and the
documentation, licensed to the Licensee under this Agreement. Licensed Software
does not include Third Party Software (as defined in Section 4) or Open Source
Qt.

"Modified Software" shall mean bug-fixes, error corrections, patches or
modifications made to the Licensed Software by Licensee, including documentation
related thereto.

"Online Services" shall mean any services or access to systems made available
by The Qt Company to the Licensee over the Internet relating to the Licensed
Software or for the purpose of use by the Licensee of the Licensed Software or
Support. Use of any such Online Services is discretionary for the Licensee and
some of them may be subject to additional fees.

"Open Source Qt" shall mean all versions of The Qt Company's Qt computer
software products, online or electronic documentation, associated media and
printed materials, including the source code, example programs and the
documentation available under the terms of the GNU Lesser General Public
License, version 2.1 or later ("LGPL") or the GNU General Public License,
version 2.0 or later ("GPL").

"Party" or "Parties" shall mean Licensee and/or The Qt Company.

"Program" shall mean Licensee´s business program for which purpose the Licensee
is entitled to use the Licensed Software and grant the Licensee's SDK
Contractors a right to use the Licensed Software as part of a SDK.

"Redistributables" shall mean the portions of the Licensed Software set forth
in Appendix 1, Section 1 that may be distributed pursuant to the terms of this
Agreement in object code form only, including any relevant documentation. Where
relevant, any reference to Licensed Software in this Agreement shall include and
refer also to Redistributables.

"SDK" or "Software Development Kit" shall mean a combination of software modules
including Licensed Software intended to be utilized in connection with the
Program.

"Submitted Modified Software" shall have the meaning as set forth in Section
2.3.

"Support" shall mean standard developer support that is provided by
The Qt Company to assist Designated Users in using the Licensed Software in
accordance with The Qt Company's standard support terms.

"Support Renewal Term" shall mean a time period of twelve (12) months,
calculated from the end of the Initial Support Term or previous Support Renewal
Term, as applicable.

"Support Term" shall mean the Initial Support Term and any possible Support
Renewal Terms(s) during which time the Licensee is eligible to receive for
Support for the Licensed Software.

"Taxes" shall have the meaning set forth in Section 10.5.

"Term" shall mean the validity period of this Agreement, as set forth in the
License Certificate.

“The Qt Company” shall mean:

(i) in the event Licensee is an individual residing in the United States or a
legal entity incorporated in the United States or having its headquarters in the
United States, The Qt Company Inc., a Delaware corporation with its office at
2350 Mission College Blvd., Suite 1020, Santa Clara, CA 95054, USA.; or

(ii) in the event the Licensee is an individual residing outside of the United
States or a legal entity incorporated outside of the United States or having its
registered office outside of the United States, The Qt Company Ltd., a Finnish
company with its registered office at Bertel Jungin aukio D3A, 02600 Espoo,
Finland.

"Updates" shall mean a release or version of the Licensed Software containing
bug fixes, error corrections and other changes that are generally made available
to users of the Licensed Software that have contracted for Support. Updates are
generally depicted as a change to the digits following the decimal in the
Licensed Software version number. The Qt Company shall make Updates available to
the Licensee under the Support. Updates shall be considered as part of the
Licensed Software hereunder.

"Upgrades" shall mean a release or version of the Licensed Software containing
enhancements and new features and are generally depicted as a change to the
first digit of the Licensed Software version number. In the event Upgrades are
provided to the Licensee under this Agreement, they shall be considered as part
of the Licensed Software hereunder.

2. OWNERSHIP 2.1

Ownership of The Qt Company

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.

All The Qt Company's Intellectual Property Rights are and shall remain the
exclusive property of The Qt Company or its licensors respectively.

2.2 Ownership of Licensee

All the Licensee's Intellectual Property Rights are and shall remain the
exclusive property of the Licensee or its licensors respectively.

All Intellectual Property Rights to the Modified Software, Applications and
Devices shall remain with the Licensee and no rights thereto shall be granted by
the Licensee to The Qt Company under this Agreement (except as set forth in
Section 2.3 below).

2.3 Modified Software

Licensee may create Modified Software that breaks the source or binary
compatibility with the Licensed Software. This includes, but is not limited to,
changing the application programming interfaces ("API") by adding, changing or
deleting any variable, method, or class signature in the Licensed Software
and/or any inter-process protocols, services or standards in the Licensed
Software libraries. To the extent that Licensee breaks source or binary
compatibility with the Licensed Software, Licensee acknowledges that The Qt
Company's ability to provide Support may be prevented or limited and Licensee's
ability to make use of Updates may be restricted.

To the extent Licensee submits Modified Software to The Qt Company ("Submitted
Modified Software"), Licensee hereby grants The Qt Company a sublicensable,
assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and
fully paid-up license, under all of Licensee's Intellectual Property Rights, to
reproduce, adapt, translate, modify, and prepare derivative works of, publicly
display, publicly perform, sublicense, make available and distribute such
Submitted Modified Software as The Qt Company sees fit at its free and absolute
discretion. For the sake of clarity, the Licensee shall have no obligation to
provide Modified Software to The Qt Company.

3. LICENSES GRANTED

3.1 Development with Licensed Software

Subject to the terms of this Agreement, The Qt Company grants to Licensee a
personal, worldwide, non- exclusive, non-transferable license, valid for the
Term, to use, modify and copy the Licensed Software by Designated Users on the
Development Platforms for the sole purposes of designing, developing,
demonstrating and testing Application(s) and/or Devices, and to provide thereto
related support and other services to end-user Customers.

Licensee may install copies of the Licensed Software on an unlimited number of
computers provided that (i) only the Designated Users may use the Licensed
Software, and (ii) all Designated Users must have a valid Development License to
use Licensed Software.

Licensee may at any time designate another Designated User to replace a
then-current Designated User by notifying The Qt Company in writing, provided
that any Designated User may be replaced only once during any six-month period.

3.2 Distribution of Redistributables

Subject to the terms of this Agreement, The Qt Company grants to Licensee a
personal, worldwide, non- exclusive, non-transferable license, valid for the
Term, to (i) distribute, by itself or through its Contractors, Redistributables
as installed, incorporated or integrated into Applications for execution on the
Deployment Platforms, and (ii) distribute, by itself or through one or more
tiers of Contractors, Redistributables as installed, incorporated or integrated,
or intended to be installed, incorporated or integrated into Devices for
execution on the Deployment Platforms, and (iii) grant sublicenses to
Redistributables, as distributed hereunder, for Customers solely for Customer's
internal use and to the extent necessary in order for the Customers to use the
Applications and/or Devices for their respective intended purposes.

Right to distribute the Redistributables as provided herein is conditional upon
the Licensee having purchased and paid the appropriate amount of Development and
Distribution Licenses from The Qt Company before distributing any
Redistributables to Customers.

For the avoidance of any doubt it is specifically acknowledged and agreed that
distribution of Redistributables solely as installed, incorporated or integrated
into Applications for execution on the Deployment Platform(s), as specified in
(i) of the first paragraph of Section 3.2 above, i.e. with no connection to
Devices or intention to use in connection therewith, shall not require a
Distribution License.

3.3 SDK License

The Qt Company grants to Licensee a personal, worldwide, non-exclusive,
non-transferable license, valid for the Term, to (i) distribute Licensed
Software as a part of the SDK to Licensee´s SDK Contractors in connection with
the Program and (ii) in connection with the Program, by itself or by Licensee's
SDK Contractors, combine, incorporate or integrate Licensed Software with, or
use Licensed Software for creation of, any software created with or
incorporating Open Source Qt, provided, however, that:

(i) the Licensee´s SDK Contractors are only entitled to use the Licensed
Software as part of SDK and for the sole purpose of developing software for
Devices that are distributed under the Program; and

(ii) Licensee´s SDK Contractors shall not be entitled to distribute the SDK or
any part thereof to any third parties.

For the avoidance of any doubt, the distribution of such software development
tools that do not contain Licensed Software shall not be covered by this
Agreement.

3.4 Further Requirements

The licenses granted above in this Section 3 by The Qt Company to Licensee are
conditional and subject to Licensee's compliance with the following terms:

(i) Licensee shall not remove or alter any copyright, trademark or other
proprietary rights notice contained in any portion of the Licensed Software;

(ii) Applications and SDKs must add primary and substantial functionality to the
Licensed Software;

(iii) Applications may not pass on functionality which in any way makes it
possible for others to create software with the Licensed Software; provided
however that Licensee may use the Licensed Software's scripting and QML ("Qt
Quick") functionality solely in order to enable scripting, themes and styles
that augment the functionality and appearance of the Application(s) without
adding primary and substantial functionality to the Application(s);

(iv) Applications and SDKs must not compete with the Licensed Software;

(v) Licensee shall not use The Qt Company's or any of its suppliers' names,
logos, or trademarks to market Applications or SDKs, except that Licensee may
use "Built with Qt" logo to indicate that Application(s) was developed using
the Licensed Software;

(vi) Except as expressly provided in Section 3.3, Licensee shall not
distribute, sublicense or disclose source code of Licensed Software to any third
party (provided however that Licensee may appoint employee(s) of Contractors as
Designated Users to use Licensed Software pursuant to this Agreement);

(vii) Licensee shall not grant the Customers a right to (i) make copies of the
Redistributables except when and to the extent required to use the Applications
and/or Devices for their intended purpose, (ii) modify the Redistributables or
create derivative works thereof, (iii) decompile, disassemble or otherwise
reverse engineer Redistributables, or (iv) redistribute any copy or portion of
the Redistributables to any third party, except as part of the onward sale of
the Device on which the Redistributables are installed;

(viii) Except as expressly provided in Section 3.3, Licensee shall not and
shall cause that its Affiliates, Contractors and Licensee's SDK Contractors
shall not a) in any way, combine, incorporate or integrate Licensed Software
with, or use Licensed Software for creation of, any software created with or
incorporating Open Source Qt or b) incorporate or integrate Applications into a
hardware device or product other than a Device, unless Licensee has received an
advance written permission from The Qt Company to do so. Unless specifically
otherwise agreed, any and all distribution by the Licensee during the Term of
a hardware device or product a) which incorporate or integrate any part of
Licensed Software or Open Source Qt; or b) where the main user interface or
substantial functionality is provided by software build with Licensed
Software or Open Source Qt or otherwise depends on the Licensed Software or Open
Open Source Qt, shall be considered as distribution under this Agreement and
dependent on compliance thereof (including but not limited to obligation to
pay applicable License Fees for such distribution);

(ix) Licensee shall cause all of its Affiliates and Contractors entitled to make
use of the licenses granted under this Agreement, to be contractually bound to
comply with the relevant terms of this Agreement and not to use the Licensed
Software beyond the terms hereof and for any purposes other than operating
within the scope of their services for Licensee. Licensee shall be responsible
for any and all actions and omissions of its Affiliates and Contractors relating
to the Licensed Software and use thereof (including but not limited to payment
of all applicable License Fees);

(x) Except when and to the extent explicitly provided in this Section 3,
Licensee shall not transfer, publish, disclose, display or otherwise make
available the Licensed Software;

(xi) Licensee shall not take any action inconsistent with The Qt Company's
Intellectual Property Rights; and

(xii) Attempt or enlist a third party to conduct or attempt to conduct any of
the above.

Above terms shall not be applicable if and to the extent they conflict with any
mandatory provisions of any applicable laws.

Any use of Licensed Software beyond the provisions of this Agreement is strictly
prohibited and requires an additional license from The Qt Company.

4. 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 in the Licensed Software. Such
Third Party Software will be listed in the ".../src/3rdparty" source tree
delivered with the Licensed Software or documented in the Licensed Software, as
such may be amended from time to time. Licensee acknowledges that use or
distribution of Third Party Software is in all respects subject to applicable
license terms of applicable third party right holders. 5. PRE-RELEASE CODE

The Licensed Software may contain pre-release code and functionality marked or
otherwise stated as "Technology Preview", "Alpha", "Beta" or similar
designation. Such pre-release code may be present in order to provide
experimental support for new platforms or preliminary versions of one or more
new functionalities. The pre-release code may not be at the level of performance
and compatibility of a final, generally available, product offering of the
Licensed Software. The pre-release parts of the Licensed Software may not
operate correctly, may contain errors and may be substantially modified by The
Qt Company prior to the first commercial product release, if any. The Qt Company
is under no obligation to make pre-release code commercially available, or
provide any Support or Updates relating thereto. The Qt Company assumes no
liability whatsoever regarding any pre-release code, but any use thereof is
exclusively at Licensee's own risk and expense.

6. LIMITED WARRANTY AND WARRANTY DISCLAIMER

The Qt Company hereby represents and warrants that it has the power and
authority to grant the rights and licenses granted to Licensee under this
Agreement.

Except as set forth above, the Licensed Software is licensed to Licensee "as
is".

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF
ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL WARRANTIES,
EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT
WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT WARRANT THAT THE
LICENSED SOFTWARE WILL SATISFY LICENSEE'S REQUIREMENTS OR THAT IT WILL OPERATE
WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE UNINTERRUPTED. ALL
USE OF AND RELIANCE ON THE LICENSED SOFTWARE IS AT THE SOLE RISK OF AND
RESPONSIBILITY OF LICENSEE.

Licensee's exclusive remedy and The Qt Company's entire liability for Licensed
Software shall be limited, at The Qt Company's option, to correction of the
error, replacement of the Licensed Software or return of the applicable fees
paid for the defective Licensed Software for the time period during which the
License is not able to utilize the Licensed Software under the terms of this
Agreement.

7. INDEMNIFICATION AND LIMITATION OF LIABILITY

7.1 Limitation of Liability

EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, (II)
LICENSEE'S DUTY TO PAY ALL APPLICABLE LICENSE FEES AND COMPENSATIONS, AND (III)
BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO
EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT,
LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL,
CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND,
HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT.

EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, (II)
LICENSEE'S DUTY TO PAY ALL APPLICABLE LICENSE FEES AND COMPENSATIONS, AND (III)
BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO
EVENT SHALL EITHER PARTY'S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED
THE AGGREGATE LICENSE FEES RECEIVED BY THE QT COMPANY FROM LICENSEE DURING THE
PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENT RESULTING IN SUCH
LIABILITY.

THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE RISKS UNDER THIS AGREEMENT BETWEEN
THE QT COMPANY AND LICENSEE AND THE PARTIES HAVE RELIED UPON THE LIMITATIONS SET
FORTH HEREIN IN DETERMINING WHETHER TO ENTER INTO THIS AGREEMENT.

7.2 Licensee´s Indemnification

Licensee shall indemnify and hold harmless The Qt Company from and against any
claim, injury, judgment, settlement, loss or expense, including attorneys' fees
related to: (a) Licensee's misrepresentation in connection with The Qt Company
or the Licensed Software or breach of this Agreement, (b) the Application or
Device (except where such cause of liability is solely attributable to the
Licensed Software).

8. SUPPORT, UPDATES AND ONLINE SERVICES

Licensee will be eligible to receive Support and Updates and to use the Online
Services during the Support Term. Unless otherwise decided by The Company at its
free and absolute discretion, Upgrades will not be included in the Support but
may be available subject to additional fees.

Licenses granted under this Agreement shall include a prepaid Initial Support
Term.

Initial Support Term shall be automatically extended to one or more Support
Renewal Term(s), unless and until either Party notifies the other Party in
writing that it does not wish to continue the Support, such notification to be
provided to the other Party no less than ninety (90) days before expiry of the
Initial Support Term or respective Support Renewal Term. During any such Support
Renewal Term Support shall be available subject to prices and terms agreed
between the Parties or, if no advance agreement exists, subject to The Qt
Company's standard pricing applicable at the commencement date of any such
Support Renewal Term. From time to time The Qt Company may change Support
provided within each Support plan; provided that during the respective Initial
Support Term or Support Renewal Term (as the case may be), the level of Support
provided by The Qt Company may not be reduced without the consent of the
Licensee.

Unless otherwise agreed, The Qt Company shall not be responsible for providing
any service or support to the Customers.

9. CONFIDENTIALITY

Each Party acknowledges that during the Term of this Agreement each Party may
receive 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 ("Confidential Information"). Accordingly, when a
Party (the "Receiving Party") receives Confidential Information from the other
Party (the "Disclosing Party"), the Receiving Party shall only disclose such
information to employees and Contractors on a need to know basis, and shall
cause its employees and employees of its Affiliates to: (i) maintain any and all
Confidential Information in 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.

Obligation of confidentiality shall not apply to information that (i) is or
becomes generally known to the public through no act or omission of the
Receiving Party; (ii) was in the Receiving Party's lawful possession prior to
the disclosure hereunder and was not subject to limitations on disclosure or
use; (iii) is developed independently by employees or Contractors of the
Receiving Party or other persons working for the Receiving Party who have not
had access to the Confidential Information of the Disclosing Party, as proven by
the written records of the Receiving Party; (iv) is lawfully disclosed to the
Receiving Party without restrictions, by a third party not under an obligation
of confidentiality; or (v) the Receiving Party is legally compelled to disclose,
in which case the Receiving Party shall notify the Disclosing Party of such
compelled disclosure and assert the privileged and confidential nature of the
information and cooperate fully with the Disclosing Party to limit the scope of
disclosure and the dissemination of disclosed Confidential Information to the
minimum extent necessary.

The obligations under this Section 9 shall continue to remain in force for a
period of five (5) years after the last disclosure, and, with respect to trade
secrets, for so long as such trade secrets are protected under applicable trade
secret laws.

10. FEES, DELIVERY AND PAYMENT

10.1 License Fees

License Fees are described in The Qt Company's standard price list, quote or
Purchase Order confirmation or in an appendix hereto, as the case may be. The
License Fees shall not be refunded or claimed as a credit, even on the ground
that Distribution Licenses are not used, i.e. Redistributables are not actually
distributed corresponding to the Distribution Licenses purchased, or for any
other reason.

10.2 Ordering Licenses

Licensee may purchase Development Licenses and Distribution Licenses pursuant to
agreed pricing terms or, if no specific pricing terms have been agreed upon, at
The Qt Company's standard pricing terms applicable at the time of purchase.

Licensee shall submit all purchase orders for Development Licenses and
Distribution Licenses to The Qt Company by email or any other method acceptable
to The Qt Company (each such order is referred to herein as a "Purchase Order")
for confirmation, whereupon the Purchase Order shall become binding between the
Parties.

10.3 Distribution

License Packs Unless otherwise agreed, the Distribution Licenses are bought by
way of Distribution License Packs.

Upon due payment of the ordered Distribution License Pack(s), the Licensee will
have an account of Distribution Licenses available for installing, bundling or
integrating (all jointly "installing") the Redistributables with the Devices or
for otherwise distributing the Redistributables in accordance with this
Agreement.

Each time Licensee "installs" or distributes a copy of Redistributables, then
one Distribution License is used, and Licensee's account of available
Distribution Licenses is decreased accordingly.

Licensee may "install" copies of the Redistributables so long as Licensee has
Distribution Licenses remaining on its account.

Redistributables will be deemed to have been "installed" into a Device when one
of the following circumstances shall have occurred: a) the Redistributables
have been loaded onto the Device and used outside of the Licensee's premises or
b) the Device has been fully tested and placed into Licensee's inventory (or
sold) for the first time (i.e., Licensee will not be required to use (or pay
for) more than one Distribution License for each individual Device, e.g. in a
situation where a Device is returned to Licensee's inventory after delivery to
a distributor or sale to a Customer). In addition, if Licensee includes a
back-up copy of the Redistributables on a CD-ROM or other storage medium
along with the product, that backup copy of the Redistributables will not
be deemed to have been "installed" and will not require an additional
Distribution License.

10.4 Payment Terms
License Fees and any other charges under this Agreement shall be paid by
Licensee no later than thirty (30) days from the date of the applicable invoice
from The Qt Company.

The Qt Company will submit an invoice to Licensee after the date of this
Agreement and/or after The Qt Company receives a Purchase Order from Licensee.
A late payment charge of the lower of (a) one percent per month; or (b) the
interest rate stipulated by applicable law, shall be charged on any unpaid
balances that remain past due.

The Qt Company shall have the right to suspend, terminate or withhold grants of
all rights to the Licensed Software hereunder, including but not limited to the
Developer License, Distribution License, and Support, should Licensee fail to
make payment in a timely fashion.

10.5 Taxes
All License Fees and other charges payable hereunder are gross amounts but
exclusive of any value added tax, use tax, sales tax and other taxes, duties or
tariffs ("Taxes"). Such applicable Taxes shall be paid by Licensee, or, where
applicable, in lieu of payment of such Taxes, Licensee shall provide an
exemption certificate to The Qt Company and any applicable authority.

11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS

11.1 Licensee's Record-keeping

Licensee shall at all times maintain accurate and up-to-date written records of
Licensee's activities related to the use of Licensed Software and distribution
of Redistributables. The records shall be adequate to determine Licensee's
compliance with the provisions of this Agreement and to demonstrate the number
of Designated Users and Redistributables distributed by Licensee. The records
shall conform to good accounting practices reasonably acceptable to The Qt
Company.

Licensee shall, within thirty (30) days from the end of each calendar
quarter, deliver to The Qt Company a report detailing the number of Designated
Users and copies of Redistributables distributed by Licensee during that
calendar quarter, and also detailing the number of undistributed copies of
Redistributables made by Licensee and remaining in its account (i.e.,
undistributed copies for which Distribution Licenses have been or need to be
obtained from The Qt Company). Such report shall contain such other information
as The Qt Company shall reasonably require from time to time.

11.2. The Qt Company's Audit Rights

The Qt Company or an independent auditor acting on behalf of The Qt Company's,
may, upon at least five (5) business days' prior written notice and at its
expense, audit Licensee with respect to the use of the Redistributables, but
not more frequently than once during each 6-month period. Such audit may be
conducted by mail, electronic means or through an in-person visit to
Licensee's place of business. Any such in-person audit shall be conducted
during regular business hours at Licensee's facilities and shall not
unreasonably interfere with Licensee's business activities. The Qt Company or
the independent auditor acting on behalf of The Qt Company shall be entitled to
inspect Licensee's Records. All such Licensee's Records and use thereof shall be
subject to an obligation of confidentiality under this Agreement.

If an audit reveals that Licensee is using the Licensed Software beyond scope of
the licenses Licensee has paid for, Licensee agrees to immediately pay The Qt
Company any amounts owed for such unauthorized use.

In addition, in the event the audit reveals a material violation of the terms of
this Agreement (underpayment of more than 5% of License Fees shall always be
deemed a material violation for purposes of this section), then the Licensee
shall pay The Qt Company's reasonable cost of conducting such audit.

12 TERM AND TERMINATION

12.1 Term

This Agreement shall enter into force upon due acceptance by both Parties and
remain in force for the Term, unless and until terminated pursuant to the terms
of this Section 12.

12.2 Termination by The Qt Company

The Qt Company shall have the right to terminate this Agreement upon thirty
(30) days prior written notice if (i) the Licensee is in material breach of any
obligation of this Agreement and fails to remedy such breach within such notice
period; (ii) or Licensee or any of its Affiliates bring a suit before any court
or administrative agency or otherwise assert a claim against The Qt Company's
or any of its Affiliates' Intellectual Property Rights or validity thereof.

12.3 Mutual Right to Terminate

Either Party shall have the right to terminate this Agreement immediately upon
written notice in the event that the other Party becomes insolvent, files for
any form of bankruptcy, makes any assignment for the benefit of creditors, has a
receiver, administrative receiver or officer appointed over the whole or a
substantial part of its assets, ceases to conduct business, or an act equivalent
to any of the above occurs under the laws of the jurisdiction of the other
Party.

12.4 Parties´ Rights and Duties upon Termination

Upon expiry or termination of the Agreement for any reason, Licensee shall,
within 30 days after such termination, cease and shall cause all Designated
Users (including those of its Affiliates' and Contractors') and Licensee's SDK
Contractors to cease using the Licensed Software and distribution of the
Redistributables under this Agreement. Notwithstanding the above, in the event
the Agreement expires or is terminated for reason other than by The Qt Company
pursuant to Section 12.2, the Licensee is entitled, for a period of six (6)
months after the effective date of termination, to continue distribution of
Devices under the Distribution Licenses paid but unused at such effective date
of termination.

Upon any such termination the Licensee shall destroy or return to The Qt
Company all copies of the Licensed Software and all related materials and will
certify the same to The Qt Company upon its request, provided however that
Licensee may retain and exploit such copies of the Licensed Software as it may
reasonably require in providing continued support to Customers.

Expiry or termination of this Agreement for any reason whatsoever shall not
relieve Licensee of its obligation to pay any License Fees accrued or payable
to The Qt Company prior to the effective date of termination, and Licensee shall
immediately pay to The Qt Company all such fees upon the effective date of
termination. Termination of this Agreement shall not affect any rights of
Customers to continue use of Applications and Devices (and therein incorporated
Redistributables).

13.GOVERNING LAW AND LEGAL VENUE

In the event this Agreement is in the name of The Qt Company Inc., a Delaware
Corporation, then:

(i) this Agreement shall be construed and interpreted in accordance with the
laws of the State of California, USA, excluding its choice of law provisions;

(ii) the United Nations Convention on Contracts for the International Sale of
Goods will not apply to this Agreement; and

(iii) any dispute, claim or controversy arising out of or relating to this
Agreement or the breach, termination, enforcement, interpretation or validity
thereof, including the determination of the scope or applicability of this
Agreement to arbitrate, shall be determined by arbitration in San Francisco,
USA, before one arbitrator. The arbitration shall be administered by JAMS
pursuant to JAMS' Streamlined Arbitration Rules and Procedures. Judgment on the
Award may be entered in any court having jurisdiction. This Section shall not
preclude parties from seeking provisional remedies in aid of arbitration from a
court of appropriate jurisdiction.

In the event this Agreement is in the name of The Qt Company Ltd., a Finnish
Company, then:

(i) this Agreement shall be construed and interpreted in accordance with the
laws of Finland, excluding its choice of law provisions;

(ii) the United Nations Convention on Contracts for the International Sale of
Goods will not apply to this Agreement; and

(iii) any disputes, controversy or claim arising out of or relating to this
Agreement, or the breach, termination or validity thereof shall be shall be
finally settled by arbitration in accordance with the Arbitration Rules of
Finland Chamber of Commerce. 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. This Section shall not preclude parties from
seeking provisional remedies in aid of arbitration from a court of appropriate
jurisdiction.

14. GENERAL PROVISIONS

14.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 The Qt
Company, which shall not be unreasonably withheld or delayed. The Qt Company
shall be entitled to freely assign or transfer any of its rights, benefits or
obligations under this Agreement.

14.2 No Third Party Representations

Licensee shall make no representations or warranties concerning the Licensed
Software on behalf of The Qt Company. Any representation or warranty Licensee
makes or purports to make on The Qt Company's behalf shall be void as to The Qt
Company.

14.3 Surviving Sections

Any terms and conditions that by their nature or otherwise reasonably should
survive termination of this Agreement shall so be deemed to survive.

14.4 Entire Agreement

This Agreement, the exhibits hereto, the License Certificate and any applicable
Purchase Order constitute 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. In the event of any conflict or inconsistency between this Agreement and
any Purchase Order, the terms of this Agreement will prevail over the terms of
the Purchase Order with respect to such conflict or inconsistency.

14.5 Modifications

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 The Qt Company in writing.

14.6 Force Majeure

Except for the payment obligations hereunder, neither Party shall be liable to
the other for any delay or non-performance of its obligations hereunder in the
event and to the extent that such delay or non- performance is due to an event
of act of God, terrorist attack or other similar unforeseeable catastrophic
event that prevents either Party for fulfilling its obligations under this
Agreement and which such Party cannot avoid or circumvent ("Force Majeure
Event"). If the Force Majeure Event results in a delay or non- performance of a
Party for a period of three (3) months or longer, then either Party shall have
the right to terminate this Agreement with immediate effect without any
liability (except for the obligations of payment arising prior to the event of
Force Majeure) towards the other Party.

14.7 Notices

Any notice given by one Party to the other shall be deemed properly given and
deemed received if specifically acknowledged by the receiving Party in writing
or when successfully delivered to the recipient by hand, fax, or special courier
during normal business hours on a business day to the addresses specified for
The Qt Company in the beginning of this Agreement, and for the Licensee in the
Licensee’s account profile. Each communication and document made or delivered by
one Party to the other Party pursuant to this Agreement shall be in the English
language.

14.8 Export Control
Licensee acknowledges that the Redistributables may be subject to export
control restrictions under the applicable laws of respective countries.
Licensee shall fully comply with all applicable export license restrictions
and requirements as well as with all lawses hereunder 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 Redistributables, Applications
and/or Devices.

14.9 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 The Qt Company 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 The Qt Company under this Agreement.

14.10 Attorney Fees

The prevailing Party in any action to enforce this Agreement shall be entitled
to recover its attorney's fees and costs in connection with such action.

14.11 Severability

If any provision of this Agreement shall be adjudged by any court of competent
jurisdiction to be unenforceable or invalid, that provision shall be limited or
eliminated to the minimum extent necessary so that this Agreement shall
otherwise remain in full force and effect and enforceable.

IN WITNESS WHEREOF, the Parties hereto, intending to be legally bound hereby,
have caused this Agreement to be executed by Licensee’s authorized
representative installing the Licensed Software and accepting the terms hereof
in connection therewith.

Appendix 1

1. Parts of the Licensed Software that are permitted for distribution in object
code form only ("Redistributables") under this Agreement:

- The Licensed Software's essential and add-on libraries

- The Licensed Software's configuration tool ("qtconfig")

- The Licensed Software's help tool ("Qt Assistant")

- The Licensed Software's internationalization tools ("Qt Linguist", "lupdate",
"lrelease")

- The Licensed Software's QML ("Qt Quick") launcher tool ("qmlscene" and
"qmlviewer")

- The Licensed Software's installer framework

2. Parts of the Licensed Software that are not permitted for distribution
include, but are not limited to:

- The Licensed Software's source code and header files

- The Licensed Software's documentation

- The Licensed Software's documentation generation tool ("qdoc")

- The Licensed Software's tool for writing makefiles ("qmake")

- The Licensed Software's Meta Object Compiler ("moc")

- The Licensed Software's User Interface Compiler ("uic" or in the case of Qt Jambi: "juic")

- The Licensed Software's Resource Compiler ("rcc")

- The Licensed Software's generator (only in the case of Qt Jambi if applicable)

- The Licensed Software's parts of the IDE tool ("Qt Creator")

- The Licensed Software's Emulator

- Build scripts, recipes and other material for creating the
configuration of Licensed Software and/or 3rd party components, including the
reference operating system configuration delivered in conjunction with the
