Open CASCADE Technology Public License
License version: 6.5 March, 2011

Open CASCADE S.A.S. releases and makes publicly available the source code of the
software Open CASCADE Technology to the free software development community
under the terms and conditions of this license.

It is not the purpose of this license to induce you to infringe any patents or
other property right claims or to contest validity of any such claims; this
license has the sole purpose of protecting the integrity of the free software
distribution system, which is implemented by public license practices. Many
people have made generous contributions to the wide range of software
distributed through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing to
distribute software through any other system and a licensee cannot impose that
choice.


Please read this license carefully and completely before downloading this
software. By downloading, using, modifying, distributing and sublicensing this
software, you indicate your acceptance to be bound by the terms and conditions
of this license. If you do not want to accept or cannot accept for any reasons
the terms and conditions of this license, please do not download or use in any
manner this software.

1. Definitions

Unless there is something in the subject matter or in the context inconsistent
therewith, the capitalized terms used in this License shall have the following
meaning.

"Applicable Intellectual Property Rights" means (a) with respect to the Initial
Developer, any rights under patents or patents applications or other
intellectual property rights that are now or hereafter acquired, owned by or
assigned to the Initial Developer and that cover subject matter contained in the
Original Code, but only to the extent necessary to use, reproduce, modify,
distribute or sublicense the Original Code without infringement; and (b) with
respect to You or any Contributor, any rights under patents or patents
applications or other intellectual property rights that are now or hereafter
acquired, owned by or assigned to You or to such Contributor and that cover
subject matter contained in Your Modifications or in such Contributor's
Modifications, taken alone or in combination with Original Code.

"Contributor" means each individual or legal entity that creates or contributes
to the creation of any Modification, including the Initial Developer.

"Derivative Program": means a new program combining the Software or portions
thereof with other source code not governed by the terms of this License.

"Initial Developer": means Open CASCADE S.A.S., with main offices   at 1, place
des Frères Montgolfier, 78280 Guyancourt, France.

"Modifications": mean any addition to, deletion from or change to the substance
or the structure of the Software. When source code of the Software is released
as a series of files, a Modification is: (a) any addition to, deletion from or
change to the contents of a file containing the Software or (b) any new file or
other representation of computer program statements that contains any part of
the Software. By way of example, Modifications include any debug of, or
improvement to, the Original Code or any of its components or portions as well
as its next versions or releases thereof.

"Original Code": means (a) the source code of the software Open CASCADE
Technology originally made available by the Initial Developer under this
License, including the source code of any updates or upgrades of the Original
Code and (b) the object code compiled from such source code and originally made
available by Initial Developer under this License.

"Software": means the Original Code, the Modifications, the combination of
Original Code and any Modifications or any respective portions thereof.

"You" or "Your": means an individual or a legal entity exercising rights under
this License.


2. Acceptance of license

By using, reproducing, modifying, distributing or sublicensing the Software or
any portion thereof, You expressly indicate Your acceptance of the terms and
conditions of this License and undertake to act in accordance with all the
provisions of this License applicable to You.


3. Scope and purpose

This License applies to the Software and You may not use, reproduce, modify,
distribute, sublicense or circulate the Software, or any portion thereof, except
as expressly provided under this License. Any attempt to otherwise use,
reproduce, modify, distribute or sublicense the Software is void and will
automatically terminate Your rights under this License.


4. Contributor license

Subject to the terms and conditions of this License, the Initial Developer and
each of the Contributors hereby grant You a world-wide, royalty-free,
irrevocable and non-exclusive license under the Applicable Intellectual Property
Rights they own or control, to use, reproduce, modify, distribute and sublicense
the Software provided that:

You reproduce in all copies of the Software the copyright and other proprietary
notices and disclaimers of the Initial Developer as they appear in the Original
Code and attached hereto as Schedule "A" and any other notices or disclaimers
attached to the Software and keep intact all notices in the Original Code that
refer to this License and to the absence of any warranty;
You include a copy of this License with every copy of the Software You
distribute;
If you distribute or sublicense the Software (as modified by You or on Your
behalf as the case may be), You cause such Software to be licensed as a whole,
at no charge, to all third parties, under the terms and conditions of the
License, making in particular available to all third parties the source code of
the Software;
You document all Your Modifications, indicate the date of each such
Modifications, designate the version of the Software You used, prominently
include a file carrying such information with respect to the Modifications and
duplicate the copyright and other proprietary notices and disclaimers attached
hereto as Schedule "B" or any other notices or disclaimers attached to the
Software with your Modifications.

For greater certainty, it is expressly understood that You may freely create
Derivative Programs (without any obligation to publish such Derivative Program)
and distribute same as a single product. In such case, You must ensure that all
the requirements of this License are fulfilled for the Software or any portion
thereof.


5. Your license

You hereby grant all Contributors and anyone who becomes a party under this
License a world-wide, non-exclusive, royalty-free and irrevocable license under
the Applicable Intellectual Property Rights owned or controlled by You, to use,
reproduce, modify, distribute and sublicense all Your Modifications under the
terms and conditions of this License.


6. Software subject to license

Your Modifications shall be governed by the terms and conditions of this
License. You are not authorized to impose any other terms or conditions than
those prevailing under this License when You distribute and/or sublicense the
Software, save and except as permitted under Section 7 hereof.


7. Additional terms

