BitTorrent Open Source License

Version 1.0

This BitTorrent Open Source License (the "License") applies to the BitTorrent client and related software products as
well as any updates or maintenance releases of that software ("BitTorrent Products") that are distributed by
BitTorrent, Inc. ("Licensor").  Any BitTorrent Product licensed pursuant to this License is a Licensed Product.
Licensed Product, in its entirety, is protected by U.S. copyright law.  This License identifies the terms under which
you may use, copy, distribute or modify Licensed Product.

Preamble

This Preamble is intended to describe, in plain English, the nature and scope of this License.  However, this
Preamble is not a part of this license.  The legal effect of this License is dependent only upon the terms of the
License and not this Preamble.

This License complies with the Open Source Definition and is derived from the Jabber Open Source License 1.0 (the
"JOSL"), which has been approved by Open Source Initiative. Sections 4(c) and 4(f)(iii) from the JOSL have been
dropped.

This License provides that:

1.      You may use, sell or give away the Licensed Product, alone or as a component of an aggregate software
distribution containing programs from several different sources.  No royalty or other fee is required.

2.      Both Source Code and executable versions of the Licensed Product, including Modifications made by previous
Contributors, are available for your use.  (The terms "Licensed Product," "Modifications," "Contributors" and "Source
Code" are defined in the License.)

3.      You are allowed to make Modifications to the Licensed Product, and you can create Derivative Works from it.
(The term "Derivative Works" is defined in the License.)

4.      By accepting the Licensed Product under the provisions of this License, you agree that any Modifications you
make to the Licensed Product and then distribute are governed by the provisions of this License.  In particular, you
must make the Source Code of your Modifications available to others.

5.      You may use the Licensed Product for any purpose, but the Licensor is not providing you any warranty
whatsoever, nor is the Licensor accepting any liability in the event that the Licensed Product doesn't work properly
or causes you any injury or damages.

6.      If you sublicense the Licensed Product or Derivative Works, you may charge fees for warranty or support, or
for accepting indemnity or liability obligations to your customers.  You cannot charge for the Source Code.

7.      If you assert any patent claims against the Licensor relating to the Licensed Product, or if you breach any
terms of the License, your rights to the Licensed Product under this License automatically terminate.

You may use this License to distribute your own Derivative Works, in which case the provisions of this License will
apply to your Derivative Works just as they do to the original Licensed Product.

Alternatively, you may distribute your Derivative Works under any other OSI-approved Open Source license, or under a
proprietary license of your choice.  If you use any license other than this License, however, you must continue to
fulfill the requirements of this License (including the provisions relating to publishing the Source Code) for those
portions of your Derivative Works that consist of the Licensed Product, including the files containing Modifications.

New versions of this License may be published from time to time.  You may choose to  continue to use the license
terms in this version of the License or those from the new version.  However, only the Licensor has the right to
change the License terms as they apply to the Licensed Product.

This License relies on precise definitions for certain terms.  Those terms are defined when they are first used, and
the definitions are repeated for your convenience in a Glossary at the end of the License.


License Terms

1.      Grant of License From Licensor.  Licensor hereby grants you a world-wide, royalty-free, non-exclusive
license, subject to third party intellectual property claims, to do the following:

a.       Use, reproduce, modify, display, perform, sublicense and distribute any Modifications created by such
Contributor or portions thereof, in both Source Code or as an executable program, either on an unmodified basis or as
part of Derivative Works.

b.       Under claims of patents now or hereafter owned or controlled by Contributor, to make, use, sell, offer for
sale, have made, and/or otherwise dispose of Modifications or portions thereof, but solely to the extent that any
such claim is necessary to enable you to make, use, sell, offer for sale, have made, and/or otherwise dispose of
Modifications or portions thereof or Derivative Works thereof.


2. Grant of License to Modifications From Contributor. "Modifications" means any additions to or deletions from the
substance or structure of (i) a file containing Licensed Product, or (ii) any new file that contains any part of
Licensed Product. Hereinafter in this License, the term "Licensed Product" shall include all previous Modifications
that you receive from any Contributor. By application of the provisions in Section 4(a) below, each person or entity
who created or contributed to the creation of, and distributed, a Modification (a "Contributor") hereby grants you a
world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims, to do the
following:

   1. Use, reproduce, modify, display, perform, sublicense and distribute any Modifications created by such
Contributor or portions thereof, in both Source Code or as an executable program, either on an unmodified basis or as
part of Derivative Works.

   2. Under claims of patents now or hereafter owned or controlled by Contributor, to make, use, sell, offer for
sale, have made, and/or otherwise dispose of Modifications or portions thereof, but solely to the extent that any
such claim is necessary to enable you to make, use, sell, offer for sale, have made, and/or otherwise dispose of
Modifications or portions thereof or Derivative Works thereof.


3.      Exclusions From License Grant.  Nothing in this License shall be deemed to grant any rights to trademarks,
copyrights, patents, trade secrets or any other intellectual property of Licensor or any Contributor except as
expressly stated herein. No patent license is granted separate from the Licensed Product, for code that you delete
from the Licensed Product, or for combinations of the Licensed Product with other software or hardware.  No right is
granted to the trademarks of Licensor or any Contributor even if such marks are included in the Licensed Product.
Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this
License any code that Licensor otherwise would have a right to license.


4.      Your Obligations Regarding Distribution.

a.       Application of This License to Your Modifications.  As an express condition for your use of the Licensed
Product, you hereby agree that any Modifications that you create or to which you contribute, and which you
distribute, are governed by the terms of this License including, without limitation, Section 2.  Any Modifications
that you create or to which you contribute may be distributed only under the terms of this License or a future
version of this License released under Section 7.  You must include a copy of this License with every copy of the
Modifications you distribute.  You agree not to offer or impose any terms on any Source Code or executable version of
the Licensed Product or Modifications that alter or restrict the applicable version of this License or the
recipients' rights hereunder. However, you may include an additional document offering the additional rights
described in Section 4(d).

b.       Availability of Source Code.  You must make available, under the terms of this License, the Source Code of
the Licensed Product and any Modifications that you distribute, either on the same media as you distribute any
executable or other form of the Licensed Product, or via a mechanism generally accepted in the software development
community for the electronic transfer of data (an "Electronic Distribution Mechanism").  The Source Code for any
version of Licensed Product or Modifications that you distribute must remain available for at least twelve (12)
months after the date it initially became available, or at least six (6) months after a subsequent version of said
Licensed Product or Modifications has been made available.  You are responsible for ensuring that the Source Code
version remains available even if the Electronic Distribution Mechanism is maintained by a third party.

c.       Intellectual Property Matters.

                                i.            Third Party Claims.  If you have knowledge that a license to a third
party's intellectual property right is required to exercise the rights granted by this License, you must include a
text file with the Source Code distribution titled "LEGAL" that describes the claim and the party making the claim in
sufficient detail that a recipient will know whom to contact.  If you obtain such knowledge after you make any
Modifications available as described in Section 4(b), you shall promptly modify the LEGAL file in all copies you make
available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups)
reasonably calculated to inform those who received the Licensed Product from you that new knowledge has been
obtained.

                               ii.            Contributor APIs.  If your Modifications include an application
