                      SOFTWARE LICENSE AGREEMENT


       This Software License Agreement (the "Agreement") is entered into as of August 10, 2017 (the
"Effective Date"), by and between AMLOGIC (CA) CO., INC., with principal office at 2518 Mission
College Blvd., Suite 120, Santa Clara, CA 95054, USA ("Amlogic"), with a place of business at 1600
Amphitheatre Parkway, Mountain View, California 94043, USA ("Licensee"). The parties agree as
follows:

 1.    DEFINITIONS

             1.1  “Authorized Location” means the location set forth in a Software Description Form
attached as an Exhibit to this Agreement and made part hereof by reference, or if none is listed,
then the address for Licensee set forth above.

             1.2  “Authorized Licensee Product” means the specific product listed in a Software
Description Form attached as an Exhibit to this Agreement and made part hereof by reference,
or if none is listed, then any system level product sold by Licensee that incorporates the Amlogic
Product and the Software or Derivative Work and includes other hardware and software provided
by Licensee.

             1.3  “Amlogic Product” means any of the proprietary integrated circuit product(s) sold
by Amlogic with which the Software was designed to be used.

             1.4  “Derivative Work” means any discrete modification to the Software made by Licensee
pursuant to this Agreement and any modified, altered, enhanced or adapted version of the Software,
or derivative work thereof (as that term is defined under applicable intellectual property law) based
on the Software.

             1.5  “End User Agreement” means a written, legally enforceable agreement that (i) stipulates
that the Software is licensed, not sold, and that title to and ownership of the Software and any portion 
hereof remain with Amlogic or its licensors; (ii) disclaims all express and implied warranties on behalf
of Amlogic, and exclude liability of Amlogic and its licensors for any special, indirect, exemplary, incidental
or consequential damages; and (iii) prohibits end user from (a) copying the Software, except as reasonably
necessary for internal back-up purposes, (b) using and/or transferring the Software to any third party apart
from an Authorized Licensee Product, (c) modifying the Software, (d) attempting to reverse engineer,
decompile or disassemble any portion of the Software, or (e) exporting the Software or any underlying
technology in contravention of any applicable US, PRC or foreign export laws and regulations.

             1.6  “Object Code” means those portions of the Software, if any, furnished to Licensee, in computer
instruction code or machine-readable form generally produced by a compiler and suitable for execution as
machine language instructions.

             1.7  “Software” means the software including without limitation Object Code and Source Code,
provided by Amlogic to Licensee from time to time, and which is described in a Software Description Form
attached as an Exhibit to this Agreement and made part hereof by reference.

             1.8  “Source Code” means those portions of the Software, if any, furnished to Licensee, in computer
programming code or human-readable form that is not suitable for machine execution without the intervening
steps of interpretation or compilation, including without limitation, C, C++, Python, Java or other computer
languages.

 2.    LICENSEE GRANT; OWNERSHIP

            2.1    License Grant.  Subject to the terms and conditions of this Agreement, Amlogic hereby grants
to Licensee, under all of Amlogic’s intellectual property rights in and to the Software, a limited, non-exclusive,
non-transferrable, royalty-free license: (i) to use, modify and create Derivate Work from the Source Code,
and to use the Object Code, without the right to sub-license, solely at the Authorized Location, solely for the
purpose of incorporating the Software or Derivative Work in Authorized Licensee Product for use solely with
Amlogic Product, and only if in compliance with Section 2.2 below; and (ii) to reproduce, distribute and
sublicense, in Object Code only, copies of the Software or Derivative Work only to be incorporated in
Authorized Licensee Product for use solely with the Amlogic Products to resellers, distributors and end users
of such Authorized Licensee Product, and only if in compliance with Section 2.3 below.

            2.2    Restrictions on Modification.  If and to the extent that the Software is designed to be compliant 
with any published standard (including without limitation, DOCSIS, HomePNA, IEEE, and ITU standards),
Licensee may not make any modifications to the Software that would cause the Software or the accompanying
Amlogic Product to be incompatible with such standard. Licensee shall be solely liable for any damages or
cause of action that may arise from or relate to such modifications, and Amlogic reserves the right to
immediately terminate this Agreement.

            2.3    Restriction on Distribution.  Licensee shall only distribute the Software or Derivative Work
to resellers, distributors and end users either: (a) physically embedded in the Authorized Licensee Product
in a manner that is not readily accessible or (b) pursuant to an End User Agreement. By way of example only,
an End User Agreement shall be required to distribute the Software or Derivative Work on a CD-ROM,
floppy disk or by electronic transmission.

            2.4    Proprietary Notices.  Licensee shall not remove, efface or obscure any copyright or trademark
