ENTITLEMENT
for
SOFTWARE

THIS ENTITLEMENT EVIDENCES YOUR LICENSE TO USE THE SUN
SOFTWARE SET FORTH BELOW UNDER THE TERMS OF THE SUN
MICROSYSTEMS, INC. SOFTWARE LICENSE AGREEMENT.

Licensee/Company: Entity receiving Software.

Effective Date:  Date Sun delivers the Software to You.

Software:  J2ME Wireless Toolkit 2.2 Patch.

Host Software: The software product described in the
Software's documentation for which the Software is
intended to be used.

Permitted Use:  The Permitted Use shall be the same as
the permitted use in Your Host Software's software
license agreement.  Software may only be used in
conjunction with the Host Software.  Use of the
Software on a stand-alone basis is not permitted under
this license.  If You do not have a valid license to
use the Host Software, You have no license to use the
Software for any purpose.

License Term:  The License Term shall be the same as
the license term set forth in your Host Software's
software license agreement.

Licensed Unit: The Licensed Unit shall be the same as
the licensed unit set forth in your Host Software's
software license agreement.

Licensed Unit Count: The License Unit Count shall be
the same as the licensed unit count set forth in your
Host Software's software license agreement.


Sun Microsystems, Inc. ("Sun")
SOFTWARE LICENSE AGREEMENT