programming interface ("API") and you have knowledge of patent licenses that are reasonably necessary to implement
that API, you must also include this information in the LEGAL file.

                              iii.            Representations.  You represent that, except as disclosed pursuant to
4(c)(i) above, you believe that any Modifications you distribute are your original creations and that you have
sufficient rights to grant the rights conveyed by this License.

d.       Required Notices.  You must duplicate this License in any documentation you provide along with the Source
Code of any Modifications you create or to which you contribute, and which you distribute, wherever you describe
recipients' rights relating to Licensed Product.  You must duplicate the notice contained in Exhibit A (the "Notice")
in each file of the Source Code of any copy you distribute of the Licensed Product. If you created a Modification,
you may add your name as a Contributor to the Notice.  If it is not possible to put the Notice in a particular Source
Code file due to its structure, then you must include such Notice in a location (such as a relevant directory file)
where a user would be likely to look for such a notice.  You may choose to offer, and charge a fee for, warranty,
support, indemnity or liability obligations to one or more recipients of Licensed Product. However, you may do so
only on your own behalf, and not on behalf of the Licensor or any Contributor.  You must make it clear that any such
warranty, support, indemnity or liability obligation is offered by you alone, and you hereby agree to indemnify the
Licensor and every Contributor for any liability incurred by the Licensor or such Contributor as a result of
warranty, support, indemnity or liability terms you offer.