notices from the Software or Derivative Work. Licensee shall include reproductions of the Amlogic copyright
notice with each copy of the Software and any Derivative Work, except where any of the foregoing is embedded
in a manner not readily accessible. Licensee acknowledges that any symbols, trademarks, tradenames and
service marks adopted by Amlogic to identify the Software or otherwise, belong to Amlogic and that Licensee
shall have no claims to any rights therein.

            2.5   Ownership.  Amlogic shall retain all right, title and interest, including all intellectual property rights,
in and to the Software. Licensee hereby irrevocably assigns and agrees to assign to Amlogic all right, title and
interest in and to the Derivative Work, including without limitation, all intellectual property rights in and to any
inventions (whether or not patentable), know-how’s, ideas and information made or conceived thereof. Licensee
agrees to perform all acts deemed reasonably necessary or desirable by Amlogic to permit and assist Amlogic,
at Amlogic’s expense, to obtain and enforce the full benefits throughout the world of Licensee’s assignment
of all right, title and interest in the Derivative Work to the Software and all related intellectual property rights
thereof to Amlogic, including but not limited to execution of documents and assistance or cooperation in the
registration and enforcement of any such intellectual property rights throughout the world. To the extent any
of the foregoing cannot be assigned to Amlogic, Licensee hereby grants to Amlogic an exclusive, irrevocable,
perpetual, royalty-free, fully paid-up, fully transferable, worldwide license (with rights to sub-license through
multiple tiers of sublicensees) to use or practice such non-assignable right, title and interest. Notwithstanding
the foregoing or any other provision of this Agreement, nothing contained herein shall be construed as granting
Amlogic any right, title or interest in or to any of Licensee’s intellectual property or Confidential Information.

            2.6   Third Party Software.  The Software is distributed to Licensee in aggregation with various third-party
software (“Open Source Software”). The Open Source Software is distributed to Licensee under the terms of
various “open source” license agreements. Licensee agrees to comply with the terms and conditions contained
in all such Open Source Software licenses with respect to the applicable Open Source Software.

            2.7   No Other Rights Granted.  Apart from the license rights expressly set forth in this Agreement,
Amlogic does not grant and Licensee does not receive any ownership right, title or interest, or any security
interest or other interests, in and to any intellectual property rights related to Software, Derivative Work,
or in any copy or any part of the foregoing. Licensee shall not use, license, sell or otherwise distribute the
Software or any Derivative Work except as provided in this Agreement, and shall not (or attempt to do so),
directly or indirectly, reverse engineer, decompile or disassemble any portion of the Software, including
without limitation Source Code and Object Code.

            2.8   Fees.  In consideration of the licenses granted hereunder, Licensee shall pay to Amlogic the fees
according to the terms set forth in each Software Description Form, if applicable. If the Software Description
Form does not include payment terms, all payments under this Agreement shall be made within thirty (30)
days of the invoice date. Licensee shall pay any taxes, duties or charges of any kind (including any sales,
withholding or value added taxes) imposed by any federal, state or local governmental entity except for taxes
based on Amlogic’s net income. If all or any part of any payment owed to Amlogic under this Agreement is
withheld, based upon a claim that such withholding is required pursuant to the tax laws of any country or its
political subdivisions and/or any tax treaty between the US or PRC and any such country, such payment shall
be increased by the amount necessary to result in a net payment to Amlogic of the amounts otherwise payable
under this Agreement. Any amounts due under this Agreement which are not paid within thirty (30) days of their
due date shall be subject to a late payment charge of the lower of: (i) one and one half percent (1.5%) per month
(and shall thereafter bear interest at a rate of eighteen percent (18%) per annum until paid) or (ii) the highest
interest rate permitted by applicable law. Each party is responsible for its own expenses under this Agreement.
All fees payable under this Agreement are non-refundable.

            2.9   Covenant.  Licensee hereby irrevocably agrees never to Assert against Amlogic and its affiliates,
successors, purchasers and/or customers (through any tier of distribution) any claim that the Software or any
Derivative Work infringes any intellectual property rights owned by Licensee. For purposes of this Section,
“Assert” means to bring an action before any legal, judicial, arbitration, administrative, executive or other
types of body or tribunal that has or claims to have authority to adjudicate such action in whole or in part.

             2.10 Personnel.  With prior written consent of Amlogic, Licensee may exercise license rights granted
