<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>About</title>
</head>
<body lang="EN-US">
<h2>About This Content</h2>
 
<p>August, 04 2013</p>	
<h3>License</h3>

<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
indicated below, the Content is provided to you under the terms and conditions of the
Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
apply to your use of any object code in the Content.  Check the Redistributor's license that was 
provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
indicated below, the terms and conditions of the EPL still apply to any source code in the Content
and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>

<h3>Third Party Content</h3>

<p>
The Content includes items that have been sourced from third parties as set out below. If you 
did not receive this Content directly from the Eclipse Foundation, the following is provided 
for informational purposes only, and you should look to the Redistributor&rsquo;s license for 
terms and conditions of use.
</p>

<h4>Maven Model 3.1.0, Maven Model Builder 3.1.0, Maven Repository Metadata 3.1.0, Maven Aether Provider 3.1.0, Maven Settings 3.1.0, Maven Settings Builder 3.1.0</h4>
<p>
The plug-in includes software developed by The Apache Software Foundation as part of the <a href="http://maven.apache.org/">Apache Maven project</a>.
Your use of said Maven components in binary code form contained in the plug-in is subject to the terms and conditions of the 
Apache License, Version 2.0 ("Apache-2.0").  
A copy of the Apache-2.0 license is available at <a href="http://maven.apache.org/license.html">http://maven.apache.org/license.html</a> and embedded in this plug-in
at <a href="about_files/APACHE-2.0.txt">about_files/APACHE-2.0.txt</a>.
</p>
<p>
The original binaries and source are available at the <a href="http://maven.org/">Central Repository</a>.
</p>

<h4>Plexus Interpolation 1.16</h4>
<p>
The plug-in includes software developed by Sonatype, Inc. as part of the <a href="http://plexus.codehaus.org/">Plexus project</a>.
Your use of Plexus Interpolation in binary code form contained in the plug-in is subject to the terms and conditions of the 
Apache License, Version 2.0 ("Apache-2.0"), the Apache License, Version 1.1 ("Apache-1.1") and the MIT license ("MIT").
A copy of the Apache-2.0 license is available at <a href="http://plexus.codehaus.org/plexus-components/plexus-interpolation/license.html">http://plexus.codehaus.org/plexus-components/plexus-interpolation/license.html</a> and embedded in this plug-in
at <a href="about_files/APACHE-2.0.txt">about_files/APACHE-2.0.txt</a>.
A copy of the Apache-1.1 license is available at <a href="http://www.apache.org/licenses/LICENSE-1.1">http://www.apache.org/licenses/LICENSE-1.1</a> and embedded in this plug-in
at <a href="about_files/APACHE-1.1.txt">about_files/APACHE-1.1.txt</a>.
A copy of the MIT license is available at <a href="http://opensource.org/licenses/MIT">http://opensource.org/licenses/MIT</a> and embedded in this plug-in
at <a href="about_files/MIT.txt">about_files/MIT.txt</a>.
</p>
<p>
The original binaries are available at the <a href="http://maven.org/">Central Repository</a>.
</p>

<h4>Plexus Utilities 2.1</h4>
<p>
The plug-in includes software developed by Sonatype, Inc. as part of the <a href="http://plexus.codehaus.org/">Plexus project</a>.
Your use of Plexus Utilities in binary code form contained in the plug-in is subject to the terms and conditions of the 
Apache License, Version 2.0 ("Apache-2.0"), the Apache License, Version 1.1 ("Apache-1.1"), the Indiana University Extreme! Lab Software License, Version 1.1.1 ("IUEL-1.1.1") and the BSD license ("BSD-3-Clause").
A copy of the Apache-2.0 license is available at <a href="http://plexus.codehaus.org/plexus-utils/license.html">http://plexus.codehaus.org/plexus-utils/license.html</a> and embedded in this plug-in
at <a href="about_files/APACHE-2.0.txt">about_files/APACHE-2.0.txt</a>.
A copy of the Apache-1.1 license is available at <a href="http://www.apache.org/licenses/LICENSE-1.1">http://www.apache.org/licenses/LICENSE-1.1</a> and embedded in this plug-in
at <a href="about_files/APACHE-1.1.txt">about_files/APACHE-1.1.txt</a>.
A copy of the IUEL-1.1.1 license is available at <a href="http://www.extreme.indiana.edu/xgws/xsoap/PullParser/LICENSE.txt">http://www.extreme.indiana.edu/xgws/xsoap/PullParser/LICENSE.txt</a> and embedded in this plug-in
at <a href="about_files/IUEL-1.1.1.txt">about_files/IUEL-1.1.1.txt</a>.
A copy of the BSD-3-Clause license is available at <a href="http://cruisecontrol.sourceforge.net/license.html">http://cruisecontrol.sourceforge.net/license.html</a> and embedded in this plug-in
at <a href="about_files/BSD-3-Clause.txt">about_files/BSD-3-Clause.txt</a>.
</p>
<p>
The original binaries are available at the <a href="http://maven.org/">Central Repository</a>.
</p>

