${pom.name}
Copyright (c) 2005 - 2009 The Apache Software Foundation

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

Unless otherwise indicated, all distribution made available by the Apache Software Foundation
is provided to you under the terms and conditions of the Apache License Version 2.0 ("AL").
A copy of the AL is provided with this distribution as the LICENSE file present in the
root directory, and is also available at http://www.apache.org/licenses/.

This product also includes software under the BSD license 
(see the LICENSE file contained in this distribution), with
the following copyright:

Copyright (c) 2006, Sun Microsystems, Inc.
All rights reserved.