to it pursuant to this Agreement through third parties (“Personnel”) working on its behalf (e.g., consultants,
contractors and technology development partners), provided that Licensee shall cause such Personnel to be
subject to and bound by the terms and conditions as set forth in this Agreement including without limitation
Section 5. Any act or omission by Personnel acting in relation to this Agreement will be considered an act or
omission by Licensee. Any breach by Personnel will be considered a breach of this Agreement by Licensee,
and Licensee shall be jointly liable for any such breach by Personnel as if it was a breach by Licensee itself.

            2.11 Affiliate.  With prior written consent of Amlogic, Licensee may designate an Affiliate (“Designee”)
to execute a Software Description Form. Execution of a Software Description Form by Designee (or by Licensee
on behalf of Designee) shall constitute: (i) a separate, distinct and independent contract between Amlogic and
Designee; (ii) Designee’s independent acceptance of and agreement to be bound by the terms and conditions
of this Agreement; and (iii) Licensee’s acceptance of and agreement to be jointly liable with Designee to Amlogic
for any breach of the terms and conditions of this Agreement by Designee as if it was a breach by Licensee itself.
Accordingly, any act or omission by Designee acting in relation to this Agreement will be considered an act or
omission by Licensee. Any breach by Designee will be considered a breach of this Agreement by Licensee, and
Licensee shall be jointly liable for any such breach by Designee as if it was a breach by Licensee itself. If the
Software involves third-party technology, Designee shall confirm in writing to Amlogic that it has received
authorization before any such Software will be provided. For purposes of this Section, “Affiliate” means an entity
controlling, controlled by, or under common control, now or hereafter, of Licensee, but only so long as such control
exists, and “control” means the ability to influence the acts of an entity by virtue of a controlling interest, directly
or indirectly, of 50% or more of the voting rights of the capital of such entity.

 3.    WARRANTY; SUPPORT

            3.1   NO WARRANTY.  THE SOFTWARE IS PROVIDED “AS IS” AND WITH ALL FAULTS. AMLOGIC PROVIDES
NO WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION, COURSE OF
DEALING OR CONDUCT WITH LICENSEE, OR OTHERWISE. AMLOGIC SPECIFICALLY DISCLAIMS ANY IMPLIED
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING
THE SOFTWARE OR ANY UPGRADES TO OR DOCUMENTATION FOR THE SOFTWARE. WITHOUT LIMITATION OF
THE ABOVE, AMLOGIC GRANTS NO WARRANTY THAT THE SOFTWARE IS ERROR-FREE OR WILL OPERATE WITHOUT
INTERRUPTION, AND GRANTS NO WARRANTY REGARDING ITS USE OR THE RESULTS THEREFROM INCLUDING,
WITHOUT LIMITATION, ITS CORRECTNESS, ACCURACY OR RELIABILITY.

            3.2   No Support.  Nothing in this Agreement shall obligate Amlogic to provide any support for the Software.
Amlogic may, but shall be under no obligation to, correct any defects in the Software or provide updates to Licensee.
Licensee may, but is not required to, make reasonable efforts to report to Amlogic any defects it may uncover in the
Software, so as to aid in creating improved revisions of the Software.

            3.3   End User Support.  Licensee shall, at its own expense, be solely responsible for providing technical support
and training to its customers or end users for Authorized Licensee Product, and Amlogic shall have no obligation with
respect thereto. Licensee shall be solely responsible for, and Amlogic shall have no obligation to honor, any warranties
that Licensee provides to its resellers, distributors, customers or end users with respect to the Software or Derivative
Work. Licensee shall defend any claim against Amlogic arising from or in connection with any such warranties, express,
implied, statutory or otherwise, and shall pay any settlements or damages awarded against Amlogic that are based on
any such warranties.

4.    TERM AND TERMINATION

            4.1   Term and Termination.  This Agreement shall commence on the Effective Date and shall remain in effect
perpetually unless terminated as provided below. If Licensee defaults in a material obligation under this Agreement,
and if the default is curable and Licensee fails to cure such default thirty (30) days after written notice of such default,
Amlogic may immediately terminate this Agreement and the licenses granted hereunder upon written notice to Licensee.
Licensee may terminate this Agreement at any time upon written notice to Amlogic and fulfillment of its obligations
under Section 4.2 herein.

            4.2   Effect of Termination.  Upon any termination of this Agreement, the rights and licenses granted to Licensee