<h4>Plexus Security Dispatcher 1.3</h4>
<p>
The Content includes software developed by Sonatype, Inc. as part of the <a href="http://plexus.codehaus.org/">Plexus project</a>.
Your use of Plexus Security Dispatcher in binary code form contained in the plug-in is subject to the terms and conditions of the 
Apache Software License, Version 2.0 ("Apache-2.0").  
A copy of the Apache-2.0 license is available at <a href="http://www.apache.org/licenses/LICENSE-2.0.txt">http://www.apache.org/licenses/LICENSE-2.0.txt</a> and embedded in this plug-in
at <a href="about_files/APACHE-2.0.txt">about_files/APACHE-2.0.txt</a>.
</p>
<p>
The original binaries are available at the <a href="http://maven.org/">Central Repository</a>.
</p>

<h4>Plexus Cipher 1.7</h4>
<p>
The Content includes software developed by Sonatype, Inc as part of the <a href="http://plexus.codehaus.org/">Plexus project</a>.
Your use of Plexus Cipher in binary code form contained in the plug-in is subject to the terms and conditions of the 
Apache Software License, Version 2.0 (&quot;ASL&quot;).  
A copy of the Apache-2.0 license is available at <a href="https://raw.github.com/sonatype/plexus-cipher/master/LICENSE.txt">https://raw.github.com/sonatype/plexus-cipher/master/LICENSE.txt</a> and embedded in this plug-in
at <a href="about_files/APACHE-2.0.txt">about_files/APACHE-2.0.txt</a>.
</p>
<p>
The original binaries are available at the <a href="http://maven.org/">Central Repository</a>.
</p>

<h4>Apache HttpClient 4.2.6, Apache HttpCore 4.2.5</h4>
<p>
The plug-in includes software developed by The Apache Software Foundation as part of the <a href="http://hc.apache.org/">Apache HttpComponents project</a>.
Your use of said HttpComponents components in binary code form contained in the plug-in is subject to the terms and conditions of the 
Apache License, Version 2.0 ("Apache-2.0").  
A copy of the Apache-2.0 license is available at <a href="http://hc.apache.org/license.html">http://hc.apache.org/license.html</a> and embedded in this plug-in
at <a href="about_files/APACHE-2.0.txt">about_files/APACHE-2.0.txt</a>.
</p>
<p>
The original binaries and source are available at the <a href="http://maven.org/">Central Repository</a>.
</p>

<h4>Apache Commons Codec 1.6</h4>
<p>
The plug-in includes software developed by The Apache Software Foundation as part of the <a href="http://commons.apache.org/">Apache Commons project</a>.
Your use of Commons Codec in binary code form contained in the plug-in is subject to the terms and conditions of the 
Apache License, Version 2.0 ("Apache-2.0").  
A copy of the Apache-2.0 license is available at <a href="http://www.apache.org/licenses/LICENSE-2.0.txt">http://www.apache.org/licenses/LICENSE-2.0.txt</a> and embedded in this plug-in
at <a href="about_files/APACHE-2.0.txt">about_files/APACHE-2.0.txt</a>.
</p>
<p>
The original binaries and source are available at the <a href="http://maven.org/">Central Repository</a>.
</p>

<h4>SLF4J API 1.6.2, SLF4J NOP 1.6.2</h4>
<p>
The Content includes software developed by QOS.ch as part of the <a href="http://www.slf4j.org/">SLF4J project</a>.
Your use of SLF4J in binary code form contained in the plug-in is subject to the terms and conditions of the 
MIT License ("MIT").  
A copy of the MIT license is available at <a href="http://www.slf4j.org/license.html">http://www.slf4j.org/license.html</a> and embedded in this plug-in
at <a href="about_files/MIT.txt">about_files/MIT.txt</a>.
</p>
<p>
The original binaries are available at the <a href="http://maven.org/">Central Repository</a>.
</p>

<h4>Jakarta Commons Logging over SLF4J 1.6.2</h4>
<p>
The Content includes software developed by QOS.ch as part of the <a href="http://www.slf4j.org/">SLF4J project</a>.
Your use of JCL-OVER-SLF4J in binary code form contained in the plug-in is subject to the terms and conditions of the 
Apache Software License, Version 2.0 ("Apache-2.0").  
A copy of the Apache-2.0 license is available at <a href="https://raw.github.com/qos-ch/slf4j/v_1.6.2/jcl-over-slf4j/LICENSE.txt">https://raw.github.com/qos-ch/slf4j/v_1.6.2/jcl-over-slf4j/LICENSE.txt</a> and embedded in this plug-in
at <a href="about_files/APACHE-2.0.txt">about_files/APACHE-2.0.txt</a>.
</p>
<p>
The original binaries are available at the <a href="http://maven.org/">Central Repository</a>.
</p>


</body>
</html>
