=========================================================================
==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
==  Version 2.0, in this case for the Apache Geronimo distribution.    ==
=========================================================================

Apache Geronimo 
Copyright 2003-2010 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

For the server adapter code (in plugins/org.apache.geronimo.st.*):

Portions of the Eclipse Geronimo Server Adapter were originally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant and Corporate Contribution License Agreement",
informally known as the "Eclipse Geronimo Server Adapter CLA".

The following copyright notice(s) were affixed to portions of this code
with which this file is now or was at one time distributed
and are placed here unaltered.

/*******************************************************************************
 * Copyright (c) 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - Initial API and implementation
 *******************************************************************************/

For the geronimo-util jar in org.apache.geronimo.runtime.*,
and the geronimo-crypto jar in org.apache.geronimo.runtime.*:

=========================================================================
==  Bouncy Castle Notice                                               ==
=========================================================================

This product includes software (the ASN1 codec in the org.apache.geronimo.asn1
package) which was developed by the Bouncy Castle project. 
(http://www.bouncycastle.org/) 

     Copyright (c) 2000-2005 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)

For jaxb-impl jars in org.apache.geronimo.runtime.common.jar:

=========================================================================
==  Sun CDDL Notice                                                    ==
=========================================================================

This product includes software developed for the JAXB Reference 
Implementation project. (https://jaxb.dev.java.net/)

For plexus-archiver jar in org.apache.geronimo.runtime.*.jar:

=========================================================================
==  Plexus Notice                                                      ==
=========================================================================

This product includes software developed by the Plexus project
(http://plexus.codehaus.org/)

The source code for the Plexus project can be downloaded from:

http://plexus.codehaus.org/source-repository.html





     
