PLEASE READ THIS LICENSE AGREEMENT ("AGREEMENT") CAREFULLY.  THIS AGREEMENT IS
A BINDING LEGAL AGREEMENT ENTERED INTO BY AND BETWEEN YOU (OR IF YOU ARE
ENTERING INTO THIS AGREEMENT ON BEHALF OF AN ENTITY, THEN THE ENTITY THAT YOU
REPRESENT) AND QUALCOMM TECHNOLOGIES, INC. ("QTI" "WE" "OUR" OR "US").  THIS IS
THE AGREEMENT THAT APPLIES TO YOUR USE OF THE DESIGNATED AND/OR LINKED
APPLICATIONS, THE ENCLOSED QUALCOMM TECHNOLOGIES' MATERIALS, INCLUDING RELATED
DOCUMENTATION AND ANY UPDATES OR IMPROVEMENTS THEREOF
(COLLECTIVELY, "MATERIALS").  BY USING OR COMPLETING THE INSTALLATION OF THE
MATERIALS, YOU ARE ACCEPTING THIS AGREEMENT AND YOU AGREE TO BE BOUND BY ITS
TERMS AND CONDITIONS.  IF YOU DO NOT AGREE TO THESE TERMS, QTI IS UNWILLING TO
AND DOES NOT LICENSE THE MATERIALS TO YOU. IF YOU DO NOT AGREE TO THESE TERMS
YOU MUST DISCONTINUE THE INSTALLATION PROCESS AND YOU MAY NOT USE THE MATERIALS
OR RETAIN ANY COPIES OF THE MATERIALS. ANY USE OR POSSESSION OF THE MATERIALS
BY YOU IS SUBJECT TO THE TERMS AND CONDITIONS SET FORTH IN THIS AGREEMENT.

1. RIGHT TO USE DELIVERABLES; RESTRICTIONS.

  1.1 License.  Subject to the terms and conditions of this Agreement,
  including, without limitation, the restrictions, conditions, limitations and
  exclusions set forth in this Agreement, QTI hereby grants to you a
  nonexclusive, limited license under QTI's copyrights to:
(i)  install and use the Materials; and 
(ii) to reproduce and redistribute the binary code portions of the Materials (the "Redistributable Binary Code").
     You may make and use a   reasonable number of copies of any documentation.

  1.2 Redistribution Restrictions.  Distribution of the Redistributable Binary
  Code is subject to the following restrictions: 
(i) Redistributable Binary Code may only be distributed in binary format and may not be distributed in source code format; 
(ii) the Redistributable Binary Code may only operate in conjunction with platforms incorporating Qualcomm Technologies, Inc. chipsets;
(iii) redistribution of the Redistributable Binary Code must include the .txt file setting forth the terms and condition of this Agreement; 
(iv) you may not use Qualcomm Technologies' or its affiliates or subsidiaries name, logo or trademarks; and 
(v) copyright, trademark, patent and any other notices that appear on the Materials may not be removed or obscured.

  1.3 Additional Restrictions.  Except as expressly permitted by this Agreement,
  you shall have no right to sublicense, transfer or otherwise disclose the
  Materials to any third party.  You shall not reverse engineer, reverse
  assemble, reverse translate, decompile or reduce to source code form any
  portion of the Materials provided in object code form or executable form.
  Except for the purposes expressly permitted in this Agreement, You shall not
  use the Materials for any other purpose.  QTI (or its licensors) shall retain
  title and all ownership rights in and to the Materials and any alterations,
  modifications (including all derivative works), translations or adaptations
  made of the Materials, and all copies thereof, and nothing herein shall be
  deemed to grant any right to You under any of QTI's or its affiliates'
  patents.  You shall not subject the Materials to any third party license
  terms (e.g., open source license terms).  You shall not use the Materials for
  the purpose of identifying or providing evidence to support any potential
  patent infringement claim against QTI, its affiliates, or any of QTI's or
  QTI's affiliates' suppliers and/or direct or indirect customers.  QTI hereby
  reserves all rights not expressly granted herein.

  1.4 Third Party Software and Materials.  The Software may contain or link to
  certain software and/or materials that are written or owned by third parties.
  Such third party code and materials may be licensed under separate or
  different terms and conditions and are not licensed to you under the terms of
  this Agreement.  You agree to comply with all terms and conditions imposed on
  you in the applicable third party licenses.  Such terms and conditions may
  impose certain obligations on you as a condition to the permitted use of such
  third party code and materials.  QTI does not represent or warrant that such
  third party licensors have or will continue to license or make available their
  code and materials to you.

  1.5 Feedback.  QTI may from time to time receive suggestions, feedback or
  other information from You regarding the Materials.  Any suggestions, feedback
  or other disclosures received from You are and shall be entirely voluntary on
  the part of You.  Notwithstanding any other term in this Agreement, QTI shall
  be free to use suggestions, feedback or other information received from You,
  without obligation of any kind to You.  The Parties agree that all inventions,
  product improvements, and modifications conceived of or made by QTI that are
  based, either in whole or in part, on ideas, feedback, suggestions, or
  recommended improvements received from You are the exclusive property of QTI,
  and all right, title and interest in and to any such inventions, product
  improvements, and modifications will vest solely in QTI.

  1.6 No Technical Support.  QTI is under no obligation to provide any form of
  technical support for the Materials, and if QTI, in its sole discretion,
  chooses to provide any form of support or information relating to the
  Materials, such support and information shall be deemed confidential and
  proprietary to QTI.

