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

--------------------------------------------------------------------------------

Regarding: BaseAction, BaseForm, BaseHelperAction, BaseMapForm, BizAction,
ProcessAction, ProdcessDispatchAction and ProcessFormAction

Copyright (c) 2002 Synthis Corporation.
430 10th Street NW, Suite S-108, Atlanta GA 30318, U.S.A.
All rights reserved.

This software is licensed to you free of charge under
the Apache Software License, so long as this copyright
statement, list of conditions, and comments,  remains
in the source code.

This software was written to support code generation
for the Apache Struts J2EE architecture by Synthis'
visual application modeling tool Adalon.

For more information on Adalon and Struts code
generation please visit http://www.synthis.com

--------------------------------------------------------------------------------

"SnoopAction.java" contains code derived from the Jetty SnoopServlet
http://www.thecortex.net/clover/eg/jetty/report/default-pkg/SnoopServlet.html>
and distributed under its open source license
http://jetty.mortbay.org/jetty/LICENSE.html>.
