Apache Groovy
Copyright 2003-2016 The Apache Software Foundation

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

This product includes/uses ANTLR (http://www.antlr2.org/)
developed by Terence Parr 1989-2006

This product bundles the JUnit jar (junit.org)
which is available under the terms of the Eclipse Public License v1.0

This product embeds the OpenBeans jar within its grooid jar artifacts
OpenBeans includes/uses files from Apache Harmony and the following notice applies
Copyright 2006, 2010 The Apache Software Foundation.
Portions of Apache Harmony were originally developed by Intel Corporation and are
licensed to the Apache Software Foundation under the "Software Grant and Corporate
Contribution License Agreement" and for which the following copyright notices apply
    (C) Copyright 2005 Intel Corporation
    (C) Copyright 2005-2006 Intel Corporation
    (C) Copyright 2006 Intel Corporation

This product bundles icons from the famfamfam.com silk icons set
http://www.famfamfam.com/lab/icons/silk/
Licensed under the Creative Commons Attribution Licence v2.5
http://creativecommons.org/licenses/by/2.5/