under this Agreement shall immediately terminate; provided, however, that sublicenses of the Software or Derivative
Work in Object Code format, to the extent validly granted to end users pursuant to Section 2.1(ii) prior to termination
of this Agreement, shall survive such termination subject to compliance with the obligations set forth herein. Upon
termination, Licensee shall ship to Amlogic, within thirty (30) days, all tangible items in its possession or control which
are proprietary to Amlogic, and Licensee shall destroy or return to Amlogic, at Amlogic’s option, all copies of the
Software and Derivative Work (including without limitation Source Code) in its possession or control.

            4.3   Survival.  The provisions of Sections 1, 2.2 to 2.9, 3, 4, 5, 6 and 7 shall survive the termination of this Agreement.

5.    CONFIDENTIALITY

            5.1   Existing NDA (if Applicable).  If Amlogic and Licensee already have put in place a non-disclosure agreement
that would protect communications made under this Agreement (the “NDA”), then all such communications shall be
subject to the terms and conditions of such NDA, which the parties acknowledge shall be in full force and effect. The
parties agree that the Software, Object Code, Source Code, and any accompanying documentation thereof, shall be
considered Confidential Information under the NDA. In the event of a conflict between the terms of this Agreement
and the terms of the NDA, the terms of this Agreement will prevail.

            5.2   Obligations if No NDA Exists.  If no NDA exists, then the following terms shall apply: Licensee acknowledges
and agrees that the Software, Object Code, Source Code, and any accompanying documentation thereof, and any other
information (if such other information is identified as confidential or should be recognized as confidential under the
circumstances) provided to Licensee by Amlogic hereunder (collectively, “Confidential Information”) constitute the
confidential and proprietary information of Amlogic, and that Licensee’s protection thereof is an essential condition
to Licensee’s use and possession of the Confidential Information. Licensee shall retain all Confidential Information in
strict confidence and not disclose it to any third party or use it in any way except as permitted by this Agreement without
Amlogic’s express written consent. Licensee will exercise at least the same amount of diligence in preserving the secrecy
of the Confidential Information as it uses in preserving the secrecy of its own most valuable confidential information, but
in no event less than reasonable diligence. Information shall not be considered Confidential Information if and to the
extent that it: (i) was in the public domain at the time it was disclosed or has entered the public domain through no
fault of Licensee; (ii) was known to Licensee, without restriction, at the time of disclosure as proven by the files of
Licensee in existence at the time of disclosure; or (iii) becomes known to Licensee, without restriction, from a source
other than Amlogic without breach of this Agreement by Licensee and otherwise not in violation of Amlogic’s rights.
Because of the unique and valuable nature of the Confidential Information, Licensee acknowledges and agrees that Amlogic
will suffer irreparable harm in the event that Licensee fails to comply with any of its obligations herein and that monetary
damages will be inadequate to compensate Amlogic for such breach.

            5.3   Source Code Protection.  Licensee shall not under any circumstances copy, duplicate or otherwise reproduce
the Source Code in any manner except as provided herein. Licensee is granted the right to make one (1) archival or backup
copy of the Source Code, which shall be marked as an archival copy and as the confidential and proprietary property of
Amlogic to which access is restricted. Licensee agrees to inform all employees and contractors who are given access by
Licensee to the Software, including the Source Code, the Object Code, or any accompanying documentation, that such
materials are confidential and trade secrets of Amlogic licensed to Licensee as such.

6.    LIMITATION OF LIABILITY

       EXCEPT FOR A BREACH BY LICENSEE OF SECTION 2 (LICENSE GRANT; OWNERSHIP) AND/OR A BREACH BY EITHER PARTY
OF SECTION 5 (CONFIDENTIALITY), IN NO EVENT SHALL LICENSEE, AMLOGIC OR ANY OF AMLOGIC’S LICENSORS BE LIABLE
FOR ANY INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES, HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER FOR BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, ARISING OUT OF THIS
AGREEMENT, INCLUDING BUT NOT LIMITED TO LOSS OF PROFITS, EVEN IF SUCH PARTY HAS BEEN ADVISED OF THE POSSIBILITY
OF SUCH DAMAGES. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
LIMITED REMEDY.

        AMLOGIC’S AGGREGATE LIABILITY FOR ANY REASON AND UPON ANY CAUSE OF ACTION WHATSOEVER SHALL NOT
EXCEED THE GREATER OF ONE HUNDRED UNITED STATES DOLLARS ($100.00) OR THE AMOUNTS PAID TO AMLOGIC BY
LICENSEE HEREUNDER.

7.    MISCELLANEOUS

            7.1   Assignment.  This Agreement shall be binding upon and inure to the benefit of the parties and their respective