2. WARRANTY DISCLAIMER.  YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT THE USE OF
THE MATERIALS IS AT YOUR SOLE RISK.  THE MATERIALS AND TECHNICAL SUPPORT, IF
ANY, ARE PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR
IMPLIED.  QTI ITS LICENSORS AND AFFILIATES MAKE NO WARRANTIES, EXPRESS OR
IMPLIED, WITH RESPECT TO THE MATERIALS OR ANY OTHER INFORMATION OR DOCUMENTATION
PROVIDED UNDER THIS AGREEMENT, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR AGAINST INFRINGEMENT, OR
ANY EXPRESS OR IMPLIED WARRANTY ARISING OUT OF TRADE USAGE OR OUT OF A COURSE
OF DEALING OR COURSE OF PERFORMANCE.  NOTHING CONTAINED IN THIS AGREEMENT SHALL
BE CONSTRUED AS (I) A WARRANTY OR REPRESENTATION BY QTI, ITS LICENSORS OR
AFFILIATES AS TO THE VALIDITY OR SCOPE OF ANY PATENT, COPYRIGHT OR OTHER
INTELLECTUAL PROPERTY RIGHT OR (II) A WARRANTY OR REPRESENTATION BY QTI THAT
ANY MANUFACTURE OR USE WILL BE FREE FROM INFRINGEMENT OF PATENTS, COPYRIGHTS OR
OTHER INTELLECTUAL PROPERTY RIGHTS OF OTHERS, AND IT SHALL BE THE SOLE
RESPONSIBILITY OF YOU TO MAKE SUCH DETERMINATION AS IS NECESSARY WITH RESPECT
TO THE ACQUISITION OF LICENSES UNDER PATENTS AND OTHER INTELLECTUAL PROPERTY OF
THIRD PARTIES.

3. NO OTHER LICENSES OR INTELLECTUAL PROPERTY RIGHTS. Neither this Agreement,
nor any act by QTI or any of its affiliates pursuant to this Agreement or
relating to the Materials (including, without limitation, the provision by QTI
or its affiliates of the Materials), shall provide to You any license or any
other rights whatsoever under any patents, trademarks, trade secrets, copyrights
or any other intellectual property of QTI or any of its affiliates, except for
the copyright rights expressly licensed under this Agreement. You understand and agree that:

(i) Neither this Agreement, nor delivery of the Materials, grants any right
    to practice, or any other right at all with respect to, any patent of QTI
    or any of its affiliates; and
(ii) A separate license agreement from QUALCOMM Incorporated is needed to use
     or practice any patent of QUALCOMM Incorporated. You agree not to contend
     in any context that, as a result of the provision or use of the Materials,
     either QTI or any of its affiliates has any obligation to extend, or You or
     any other party has obtained any right to, any license, whether express or
     implied, with respect to any patent of QTI or any of its affiliates for any purpose.

4. TERMINATION.  This Agreement shall be effective upon acceptance, or access
or use of the Materials (whichever occurs first) by You and shall continue until
terminated. You may terminate the Agreement at any time by deleting and
destroying all copies of the Materials and all related information in Your
possession or control. This Agreement terminates immediately and automatically,
with or without notice, if You fail to comply with any provision hereof.
Upon termination You must, to the extent possible, delete or destroy all copies
of the Materials in Your possession and the license granted to You in this Agreement
shall terminate. Sections 1.2 through 10 shall survive the termination of this Agreement.
In the event that any restrictions, conditions, limitations are found to be either
invalid or unenforceable, the rights granted to You in Section 1 (License) shall be null,
void and ineffective from the Effective Date, and QTI shall also have the right to
terminate this Agreement immediately, and with retroactive effect to the effective date.

