Apache Felix Descriptor Generator Implementation
Copyright 2010-2011 The Apache Software Foundation

This software was developed at the Apache Software Foundation
(http://www.apache.org) and may have dependencies on other
Apache software licensed under Apache License 2.0.

I. Included Third-Party Software


II. Used Third-Party Software

This product uses software developed at
The OSGi Alliance (http://www.osgi.org/).
Copyright (c) OSGi Alliance (2000, 2009).
Licensed under the Apache License 2.0. 

This product uses software developed at http://asm.objectweb.org
Copyright (c) 2000-2005 INRIA, France Telecom
Licensed under the BSD License.

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


III. License Summary
- Apache License 2.0
- BSD License