READ THE TERMS OF THIS AGREEMENT ("AGREEMENT")
CAREFULLY BEFORE OPENING SOFTWARE MEDIA PACKAGE. BY
OPENING SOFTWARE MEDIA PACKAGE, YOU AGREE TO THE TERMS
OF THIS AGREEMENT. IF YOU ARE ACCESSING SOFTWARE
ELECTRONICALLY, INDICATE YOUR ACCEPTANCE OF THESE
TERMS BY SELECTING THE "ACCEPT" BUTTON AT THE END OF
THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE
TERMS, PROMPTLY RETURN THE UNUSED SOFTWARE TO YOUR
PLACE OF PURCHASE FOR A REFUND OR, IF SOFTWARE IS
ACCESSED ELECTRONICALLY, SELECT THE "DECLINE" (OR
"EXIT") BUTTON AT THE END OF THIS AGREEMENT. IF YOU
HAVE SEPARATELY AGREED TO LICENSE TERMS ("MASTER
TERMS") FOR YOUR LICENSE TO THIS SOFTWARE, THEN
SECTIONS 1-5 OF THIS AGREEMENT ("SUPPLEMENTAL LICENSE
TERMS") SHALL SUPPLEMENT AND SUPERSEDE THE MASTER
TERMS IN RELATION TO THIS SOFTWARE.

1.	Definitions.

(a) 	"Entitlement" means the collective set of
applicable documents authorized by Sun evidencing your
obligation to pay associated fees (if any) for the
license, associated Services, and the authorized scope
of use of Software under this Agreement.

(b) 	"Licensed Unit" means the unit of measure by
which your use of Software and/or Service is licensed,
as described in your Entitlement.

(c)	"Permitted Use" means the licensed Software
use(s) authorized in this Agreement as specified in
your Entitlement. The Permitted Use for any bundled
Sun software not specified in your Entitlement will be
evaluation use as provided in Section 3.

(d) 	"Service" means the service(s) that Sun or its
delegate will provide, if any, as selected in your
Entitlement and as further described in the applicable
service listings at www.sun.com/service/servicelist.

(e) 	"Software" means the Sun software described in
your Entitlement. Also, certain software may be
included for evaluation use under Section 3.

(f)	"You" and "Your" means the individual or legal
entity specified in the Entitlement, or for evaluation
purposes, the entity performing the evaluation.

2.	License Grant and Entitlement.

Subject to the terms of your Entitlement, Sun grants
you a nonexclusive, nontransferable limited license to
use Software for its Permitted Use for the license
term. Your Entitlement will specify (a) Software
licensed, (b) the Permitted Use, (c) the license term,
and (d) the Licensed Units.

Additionally, if your Entitlement includes Services,
then it will also specify the (e) Service and (f)
service term.

If your rights to Software or Services are limited in
duration and the date such rights begin is other than
the purchase date, your Entitlement will provide that
beginning date(s).

The Entitlement may delivered to you in various ways
depending on the manner in which you obtain Software
and Services, for example, the Entitlement may be
provided in your receipt, invoice or your contract
with Sun or authorized Sun reseller. It may also be in
electronic format if you download Software.

3.	Permitted Use.

As selected in your Entitlement, one or more of the
following Permitted Uses will apply to your use of
Software. Unless you have an Entitlement that
expressly permits it, you may not use Software for any
of the other Permitted Uses. If you don't have an
Entitlement, or if your Entitlement doesn't cover
additional software delivered to you, then such
software is for your Evaluation Use.

(a) Evaluation Use. You may evaluate Software
internally for a period of 90 days from your first
use.

(b) Research and Instructional Use. You may use
Software internally to design, develop and test, and
also to provide instruction on such uses.

(c) Individual Use. You may use Software internally
for personal, individual use.

(d) Commercial Use. You may use Software internally
for your own commercial purposes.

(e) Service Provider Use. You may make Software
functionality accessible (but not by providing
Software itself or through outsourcing services) to
your end users in an extranet deployment, but not to
your affiliated companies or to government agencies.

4.	Licensed Units.

Your Permitted Use is limited to the number of
Licensed Units stated in your Entitlement. If you
require additional Licensed Units, you will need
additional Entitlement(s).

5.	Restrictions.

(a) The copies of Software provided to you under this
Agreement are licensed, not sold, to you by Sun. Sun
reserves all rights not expressly granted. (b) You may
make a single archival copy of Software, but otherwise
may not copy, modify, or distribute Software. However
if the Sun documentation accompanying Software lists
specific portions of Software, such as header files,
class libraries, reference source code, and/or
redistributable files, that may be handled
differently, you may do so only as provided in the Sun
documentation. (c) You may not rent, lease, lend or
encumber Software. (d) Unless enforcement is
prohibited by applicable law, you may not decompile,
or reverse engineer Software. (e) The terms and
conditions of this Agreement will apply to any
Software updates, provided to you at Sun's discretion,
that replace and/or supplement the original Software,
unless such update contains a separate license. (f)
You may not publish or provide the results of any
benchmark or comparison tests run on Software to any
third party without the prior written consent of Sun.
(g) Software is confidential and copyrighted. (h)
Unless otherwise specified, if Software is delivered
with embedded or bundled software that enables
functionality of Software, you may not use such
software on a stand-alone basis or use any portion of
such software to interoperate with any program(s)
other than Software. (i) Software may contain programs
that perform automated collection of system data
and/or automated software updating services. System
data collected through such programs may be used by
Sun, its subcontractors, and its service delivery
partners for the purpose of providing you with remote
system services and/or improving Sun's software and
systems. (j) Software is not designed, licensed or
intended for use in the design, construction,
operation or maintenance of any nuclear facility and
Sun and its licensors disclaim any express or implied
warranty of fitness for such uses. (k) No right, title
or interest in or to any trademark, service mark, logo
or trade name of Sun or its licensors is granted under
this Agreement.

6.	Term and Termination.

The license and service term are set forth in your
Entitlement(s). Your rights under this Agreement will
terminate immediately without notice from Sun if you
materially breach it or take any action in derogation
of Sun's and/or its licensors' rights to Software. Sun
may terminate this Agreement should any Software
become, or in Sun's reasonable opinion likely to
become, the subject of a claim of intellectual
property infringement or trade secret
misappropriation. Upon termination, you will cease use
of, and destroy, Software and confirm compliance in
writing to Sun. Sections 1, 5, 6, 7, and 9-15 will
survive termination of the Agreement.

7.	Java Compatibility and Open Source.

Software may contain Java technology. You may not
create additional classes to, or modifications of, the
Java technology, except under compatibility
requirements available under a separate agreement
available at www.java.net.

Sun supports and benefits from the global community of
open source developers, and thanks the community for
its important contributions and open standards-based
technology, which Sun has adopted into many of its
products.

Please note that portions of Software may be provided
with notices and open source licenses from such
communities and third parties that govern the use of
those portions, and any licenses granted hereunder do
not alter any rights and obligations you may have
under such open source licenses, however, the
disclaimer of warranty and limitation of liability
provisions in this Agreement will apply to all
Software in this distribution.

8. 	Limited Warranty.

Sun warrants to you that for a period of 90 days from
the date of purchase, as evidenced by a copy of the
receipt, the media on which Software is furnished (if
any) will be free of defects in materials and
workmanship under normal use. Except for the
foregoing, Software is provided "AS IS". Your
exclusive remedy and Sun's entire liability under this
limited warranty will be at Sun's option to replace
Software media or refund the fee paid for Software.
Some states do not allow limitations on certain
implied warranties, so the above may not apply to you.
This limited warranty gives you specific legal rights.
You may have others, which vary from state to state.

9.	Disclaimer of Warranty.

UNLESS SPECIFIED IN THIS AGREEMENT, ALL EXPRESS OR
IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT
ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT THESE
DISCLAIMERS ARE HELD TO BE LEGALLY INVALID.

10. 	Limitation of Liability.

TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL
SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE,
PROFIT OR DATA, OR FOR SPECIAL, INDIRECT,
CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING
OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE
SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. In no event will Sun's
liability to you, whether in contract, tort (including
negligence), or otherwise, exceed the amount paid by
you for Software under this Agreement. The foregoing
limitations will apply even if the above stated
warranty fails of its essential purpose. Some states
do not allow the exclusion of incidental or
consequential damages, so some of the terms above may
not be applicable to you.

11. 	Export Regulations.

All Software, documents, technical data, and any other
materials delivered under this Agreement are subject
to U.S. export control laws and may be subject to
export or import regulations in other countries. You
agree to comply strictly with these laws and
regulations and acknowledge that you have the
responsibility to obtain any licenses to export,
re-export, or import as may be required after delivery
to you.

12. 	U.S. Government Restricted Rights.

If Software is being acquired by or on behalf of the
U.S. Government or by a U.S. Government prime
contractor or subcontractor (at any tier), then the
Government's rights in Software and accompanying
documentation will be only as set forth in this
Agreement; this is in accordance with 48 CFR 227.7201
through 227.7202-4 (for Department of Defense (DOD)
acquisitions) and with 48 CFR 2.101 and 12.212 (for
non-DOD acquisitions).

13. 	Governing Law.

Any action related to this Agreement will be governed
by California law and controlling U.S. federal law. No
choice of law rules of any jurisdiction will apply.

14. 	Severability.

If any provision of this Agreement is held to be
unenforceable, this Agreement will remain in effect
with the provision omitted, unless omission would
frustrate the intent of the parties, in which case
this Agreement will immediately terminate.

15. 	Integration.

This Agreement, including any terms contained in your
Entitlement, is the entire agreement between you and
Sun relating to its subject matter. It supersedes all
prior or contemporaneous oral or written
communications, proposals, representations and
warranties and prevails over any conflicting or
additional terms of any quote, order, acknowledgment,
or other communication between the parties relating to
its subject matter during the term of this Agreement.
No modification of this Agreement will be binding,
unless in writing and signed by an authorized
representative of each party.

Please contact Sun Microsystems, Inc. 4150 Network
Circle, Santa Clara, California 95054 if you have
questions.
