This product includes software developed by:
The Apache Software Foundation (http://www.apache.org/).

------------------------------------------------------------------------
See the file LICENSE.txt
See licenses for accompanying products in the "/licenses" subdirectory.
------------------------------------------------------------------------

This software also includes code from Facelets (https://facelets.dev.java.net/)

This software also includes code from Apache Shale Test Framework

This software also includes code from Apache Commons Codec

This product contains code written by David Geary and Cay Horstmann
for the first edition of Core JavaServer Faces. 

