END USER LICENSE FOR MediaTek MT8167 SoC System Binary

Copyright (c) 2020, MEDIATEK INC. All rights reserved.

By accessing or using any part of the MediaTek MT8167 SoC System Binary
(“Binary”), you as the end-user licensee of the Binary (“you”) accept and agree
to be bound by the terms and conditions of this License, which then commences
with effect as a legal agreement between you and MediaTek Inc. (“MediaTek”). If
you do not agree to the terms and conditions of this License, you must not
access or use the Binary.

1. GRANT OF LICENSE
MediaTek hereby grants you a limited, non-exclusive,
non-transferable, world-wide, terminable license, under MediaTek’s copyrights
and trade secrets in and to the Binary, to use only in binary code form and only
as incorporated in or used with Licensed Product for which corresponding fees
have been paid. “Licensed Product” means Coral Dev Board Mini, a Google’s
single-board computer (and its successor product(s)) related to machine learning
inferencing in a small form factor, which contains, among others, MediaTek’s
chipset MT8167.

2. RESTRICTION OF LICENSE
2.1 You shall not use all or any part of the Binary for any purpose other than
the purposes expressly provided for hereunder.
2.2 You shall have no other right or license to the Binary, implicit or
explicit, unless expressly set forth in the scope of the license and purpose
stated herein.
2.3 Unless explicitly permitted herein or in writing by MediaTek in advance, you
shall not (and shall not allow any third party to):
  (a) decompile, disassemble, reverse engineer or attempt to reconstruct,
identify or discover any source code, underlying ideas, underlying algorithms of
the Binary by any means whatsoever, or disclose any of the foregoing, except to
the extent such restriction is expressly prohibited by applicable laws and not
waivable thereunder.
  (b) sell, rent, market, assign, license, sub-license, transfer, transmit,
convey, pledge, or charge any right or interest in the Binary, to any third
party.

3. OWNERSHIP TO BINARY
You acknowledge and agree that any and all intellectual property rights in and
to the Binary shall remain the exclusive property of MediaTek or, for third
party software contained in the Binary, such third party.

4. WARRANTY AND DISCLAIMER
4.1 If the Binary includes any Open Source Software (as defined below), you must
comply with all licensing terms applicable to such Open Source Software. “Open
Source Software” means any software or software component, module or package
that contains, or is derived in any manner (in whole or in part) from, any that
is distributed as free software, open source software or similar licensing or
distribution models.
4.2 To the extent permitted by law, you will indemnify, defend and hold harmless
Mediatek, its affiliates, directors, officers, employees, customers,
distributor, agents and/or contractors (each an "Indemnified Party") from any
and all claims, losses, liabilities, damages, expenses and costs (including
without limitation reasonable attorneys’ fees) incurred by such Indemnified
Party as a result of your breach of this License and/or your non-compliance with
all applicable laws and regulations.
4.3 You acknowledge and agree that, to the extent permitted by law, the Binary
is provided to you on an “AS IS” basis only. MediaTek expressly disclaims any
and all warranties, whether express, implied, statutory or otherwise, including
but not limited to the implied warranties of merchantability, fitness for a
particular purpose, or non-infringement. MediaTek does not provide any warranty
whatsoever with respect to the Binary of any third parties which may be used by,
incorporated in, or supplied with the Binary. MediaTek specifically disclaims
any warranty that the operation of the Binary will be uninterrupted or error
free.

5. LIMITATION OF LIABILITY
To the extent not prohibited by applicable law, in no event shall MediaTek be
liable for any direct, special, incidental, consequential, indirect, or punitive
damages, including loss of profit or revenues, arising out of or in connection
with this License. The limitations shall apply even if you have been advised of
the possibility of such damages and notwithstanding any failure of essential
purpose of any limited remedy.

6. EXPORT COMPLIANCE
The Binary, documentation, technology, and/or chipsets (“Received Item”)
provided under this License may be subject to import, export, re-export and/or
transfer restrictions under the U.S. laws and regulations and/or any applicable
laws and regulations of other jurisdictions (collectively "Export Laws"), as
applicable. You agree to fully comply with Export Laws, and to assure that the
Received Item will not be (1) exported, re-exported, or transferred, directly or
indirectly, in violation of Export Laws, to any person who has been prohibited
or restricted from participating in the U.S. export transactions by any federal
agency of the U.S. government; or (2) intended to be used for any purpose
prohibited by Export Laws, including, without limitation, nuclear, chemical, or
biological weapons proliferation and military. You further acknowledge and agree
that you will cooperate with MediaTek and provide necessary assistance to prove
your compliance with this section.

7. CONFIDENTIALITY
You acknowledge and agree that Confidential Information means all information
including but not limited to the Binary as made available or disclosed by
MediaTek or other channels under this License. You shall maintain in confidence
the Confidential Information and apply security measures no less stringent than
the measures that you apply to your own like information, but not less than a
reasonable degree of care, to prevent unauthorized disclosure and use of the
Confidential Information.

8. GOVERNING LAW
This License and all acts pursuant hereto and the rights and obligations of the
parties hereto shall be governed, construed and interpreted in accordance with
the laws of Singapore, without giving effect to principles of conflicts of law.
