Apache Felix UPnP Sample TV
Copyright 2006-2008 The Apache Software Foundation


I. Included Software

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
Licensed under the Apache License 2.0.

This product includes software developed by Satoshi Konno
(http://sourceforge.net/projects/cgupnpjava/)
Copyright 2003-2008 Satoshi Konno,
Licensed under the BSD License.

II. Used Software

This product uses software developed at
The Apache Software Foundation (http://www.apache.org/).
Licensed under the Apache License 2.0.

This product uses software developed at
The OSGi Alliance (http://www.osgi.org/).
Copyright 2006-2008 The OSGi Alliance.
Licensed under the Apache License 2.0.

This product uses software developed by Satoshi Konno
(http://sourceforge.net/projects/cgupnpjava/)
Copyright 2003-2008 Satoshi Konno,
Licensed under the BSD License.

III. License Summary
- Apache License 2.0
- BSD License
