Apache Bloodhound
Copyright 2012 The Apache Software Foundation

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

Trac - licensed under the BSD License
This product include software (Trac) developed by
Edgewall Software (http://trac.edgewall.org/)

Bootstrap - licensed under the Apache License, version 2
This product includes software (Bootstrap) developed by
Twitter (http://twitter.github.com/bootstrap/)

JQuery - licensed under the MIT License
This product includes software (JQuery) developed by
JQuery (http://jquery.org/)

