Apache Any23
Copyright 2011-2018 The Apache Software Foundation
Copyright 2008-2011 Digital Enterprise Research Institute (DERI)

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

This product includes software developed by
Aduna Software (http://www.aduna-software.org/)

This product includes software developed by
MetaStuff, Ltd. (http://dom4j.org)

ASM - Copyright (c) 2000-2011 INRIA, France Telecom
All rights reserved. (http://asm.ow2.org/)

This product includes software developed by
jQuery Foundation (http://jquery.org/)

This product includes software developed by
Twitter, Inc (http://twitter.github.com/bootstrap/)
