diff --git a/hyracks/hyracks-examples/btree-example/btreeclient/pom.xml b/hyracks/hyracks-examples/btree-example/btreeclient/pom.xml
index ae1eb66..b762a90 100644
--- a/hyracks/hyracks-examples/btree-example/btreeclient/pom.xml
+++ b/hyracks/hyracks-examples/btree-example/btreeclient/pom.xml
@@ -89,21 +89,11 @@
         </executions>
       </plugin>
       <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>2.2-beta-5</version>
-        <executions>
-          <execution>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-              </descriptors>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>attached</goal>
-            </goals>
-          </execution>
-        </executions>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+            <skip>true</skip>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git a/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/LICENSE b/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/LICENSE
index c4c3eea..a6261fd 100644
--- a/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/LICENSE
+++ b/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/LICENSE
@@ -209,49 +209,6 @@
    subcomponents is subject to the terms and condition of the following
    licenses.
 
-   Components under Apache License 2.0 are as follows:
-
-     - HttpClient (http://hc.apache.org/httpcomponents-client)
-       lib/httpclient-4.3.jar
-     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
-       lib/httpcore-4.3.jar
-     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
-       lib/jetty-continuation-8.0.0.RC0.jar
-     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
-       lib/jetty-http-8.0.0.RC0.jar
-     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
-       lib/jetty-io-8.0.0.RC0.jar
-     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
-       lib/jetty-security-8.0.0.RC0.jar
-     - Jetty :: Server Core (http://www.eclipse.org/jetty)
-       lib/jetty-server-8.0.0.RC0.jar
-     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
-       lib/jetty-servlet-8.0.0.RC0.jar
-     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
-       lib/jetty-util-8.0.0.RC0.jar
-     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
-       lib/jetty-webapp-8.0.0.RC0.jar
-     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
-       lib/jetty-xml-8.0.0.RC0.jar
-     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
-       lib/servlet-api-3.0.20100224.jar
-     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
-       lib/wicket-core-1.5.2.jar
-     - Wicket Request (http://maven.apache.org)
-       lib/wicket-request-1.5.2.jar
-     - Wicket Util (http://maven.apache.org)
-       lib/wicket-util-1.5.2.jar
-     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
-       lib/commons-codec-1.4.jar
-     - Commons IO (http://commons.apache.org/io/)
-       lib/commons-io-2.4.jar
-     - Apache Commons Logging (http://commons.apache.org/logging)
-       lib/commons-logging-1.1.1.jar
-     - Commons Lang (http://commons.apache.org/lang/)
-       lib/commons-lang3-3.1.jar
-     - Cglib
-       contained within lib/mockitio-all-2.0.2-beta.jar
-
    ===
 
    Component(s):
diff --git a/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/NOTICE b/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/NOTICE
index 7a9806d..d1eb94b 100644
--- a/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/NOTICE
+++ b/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/NOTICE
@@ -1,4 +1,4 @@
-Apache AsterixDB
+Apache AsterixDB Hyracks B-Tree Example Client
 Copyright 2016 The Apache Software Foundation
 
 This product includes software developed at
@@ -6,46 +6,6 @@
 
 AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
 
- - lib/hyracks-api-0.2.17-incubating.jar
-
-    hyracks-api
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-dataflow-common-0.2.17-incubating.jar
-
-    hyracks-dataflow-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-dataflow-std-0.2.17-incubating.jar
-
-    hyracks-dataflow-std
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-storage-am-btree-0.2.17-incubating.jar
-
-    hyracks-storage-am-btree
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-storage-am-common-0.2.17-incubating.jar
-
-    hyracks-storage-am-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-storage-common-0.2.17-incubating.jar
-
-    hyracks-storage-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-data-std-0.2.17-incubating.jar
-
-    hyracks-data-std
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-ipc-0.2.17-incubating.jar
-
-    hyracks-ipc
-    Copyright 2016 The Apache Software Foundation
-
  - lib/mockito-all-2.0.2-beta.jar
 
     Mockito license - MIT.
@@ -59,3 +19,23 @@
 
     Objenesis - MIT license
     Hamcrest - BSD license
+
+ - lib/httpclient-4.3.jar
+
+    Apache HttpClient
+    Copyright 1999-2013 The Apache Software Foundation
+
+    This product includes software developed at
+    The Apache Software Foundation (http://www.apache.org/).
+
+- lib/httpcore-4.3.jar
+
+    Apache HttpCore
+    Copyright 2005-2013 The Apache Software Foundation
+
+    This product includes software developed at
+    The Apache Software Foundation (http://www.apache.org/).
+
+
+    This project contains annotations derived from JCIP-ANNOTATIONS
+    Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
diff --git a/hyracks/hyracks-examples/btree-example/btreehelper/pom.xml b/hyracks/hyracks-examples/btree-example/btreehelper/pom.xml
index 121a2ec..2fbe0d9 100644
--- a/hyracks/hyracks-examples/btree-example/btreehelper/pom.xml
+++ b/hyracks/hyracks-examples/btree-example/btreehelper/pom.xml
@@ -70,6 +70,13 @@
           <fork>true</fork>
         </configuration>
       </plugin>
+      <plugin>
+      <groupId>org.apache.maven.plugins</groupId>
+      <artifactId>maven-deploy-plugin</artifactId>
+      <configuration>
+          <skip>true</skip>
+      </configuration>
+    </plugin>
     </plugins>
   </build>
 </project>
diff --git a/hyracks/hyracks-examples/btree-example/btreeserver/pom.xml b/hyracks/hyracks-examples/btree-example/btreeserver/pom.xml
index 92f1918..fb41891 100644
--- a/hyracks/hyracks-examples/btree-example/btreeserver/pom.xml
+++ b/hyracks/hyracks-examples/btree-example/btreeserver/pom.xml
@@ -64,21 +64,11 @@
         </executions>
       </plugin>
       <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>2.2-beta-5</version>
-        <executions>
-          <execution>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-              </descriptors>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>attached</goal>
-            </goals>
-          </execution>
-        </executions>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+            <skip>true</skip>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git a/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/LICENSE b/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/LICENSE
index 88410b6..af8d738 100644
--- a/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/LICENSE
+++ b/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/LICENSE
@@ -209,47 +209,6 @@
    subcomponents is subject to the terms and condition of the following
    licenses.
 
-   Components under Apache License 2.0 are as follows:
-
-     - HttpClient (http://hc.apache.org/httpcomponents-client)
-       lib/httpclient-4.3.jar
-     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
-       lib/httpcore-4.3.jar
-     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
-       lib/jetty-continuation-8.0.0.RC0.jar
-     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
-       lib/jetty-http-8.0.0.RC0.jar
-     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
-       lib/jetty-io-8.0.0.RC0.jar
-     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
-       lib/jetty-security-8.0.0.RC0.jar
-     - Jetty :: Server Core (http://www.eclipse.org/jetty)
-       lib/jetty-server-8.0.0.RC0.jar
-     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
-       lib/jetty-servlet-8.0.0.RC0.jar
-     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
-       lib/jetty-util-8.0.0.RC0.jar
-     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
-       lib/jetty-webapp-8.0.0.RC0.jar
-     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
-       lib/jetty-xml-8.0.0.RC0.jar
-     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
-       lib/servlet-api-3.0.20100224.jar
-     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
-       lib/wicket-core-1.5.2.jar
-     - Wicket Request (http://maven.apache.org)
-       lib/wicket-request-1.5.2.jar
-     - Wicket Util (http://maven.apache.org)
-       lib/wicket-util-1.5.2.jar
-     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
-       lib/commons-codec-1.4.jar
-     - Commons IO (http://commons.apache.org/io/)
-       lib/commons-io-2.4.jar
-     - Apache Commons Logging (http://commons.apache.org/logging)
-       lib/commons-logging-1.1.1.jar
-     - Commons Lang (http://commons.apache.org/lang/)
-       lib/commons-lang3-3.1.jar
-
    ===
 
    Component(s):
@@ -399,7 +358,7 @@
    Component(s):
 
    - JUnit (http://junit.org)
-     lib/junit-4.11.jar
+     lib/junit-4.8.1.jar
 
    Are available under the CPL 1.0:
 
diff --git a/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/NOTICE b/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/NOTICE
index e482955..7786c08 100644
--- a/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/NOTICE
+++ b/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/NOTICE
@@ -1,4 +1,4 @@
-Apache AsterixDB
+Apache AsterixDB Hyracks B-Tree Example Server
 Copyright 2016 The Apache Software Foundation
 
 This product includes software developed at
@@ -6,80 +6,6 @@
 
 AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
 
- - lib/hyracks-api-0.2.17-incubating.jar
-
-    hyracks-api
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-comm-0.2.17-incubating.jar
-
-    hyracks-comm
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-control-cc-0.2.17-incubating.jar
-
-    hyracks-control-cc
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-control-common-0.2.17-incubating.jar
-
-    hyracks-control-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-control-nc-0.2.17-incubating.jar
-
-    hyracks-control-nc
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-control-cc-0.2.17-incubating.jar
-
-    hyracks-control-cc
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-ipc-0.2.17-incubating.jar
-
-    hyracks-ipc
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-net-0.2.17-incubating.jar
-
-    hyracks-net
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-dataflow-common-0.2.17-incubating.jar
-
-    hyracks-dataflow-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-dataflow-std-0.2.17-incubating.jar
-
-    hyracks-dataflow-std
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-storage-am-btree-0.2.17-incubating.jar
-
-    hyracks-storage-am-btree
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-storage-am-common-0.2.17-incubating.jar
-
-    hyracks-storage-am-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-storage-common-0.2.17-incubating.jar
-
-    hyracks-storage-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-data-std-0.2.17-incubating.jar
-
-    hyracks-data-std
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-util-0.2.17-incubating.jar
-
-    hyracks-util
-    Copyright 2016 The Apache Software Foundation
 
  - lib/mockito-all-2.0.2-beta.jar
 
@@ -133,3 +59,29 @@
 
     Wicket Util
     Copyright 2006-2011 Apache Software Foundation
+
+ - lib/httpclient-4.3.jar
+
+    Apache HttpClient
+    Copyright 1999-2013 The Apache Software Foundation
+
+    This product includes software developed at
+    The Apache Software Foundation (http://www.apache.org/).
+
+- lib/httpcore-4.3.jar
+
+    Apache HttpCore
+    Copyright 2005-2013 The Apache Software Foundation
+
+    This product includes software developed at
+    The Apache Software Foundation (http://www.apache.org/).
+
+
+    This project contains annotations derived from JCIP-ANNOTATIONS
+    Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
+
+- lib/commons-logging-1.1.1..jar
+
+    Commons Logging
+    Copyright 2001-2007 The Apache Software Foundation
+
diff --git a/hyracks/hyracks-examples/hyracks-integration-tests/pom.xml b/hyracks/hyracks-examples/hyracks-integration-tests/pom.xml
index 675feae..b5119c0 100644
--- a/hyracks/hyracks-examples/hyracks-integration-tests/pom.xml
+++ b/hyracks/hyracks-examples/hyracks-integration-tests/pom.xml
@@ -7,7 +7,7 @@
  ! "License"); you may not use this file except in compliance
  ! with the License.  You may obtain a copy of the License at
  !
- !   http://www.apache.org/licenses/LICENSE-2.0
+ !	http://www.apache.org/licenses/LICENSE-2.0
  !
  ! Unless required by applicable law or agreed to in writing,
  ! software distributed under the License is distributed on an
@@ -38,6 +38,13 @@
 					<target>1.7</target>
 				</configuration>
 			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-deploy-plugin</artifactId>
+				 <configuration>
+					<skip>true</skip>
+				 </configuration>
+				</plugin>
 		</plugins>
 	</build>
 	<properties>
@@ -112,12 +119,12 @@
 			<artifactId>hyracks-data-std</artifactId>
 			<version>0.2.17-SNAPSHOT</version>
 		</dependency>
-  	    <dependency>
-            <groupId>org.apache.hyracks</groupId>
-            <artifactId>hyracks-client</artifactId>
-            <version>0.2.17-SNAPSHOT</version>
-            <type>jar</type>
-            <scope>compile</scope>
-        </dependency>
+  		 <dependency>
+				<groupId>org.apache.hyracks</groupId>
+				<artifactId>hyracks-client</artifactId>
+				<version>0.2.17-SNAPSHOT</version>
+				<type>jar</type>
+				<scope>compile</scope>
+		  </dependency>
 	</dependencies>
 </project>
diff --git a/hyracks/hyracks-examples/hyracks-shutdown-test/pom.xml b/hyracks/hyracks-examples/hyracks-shutdown-test/pom.xml
index 270b0dd..562fb22 100644
--- a/hyracks/hyracks-examples/hyracks-shutdown-test/pom.xml
+++ b/hyracks/hyracks-examples/hyracks-shutdown-test/pom.xml
@@ -152,6 +152,13 @@
         </execution>
       </executions>
       </plugin>
+      <plugin>
+      <groupId>org.apache.maven.plugins</groupId>
+      <artifactId>maven-deploy-plugin</artifactId>
+      <configuration>
+          <skip>true</skip>
+      </configuration>
+    </plugin>
     </plugins>
   </build>
   <dependencies>
diff --git a/hyracks/hyracks-examples/text-example/textclient/pom.xml b/hyracks/hyracks-examples/text-example/textclient/pom.xml
index cb831e9..55654a7 100644
--- a/hyracks/hyracks-examples/text-example/textclient/pom.xml
+++ b/hyracks/hyracks-examples/text-example/textclient/pom.xml
@@ -101,21 +101,11 @@
         </executions>
       </plugin>
       <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>2.2-beta-5</version>
-        <executions>
-          <execution>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-              </descriptors>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>attached</goal>
-            </goals>
-          </execution>
-        </executions>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+            <skip>true</skip>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git a/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/LICENSE b/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/LICENSE
index 7974129..e9199d8 100644
--- a/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/LICENSE
+++ b/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/LICENSE
@@ -209,531 +209,13 @@
    subcomponents is subject to the terms and condition of the following
    licenses.
 
-   Components under Apache License 2.0 are as follows:
-
-     - Apache Derby Database Engine and Embedded JDBC Driver (http://db.apache.org/derby/derby/)
-       repo/derby-10.10.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - JDO API (http://db.apache.org/jdo)
-       repo/jdo-api-3.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Rome HTTP Fetcher
-       repo/rome-fetcher-1.0.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - An open source Java toolkit for Amazon S3 (http://jets3t.s3.amazonaws.com/index.html)
-       repo/jets3t-0.6.1 in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - The Netty Project (http://www.jboss.org/netty/)
-       repo/netty-3.2.2.Final.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - The Netty Project (http://netty.io/)
-       repo/netty-3.6.2.Final.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - HttpClient (http://jakarta.apache.org/commons/httpclient/)
-       repo/commons-httpclient-3.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - HttpClient (http://hc.apache.org/httpcomponents-client)
-       repo/httpclient-4.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
-       repo/httpcore-4.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - twitter4j-core (http://twitter4j.org/)
-       repo/twitter4j-core-4.0.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - twitter4j-stream (http://twitter4j.org/)
-       repo/twitter4j-stream-4.0.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
-       repo/jetty-continuation-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
-       repo/jetty-http-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
-       repo/jetty-io-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
-       repo/jetty-security-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Server Core (http://www.eclipse.org/jetty)
-       repo/jetty-server-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
-       repo/jetty-servlet-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
-       repo/jetty-util-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
-       repo/jetty-webapp-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
-       repo/jetty-xml-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
-       repo/servlet-api-3.0.20100224.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - BoneCP :: Core Library (http://jolbox.com/bonecp)
-       repo/bonecp-0.8.0.RELEASE.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - FindBugs-jsr305 (http://findbugs.sourceforge.net/)
-       repo/jsr305-1.3.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Guava: Google Core Libraries for Java (http://code.google.com/p/guava-libraries/guava)
-       repo/guava-18.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - JSON.simple (http://code.google.com/p/json-simple/)
-       repo/json-simple-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Microsoft Windows Azure Client API (https://github.com/WindowsAzure/azure-sdk-for-java)
-       repo/microsoft-windowsazure-api-0.4.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - javax.inject (http://code.google.com/p/atinject/)
-       repo/javax.inject-1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Thrift (http://thrift.apache.org)
-       repo/libfb303-0.9.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Thrift (http://thrift.apache.org)
-       repo/libthrift-0.9.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - DataNucleus JDO API plugin (http://www.datanucleus.org)
-       repo/datanucleus-api-jdo-3.2.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - DataNucleus Core (http://www.datanucleus.org)
-       repo/datanucleus-core-3.2.10.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - DataNucleus RDBMS (http://www.datanucleus.org)
-       repo/datanucleus-rdbms-3.2.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - JAXB2 CommonsValue Constructor Plugin (http://java.net/projects/jaxb2-commons/pages/value-constructor)
-       repo/jaxb2-value-constructor-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - StAX API (http://stax.codehaus.org/)
-       repo/stax-api-1.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - StAX
-       repo/stax-1.1.1-dev.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
-       repo/wicket-core-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Wicket Request (http://maven.apache.org)
-       repo/wicket-request-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Wicket Util (http://maven.apache.org)
-       repo/wicket-util-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Annotations
-       repo/hadoop-annotations-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Auth
-       repo/hadoop-auth-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Client
-       repo/hadoop-client-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Common
-       repo/hadoop-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Common (tests)
-       repo/hadoop-common-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop HDFS
-       repo/hadoop-hdfs-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop HDFS
-       repo/hadoop-hdfs-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-app
-       repo/hadoop-mapreduce-client-app-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-common
-       repo/hadoop-mapreduce-client-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-core
-       repo/hadoop-mapreduce-client-core-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-hs
-       repo/hadoop-mapreduce-client-hs-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-jobclient
-       repo/hadoop-mapreduce-client-jobclient-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-jobclient
-       repo/hadoop-mapreduce-client-jobclient-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-shuffle
-       repo/hadoop-mapreduce-client-shuffle-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Mini-Cluster
-       repo/hadoop-minicluster-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - zookeeper
-       repo/zookeeper-3.4.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-api
-       repo/hadoop-yarn-api-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-client
-       repo/hadoop-yarn-client-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-common
-       repo/hadoop-yarn-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-server-common
-       repo/hadoop-yarn-server-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-server-nodemanager
-       repo/hadoop-yarn-server-nodemanager-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-server-resourcemanager
-       repo/hadoop-yarn-server-resourcemanager-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-server-tests
-       repo/hadoop-yarn-server-tests-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-server-web-proxy
-       repo/hadoop-yarn-server-web-proxy-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Plexus Common Utilities (http://plexus.codehaus.org/plexus-utils)
-       repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jettison
-       repo/jettison-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jackson (http://jackson.codehaus.org)
-       repo/jackson-core-asl-1.8.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - JAX-RS provider for JSON content type (http://jackson.codehaus.org)
-       repo/jackson-jaxrs-1.8.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Data Mapper for Jackson (http://jackson.codehaus.org)
-       repo/jackson-mapper-asl-1.9.12.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Xml Compatibility extensions for Jackson (http://jackson.codehaus.org)
-       repo/jackson-mapper-xc-1.8.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jackson-core (http://wiki.fasterxml.com/JacksonHome)
-       repo/jackson-core-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Google GuiceCore Library (http://code.google.com/p/google-guice/guice/)
-       repo/guice-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Google GuiceExtensionsServlet (http://code.google.com/p/google-guice/extensions-parent/guice-servlet/)
-       repo/guice-servlet-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty Server (http://jetty.mortbay.org/)
-       repo/jetty-6.1.26.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty Utilities (http://jetty.mortbay.org/)
-       repo/jetty-util-6.1.26.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Configuration (http://commons.apache.org/${pom.artifactId.substring(8)}/)
-       repo/commons-configuration-1.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Digester (http://jakarta.apache.org/commons/digester/)
-       repo/commons-digester-1.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - EL (http://jakarta.apache.org/commons/el/)
-       repo/commons-el-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Commons BeanUtils
-       repo/commons-beanutils-1.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons BeanUtils Core (http://commons.apache.org/beanutils/)
-       repo/commons-beanutils-core-1.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons CLI (http://commons.apache.org/cli/)
-       repo/commons-cli-1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
-       repo/commons-codec-1.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Commons Collections (http://commons.apache.org/collections/commons-collections)
-       commons-daemon:commons-daemon:jar:1.0.13
-     - Commons Daemon (http://commons.apache.org/daemon/)
-       repo/commons-daemon-1.0.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons IO (http://commons.apache.org/io/)
-       repo/commons-io-2.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Lang (http://commons.apache.org/lang/)
-       repo/commons-lang-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Commons Logging (http://commons.apache.org/logging)
-       repo/commons-logging-1.0.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Commons Logging Api (http://commons.apache.org/logging)
-       repo/commons-logging-api-1.0.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Net (http://commons.apache.org/net/)
-       repo/commons-net-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Log4j (http://logging.apache.org:80/log4j/1.2/log4j)
-       repo/log4j-1.2.17.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Ant Core (http://ant.apache.org/)
-       repo/ant-1.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Ant Launcher (http://ant.apache.org/)
-       repo/ant-launcher-1.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Avro (http://avro.apache.org)
-       repo/avro-1.7.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Compress (http://commons.apache.org/compress/)
-       repo/commons-compress-1.4.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Lang (http://commons.apache.org/lang/)
-       repo/commons-lang3-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Math (http://commons.apache.org/math/)
-       repo/commons-math-2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Ant Utilities (http://hive.apache.org/hive-ant)
-       repo/hive-ant-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Common (http://hive.apache.org/hive-common)
-       repo/hive-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Query Language (http://hive.apache.org/hive-exec)
-       repo/hive-exec-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Metastore (http://hive.apache.org/hive-metastore)
-       repo/hive-metastore-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Serde (http://hive.apache.org/hive-serde)
-       repo/hive-serde-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims (http://hive.apache.org/hive-shims)
-       repo/hive-shims-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims 0.20 (http://hive.apache.org/hive-shims-0.20)
-       repo/hive-shims-0.20-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims 0.20S (http://hive.apache.org/hive-shims-0.20S)
-       repo/hive-shims-0.20S-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims 0.23 (http://hive.apache.org/hive-shims-0.23)
-       repo/hive-shims-0.23-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims Common (http://hive.apache.org/hive-shims-common)
-       repo/hive-shims-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims Secure Common (http://hive.apache.org/hive-shims-common-secure)
-       repo/hive-shims-secure-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Velocity (http://velocity.apache.org/engine/releases/velocity-1.5/)
-       repo/velocity-1.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jakarta ORO
-       repo/oro-2.0.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - ROME
-       repo/rome-1.0.1-modified-01.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - jasper-compiler (http://tomcat.apache.org/jasper-compiler)
-       repo/jasper-compiler-5.5.23.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - jasper-runtime (http://tomcat.apache.org/jasper-runtime)
-       repo/jasper-runtime-5.5.23.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Xerces2 Java Parser (http://xerces.apache.org/xerces2-j)
-       repo/xercesImpl-2.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - XML APIs (http://xml.apache.org/commons/components/external/xml-apis)
-       repo/xml-apis-1.3.04.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Groovy (http://groovy.codehaus.org/)
-       repo/groovy-all-2.1.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Snappy for Java (http://github.com/xerial/snappy-java/)
-       repo/snappy-java-1.0.4.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   ===
-
-   Component(s):
-   - Java Servlet API (http://servlet-spec.java.n)
-     repo/javax.servlet-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - javax.servlet API v.3.0 (http://jcp.org/en/jsr/detail?id=315)
-     repo/servlet-api-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - grizzly-framework (http://grizzly.java.net/grizzly-framework)
-     repo/grizzly-framework-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - grizzly-http (http://grizzly.java.net/grizzly-http)
-     repo/grizzly-http-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - grizzly-http-server (http://grizzly.java.net/grizzly-http-server)
-     repo/grizzly-http-server-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - grizzly-http-servlet (http://grizzly.java.net/grizzly-http-servlet)
-     repo/grizzly-http-servlet-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - grizzly-rcm (http://grizzly.java.net/grizzly-rcm)
-     repo/grizzly-rcm-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - management-api (http://kenai.com/hg/gmbal~gf_common)
-     repo/management-api-3.0.0-b012.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - gmbal-api-only (http://kenai.com/hg/gmbal~master)
-     repo/gmbal-api-only-3.0.0-b023.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - JavaBeans Activation Framework (JAF) (http://java.sun.com/products/javabeans/jaf/index.jsp)
-     repo/activation-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - JavaMail API (https://glassfish.dev.java.net/javaee5/mail/)
-     repo/mail-1.4.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Java Servlet API
-     repo/servlet-api-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Java Transaction API (http://java.sun.com/products/jta/jta)
-     repo/jta-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Sun JAXB Reference Implementation Runtime (http://jaxb.java.net/jaxb-impl)
-     repo/jaxb-impl-2.2.3-1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Java Architecture for XML Binding (JAXB API) (https://jaxb.dev.java.net/jaxb-api) 
-     repo/jaxb-api-2.2.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Streaming API for XML
-     repo/stax-api-1.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - jsp-api
-     repo/jsp-api-2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-
-   are available under the CDDL 1.0
-   --
-      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
-
-      1. Definitions.
-
-      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
-
-      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
-
-      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
-
-      1.4. “Executable” means the Covered Software in any form other than Source Code.
-
-      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
-
-      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
-
-      1.7. “License” means this document.
-
-      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
-
-      1.9. “Modifications” means the Source Code and Executable form of any of the following:
-
-      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
-
-      B. Any new file that contains any part of the Original Software or previous Modification; or
-
-      C. Any new file that is contributed or otherwise made available under the terms of this License.
-
-      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
-
-      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
-
-      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
-
-      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
-
-      2. License Grants.
-
-      2.1. The Initial Developer Grant.
-
-      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
-
-      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
-
-      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
-
-      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
-
-      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
-
-      2.2. Contributor Grant.
-
-      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
-
-      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
-
-      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
-
-      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
-
-      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
-
-      3. Distribution Obligations.
-
-      3.1. Availability of Source Code.
-
-      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
-
-      3.2. Modifications.
-
-      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
-
-      3.3. Required Notices.
-
-      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
-
-      3.4. Application of Additional Terms.
-
-      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients’ rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
-
-      3.5. Distribution of Executable Versions.
-
-      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient’s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
-
-      3.6. Larger Works.
-
-      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
-
-      4. Versions of the License.
-
-      4.1. New Versions.
-
-      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
-
-      4.2. Effect of New Versions.
-
-      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
-
-      4.3. Modified Versions.
-
-      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
-
-      5. DISCLAIMER OF WARRANTY.
-
-      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-      6. TERMINATION.
-
-      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
-
-      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
-
-      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
-
-      7. LIMITATION OF LIABILITY.
-
-      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-      8. U.S. GOVERNMENT END USERS.
-
-      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
-
-      9. MISCELLANEOUS.
-
-      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction’s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys’ fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
-
-      10. RESPONSIBILITY FOR CLAIMS.
-
-      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
-
-      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
-
-      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
-
-
-
-   ==
-
-   Component(s):
-  - jersey-client (https://jersey.java.net/jersey-client/)
-    repo/jersey-client-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - jersey-core (https://jersey.java.net/jersey-core/)
-    repo/jersey-core-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - jersey-grizzly2 (https://jersey.java.net/jersey-grizzly2/)
-    repo/jersey-grizzly2-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - jersey-json (https://jersey.java.net/jersey-json/)
-    repo/jersey-json-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - jersey-server (https://jersey.java.net/jersey-server/)
-    repo/jersey-server-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - jersey-guice (https://jersey.java.net/jersey-contribs/jersey-guice/)
-    repo/jersey-guice-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - Jersey Test FrameworkCore (https://jersey.java.net/jersey-test-framework/jersey-test-framework-core/)
-    repo/jersey-test-framework-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - Jersey Test FrameworkGrizzly 2 Module (https://jersey.java.net/jersey-test-framework/jersey-test-framework-grizzly2/)
-    repo/jersey-test-framework-grizzly2-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   Are available under the CDDL 1.1:
-   --
-
-      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)Version 1.1
-
-      1. Definitions.
-
-      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
-      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
-      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
-      1.4. “Executable” means the Covered Software in any form other than Source Code.
-      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
-      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
-      1.7. “License” means this document.
-      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
-      1.9. “Modifications” means the Source Code and Executable form of any of the following:
-      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
-      B. Any new file that contains any part of the Original Software or previous Modification; or
-      C. Any new file that is contributed or otherwise made available under the terms of this License.
-      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
-      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
-      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
-      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
-      2. License Grants.
-
-      2.1. The Initial Developer Grant.
-      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
-      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
-      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
-      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
-      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
-      2.2. Contributor Grant.
-      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
-      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
-      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
-      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
-      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
-      3. Distribution Obligations.
-
-      3.1. Availability of Source Code.
-      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
-      3.2. Modifications.
-      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
-      3.3. Required Notices.
-      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
-      3.4. Application of Additional Terms.
-      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
-      3.5. Distribution of Executable Versions.
-      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
-      3.6. Larger Works.
-      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
-      4. Versions of the License.
-
-      4.1. New Versions.
-      Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
-      4.2. Effect of New Versions.
-      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
-      4.3. Modified Versions.
-      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
-      5. DISCLAIMER OF WARRANTY.
-
-      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-      6. TERMINATION.
-
-      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
-      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
-      6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
-      6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
-      7. LIMITATION OF LIABILITY.
-
-      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-      8. U.S. GOVERNMENT END USERS.
-
-      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
-
-      9. MISCELLANEOUS.
-
-      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
-
-      10. RESPONSIBILITY FOR CLAIMS.
-
-      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
-
-      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
-
-      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
-   --
-
 
    ===
 
    Component(s):
 
    - JUnit (http://junit.org)
-     repo/junit-4.11.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     lib/junit-4.8.1.jar
 
    Are available under the CPL 1.0:
 
@@ -953,341 +435,11 @@
       any resulting litigation.
       --
 
-      ===
-      Component(s)
-
-      - SLF4J JCL Binding (http://www.slf4j.org) 
-        repo/slf4j-jcl-1.6.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-      - SLF4J LOG4J-12 Binding (http://www.slf4j.org)
-        repo/slf4j-log4j12-1.7.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-      - SLF4J API Module (http://www.slf4j.org/slf4j-api)
-        repo/slf4j-api-1.6.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-      are provided under the MIT license:
-
-      --
-      Copyright (c) 2004-2013 QOS.ch
-       All rights reserved.
-
-       Permission is hereby granted, free  of charge, to any person obtaining
-       a  copy  of this  software  and  associated  documentation files  (the
-       "Software"), to  deal in  the Software without  restriction, including
-       without limitation  the rights to  use, copy, modify,  merge, publish,
-       distribute,  sublicense, and/or sell  copies of  the Software,  and to
-       permit persons to whom the Software  is furnished to do so, subject to
-       the following conditions:
-       
-       The  above  copyright  notice  and  this permission  notice  shall  be
-       included in all copies or substantial portions of the Software.
-       
-       THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
-       EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
-       MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
-       NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-       LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-       OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
-       WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-   --
-
-   ===
-   Component(s):
-   - antlr-runtime (http://www.antlr.org/antlr-runtime)
-     repo/antlr-runtime-3.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - ANTLR ST4 4.0.4 (http://www.stringtemplate.org)
-     repo/ST4-4.0.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - ANTLR StringTemplate (http://www.stringtemplate.org)
-     repo/stringtemplate-3.2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - AntLR Parser Generator (http://www.antlr.org/)
-     repo/antlr-2.7.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   Are available under a  BSD-style License:
-
-   --
-      Copyright (c) 2012 Terence Parr and Sam Harwell
-      All rights reserved.
-      Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-      Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-      Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-      Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s):
-   - JSch (http://www.jcraft.com/jsch/) 
-     repo/jsch-0.1.42.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-
-   --
-      JSch 0.0.* was released under the GNU LGPL license.  Later, we have switched 
-      over to a BSD-style license. 
-
-      ------------------------------------------------------------------------------
-      Copyright (c) 2002-2015 Atsuhiko Yamanaka, JCraft,Inc. 
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions are met:
-
-        1. Redistributions of source code must retain the above copyright notice,
-           this list of conditions and the following disclaimer.
-
-        2. Redistributions in binary form must reproduce the above copyright 
-           notice, this list of conditions and the following disclaimer in 
-           the documentation and/or other materials provided with the distribution.
-
-        3. The names of the authors may not be used to endorse or promote products
-           derived from this software without specific prior written permission.
-
-      THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-      FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-      INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-      INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-      LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-      NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-      EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s):
-   - StAX Utilities (http://stax-utils.dev.java.net/stax-utils)
-     net.java.dev.stax-utils:stax-utils:jar:20060502:compile
-
-   are available under a BSD-style license::
-
-   --
-      Copyright (c) 2004, Christian Niles, unit12.net
-      Copyright (c) 2004, Sun Microsystems, Inc.
-      Copyright (c) 2006, John Kristian 
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions are
-      met:
-
-          * Redistributions of source code must retain the above copyright
-            notice, this list of conditions and the following disclaimer.
-
-          * Redistributions in binary form must reproduce the above
-            copyright notice, this list of conditions and the following
-            disclaimer in the documentation and/or other materials provided
-            with the distribution.
-
-          * Neither the name of the listed copyright holders nor the names
-            of its contributors may be used to endorse or promote products
-            derived from this software without specific prior written
-            permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-      "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-      LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-      A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-      OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-      THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-      OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s):
-   - ParaNamer Core (http://paranamer.codehaus.org/paranamer) 
-     repo/paranamer-2.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-
-   --
-      [ ParaNamer used to be 'Pubic Domain', but since it includes a small piece of ASM it is now the same license as that: BSD ]
-
-       Copyright (c) 2006 Paul Hammant & ThoughtWorks Inc
-       All rights reserved.
-
-       Redistribution and use in source and binary forms, with or without
-       modification, are permitted provided that the following conditions
-       are met:
-       1. Redistributions of source code must retain the above copyright
-          notice, this list of conditions and the following disclaimer.
-       2. Redistributions in binary form must reproduce the above copyright
-          notice, this list of conditions and the following disclaimer in the
-          documentation and/or other materials provided with the distribution.
-       3. Neither the name of the copyright holders nor the names of its
-          contributors may be used to endorse or promote products derived from
-          this software without specific prior written permission.
-
-       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-       AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-       IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-       ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-       LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-       CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-       SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-       INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-       CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-       ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-   --
-
-   ===
-   Component(s):
-   - JDOM
-     repo/jdom-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a Modified ASL license:
-   --
-      /*-- 
-
-       $Id: LICENSE.txt,v 1.11 2004/02/06 09:32:57 jhunter Exp $
-
-       Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
-       All rights reserved.
-       
-       Redistribution and use in source and binary forms, with or without
-       modification, are permitted provided that the following conditions
-       are met:
-       
-       1. Redistributions of source code must retain the above copyright
-          notice, this list of conditions, and the following disclaimer.
-       
-       2. Redistributions in binary form must reproduce the above copyright
-          notice, this list of conditions, and the disclaimer that follows 
-          these conditions in the documentation and/or other materials 
-          provided with the distribution.
-
-       3. The name "JDOM" must not be used to endorse or promote products
-          derived from this software without prior written permission.  For
-          written permission, please contact <request_AT_jdom_DOT_org>.
-       
-       4. Products derived from this software may not be called "JDOM", nor
-          may "JDOM" appear in their name, without prior written permission
-          from the JDOM Project Management <request_AT_jdom_DOT_org>.
-       
-       In addition, we request (but do not require) that you include in the 
-       end-user documentation provided with the redistribution and/or in the 
-       software itself an acknowledgement equivalent to the following:
-           "This product includes software developed by the
-            JDOM Project (http://www.jdom.org/)."
-       Alternatively, the acknowledgment may be graphical using the logos 
-       available at http://www.jdom.org/images/logos.
-
-       THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-       WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-       OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-       DISCLAIMED.  IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
-       CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-       SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-       LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-       USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-       ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-       OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-       OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-       SUCH DAMAGE.
-
-       This software consists of voluntary contributions made by many 
-       individuals on behalf of the JDOM Project and was originally 
-       created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
-       Brett McLaughlin <brett_AT_jdom_DOT_org>.  For more information
-       on the JDOM Project, please see <http://www.jdom.org/>. 
-
-    */
-   --
-
-   ===
-   Component(s):
-   - Hamcrest Core (https://github.com/hamcrest/JavaHamcrest/hamcrest-core) 
-     repo/hamcrest-core-1.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license
-   --
-      BSD License
-
-      Copyright (c) 2000-2006, www.hamcrest.org
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions are met:
-
-      Redistributions of source code must retain the above copyright notice, this list of
-      conditions and the following disclaimer. Redistributions in binary form must reproduce
-      the above copyright notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the distribution.
-
-      Neither the name of Hamcrest nor the names of its contributors may be used to endorse
-      or promote products derived from this software without specific prior written
-      permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-      EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-      OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
-      SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-      INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-      TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-      BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-      CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
-      WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-      DAMAGE.
-   --
-
-   ===
-   Component(s):
-   - Protocol Buffer Java API (http://code.google.com/p/protobuf) 
-     repo/prtobuf-java-2.5.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-
-   --
-      This license applies to all parts of Protocol Buffers except the following:
-
-        - Atomicops support for generic gcc, located in
-          src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
-          This file is copyrighted by Red Hat Inc.
-
-        - Atomicops support for AIX/POWER, located in
-          src/google/protobuf/stubs/atomicops_internals_power.h.
-          This file is copyrighted by Bloomberg Finance LP.
-
-      Copyright 2014, Google Inc.  All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions are
-      met:
-
-          * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-          * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following disclaimer
-      in the documentation and/or other materials provided with the
-      distribution.
-          * Neither the name of Google Inc. nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-      "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-      LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-      A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-      OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-      THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-      OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-      Code generated by the Protocol Buffer compiler is owned by the owner
-      of the input file used when generating it.  This code is not
-      standalone and requires a support library to be linked with it.  This
-      support library is itself covered by the above license.
-   --
 
    ===
    Component(s):
    - JSON (JavaScript Object Notation) (http://www.json.org/java/index.html) 
-     repo/json-20090211.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     lib/json-20090211.jar
 
    are available under the JSON license:
 
@@ -1303,134 +455,12 @@
       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    --
 
-   ===
-   Component(s):
-   - XZ for Java (http://tukaani.org/xz/java.html) 
-     repo/xz-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - XML Pull Parsing API (http://aopalliance.sourceforge.net/aopalliance) 
-     repo/aopalliance-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are in the public domain.
-
-   ===
-
-   Component(s):
-   - JLine (http://jline.sourceforge.net) 
-     repo/jline-0.9.94.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-   --
-
-      Copyright (c) 2002-2006, Marc Prud'hommeaux <mwp1@cornell.edu>
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or
-      without modification, are permitted provided that the following
-      conditions are met:
-
-      Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-
-      Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer
-      in the documentation and/or other materials provided with
-      the distribution.
-
-      Neither the name of JLine nor the names of its contributors
-      may be used to endorse or promote products derived from this
-      software without specific prior written permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-      "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-      BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-      AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-      EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-      FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-      OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-      PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-      AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-      IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-      OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s):
-
-   - xmlenc Library (http://xmlenc.sourceforge.net) 
-     repo/xmlenc-0.52.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-
-   --
-      Copyright 2003-2005, Ernst de Haan <wfe.dehaan@gmail.com>
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions are met:
-
-      1. Redistributions of source code must retain the above copyright notice, this
-         list of conditions and the following disclaimer.
-
-      2. Redistributions in binary form must reproduce the above copyright notice,
-         this list of conditions and the following disclaimer in the documentation
-         and/or other materials provided with the distribution.
-
-      3. Neither the name of the copyright holder nor the names of its contributors
-         may be used to endorse or promote products derived from this software
-         without specific prior written permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-      IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-      DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-      FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-      DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-      SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-      CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-      OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-      OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s):
-   - Appassembler :: Generic Bootstrapper (http://mojo.codehaus.org/appassembler/appassembler-booter) 
-     repo/appassembler-booter-1.3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Appassembler :: Model (http://mojo.codehaus.org/appassembler/appassembler-model) 
-     repo/appassembler-model-1.3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under the MIT license:
-
-   --
-      The MIT License
-
-      Copyright 2006-2012 The Codehaus.
-
-      Permission is hereby granted, free of charge, to any person obtaining a copy of
-      this software and associated documentation files \(the "Software"\), to deal in
-      the Software without restriction, including without limitation the rights to
-      use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-      of the Software, and to permit persons to whom the Software is furnished to do
-      so, subject to the following conditions:
-
-      The above copyright notice and this permission notice shall be included in all
-      copies or substantial portions of the Software.
-
-      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-      SOFTWARE.
-   --
 
    ===
    Component(s):
 
    - args4j (http://args4j.dev.java.net/args4j/) 
-     repo/args4j-2.0.12.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     lib/args4j-2.0.12.jar
 
    are available under the MIT License:
 
@@ -1458,282 +488,3 @@
       FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
       OTHER DEALINGS IN THE SOFTWARE.
    --
-
-   ===
-   Component(s)
-   - ASM Core (http://asm.objectweb.org/asm/) 
-     repo/asm-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-
-   --
-      Copyright (c) 2000-2011 INRIA, France Telecom
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions
-      are met:
-
-      1. Redistributions of source code must retain the above copyright
-         notice, this list of conditions and the following disclaimer.
-
-      2. Redistributions in binary form must reproduce the above copyright
-         notice, this list of conditions and the following disclaimer in the
-         documentation and/or other materials provided with the distribution.
-
-      3. Neither the name of the copyright holders nor the names of its
-         contributors may be used to endorse or promote products derived from
-         this software without specific prior written permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-      IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-      ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-      LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-      CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-      SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-      INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-      CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-      THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-
-   ===
-   Component(s)
-   - Plexus Utils (http://asm.objectweb.org/asm/) 
-     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    contain components under a BSD-style license:
-
-   --
-    /********************************************************************************
-     * CruiseControl, a Continuous Integration Toolkit
-     * Copyright (c) 2001-2003, ThoughtWorks, Inc.
-     * 651 W Washington Ave. Suite 500
-     * Chicago, IL 60661 USA
-     * All rights reserved.
-     *
-     * Redistribution and use in source and binary forms, with or without
-     * modification, are permitted provided that the following conditions
-     * are met:
-     *
-     *     + Redistributions of source code must retain the above copyright
-     *       notice, this list of conditions and the following disclaimer.
-     *
-     *     + Redistributions in binary form must reproduce the above
-     *       copyright notice, this list of conditions and the following
-     *       disclaimer in the documentation and/or other materials provided
-     *       with the distribution.
-     *
-     *     + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
-     *       names of its contributors may be used to endorse or promote
-     *       products derived from this software without specific prior
-     *       written permission.
-     *
-     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-     * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-     * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-     * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
-     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-     * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-     * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-     * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-     * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-     ********************************************************************************/
-   --
-
-   ===
-   Component(s)
-   - Plexus Utils (http://asm.objectweb.org/asm/) 
-     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    contain components under a BSD-style license:
-
-   --
-    Javolution - Java(TM) Solution for Real-Time and Embedded Systems
-    Copyright (c) 2006, Javolution (http://javolution.org)
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without modification,
-    are permitted provided that the following conditions are met:
-
-        * Redistributions of source code must retain the above copyright notice,
-          this list of conditions and the following disclaimer.
-        * Redistributions in binary form must reproduce the above copyright notice,
-          this list of conditions and the following disclaimer in the documentation
-          and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
-    ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-    ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s)
-   - Plexus Utils (http://asm.objectweb.org/asm/) 
-     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    contain components under the Indiana University Extreme! Lab Software License:
-
-   --
-    Indiana University Extreme! Lab Software License
-
-    Version 1.1.1
-
-    Copyright (c) 2002 Extreme! Lab, Indiana University. All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without 
-    modification, are permitted provided that the following conditions 
-    are met:
-
-    1. Redistributions of source code must retain the above copyright notice, 
-       this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright 
-       notice, this list of conditions and the following disclaimer in 
-       the documentation and/or other materials provided with the distribution.
-
-    3. The end-user documentation included with the redistribution, if any, 
-       must include the following acknowledgment:
-
-      "This product includes software developed by the Indiana University 
-      Extreme! Lab (http://www.extreme.indiana.edu/)."
-
-    Alternately, this acknowledgment may appear in the software itself, 
-    if and wherever such third-party acknowledgments normally appear.
-
-    4. The names "Indiana Univeristy" and "Indiana Univeristy Extreme! Lab" 
-    must not be used to endorse or promote products derived from this 
-    software without prior written permission. For written permission, 
-    please contact http://www.extreme.indiana.edu/.
-
-    5. Products derived from this software may not use "Indiana Univeristy" 
-    name nor may "Indiana Univeristy" appear in their name, without prior 
-    written permission of the Indiana University.
-
-    THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
-    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-    IN NO EVENT SHALL THE AUTHORS, COPYRIGHT HOLDERS OR ITS CONTRIBUTORS
-    BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-    ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-===
-
-
-For portions of the AsterixDB WebUI in:
-repo/asterix-app-0.8.8.jar, within
-asterix/asterix-server-0.8.8-binary-assembly.zip, within this assembly
-located at:
-
- webui/static/js/jquery.min.js
-and
- webui/static/js/jquery.autosize-min.js
-
-are available under a MIT-style license
---
-
-   Copyright jQuery Foundation and other contributors, https://jquery.org/
-
-   This software consists of voluntary contributions made by many
-   individuals. For exact contribution history, see the revision history
-   available at https://github.com/jquery/jquery
-
-   The following license applies to all parts of this software except as
-   documented below:
-
-   ====
-
-   Permission is hereby granted, free of charge, to any person obtaining
-   a copy of this software and associated documentation files (the
-   "Software"), to deal in the Software without restriction, including
-   without limitation the rights to use, copy, modify, merge, publish,
-   distribute, sublicense, and/or sell copies of the Software, and to
-   permit persons to whom the Software is furnished to do so, subject to
-   the following conditions:
-
-   The above copyright notice and this permission notice shall be
-   included in all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-   LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-   OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-   ====
-
-   All files located in the node_modules and external directories are
-   externally maintained libraries used by this software which have their
-   own licenses; we recommend you read them, as their terms may differ from
-   the terms above.
-
-as well as portions of the WebUI at:
-webui/static/js/bootstrap.min.js
-
-   The MIT License (MIT)
-
-   Copyright (c) 2011-2015 Twitter, Inc
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy
-   of this software and associated documentation files (the "Software"), to deal
-   in the Software without restriction, including without limitation the rights
-   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   copies of the Software, and to permit persons to whom the Software is
-   furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-   THE SOFTWARE.
-
-
-and portions of the WebUI at:
-webui/static/js/smoothie.js
-
-   MIT License
-   -----------
-
-   Copyright (c) 2010-2013, Joe Walnes
-                 2013-2014, Drew Noakes
-
-                 Permission is hereby granted, free of charge, to any person obtaining a copy
-                 of this software and associated documentation files (the "Software"), to deal
-                 in the Software without restriction, including without limitation the rights
-                 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-                 copies of the Software, and to permit persons to whom the Software is
-                 furnished to do so, subject to the following conditions:
-
-                 The above copyright notice and this permission notice shall be included in
-                 all copies or substantial portions of the Software.
-
-                 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-                 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-                 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-                 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-                 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-                 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-                 THE SOFTWARE.
diff --git a/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/NOTICE b/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/NOTICE
index 2612883..8b7be01 100644
--- a/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/NOTICE
+++ b/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/NOTICE
@@ -1,4 +1,4 @@
-Apache AsterixDB
+Apache AsterixDB Hyracks Text Client Example
 Copyright 2016 The Apache Software Foundation
 
 This product includes software developed at
@@ -6,398 +6,22 @@
 
 AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
 
- - repo/algebricks-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+ - lib/httpclient-4.3.jar
 
-    algebricks-common
-    Copyright 2016 The Apache Software Foundation
+    Apache HttpClient
+    Copyright 1999-2013 The Apache Software Foundation
 
- - repo/algebricks-compiler-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+    This product includes software developed at
+    The Apache Software Foundation (http://www.apache.org/).
 
-    algebricks-compiler
-    Copyright 2016 The Apache Software Foundation
+- lib/httpcore-4.3.jar
 
- - repo/algebricks-core-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+    Apache HttpCore
+    Copyright 2005-2013 The Apache Software Foundation
 
-    algebricks-core
-    Copyright 2016 The Apache Software Foundation
+    This product includes software developed at
+    The Apache Software Foundation (http://www.apache.org/).
 
- - repo/algebricks-data-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
 
-    algebricks-data
-    Copyright 2016 The Apache Software Foundation
-
- - repo/algebricks-rewriter-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    algebricks-rewriter
-    Copyright 2016 The Apache Software Foundation
-
- - repo/algebricks-runtime-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    algebricks-runtime
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-algebra-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-algebra
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-app-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-app
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-aql-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-aql
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-common-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-events-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-events
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-external-data-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-external-data
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-fuzzyjoin-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-fuzzyjoin
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-metadata-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-metadata
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-om-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-om
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-runtime-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-runtime
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-server-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-server
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-tools-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-tools
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-transactions-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-transactions
-    Copyright 2016 The Apache Software Foundation
-
- - repo/avro-1.7.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Apache Avro
-    Copyright 2009-2013 The Apache Software Foundation
-
- - repo/commons-logging-1.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Commons Logging
-    Copyright 2001-2007 The Apache Software Foundation
-
- - repo/derby-10.10.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Apache Derby
-    Copyright 2004-2013 The Apache Software Foundation
-
-    =========================================================================
-
-        Portions of Derby were originally developed by
-        International Business Machines Corporation and are
-    licensed to the Apache Software Foundation under the
-    "Software Grant and Corporate Contribution License Agreement",
-    informally known as the "Derby CLA".
-    The following copyright notice(s) were affixed to portions of the code
-    with which this file is now or was at one time distributed
-    and are placed here unaltered.
-
-    (C) Copyright 1997,2004 International Business Machines Corporation.  All rights reserved.
-
-    (C) Copyright IBM Corp. 2003. 
-
-
-    =========================================================================
-
-
-    The JDBC apis for small devices and JDBC3 (under java/stubs/jsr169 and
-    java/stubs/jdbc3) were produced by trimming sources supplied by the
-    Apache Harmony project. In addition, the Harmony SerialBlob and
-    SerialClob implementations are used. The following notice covers the Harmony sources:
-
-    Portions of Harmony were originally developed by
-    Intel Corporation and are licensed to the Apache Software
-    Foundation under the "Software Grant and Corporate Contribution
-    License Agreement", informally known as the "Intel Harmony CLA".
-
-
- - repo/guice-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Google Guice - Core Library
-    Copyright 2006-2011 Google, Inc.
-
- - repo/guice-servlet-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Google Guice - Extensions - Servlet
-    Copyright 2006-2011 Google, Inc.
-
- - repo/hive-ant-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Ant Utilities
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Common
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-exec-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Query Language
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-metastore-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Metastore
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-serde-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Serde
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-0.20-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims 0.20
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-0.20S-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims 0.20S
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-0.23-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims 0.23
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims Common
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-common-secure-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims Secure Common
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hyracks-api-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-api
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-client-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-client
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-comm-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-comm
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-control-cc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-control-cc
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-control-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-control-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-control-nc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-control-nc
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-dataflow-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-dataflow-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-dataflow-std-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-dataflow-std
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-data-std-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-data-std
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-hdfs-2.x-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-hdfs-2.x
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-hdfs-core-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-hdfs-core
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-ipc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-ipc
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-net-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-net
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-bloomfilter-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-bloomfilter
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-btree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-btree
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-lsm-btree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-lsm-btree
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-lsm-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-lsm-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-lsm-invertedindex-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-lsm-invertedindex
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-lsm-rtree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-lsm-rtree
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-rtree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-rtree
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    This product includes software developed by the Indiana University 
-    Extreme! Lab (http://www.extreme.indiana.edu/)
-
-    This product includes software developed by
-    ThoughtWorks (http://www.thoughtworks.com).
-
-    This product includes software developed by
-    javolution (http://javolution.org/).
-
-    This product includes software developed by
-    Rome (https://rome.dev.java.net/).
-
-- repo/velocity-1.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Apache Velocity
-    Copyright (C) 2000-2007 The Apache Software Foundation
-
- - repo/wicket-core-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   Apache Wicket
-   Copyright 2006-2011 Apache Software Foundation
-
-   This product includes software from QOS.ch (http://slf4j.org) licensed under the X11 license
-   Copyright (c) 2004-2008 QOS.ch
-
-   Contains Diff library from Mavens JRCS, released under
-   The Apache Software License, Version 1.1.
-   (c) 1999-2003
-
-   org.apache.wicket.markup.html.form.upload.MultiFileUploadField.js is taken from [1]
-   and has the following notice:
-      "Licence:
-       Use this however/wherever you like, just don't blame me if it breaks
-       anything.
-
-       Credit:
-       If you're nice, you'll leave this bit:
-
-       Class by Stickman -- http://www.the-stickman.com
-       with thanks to:
-       [for Safari fixes]
-          Luis Torrefranca -- http://www.law.pitt.edu
-          and
-          Shawn Parker & John Pennypacker -- http://www.fuzzycoconut.com
-       [for duplicate name bug]
-          'neal'"
-   [1]: http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/
- - repo/wicket-request-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Wicket Request
-    Copyright 2006-2011 Apache Software Foundation
-
- - repo/wicket-util-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Wicket Util
-    Copyright 2006-2011 Apache Software Foundation
-
- - repo/xercesImpl-2.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   Apache Xerces Java
-   Copyright 1999-2007 The Apache Software Foundation
-
-   Portions of this software were originally based on the following:
-     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
-     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
-     - voluntary contributions made by Paul Eng on behalf of the 
-       Apache Software Foundation that were originally developed at iClick, Inc.,
-       software copyright (c) 1999.
-
- - repo/xml-apis-1.3.04.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   Apache XML Commons XML APIs
-   Copyright 2006 The Apache Software Foundation.
-
-
-   Portions of this software were originally based on the following:
-     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
-     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
-     - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
+    This project contains annotations derived from JCIP-ANNOTATIONS
+    Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
diff --git a/hyracks/hyracks-examples/text-example/texthelper/pom.xml b/hyracks/hyracks-examples/text-example/texthelper/pom.xml
index 8bc557e..771e718 100644
--- a/hyracks/hyracks-examples/text-example/texthelper/pom.xml
+++ b/hyracks/hyracks-examples/text-example/texthelper/pom.xml
@@ -63,6 +63,13 @@
           <fork>true</fork>
         </configuration>
       </plugin>
+      <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <configuration>
+              <skip>true</skip>
+          </configuration>
+      </plugin>
     </plugins>
   </build>
 </project>
diff --git a/hyracks/hyracks-examples/text-example/textserver/pom.xml b/hyracks/hyracks-examples/text-example/textserver/pom.xml
index bca0839..48c12be 100644
--- a/hyracks/hyracks-examples/text-example/textserver/pom.xml
+++ b/hyracks/hyracks-examples/text-example/textserver/pom.xml
@@ -151,6 +151,13 @@
       	  </execution>
       	</executions>
       </plugin>
+      <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <configuration>
+              <skip>true</skip>
+          </configuration>
+      </plugin>
     </plugins>
   </build>
   <dependencies>
diff --git a/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/LICENSE b/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/LICENSE
index 7974129..d448c57 100644
--- a/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/LICENSE
+++ b/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/LICENSE
@@ -209,274 +209,11 @@
    subcomponents is subject to the terms and condition of the following
    licenses.
 
-   Components under Apache License 2.0 are as follows:
-
-     - Apache Derby Database Engine and Embedded JDBC Driver (http://db.apache.org/derby/derby/)
-       repo/derby-10.10.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - JDO API (http://db.apache.org/jdo)
-       repo/jdo-api-3.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Rome HTTP Fetcher
-       repo/rome-fetcher-1.0.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - An open source Java toolkit for Amazon S3 (http://jets3t.s3.amazonaws.com/index.html)
-       repo/jets3t-0.6.1 in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - The Netty Project (http://www.jboss.org/netty/)
-       repo/netty-3.2.2.Final.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - The Netty Project (http://netty.io/)
-       repo/netty-3.6.2.Final.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - HttpClient (http://jakarta.apache.org/commons/httpclient/)
-       repo/commons-httpclient-3.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - HttpClient (http://hc.apache.org/httpcomponents-client)
-       repo/httpclient-4.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
-       repo/httpcore-4.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - twitter4j-core (http://twitter4j.org/)
-       repo/twitter4j-core-4.0.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - twitter4j-stream (http://twitter4j.org/)
-       repo/twitter4j-stream-4.0.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
-       repo/jetty-continuation-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
-       repo/jetty-http-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
-       repo/jetty-io-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
-       repo/jetty-security-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Server Core (http://www.eclipse.org/jetty)
-       repo/jetty-server-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
-       repo/jetty-servlet-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
-       repo/jetty-util-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
-       repo/jetty-webapp-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
-       repo/jetty-xml-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
-       repo/servlet-api-3.0.20100224.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - BoneCP :: Core Library (http://jolbox.com/bonecp)
-       repo/bonecp-0.8.0.RELEASE.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - FindBugs-jsr305 (http://findbugs.sourceforge.net/)
-       repo/jsr305-1.3.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Guava: Google Core Libraries for Java (http://code.google.com/p/guava-libraries/guava)
-       repo/guava-18.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - JSON.simple (http://code.google.com/p/json-simple/)
-       repo/json-simple-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Microsoft Windows Azure Client API (https://github.com/WindowsAzure/azure-sdk-for-java)
-       repo/microsoft-windowsazure-api-0.4.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - javax.inject (http://code.google.com/p/atinject/)
-       repo/javax.inject-1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Thrift (http://thrift.apache.org)
-       repo/libfb303-0.9.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Thrift (http://thrift.apache.org)
-       repo/libthrift-0.9.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - DataNucleus JDO API plugin (http://www.datanucleus.org)
-       repo/datanucleus-api-jdo-3.2.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - DataNucleus Core (http://www.datanucleus.org)
-       repo/datanucleus-core-3.2.10.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - DataNucleus RDBMS (http://www.datanucleus.org)
-       repo/datanucleus-rdbms-3.2.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - JAXB2 CommonsValue Constructor Plugin (http://java.net/projects/jaxb2-commons/pages/value-constructor)
-       repo/jaxb2-value-constructor-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - StAX API (http://stax.codehaus.org/)
-       repo/stax-api-1.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - StAX
-       repo/stax-1.1.1-dev.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
-       repo/wicket-core-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Wicket Request (http://maven.apache.org)
-       repo/wicket-request-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Wicket Util (http://maven.apache.org)
-       repo/wicket-util-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Annotations
-       repo/hadoop-annotations-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Auth
-       repo/hadoop-auth-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Client
-       repo/hadoop-client-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Common
-       repo/hadoop-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Common (tests)
-       repo/hadoop-common-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop HDFS
-       repo/hadoop-hdfs-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop HDFS
-       repo/hadoop-hdfs-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-app
-       repo/hadoop-mapreduce-client-app-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-common
-       repo/hadoop-mapreduce-client-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-core
-       repo/hadoop-mapreduce-client-core-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-hs
-       repo/hadoop-mapreduce-client-hs-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-jobclient
-       repo/hadoop-mapreduce-client-jobclient-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-jobclient
-       repo/hadoop-mapreduce-client-jobclient-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-mapreduce-client-shuffle
-       repo/hadoop-mapreduce-client-shuffle-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Hadoop Mini-Cluster
-       repo/hadoop-minicluster-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - zookeeper
-       repo/zookeeper-3.4.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-api
-       repo/hadoop-yarn-api-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-client
-       repo/hadoop-yarn-client-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-common
-       repo/hadoop-yarn-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-server-common
-       repo/hadoop-yarn-server-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-server-nodemanager
-       repo/hadoop-yarn-server-nodemanager-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-server-resourcemanager
-       repo/hadoop-yarn-server-resourcemanager-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-server-tests
-       repo/hadoop-yarn-server-tests-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - hadoop-yarn-server-web-proxy
-       repo/hadoop-yarn-server-web-proxy-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Plexus Common Utilities (http://plexus.codehaus.org/plexus-utils)
-       repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jettison
-       repo/jettison-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jackson (http://jackson.codehaus.org)
-       repo/jackson-core-asl-1.8.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - JAX-RS provider for JSON content type (http://jackson.codehaus.org)
-       repo/jackson-jaxrs-1.8.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Data Mapper for Jackson (http://jackson.codehaus.org)
-       repo/jackson-mapper-asl-1.9.12.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Xml Compatibility extensions for Jackson (http://jackson.codehaus.org)
-       repo/jackson-mapper-xc-1.8.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jackson-core (http://wiki.fasterxml.com/JacksonHome)
-       repo/jackson-core-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Google GuiceCore Library (http://code.google.com/p/google-guice/guice/)
-       repo/guice-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Google GuiceExtensionsServlet (http://code.google.com/p/google-guice/extensions-parent/guice-servlet/)
-       repo/guice-servlet-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty Server (http://jetty.mortbay.org/)
-       repo/jetty-6.1.26.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jetty Utilities (http://jetty.mortbay.org/)
-       repo/jetty-util-6.1.26.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Configuration (http://commons.apache.org/${pom.artifactId.substring(8)}/)
-       repo/commons-configuration-1.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Digester (http://jakarta.apache.org/commons/digester/)
-       repo/commons-digester-1.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - EL (http://jakarta.apache.org/commons/el/)
-       repo/commons-el-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Commons BeanUtils
-       repo/commons-beanutils-1.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons BeanUtils Core (http://commons.apache.org/beanutils/)
-       repo/commons-beanutils-core-1.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons CLI (http://commons.apache.org/cli/)
-       repo/commons-cli-1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
-       repo/commons-codec-1.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Commons Collections (http://commons.apache.org/collections/commons-collections)
-       commons-daemon:commons-daemon:jar:1.0.13
-     - Commons Daemon (http://commons.apache.org/daemon/)
-       repo/commons-daemon-1.0.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons IO (http://commons.apache.org/io/)
-       repo/commons-io-2.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Lang (http://commons.apache.org/lang/)
-       repo/commons-lang-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Commons Logging (http://commons.apache.org/logging)
-       repo/commons-logging-1.0.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Commons Logging Api (http://commons.apache.org/logging)
-       repo/commons-logging-api-1.0.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Net (http://commons.apache.org/net/)
-       repo/commons-net-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Log4j (http://logging.apache.org:80/log4j/1.2/log4j)
-       repo/log4j-1.2.17.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Ant Core (http://ant.apache.org/)
-       repo/ant-1.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Ant Launcher (http://ant.apache.org/)
-       repo/ant-launcher-1.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Avro (http://avro.apache.org)
-       repo/avro-1.7.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Compress (http://commons.apache.org/compress/)
-       repo/commons-compress-1.4.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Lang (http://commons.apache.org/lang/)
-       repo/commons-lang3-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Commons Math (http://commons.apache.org/math/)
-       repo/commons-math-2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Ant Utilities (http://hive.apache.org/hive-ant)
-       repo/hive-ant-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Common (http://hive.apache.org/hive-common)
-       repo/hive-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Query Language (http://hive.apache.org/hive-exec)
-       repo/hive-exec-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Metastore (http://hive.apache.org/hive-metastore)
-       repo/hive-metastore-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Serde (http://hive.apache.org/hive-serde)
-       repo/hive-serde-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims (http://hive.apache.org/hive-shims)
-       repo/hive-shims-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims 0.20 (http://hive.apache.org/hive-shims-0.20)
-       repo/hive-shims-0.20-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims 0.20S (http://hive.apache.org/hive-shims-0.20S)
-       repo/hive-shims-0.20S-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims 0.23 (http://hive.apache.org/hive-shims-0.23)
-       repo/hive-shims-0.23-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims Common (http://hive.apache.org/hive-shims-common)
-       repo/hive-shims-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Hive Shims Secure Common (http://hive.apache.org/hive-shims-common-secure)
-       repo/hive-shims-secure-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Apache Velocity (http://velocity.apache.org/engine/releases/velocity-1.5/)
-       repo/velocity-1.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Jakarta ORO
-       repo/oro-2.0.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - ROME
-       repo/rome-1.0.1-modified-01.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - jasper-compiler (http://tomcat.apache.org/jasper-compiler)
-       repo/jasper-compiler-5.5.23.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - jasper-runtime (http://tomcat.apache.org/jasper-runtime)
-       repo/jasper-runtime-5.5.23.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Xerces2 Java Parser (http://xerces.apache.org/xerces2-j)
-       repo/xercesImpl-2.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - XML APIs (http://xml.apache.org/commons/components/external/xml-apis)
-       repo/xml-apis-1.3.04.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Groovy (http://groovy.codehaus.org/)
-       repo/groovy-all-2.1.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-     - Snappy for Java (http://github.com/xerial/snappy-java/)
-       repo/snappy-java-1.0.4.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
    ===
 
    Component(s):
-   - Java Servlet API (http://servlet-spec.java.n)
-     repo/javax.servlet-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - javax.servlet API v.3.0 (http://jcp.org/en/jsr/detail?id=315)
-     repo/servlet-api-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - grizzly-framework (http://grizzly.java.net/grizzly-framework)
-     repo/grizzly-framework-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - grizzly-http (http://grizzly.java.net/grizzly-http)
-     repo/grizzly-http-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - grizzly-http-server (http://grizzly.java.net/grizzly-http-server)
-     repo/grizzly-http-server-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - grizzly-http-servlet (http://grizzly.java.net/grizzly-http-servlet)
-     repo/grizzly-http-servlet-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - grizzly-rcm (http://grizzly.java.net/grizzly-rcm)
-     repo/grizzly-rcm-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - management-api (http://kenai.com/hg/gmbal~gf_common)
-     repo/management-api-3.0.0-b012.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - gmbal-api-only (http://kenai.com/hg/gmbal~master)
-     repo/gmbal-api-only-3.0.0-b023.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - JavaBeans Activation Framework (JAF) (http://java.sun.com/products/javabeans/jaf/index.jsp)
-     repo/activation-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - JavaMail API (https://glassfish.dev.java.net/javaee5/mail/)
-     repo/mail-1.4.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Java Servlet API
-     repo/servlet-api-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Java Transaction API (http://java.sun.com/products/jta/jta)
-     repo/jta-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Sun JAXB Reference Implementation Runtime (http://jaxb.java.net/jaxb-impl)
-     repo/jaxb-impl-2.2.3-1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Java Architecture for XML Binding (JAXB API) (https://jaxb.dev.java.net/jaxb-api) 
-     repo/jaxb-api-2.2.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Streaming API for XML
-     repo/stax-api-1.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - jsp-api
-     repo/jsp-api-2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Java Servlet API (http://servlet-spec.java.net)
+     lib/javax.servlet-3.0.20100224.jar
 
 
    are available under the CDDL 1.0
@@ -616,124 +353,12 @@
       The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
 
 
-
-   ==
-
-   Component(s):
-  - jersey-client (https://jersey.java.net/jersey-client/)
-    repo/jersey-client-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - jersey-core (https://jersey.java.net/jersey-core/)
-    repo/jersey-core-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - jersey-grizzly2 (https://jersey.java.net/jersey-grizzly2/)
-    repo/jersey-grizzly2-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - jersey-json (https://jersey.java.net/jersey-json/)
-    repo/jersey-json-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - jersey-server (https://jersey.java.net/jersey-server/)
-    repo/jersey-server-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - jersey-guice (https://jersey.java.net/jersey-contribs/jersey-guice/)
-    repo/jersey-guice-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - Jersey Test FrameworkCore (https://jersey.java.net/jersey-test-framework/jersey-test-framework-core/)
-    repo/jersey-test-framework-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-  - Jersey Test FrameworkGrizzly 2 Module (https://jersey.java.net/jersey-test-framework/jersey-test-framework-grizzly2/)
-    repo/jersey-test-framework-grizzly2-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   Are available under the CDDL 1.1:
-   --
-
-      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)Version 1.1
-
-      1. Definitions.
-
-      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
-      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
-      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
-      1.4. “Executable” means the Covered Software in any form other than Source Code.
-      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
-      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
-      1.7. “License” means this document.
-      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
-      1.9. “Modifications” means the Source Code and Executable form of any of the following:
-      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
-      B. Any new file that contains any part of the Original Software or previous Modification; or
-      C. Any new file that is contributed or otherwise made available under the terms of this License.
-      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
-      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
-      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
-      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
-      2. License Grants.
-
-      2.1. The Initial Developer Grant.
-      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
-      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
-      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
-      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
-      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
-      2.2. Contributor Grant.
-      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
-      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
-      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
-      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
-      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
-      3. Distribution Obligations.
-
-      3.1. Availability of Source Code.
-      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
-      3.2. Modifications.
-      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
-      3.3. Required Notices.
-      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
-      3.4. Application of Additional Terms.
-      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
-      3.5. Distribution of Executable Versions.
-      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
-      3.6. Larger Works.
-      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
-      4. Versions of the License.
-
-      4.1. New Versions.
-      Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
-      4.2. Effect of New Versions.
-      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
-      4.3. Modified Versions.
-      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
-      5. DISCLAIMER OF WARRANTY.
-
-      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-      6. TERMINATION.
-
-      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
-      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
-      6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
-      6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
-      7. LIMITATION OF LIABILITY.
-
-      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-      8. U.S. GOVERNMENT END USERS.
-
-      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
-
-      9. MISCELLANEOUS.
-
-      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
-
-      10. RESPONSIBILITY FOR CLAIMS.
-
-      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
-
-      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
-
-      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
-   --
-
-
    ===
 
    Component(s):
 
    - JUnit (http://junit.org)
-     repo/junit-4.11.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     lib/junit-4.8.1.jar
 
    Are available under the CPL 1.0:
 
@@ -957,11 +582,9 @@
       Component(s)
 
       - SLF4J JCL Binding (http://www.slf4j.org) 
-        repo/slf4j-jcl-1.6.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-      - SLF4J LOG4J-12 Binding (http://www.slf4j.org)
-        repo/slf4j-log4j12-1.7.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+        lib/slf4j-jcl-1.6.3.jar
       - SLF4J API Module (http://www.slf4j.org/slf4j-api)
-        repo/slf4j-api-1.6.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+        lib/slf4j-api-1.6.1.jar
 
       are provided under the MIT license:
 
@@ -991,303 +614,8 @@
 
    ===
    Component(s):
-   - antlr-runtime (http://www.antlr.org/antlr-runtime)
-     repo/antlr-runtime-3.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - ANTLR ST4 4.0.4 (http://www.stringtemplate.org)
-     repo/ST4-4.0.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - ANTLR StringTemplate (http://www.stringtemplate.org)
-     repo/stringtemplate-3.2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - AntLR Parser Generator (http://www.antlr.org/)
-     repo/antlr-2.7.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   Are available under a  BSD-style License:
-
-   --
-      Copyright (c) 2012 Terence Parr and Sam Harwell
-      All rights reserved.
-      Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-      Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-      Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-      Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s):
-   - JSch (http://www.jcraft.com/jsch/) 
-     repo/jsch-0.1.42.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-
-   --
-      JSch 0.0.* was released under the GNU LGPL license.  Later, we have switched 
-      over to a BSD-style license. 
-
-      ------------------------------------------------------------------------------
-      Copyright (c) 2002-2015 Atsuhiko Yamanaka, JCraft,Inc. 
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions are met:
-
-        1. Redistributions of source code must retain the above copyright notice,
-           this list of conditions and the following disclaimer.
-
-        2. Redistributions in binary form must reproduce the above copyright 
-           notice, this list of conditions and the following disclaimer in 
-           the documentation and/or other materials provided with the distribution.
-
-        3. The names of the authors may not be used to endorse or promote products
-           derived from this software without specific prior written permission.
-
-      THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-      FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-      INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-      INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-      LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-      NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-      EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s):
-   - StAX Utilities (http://stax-utils.dev.java.net/stax-utils)
-     net.java.dev.stax-utils:stax-utils:jar:20060502:compile
-
-   are available under a BSD-style license::
-
-   --
-      Copyright (c) 2004, Christian Niles, unit12.net
-      Copyright (c) 2004, Sun Microsystems, Inc.
-      Copyright (c) 2006, John Kristian 
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions are
-      met:
-
-          * Redistributions of source code must retain the above copyright
-            notice, this list of conditions and the following disclaimer.
-
-          * Redistributions in binary form must reproduce the above
-            copyright notice, this list of conditions and the following
-            disclaimer in the documentation and/or other materials provided
-            with the distribution.
-
-          * Neither the name of the listed copyright holders nor the names
-            of its contributors may be used to endorse or promote products
-            derived from this software without specific prior written
-            permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-      "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-      LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-      A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-      OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-      THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-      OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s):
-   - ParaNamer Core (http://paranamer.codehaus.org/paranamer) 
-     repo/paranamer-2.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-
-   --
-      [ ParaNamer used to be 'Pubic Domain', but since it includes a small piece of ASM it is now the same license as that: BSD ]
-
-       Copyright (c) 2006 Paul Hammant & ThoughtWorks Inc
-       All rights reserved.
-
-       Redistribution and use in source and binary forms, with or without
-       modification, are permitted provided that the following conditions
-       are met:
-       1. Redistributions of source code must retain the above copyright
-          notice, this list of conditions and the following disclaimer.
-       2. Redistributions in binary form must reproduce the above copyright
-          notice, this list of conditions and the following disclaimer in the
-          documentation and/or other materials provided with the distribution.
-       3. Neither the name of the copyright holders nor the names of its
-          contributors may be used to endorse or promote products derived from
-          this software without specific prior written permission.
-
-       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-       AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-       IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-       ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-       LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-       CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-       SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-       INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-       CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-       ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-   --
-
-   ===
-   Component(s):
-   - JDOM
-     repo/jdom-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a Modified ASL license:
-   --
-      /*-- 
-
-       $Id: LICENSE.txt,v 1.11 2004/02/06 09:32:57 jhunter Exp $
-
-       Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
-       All rights reserved.
-       
-       Redistribution and use in source and binary forms, with or without
-       modification, are permitted provided that the following conditions
-       are met:
-       
-       1. Redistributions of source code must retain the above copyright
-          notice, this list of conditions, and the following disclaimer.
-       
-       2. Redistributions in binary form must reproduce the above copyright
-          notice, this list of conditions, and the disclaimer that follows 
-          these conditions in the documentation and/or other materials 
-          provided with the distribution.
-
-       3. The name "JDOM" must not be used to endorse or promote products
-          derived from this software without prior written permission.  For
-          written permission, please contact <request_AT_jdom_DOT_org>.
-       
-       4. Products derived from this software may not be called "JDOM", nor
-          may "JDOM" appear in their name, without prior written permission
-          from the JDOM Project Management <request_AT_jdom_DOT_org>.
-       
-       In addition, we request (but do not require) that you include in the 
-       end-user documentation provided with the redistribution and/or in the 
-       software itself an acknowledgement equivalent to the following:
-           "This product includes software developed by the
-            JDOM Project (http://www.jdom.org/)."
-       Alternatively, the acknowledgment may be graphical using the logos 
-       available at http://www.jdom.org/images/logos.
-
-       THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-       WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-       OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-       DISCLAIMED.  IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
-       CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-       SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-       LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-       USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-       ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-       OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-       OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-       SUCH DAMAGE.
-
-       This software consists of voluntary contributions made by many 
-       individuals on behalf of the JDOM Project and was originally 
-       created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
-       Brett McLaughlin <brett_AT_jdom_DOT_org>.  For more information
-       on the JDOM Project, please see <http://www.jdom.org/>. 
-
-    */
-   --
-
-   ===
-   Component(s):
-   - Hamcrest Core (https://github.com/hamcrest/JavaHamcrest/hamcrest-core) 
-     repo/hamcrest-core-1.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license
-   --
-      BSD License
-
-      Copyright (c) 2000-2006, www.hamcrest.org
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions are met:
-
-      Redistributions of source code must retain the above copyright notice, this list of
-      conditions and the following disclaimer. Redistributions in binary form must reproduce
-      the above copyright notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the distribution.
-
-      Neither the name of Hamcrest nor the names of its contributors may be used to endorse
-      or promote products derived from this software without specific prior written
-      permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-      EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-      OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
-      SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-      INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-      TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-      BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-      CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
-      WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-      DAMAGE.
-   --
-
-   ===
-   Component(s):
-   - Protocol Buffer Java API (http://code.google.com/p/protobuf) 
-     repo/prtobuf-java-2.5.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-
-   --
-      This license applies to all parts of Protocol Buffers except the following:
-
-        - Atomicops support for generic gcc, located in
-          src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
-          This file is copyrighted by Red Hat Inc.
-
-        - Atomicops support for AIX/POWER, located in
-          src/google/protobuf/stubs/atomicops_internals_power.h.
-          This file is copyrighted by Bloomberg Finance LP.
-
-      Copyright 2014, Google Inc.  All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions are
-      met:
-
-          * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-          * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following disclaimer
-      in the documentation and/or other materials provided with the
-      distribution.
-          * Neither the name of Google Inc. nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-      "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-      LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-      A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-      OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-      THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-      OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-      Code generated by the Protocol Buffer compiler is owned by the owner
-      of the input file used when generating it.  This code is not
-      standalone and requires a support library to be linked with it.  This
-      support library is itself covered by the above license.
-   --
-
-   ===
-   Component(s):
    - JSON (JavaScript Object Notation) (http://www.json.org/java/index.html) 
-     repo/json-20090211.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     lib/json-20090211.jar
 
    are available under the JSON license:
 
@@ -1303,134 +631,12 @@
       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    --
 
-   ===
-   Component(s):
-   - XZ for Java (http://tukaani.org/xz/java.html) 
-     repo/xz-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - XML Pull Parsing API (http://aopalliance.sourceforge.net/aopalliance) 
-     repo/aopalliance-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are in the public domain.
-
-   ===
-
-   Component(s):
-   - JLine (http://jline.sourceforge.net) 
-     repo/jline-0.9.94.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-   --
-
-      Copyright (c) 2002-2006, Marc Prud'hommeaux <mwp1@cornell.edu>
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or
-      without modification, are permitted provided that the following
-      conditions are met:
-
-      Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-
-      Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer
-      in the documentation and/or other materials provided with
-      the distribution.
-
-      Neither the name of JLine nor the names of its contributors
-      may be used to endorse or promote products derived from this
-      software without specific prior written permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-      "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-      BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-      AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-      EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-      FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-      OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-      PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-      AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-      IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-      OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s):
-
-   - xmlenc Library (http://xmlenc.sourceforge.net) 
-     repo/xmlenc-0.52.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-
-   --
-      Copyright 2003-2005, Ernst de Haan <wfe.dehaan@gmail.com>
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions are met:
-
-      1. Redistributions of source code must retain the above copyright notice, this
-         list of conditions and the following disclaimer.
-
-      2. Redistributions in binary form must reproduce the above copyright notice,
-         this list of conditions and the following disclaimer in the documentation
-         and/or other materials provided with the distribution.
-
-      3. Neither the name of the copyright holder nor the names of its contributors
-         may be used to endorse or promote products derived from this software
-         without specific prior written permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-      IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-      DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-      FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-      DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-      SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-      CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-      OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-      OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s):
-   - Appassembler :: Generic Bootstrapper (http://mojo.codehaus.org/appassembler/appassembler-booter) 
-     repo/appassembler-booter-1.3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-   - Appassembler :: Model (http://mojo.codehaus.org/appassembler/appassembler-model) 
-     repo/appassembler-model-1.3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under the MIT license:
-
-   --
-      The MIT License
-
-      Copyright 2006-2012 The Codehaus.
-
-      Permission is hereby granted, free of charge, to any person obtaining a copy of
-      this software and associated documentation files \(the "Software"\), to deal in
-      the Software without restriction, including without limitation the rights to
-      use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-      of the Software, and to permit persons to whom the Software is furnished to do
-      so, subject to the following conditions:
-
-      The above copyright notice and this permission notice shall be included in all
-      copies or substantial portions of the Software.
-
-      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-      SOFTWARE.
-   --
 
    ===
    Component(s):
 
    - args4j (http://args4j.dev.java.net/args4j/) 
-     repo/args4j-2.0.12.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     lib/args4j-2.0.12.jar
 
    are available under the MIT License:
 
@@ -1460,280 +666,3 @@
    --
 
    ===
-   Component(s)
-   - ASM Core (http://asm.objectweb.org/asm/) 
-     repo/asm-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-   are available under a BSD-style license:
-
-   --
-      Copyright (c) 2000-2011 INRIA, France Telecom
-      All rights reserved.
-
-      Redistribution and use in source and binary forms, with or without
-      modification, are permitted provided that the following conditions
-      are met:
-
-      1. Redistributions of source code must retain the above copyright
-         notice, this list of conditions and the following disclaimer.
-
-      2. Redistributions in binary form must reproduce the above copyright
-         notice, this list of conditions and the following disclaimer in the
-         documentation and/or other materials provided with the distribution.
-
-      3. Neither the name of the copyright holders nor the names of its
-         contributors may be used to endorse or promote products derived from
-         this software without specific prior written permission.
-
-      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-      IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-      ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-      LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-      CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-      SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-      INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-      CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-      THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-
-   ===
-   Component(s)
-   - Plexus Utils (http://asm.objectweb.org/asm/) 
-     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    contain components under a BSD-style license:
-
-   --
-    /********************************************************************************
-     * CruiseControl, a Continuous Integration Toolkit
-     * Copyright (c) 2001-2003, ThoughtWorks, Inc.
-     * 651 W Washington Ave. Suite 500
-     * Chicago, IL 60661 USA
-     * All rights reserved.
-     *
-     * Redistribution and use in source and binary forms, with or without
-     * modification, are permitted provided that the following conditions
-     * are met:
-     *
-     *     + Redistributions of source code must retain the above copyright
-     *       notice, this list of conditions and the following disclaimer.
-     *
-     *     + Redistributions in binary form must reproduce the above
-     *       copyright notice, this list of conditions and the following
-     *       disclaimer in the documentation and/or other materials provided
-     *       with the distribution.
-     *
-     *     + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
-     *       names of its contributors may be used to endorse or promote
-     *       products derived from this software without specific prior
-     *       written permission.
-     *
-     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-     * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-     * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-     * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
-     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-     * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-     * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-     * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-     * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-     ********************************************************************************/
-   --
-
-   ===
-   Component(s)
-   - Plexus Utils (http://asm.objectweb.org/asm/) 
-     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    contain components under a BSD-style license:
-
-   --
-    Javolution - Java(TM) Solution for Real-Time and Embedded Systems
-    Copyright (c) 2006, Javolution (http://javolution.org)
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without modification,
-    are permitted provided that the following conditions are met:
-
-        * Redistributions of source code must retain the above copyright notice,
-          this list of conditions and the following disclaimer.
-        * Redistributions in binary form must reproduce the above copyright notice,
-          this list of conditions and the following disclaimer in the documentation
-          and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
-    ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-    ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-
-   ===
-   Component(s)
-   - Plexus Utils (http://asm.objectweb.org/asm/) 
-     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    contain components under the Indiana University Extreme! Lab Software License:
-
-   --
-    Indiana University Extreme! Lab Software License
-
-    Version 1.1.1
-
-    Copyright (c) 2002 Extreme! Lab, Indiana University. All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without 
-    modification, are permitted provided that the following conditions 
-    are met:
-
-    1. Redistributions of source code must retain the above copyright notice, 
-       this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright 
-       notice, this list of conditions and the following disclaimer in 
-       the documentation and/or other materials provided with the distribution.
-
-    3. The end-user documentation included with the redistribution, if any, 
-       must include the following acknowledgment:
-
-      "This product includes software developed by the Indiana University 
-      Extreme! Lab (http://www.extreme.indiana.edu/)."
-
-    Alternately, this acknowledgment may appear in the software itself, 
-    if and wherever such third-party acknowledgments normally appear.
-
-    4. The names "Indiana Univeristy" and "Indiana Univeristy Extreme! Lab" 
-    must not be used to endorse or promote products derived from this 
-    software without prior written permission. For written permission, 
-    please contact http://www.extreme.indiana.edu/.
-
-    5. Products derived from this software may not use "Indiana Univeristy" 
-    name nor may "Indiana Univeristy" appear in their name, without prior 
-    written permission of the Indiana University.
-
-    THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
-    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-    IN NO EVENT SHALL THE AUTHORS, COPYRIGHT HOLDERS OR ITS CONTRIBUTORS
-    BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-    ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-   --
-===
-
-
-For portions of the AsterixDB WebUI in:
-repo/asterix-app-0.8.8.jar, within
-asterix/asterix-server-0.8.8-binary-assembly.zip, within this assembly
-located at:
-
- webui/static/js/jquery.min.js
-and
- webui/static/js/jquery.autosize-min.js
-
-are available under a MIT-style license
---
-
-   Copyright jQuery Foundation and other contributors, https://jquery.org/
-
-   This software consists of voluntary contributions made by many
-   individuals. For exact contribution history, see the revision history
-   available at https://github.com/jquery/jquery
-
-   The following license applies to all parts of this software except as
-   documented below:
-
-   ====
-
-   Permission is hereby granted, free of charge, to any person obtaining
-   a copy of this software and associated documentation files (the
-   "Software"), to deal in the Software without restriction, including
-   without limitation the rights to use, copy, modify, merge, publish,
-   distribute, sublicense, and/or sell copies of the Software, and to
-   permit persons to whom the Software is furnished to do so, subject to
-   the following conditions:
-
-   The above copyright notice and this permission notice shall be
-   included in all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-   LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-   OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-   ====
-
-   All files located in the node_modules and external directories are
-   externally maintained libraries used by this software which have their
-   own licenses; we recommend you read them, as their terms may differ from
-   the terms above.
-
-as well as portions of the WebUI at:
-webui/static/js/bootstrap.min.js
-
-   The MIT License (MIT)
-
-   Copyright (c) 2011-2015 Twitter, Inc
-
-   Permission is hereby granted, free of charge, to any person obtaining a copy
-   of this software and associated documentation files (the "Software"), to deal
-   in the Software without restriction, including without limitation the rights
-   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   copies of the Software, and to permit persons to whom the Software is
-   furnished to do so, subject to the following conditions:
-
-   The above copyright notice and this permission notice shall be included in
-   all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-   THE SOFTWARE.
-
-
-and portions of the WebUI at:
-webui/static/js/smoothie.js
-
-   MIT License
-   -----------
-
-   Copyright (c) 2010-2013, Joe Walnes
-                 2013-2014, Drew Noakes
-
-                 Permission is hereby granted, free of charge, to any person obtaining a copy
-                 of this software and associated documentation files (the "Software"), to deal
-                 in the Software without restriction, including without limitation the rights
-                 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-                 copies of the Software, and to permit persons to whom the Software is
-                 furnished to do so, subject to the following conditions:
-
-                 The above copyright notice and this permission notice shall be included in
-                 all copies or substantial portions of the Software.
-
-                 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-                 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-                 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-                 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-                 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-                 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-                 THE SOFTWARE.
diff --git a/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/NOTICE b/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/NOTICE
index 2612883..6d64698 100644
--- a/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/NOTICE
+++ b/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/NOTICE
@@ -1,4 +1,4 @@
-Apache AsterixDB
+Apache AsterixDB Text Server Example
 Copyright 2016 The Apache Software Foundation
 
 This product includes software developed at
@@ -6,341 +6,7 @@
 
 AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
 
- - repo/algebricks-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    algebricks-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/algebricks-compiler-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    algebricks-compiler
-    Copyright 2016 The Apache Software Foundation
-
- - repo/algebricks-core-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    algebricks-core
-    Copyright 2016 The Apache Software Foundation
-
- - repo/algebricks-data-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    algebricks-data
-    Copyright 2016 The Apache Software Foundation
-
- - repo/algebricks-rewriter-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    algebricks-rewriter
-    Copyright 2016 The Apache Software Foundation
-
- - repo/algebricks-runtime-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    algebricks-runtime
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-algebra-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-algebra
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-app-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-app
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-aql-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-aql
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-common-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-events-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-events
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-external-data-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-external-data
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-fuzzyjoin-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-fuzzyjoin
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-metadata-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-metadata
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-om-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-om
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-runtime-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-runtime
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-server-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-server
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-tools-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-tools
-    Copyright 2016 The Apache Software Foundation
-
- - repo/asterix-transactions-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    asterix-transactions
-    Copyright 2016 The Apache Software Foundation
-
- - repo/avro-1.7.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Apache Avro
-    Copyright 2009-2013 The Apache Software Foundation
-
- - repo/commons-logging-1.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Commons Logging
-    Copyright 2001-2007 The Apache Software Foundation
-
- - repo/derby-10.10.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Apache Derby
-    Copyright 2004-2013 The Apache Software Foundation
-
-    =========================================================================
-
-        Portions of Derby were originally developed by
-        International Business Machines Corporation and are
-    licensed to the Apache Software Foundation under the
-    "Software Grant and Corporate Contribution License Agreement",
-    informally known as the "Derby CLA".
-    The following copyright notice(s) were affixed to portions of the code
-    with which this file is now or was at one time distributed
-    and are placed here unaltered.
-
-    (C) Copyright 1997,2004 International Business Machines Corporation.  All rights reserved.
-
-    (C) Copyright IBM Corp. 2003. 
-
-
-    =========================================================================
-
-
-    The JDBC apis for small devices and JDBC3 (under java/stubs/jsr169 and
-    java/stubs/jdbc3) were produced by trimming sources supplied by the
-    Apache Harmony project. In addition, the Harmony SerialBlob and
-    SerialClob implementations are used. The following notice covers the Harmony sources:
-
-    Portions of Harmony were originally developed by
-    Intel Corporation and are licensed to the Apache Software
-    Foundation under the "Software Grant and Corporate Contribution
-    License Agreement", informally known as the "Intel Harmony CLA".
-
-
- - repo/guice-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Google Guice - Core Library
-    Copyright 2006-2011 Google, Inc.
-
- - repo/guice-servlet-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Google Guice - Extensions - Servlet
-    Copyright 2006-2011 Google, Inc.
-
- - repo/hive-ant-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Ant Utilities
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Common
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-exec-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Query Language
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-metastore-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Metastore
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-serde-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Serde
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-0.20-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims 0.20
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-0.20S-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims 0.20S
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-0.23-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims 0.23
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims Common
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hive-shims-common-secure-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Hive Shims Secure Common
-    Copyright 2014 The Apache Software Foundation
-
- - repo/hyracks-api-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-api
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-client-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-client
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-comm-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-comm
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-control-cc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-control-cc
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-control-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-control-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-control-nc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-control-nc
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-dataflow-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-dataflow-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-dataflow-std-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-dataflow-std
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-data-std-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-data-std
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-hdfs-2.x-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-hdfs-2.x
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-hdfs-core-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-hdfs-core
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-ipc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-ipc
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-net-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-net
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-bloomfilter-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-bloomfilter
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-btree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-btree
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-lsm-btree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-lsm-btree
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-lsm-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-lsm-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-lsm-invertedindex-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-lsm-invertedindex
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-lsm-rtree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-lsm-rtree
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-am-rtree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-am-rtree
-    Copyright 2016 The Apache Software Foundation
-
- - repo/hyracks-storage-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    hyracks-storage-common
-    Copyright 2016 The Apache Software Foundation
-
- - repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    This product includes software developed by the Indiana University 
-    Extreme! Lab (http://www.extreme.indiana.edu/)
-
-    This product includes software developed by
-    ThoughtWorks (http://www.thoughtworks.com).
-
-    This product includes software developed by
-    javolution (http://javolution.org/).
-
-    This product includes software developed by
-    Rome (https://rome.dev.java.net/).
-
-- repo/velocity-1.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
-
-    Apache Velocity
-    Copyright (C) 2000-2007 The Apache Software Foundation
-
- - repo/wicket-core-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+ - lib/wicket-core-1.5.2.jar
    Apache Wicket
    Copyright 2006-2011 Apache Software Foundation
 
@@ -369,35 +35,38 @@
        [for duplicate name bug]
           'neal'"
    [1]: http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/
- - repo/wicket-request-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+ - lib/wicket-request-1.5.2.jar
 
     Wicket Request
     Copyright 2006-2011 Apache Software Foundation
 
- - repo/wicket-util-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+ - lib/wicket-util-1.5.2.jar
 
     Wicket Util
     Copyright 2006-2011 Apache Software Foundation
 
- - repo/xercesImpl-2.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+ - lib/httpclient-4.3.jar
 
-   Apache Xerces Java
-   Copyright 1999-2007 The Apache Software Foundation
+    Apache HttpClient
+    Copyright 1999-2013 The Apache Software Foundation
 
-   Portions of this software were originally based on the following:
-     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
-     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
-     - voluntary contributions made by Paul Eng on behalf of the 
-       Apache Software Foundation that were originally developed at iClick, Inc.,
-       software copyright (c) 1999.
+    This product includes software developed at
+    The Apache Software Foundation (http://www.apache.org/).
 
- - repo/xml-apis-1.3.04.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+- lib/httpcore-4.3.jar
 
-   Apache XML Commons XML APIs
-   Copyright 2006 The Apache Software Foundation.
+    Apache HttpCore
+    Copyright 2005-2013 The Apache Software Foundation
+
+    This product includes software developed at
+    The Apache Software Foundation (http://www.apache.org/).
 
 
-   Portions of this software were originally based on the following:
-     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
-     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
-     - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
+    This project contains annotations derived from JCIP-ANNOTATIONS
+    Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
+
+- lib/commons-logging-1.1.1..jar
+
+    Commons Logging
+    Copyright 2001-2007 The Apache Software Foundation
+
diff --git a/hyracks/hyracks-examples/tpch-example/tpchclient/pom.xml b/hyracks/hyracks-examples/tpch-example/tpchclient/pom.xml
index 5914d42..4d183ca 100644
--- a/hyracks/hyracks-examples/tpch-example/tpchclient/pom.xml
+++ b/hyracks/hyracks-examples/tpch-example/tpchclient/pom.xml
@@ -80,6 +80,13 @@
           </execution>
         </executions>
       </plugin>
+      <plugin>
+      <groupId>org.apache.maven.plugins</groupId>
+      <artifactId>maven-deploy-plugin</artifactId>
+      <configuration>
+          <skip>true</skip>
+      </configuration>
+    </plugin>
     </plugins>
   </build>
 </project>
diff --git a/hyracks/hyracks-examples/tpch-example/tpchserver/pom.xml b/hyracks/hyracks-examples/tpch-example/tpchserver/pom.xml
index 948b60a..5e4660d 100644
--- a/hyracks/hyracks-examples/tpch-example/tpchserver/pom.xml
+++ b/hyracks/hyracks-examples/tpch-example/tpchserver/pom.xml
@@ -63,21 +63,11 @@
         </executions>
       </plugin>
       <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>2.2-beta-5</version>
-        <executions>
-          <execution>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-              </descriptors>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>attached</goal>
-            </goals>
-          </execution>
-        </executions>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+            <skip>true</skip>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git a/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/LICENSE b/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/LICENSE
index 644bea1..21a4ecc 100644
--- a/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/LICENSE
+++ b/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/LICENSE
@@ -209,46 +209,6 @@
    subcomponents is subject to the terms and condition of the following
    licenses.
 
-   Components under Apache License 2.0 are as follows:
-
-     - HttpClient (http://hc.apache.org/httpcomponents-client)
-       lib/httpclient-4.3.jar
-     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
-       lib/httpcore-4.3.jar
-     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
-       lib/jetty-continuation-8.0.0.RC0.jar
-     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
-       lib/jetty-http-8.0.0.RC0.jar
-     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
-       lib/jetty-io-8.0.0.RC0.jar
-     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
-       lib/jetty-security-8.0.0.RC0.jar
-     - Jetty :: Server Core (http://www.eclipse.org/jetty)
-       lib/jetty-server-8.0.0.RC0.jar
-     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
-       lib/jetty-servlet-8.0.0.RC0.jar
-     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
-       lib/jetty-util-8.0.0.RC0.jar
-     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
-       lib/jetty-webapp-8.0.0.RC0.jar
-     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
-       lib/jetty-xml-8.0.0.RC0.jar
-     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
-       lib/servlet-api-3.0.20100224.jar
-     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
-       lib/wicket-core-1.5.2.jar
-     - Wicket Request (http://maven.apache.org)
-       lib/wicket-request-1.5.2.jar
-     - Wicket Util (http://maven.apache.org)
-       lib/wicket-util-1.5.2.jar
-     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
-       lib/commons-codec-1.4.jar
-     - Commons IO (http://commons.apache.org/io/)
-       lib/commons-io-2.4.jar
-     - Apache Commons Logging (http://commons.apache.org/logging)
-       lib/commons-logging-1.1.1.jar
-     - Commons Lang (http://commons.apache.org/lang/)
-       lib/commons-lang3-3.1.jar
 
    ===
 
diff --git a/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/NOTICE b/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/NOTICE
index 791d0ba..8bceca5 100644
--- a/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/NOTICE
+++ b/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/NOTICE
@@ -1,4 +1,4 @@
-Apache AsterixDB
+Apache AsterixDB Hyracks TPC-H Example Server
 Copyright 2016 The Apache Software Foundation
 
 This product includes software developed at
@@ -6,81 +6,6 @@
 
 AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
 
- - lib/hyracks-api-0.2.17-incubating.jar
-
-    hyracks-api
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-comm-0.2.17-incubating.jar
-
-    hyracks-comm
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-control-cc-0.2.17-incubating.jar
-
-    hyracks-control-cc
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-control-common-0.2.17-incubating.jar
-
-    hyracks-control-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-control-nc-0.2.17-incubating.jar
-
-    hyracks-control-nc
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-control-cc-0.2.17-incubating.jar
-
-    hyracks-control-cc
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-ipc-0.2.17-incubating.jar
-
-    hyracks-ipc
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-net-0.2.17-incubating.jar
-
-    hyracks-net
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-dataflow-common-0.2.17-incubating.jar
-
-    hyracks-dataflow-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-dataflow-std-0.2.17-incubating.jar
-
-    hyracks-dataflow-std
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-storage-am-btree-0.2.17-incubating.jar
-
-    hyracks-storage-am-btree
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-storage-am-common-0.2.17-incubating.jar
-
-    hyracks-storage-am-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-storage-common-0.2.17-incubating.jar
-
-    hyracks-storage-common
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-data-std-0.2.17-incubating.jar
-
-    hyracks-data-std
-    Copyright 2016 The Apache Software Foundation
-
- - lib/hyracks-util-0.2.17-incubating.jar
-
-    hyracks-util
-    Copyright 2016 The Apache Software Foundation
-
  - lib/wicket-core-1.5.2.jar
    Apache Wicket
    Copyright 2006-2011 Apache Software Foundation
@@ -119,3 +44,29 @@
 
     Wicket Util
     Copyright 2006-2011 Apache Software Foundation
+
+- lib/commons-logging-1.1.1.jar
+
+    Commons Logging
+    Copyright 2001-2007 The Apache Software Foundation
+
+- lib/httpclient-4.3.jar
+
+    Apache HttpClient
+    Copyright 1999-2013 The Apache Software Foundation
+
+    This product includes software developed at
+    The Apache Software Foundation (http://www.apache.org/).
+
+- lib/httpcore-4.3.jar
+
+    Apache HttpCore
+    Copyright 2005-2013 The Apache Software Foundation
+
+    This product includes software developed at
+    The Apache Software Foundation (http://www.apache.org/).
+
+
+    This project contains annotations derived from JCIP-ANNOTATIONS
+    Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
+