e.        Distribution of Executable Versions.  You may distribute Licensed Product as an executable program under a
license of your choice that may contain terms different from this License provided (i) you have satisfied the
requirements of Sections 4(a) through 4(d) for that distribution, (ii) you include a conspicuous notice in the
executable version, related documentation and collateral materials stating that the Source Code version of the
Licensed Product is available under the terms of this License, including a description of how and where you have
fulfilled the obligations of Section 4(b), and (iii) you make it clear that any terms that differ from this License
are offered by you alone, not by Licensor or any Contributor.  You hereby agree to indemnify the Licensor and every
Contributor for any liability incurred by Licensor or such Contributor as a result of any terms you offer.

f.       Distribution of Derivative Works.  You may create Derivative Works (e.g., combinations of some or all of the
Licensed Product with other code) and distribute the Derivative Works as products under any other license you select,
with the proviso that the requirements of this License are fulfilled for those portions of the Derivative Works that
consist of the Licensed Product or any Modifications thereto.


5.      Inability to Comply Due to Statute or Regulation.  If it is impossible for you to comply with any of the
terms of this License with respect to some or all of the Licensed Product due to statute, judicial order, or
regulation, then you must (i) comply with the terms of this License to the maximum extent possible, (ii) cite the
statute or regulation that prohibits you from adhering to the License, and (iii) describe the limitations and the
code they affect. Such description must be included in the LEGAL file described in Section 4(d), and must be included
with all distributions of the Source Code.  Except to the extent prohibited by statute or regulation, such
description must be sufficiently detailed for a recipient of ordinary skill at computer programming to be able to
understand it.


6.      Application of This License.  This License applies to code to which Licensor or Contributor has attached the
Notice in Exhibit A, which is incorporated herein by this reference.


7.      Versions of This License.

a.       New Versions.  Licensor may publish from time to time revised and/or new versions of the License.

b.       Effect of New Versions.  Once Licensed Product has been published under a particular version of the License,
you may always continue to use it under the terms of that version.  You may also choose to use such Licensed Product
under the terms of any subsequent version of the License published by Licensor.  No one other than Licensor has the
right to modify the terms applicable to Licensed Product created under this License.

c.       Derivative Works of this License.  If you create or use a modified version of this License, which you may do
only in order to apply it to software that is not already a Licensed Product under this License, you must rename your
license so that it is not confusingly similar to this License, and must make it clear that your license contains
terms that differ from this License.  In so naming your license, you may not use any trademark of Licensor or any
Contributor.