5. LIMITATION OF LIABILITY.  IN NO EVENT SHALL QTI, QTI's AFFILIATES OR ITS
LICENSORS BE LIABLE TO YOU FOR ANY INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES,
INCLUDING BUT NOT LIMITED TO ANY LOST PROFITS, LOST SAVINGS, OR OTHER INCIDENTAL
DAMAGES, ARISING OUT OF THE USE OR INABILITY TO USE, OR THE DELIVERY OR FAILURE
TO DELIVER, ANY OF THE DELIVERABLES, OR ANY BREACH OF ANY OBLIGATION UNDER THIS
AGREEMENT, EVEN IF QTI HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
THE FOREGOING LIMITATION OF LIABILITY SHALL REMAIN IN FULL FORCE AND EFFECT
REGARDLESS OF WHETHER YOUR REMEDIES HEREUNDER ARE DETERMINED TO HAVE FAILED OF
THEIR ESSENTIAL PURPOSE.  THE ENTIRE LIABILITY OF QTI, QTI's AFFILIATES AND ITS
LICENSORS, AND THE SOLE AND EXCLUSIVE REMEDY OF YOU, FOR ANY CLAIM OR CAUSE OF
ACTION ARISING HEREUNDER (WHETHER IN CONTRACT, TORT, OR OTHERWISE) SHALL NOT
EXCEED US$50.

6. INDEMNIFICATION.  You agree to indemnify and hold harmless QTI and its
officers, directors, employees and successors and assigns against any and all
third party claims, demands, causes of action, losses, liabilities, damages,
costs and expenses, incurred by QTI (including but not limited to costs of
defense, investigation and reasonable attorney's fees) arising out of, resulting
from or related to: 
(i) any breach of this Agreement by You; and y
(ii) our acts, omissions, products and services.  If requested by QTI, You agree
 to defend QTI in connection with any third party claims, demands, or causes of
 action resulting from, arising out of or in connection with any of the foregoing.

7. ASSIGNMENT.  You shall not assign this Agreement or any right or interest
under this Agreement, nor delegate any obligation to be performed under this
Agreement, without QTI's prior written consent.  For purposes of this Section 7,
an "assignment" by You under this Section shall be deemed to include, without
limitation, any merger, consolidation, sale of all or substantially all of its
assets, or any substantial change in the management or control of You.
Any attempted assignment in contravention of this Section 9 shall be void.
QTI may freely assign this Agreement or delegate any or all of its rights and
obligations hereunder to any third party.

8. COMPLIANCE WITH LAWS; APPLICABLE LAW.  You agree to comply with all
applicable local, international and national laws and regulations and with U.S.
Export Administration Regulations, as they apply to the subject matter of this
Agreement.  This Agreement is governed by the laws of the State of California,
excluding California's choice of law rules.

9. CONTRACTING PARTIES.  If the Materials are downloaded on any computer owned
by a corporation or other legal entity, then this Agreement is formed by and
between QTI and such entity.  The individual accepting the terms of this
Agreement represents and warrants to QTI that they have the authority to bind
such entity to the terms and conditions of this Agreement.

10. MISCELLANEOUS PROVISIONS.  This Agreement, together with all exhibits
attached hereto, which are incorporated herein by this reference, constitutes
the entire agreement between QTI and You and supersedes all prior negotiations,
representations and agreements between the parties with respect to the subject
matter hereof.  No addition or modification of this Agreement shall be effective
unless made in writing and signed by the respective representatives of QTI and
You.  The restrictions, limitations, exclusions and conditions set forth in this
Agreement shall apply even if QTI or any of its affiliates becomes aware of or
fails to act in a manner to address any violation or failure to comply
therewith.  You hereby acknowledge and agree that the restrictions, limitations,
conditions and exclusions imposed in this Agreement on the rights granted in
this Agreement are not a derogation of the benefits of such rights.  You further
acknowledges that, in the absence of such restrictions, limitations, conditions
and exclusions, QTI would not have entered into this Agreement with You.  Each
party shall be responsible for and shall bear its own expenses in connection
with this Agreement.  If any of the provisions of this Agreement are determined
to be invalid, illegal, or otherwise unenforceable, the remaining provisions
shall remain in full force and effect.  This Agreement is entered into solely
in the English language, and if for any reason any other language version is
prepared by any party, it shall be solely for convenience and the English
version shall govern and control all aspects.  If You are located in the
province of Quebec, Canada, the following applies: The Parties hereby confirm
they have requested this Agreement and all related documents be prepared
in English.