You may choose to offer, on a non-exclusive basis, and to charge a fee for any
warranty, support, maintenance, liability obligations or other rights consistent
with the scope of this License with respect to the Software (the "Additional
Terms") to the recipients of the Software. However, You may do so only on Your
own behalf and on Your sole and exclusive responsibility. You must obtain the
recipient's agreement that any such Additional Terms are offered by You alone,
and You hereby agree to indemnify, defend and hold the Initial Developer and any
Contributor harmless for any liability incurred by or claims asserted against
the Initial Developer or any Contributors with respect to any such Additional
Terms.


8. Disclaimer of warranty

The Software is provided under this License on an "as is" basis, without
warranty of any kind, including without limitation, warranties that the Software
is free of defects, merchantable, fit for a particular purpose or
non-infringing. The entire risk as to the quality and performance of the
Software is with You.


9. Liability

Under no circumstances shall You, the Initial Developer or any Contributor be
liable to any person for any direct or indirect damages of any kind including,
without limitation, damages for loss of goodwill, loss of data, work stoppage,
computer failure or malfunction or any and all other commercial damages or
losses resulting from or relating to this License or indirectly to the use of
the Software.


10. Trademark

This License does not grant any rights to use the trademarks, trade names and
domain names "MATRA", "EADS Matra Datavision", "CAS.CADE", "Open CASCADE",
"opencascade.com" and "opencascade.org" or any other trademarks, trade names or
domain names used or owned by the Initial Developer.


11. Copyright

The Initial Developer retains all rights, title and interest in and to the
Original Code. You may not remove the copyright © notice which appears when You
download the Software.


12. Term

This License is granted to You for a term equal to the remaining period of
protection covered by the intellectual property rights applicable to the
Original Code.


13. Termination

In case of termination, as provided in Section 3 above, You agree to immediately
stop any further use, reproduction, modification, distribution and sublicensing
of the Software and to destroy all copies of the Software that are in Your
possession or control. All sublicenses of the Software which have been properly
granted prior to termination shall survive any termination of this License. In
addition, Sections 5, 8 to 11, 13.2 and 15.2 of this License, in reason of their
nature, shall survive the termination of this License for a period of fifteen
(15) years.


14. Versions of the license

The Initial Developer may publish new versions of this License from time to
time. Once Original Code has been published under a particular version of this
License, You may choose to continue to use it under the terms and conditions of
that version or use the Original Code under the terms of any subsequent version
of this License published by the Initial Developer.


15. Miscellaneous

15.1 Relationship of Parties

This License will not be construed as creating an agency, partnership, joint
venture or any other form of legal association between You and the Initial
Developer, and You will not represent to the contrary, whether expressly, by
implication or otherwise.

15.2 Independent Development

Nothing in this License will impair the Initial Developer's right to acquire,
license, develop, have others develop for it, market or distribute technology or
products that perform the same or similar functions as, or otherwise compete
with, Modifications, Derivative Programs, technology or products that You may
develop, produce, market or distribute.

15.3 Severability

If for any reason a court of competent jurisdiction finds any provision of this
License, or portion thereof, to be unenforceable, that provision of the License
will be enforced to the maximum extent permissible so as to effect the economic
benefits and intent of the parties, and the remainder of this License will
continue in full force and extent.


END OF THE TERMS AND
CONDITIONS OF THIS LICENSE


Open CASCADE S.A.S. is a French société par actions simplifiée having its   main
offices at 1, place des Frères Montgolfier, 78280 Guyancourt, France. Its web
site is located at the following address www.opencascade.com


Open CASCADE Technology Public License

Schedule "A"

The content of this file is subject to the Open CASCADE Technology Public
License Version 6.5 (the "License"). You may not use the content of this file
except in compliance with the License. Please obtain a copy of the License at
http://www.opencascade.org and read it completely before using this file.

The Initial Developer of the Original Code is Open CASCADE S.A.S., with main
offices at  1, place des Frères Montgolfier, 78280 Guyancourt, France. The
Original Code is copyright © Open CASCADE S.A.S., 2001. All rights reserved.

"The Original Code and all software distributed under the License are
distributed on an "AS IS" basis, without warranty of any kind, and the Initial
Developer hereby disclaims all such warranties, including without limitation,
any warranties of merchantability, fitness for a particular purpose or
non-infringement. Please see the License for the specific terms and conditions
governing rights and limitations under the License".

End of Schedule "A"


Open CASCADE Technology Public License 

Schedule "B"

"The content of this file is subject to the Open CASCADE Technology Public
License Version 6.5 (the "License"). You may not use the content of this file
except in compliance with the License. Please obtain a copy of the License at
http://www.opencascade.org and read it completely before using this file.

The Initial Developer of the Original Code is Open CASCADE S.A.S., with main
offices at  1, place des Frères Montgolfier, 78280 Guyancourt, France. The
Original Code is copyright © Open CASCADE S.A.S., 2001. All rights reserved.

Modifications to the Original Code have been made by ________________________.
Modifications are copyright © [Year to be included]. All rights reserved.

The software Open CASCADE Technology and all software distributed under the
License are distributed on an "AS IS" basis, without warranty of any kind, and
the Initial Developer hereby disclaims all such warranties, including without
limitation, any warranties of merchantability, fitness for a particular purpose
or non-infringement. Please see the License for the specific terms and
conditions governing rights and limitations under the License".

End of Schedule "B"