8.      Disclaimer of Warranty.  LICENSED PRODUCT IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE LICENSED PRODUCT IS FREE
OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE LICENSED PRODUCT IS WITH YOU.  SHOULD LICENSED PRODUCT PROVE DEFECTIVE IN ANY RESPECT, YOU (AND
NOT THE LICENSOR OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION.  THIS
DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF LICENSED PRODUCT IS AUTHORIZED
HEREUNDER EXCEPT UNDER THIS DISCLAIMER.


9.      Termination.

a.       Automatic Termination Upon Breach.  This license and the rights granted hereunder will terminate
automatically if you fail to comply with the terms herein and fail to cure such breach within thirty (30) days of
becoming aware of the breach.  All sublicenses to the Licensed Product that are properly granted shall survive any
termination of this license.  Provisions that, by their nature, must remain in effect beyond the termination of this
License, shall survive.

b.       Termination Upon Assertion of Patent Infringement.  If you initiate litigation by asserting a patent
infringement claim (excluding declaratory judgment actions) against Licensor or a Contributor (Licensor or
Contributor against whom you file such an action is referred to herein as Respondent) alleging that Licensed Product
directly or indirectly infringes any patent, then any and all rights granted by such Respondent to you under Sections
1 or 2 of this License shall terminate prospectively upon sixty (60) days notice from Respondent (the "Notice
Period") unless within that Notice Period you either agree in writing (i) to pay Respondent a mutually agreeable
reasonably royalty for your past or future use of Licensed Product made by such Respondent, or (ii) withdraw your
litigation claim with respect to Licensed Product against such Respondent.  If within said Notice Period a reasonable
royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not
withdrawn, the rights granted by Licensor to you under Sections 1 and 2 automatically terminate at the expiration of
said Notice Period.

c.       Reasonable Value of This License.  If you assert a patent infringement claim against Respondent alleging
that Licensed Product directly or indirectly infringes any patent where such claim is resolved (such as by license or
settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses
granted by said Respondent under Sections 1 and 2 shall be taken into account in determining the amount or value of
any payment or license.

d.       No Retroactive Effect of Termination.  In the event of termination under Sections 9(a) or 9(b) above, all
end user license agreements (excluding licenses to distributors and resellers) that have been validly granted by you
or any distributor hereunder prior to termination shall survive termination.


10.  Limitation of Liability.  UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE),
CONTRACT, OR OTHERWISE, SHALL THE LICENSOR, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF LICENSED PRODUCT, OR ANY SUPPLIER
OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF
ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE
POSSIBILITY OF SUCH DAMAGES.  THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION.  SOME JURISDICTIONS DO
NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY
NOT APPLY TO YOU.


11.  Responsibility for Claims.  As between Licensor and Contributors, each party is responsible for claims and
damages arising, directly or indirectly, out of its utilization of rights under this License.  You agree to work with
Licensor and Contributors to distribute such responsibility on an equitable basis.  Nothing herein is intended or
shall be deemed to constitute any admission of liability.


12.  U.S. Government End Users.  The Licensed Product is a commercial item, as that term is defined in 48 C.F.R.
2.101 (Oct. 1995), consisting of commercial computer software and commercial computer software documentation, as such
terms are used in 48 C.F.R. 12.212 (Sept. 1995).  Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through
227.7202-4 (June 1995), all U.S. Government End Users acquire Licensed Product with only those rights set forth
herein.


13.  Miscellaneous.  This License represents the complete agreement concerning the subject matter hereof.  If any
provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary
to make it enforceable.  This License shall be governed by California law provisions (except to the extent applicable
law, if any, provides otherwise), excluding its conflict-of-law provisions.  You expressly agree that any litigation
relating to this license shall be subject to the jurisdiction of the Federal Courts of the Northern District of
California or the Superior Court of the County of Santa Clara, California (as appropriate), with venue lying in Santa
Clara County, California, with the losing party responsible for costs including, without limitation, court costs and
reasonable attorneys fees and expenses.  The application of the United Nations Convention on Contracts for the
International Sale of Goods is expressly excluded.  You and Licensor expressly waive any rights to a jury trial in
any litigation concerning Licensed Product or this License.  Any law or regulation that provides that the language of
a contract shall be construed against the drafter shall not apply to this License.


14.  Definition of You in This License. You throughout this License, whether in upper or lower case, means an
individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a
future version of this License issued under Section 7.  For legal entities, you includes any entity that controls, is
controlled by, or is under common control with you.  For purposes of this definition, control means (i) the power,
direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii)
ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.


15.  Glossary.  All defined terms in this License that are used in more than one Section of this License are repeated
here, in alphabetical order, for the convenience of the reader.  The Section of this License in which each defined
term is first used is shown in parentheses.

Contributor:  Each person or entity who created or contributed to the creation of, and distributed, a Modification.
(See Section 2)

Derivative Works: That term as used in this License is defined under U.S. copyright law.  (See Section 1(b))

License:  This BitTorrent Open Source License.  (See first paragraph of License)

Licensed Product:  Any BitTorrent Product licensed pursuant to this License.  The term "Licensed Product" includes
all previous Modifications from any Contributor that you receive.  (See first paragraph of License and Section 2)

Licensor:  BitTorrent, Inc.  (See first paragraph of License)

Modifications:  Any additions to or deletions from the substance or structure of (i) a file containing Licensed
Product, or (ii) any new file that contains any part of Licensed Product.  (See Section 2)

Notice:  The notice contained in Exhibit A.  (See Section 4(e))

Source Code: The preferred form for making modifications to the Licensed Product, including all modules contained
therein, plus any associated interface definition files, scripts used to control compilation and installation of an
executable program, or a list of differential comparisons against the Source Code of the Licensed Product.  (See
Section 1(a))

You:  This term is defined in Section 14 of this License.


EXHIBIT A

The Notice below must appear in each file of the Source Code of any copy you distribute of the Licensed Product or
any hereto.  Contributors to any Modifications may add their own copyright notices to identify their own
contributions.

License:

The contents of this file are subject to the BitTorrent Open Source License Version 1.0 (the License).  You may not
copy or use this file, in either source code or executable form, except in compliance with the License.  You may
obtain a copy of the License at http://www.bittorrent.com/license/.

Software distributed under the License is distributed on an AS IS basis, WITHOUT WARRANTY OF ANY KIND, either express
or implied.  See the License for the specific language governing rights and limitations under the License.