successors and assigns. Licensee may not assign this Agreement or any rights or obligation hereunder, directly or indirectly,
by operation of law or otherwise, without the prior written consent of Amlogic, and any such attempted assignment shall be
void. Notwithstanding the foregoing, Licensee may assign this Agreement to a successor of all or substantially all of its business
or assets to which this Agreement relates provided that such successor is not a competitor of Amlogic. Amlogic may assign
this Agreement to a successor of all or substantially all of its business or assets to which this Agreement relates with prior
notice to Licensee.

            7.2   Notices.  All notices between the parties shall be in writing and shall be deemed to have been given if personally
delivered or sent by certified mail (return receipt requested), or telecopy, to the other party’s legal department at the address
set forth in this Agreement, and for Amlogic to Attn: Legal Department, Amlogic (Shanghai) Co., Ltd. Building E5, 2555 Xiupu Road,
Pudong District, Shanghai, P.R. China and such other address as is provided by notice as set forth herein. Notices shall be deemed
effective upon receipt if personally delivered, three (3) business days after it was sent if by certified mail, or one (1) business day
after it was sent if by telecopier.

            7.3   Governing Law and Venue.  This Agreement shall be governed by and construed in accordance with the laws of
People’s Republic of China (“PRC”), without reference to choice of law provisions and the United Nations Convention on
Contracts for the International Sale of Goods is hereby excluded. Any dispute arising from or in connection with this Agreement,
which cannot be resolved in good faith by the parties themselves, shall be submitted to a court in Pudong New District, Shanghai,
China applying PRC laws. The competent court decision shall be final and binding upon both parties. During court proceedings,
both parties will not suspend, refuse or delay further performance of any obligations that are not the subject of the court proceeding
under this Agreement.

            7.4   Waiver and Severability.  The waiver of, or failure to enforce, any breach or default hereunder shall not constitute the
waiver of any other or subsequent breach or default. All terms and provisions of this Agreement shall, if possible, be construed in
a manner which makes them valid, but in the event any term or provision of this Agreement is found by a court of competent
jurisdiction to be illegal or unenforceable, the validity or enforceability of the remainder of this Agreement shall not be affected
if the illegal or unenforceable provision does not materially affect the intent of this Agreement. If the illegal or unenforceable
provision materially affects the intent of the parties to this Agreement, then this Agreement shall be terminated accordingly.

            7.5   Injunctive Relief.  Licensee hereby acknowledges that its breach of this Agreement would cause irreparable harm and
significant injury to Amlogic that may be difficult to ascertain and that a remedy at law would be inadequate. Accordingly, Licensee
agrees that Amlogic shall have the right to seek and obtain immediate injunctive relief to enforce the terms and obligations under
this Agreement in addition to any other rights and remedies it may have at law or in equity.

            7.6   Export Regulations.  Licensee agrees and warrants that it shall comply, at its own expense, with the US Foreign Corrupt
Practices Act and all export laws, restrictions, national security controls and regulations of the United States, PRC and any applicable
foreign agency or authority. Licensee shall not export or re-export, or authorize the export or re-export of the Software or any other
product, technology, or information that Licensee obtains or learns hereunder, or any copy or direct product thereof, in violation of
any of such laws, restrictions, or regulations or without any license or approval required thereunder. Any and all obligations of Amlogic
to provide Software or any media in which the Software is contained shall be subject in all respects to such laws, restrictions, and
regulations. Licensee hereby agrees to indemnify and hold Amlogic harmless from and against any losses, damages, penalties or
causes of action resulting from Licensee’s breach of this Section.

            7.7   Entire Agreement.  This Agreement, along with any associated Software Description Forms, sets forth the complete and
exclusive understanding between the parties regarding the subject matter of this Agreement, and supersedes any and all prior
agreements and communications, oral or written. This Agreement means, collectively, the referenced Software License Agreement
and all Software Description Forms referencing the Software License Agreement. Any modification or amendment of any provision
of this Agreement will be effective only if in writing and signed by both parties. In the event of a conflict between the terms of this
Agreement and the terms of a Software Description Form, the terms of the Software Description Form shall control. This Agreement
is in the English language and may be translated to Chinese; the English version will prevail in the event of any inconsistency between
the English and any Chinese translations thereof. This Agreement may be executed in one or more counterparts, each of which shall
be deemed an original, but all of which taken together shall constitute one and the same instrument. Facsimile, electronic or digital
signatures shall constitute an original signature for all purposes.

